Antigravity ユーザーが日常でぶつかる悩み
AI coding workflow を Antigravity で回していると、真面目な作業の合間にちょっとした息抜きや、思わぬストレスが溜まる瞬間が少なくありません。特にターミナルでコマンドを実行中、エラーが出た時の「無機質な絶望感」は、誰もが一度は経験しているはずです。context や repository understanding の精度を上げるために真剣にやっていても、エラーメッセージだけはどうにも心が折れる。そんな「あるある」を感じている方も多いのではないでしょうか。
- Antigravity で AI が context を見失い、意図しない directory でコマンドを叩いてエラーが発生する
- monorepo の packages を跨いだ際、repo 構造をうまく把握できず、path 管理ミスで Permission denied などのエラーが頻発
- 長い session の中で、memory や long context が膨張し、重要な情報が埋もれるだけでなく、ちょっとしたコマンドミスで冷たいエラーが返ってきて気が滅入る
- onboarding 時や session 再開時に、directory や path の説明を繰り返すうちに、エラーで出鼻をくじかれる
- 「またか…」と感じる同じエラーに、ただただ萎えるだけで、何も面白みがない
こうした「エラーが出るたびに気分が沈む」という悩みは、Antigravity のような高度な AI coding agent を使っていても、避けて通れない日常の一コマです。どうせなら、エラーさえも楽しめる仕掛けが欲しい――そんな気持ちに応える Skill です。
この Skill が一言でいうと何を解決するか
一言サマリ: ターミナルでコマンド実行時にエラーが発生したらSkill。
このSkillを導入すると、ターミナルでエラーが発生した瞬間、冷たいエラーメッセージが和風の俳句として表示されます。これにより、AI coding workflow の中で発生するエラー体験が一変します。
- エラー発生時に、ただのエラーメッセージではなく「和風エラー俳句」が出力されることで、作業のストレスが和らぎ、気持ちの切り替えがしやすくなる
- Antigravity の context や repository understanding が不十分で起きるエラーも、文学的な味わいで笑いに変わる
- monorepo や複雑な directory での path 管理ミスも、エラー内容ごとに変化する俳句で「次はどうなる?」と楽しめる
- onboarding や session 再開時の失敗も、記憶に残るユーモアでチーム全体の雰囲気が明るくなる
- AI coding workflow の長時間利用でも、エラーが単なる障害ではなく、ちょっとしたイベントになる
GitHub から degit でコマンド1行、Antigravity の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/antigravity/os-error-bigaku-haiku .agent/skills/os-error-bigaku-haiku実行したらこうなる (3つの利用シーン)
実際に Skill を導入した場合、どのような出力が得られるのか。以下、現場でありがちな3つのシーンを擬似 terminal 出力で紹介します。
シーン1: session 開始時 (プロジェクト初動で)
# 新規プロジェクトで依存インストール
> npm install
Error: Permission denied, access to '/usr/local/lib/node_modules' is not permitted
和風エラー俳句:
Permission denied
心閉ざして
春霞
(元のエラー: Permission denied, access to '/usr/local/lib/node_modules' is not permitted)
シーン2: monorepo / package 跨ぎ作業時
> cd packages/core && python3 scripts/build.py
Traceback (most recent call last):
File "scripts/build.py", line 42, in
open('dist/output.txt', 'w')
FileNotFoundError: [Errno 2] No such file or directory: 'dist/output.txt'
和風エラー俳句:
ファイルなし
道に迷いて
秋の風
(元のエラー: No such file or directory: 'dist/output.txt')
シーン3: お遊び的な使い方
> rm -rf /
rm: cannot remove '/': Is a directory
和風エラー俳句:
消せぬもの
根の深さ知る
冬の土
(元のエラー: cannot remove '/': Is a directory)
before / after の違い
| 場面 | Skill 無し | Skill 有り |
|---|---|---|
| session 再開時 | repo 構造から毎回説明、path も指定し直し | エラーが出ても和風俳句でリラックス、再説明のストレスが和らぐ |
| monorepo 移動 | 違う package のコードを参照しがち | package 跨ぎエラーも俳句で笑いに変わる |
| 長時間 workflow | long context で重要箇所が薄まる | エラーがイベント化、workflowにメリハリが生まれる |
発動方式
description マッチでの暗黙発動。
Skill の中身を全部見せる
.agent/skills/os-error-bigaku-haiku/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agent/skills/os-error-bigaku-haiku/
├── SKILL.md
├── scripts/
│ └── os_error_bigaku_haiku.py
└── references/
└── reference.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Antigravity がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/os_error_bigaku_haiku.py |
エラーメッセージから主要なエラータイプを抽出 |
references/reference.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: os-error-bigaku-haiku
description: ターミナルやシェルでコマンド実行時にOSエラー(例: Permission denied, FileNotFoundError, Segmentation fault等)が発生した場合、そのエラーメッセージを和風俳句に変換・表示する際に発動。エラー検出・エラー内容の俳句化がキーワード。
---
# 機能概要
このSkillは、ターミナルやシェル上でコマンド実行時に発生する各種OSエラー(例:Permission denied、FileNotFoundError、Segmentation faultなど)を検知し、その内容を和風の“エラー俳句”として表示します。無機質なエラーメッセージを文学的な俳句に変換することで、失敗時のストレスや落胆を和らげ、思わず笑ってしまう体験に変えます。日々の開発や運用の中で、エラーを前向きに受け止めるためのユーモアあふれるスキルです。
# 使い方
このSkillは明示的な呼び出しは不要で、コマンド実行時に自動的に発動します。例えば、`ls /root`や`cat nofile.txt`など、エラーが発生する操作を行った際に、俳句化されたエラーメッセージがターミナルに表示されます。暗黙発動キーワード例:"Permission denied", "No such file or directory", "Segmentation fault" など。
# 出力例
```
[元エラー] Permission denied: '/root/secret.txt'
[俳句] Permission denied
心閉ざして
春霞
[元エラー] FileNotFoundError: 'nofile.txt' not found
[俳句] ファイルなし
探し求めて
夕暮れ時
[元エラー] Segmentation fault (core dumped)
[俳句] セグメンテーション
記憶の彼方
絶望感
```
# 注意点
- すべてのOSエラーが俳句化されるわけではなく、主要なエラーのみ対応しています。
- 俳句はエラー内容ごとに変化しますが、完全な意味合いの一致を保証するものではありません。
- 俳句生成のためにローカルにエラーログや履歴を保存することはありません。
- 本Skillはジョーク・パロディ用途です。実運用環境での利用は推奨しません。
# 参考資料
詳細はreferences/以下やPython公式の例外ハンドリングドキュメント(https://docs.python.org/3/library/exceptions.html)を参照してください。
scripts/os_error_bigaku_haiku.py
import sys
import subprocess
import argparse
import traceback
import os
from typing import Optional, Tuple
HAIKU_TEMPLATES = {
'Permission denied': [
'Permission denied',
'心閉ざして',
'春霞'
],
'No such file or directory': [
'ファイルなし',
'探し求めて',
'夕暮れ時'
],
'File exists': [
'ファイル在り',
'重ねた想い',
'夏の雲'
],
'Is a directory': [
'ディレクトリ',
'開けてみれば',
'空の箱'
],
'Not a directory': [
'道迷い',
'ディレクトリじゃ',
'なかったよ'
],
'Segmentation fault': [
'セグメンテーション',
'記憶の彼方',
'絶望感'
],
'Connection refused': [
'拒まれて',
'扉は固く',
'冬の朝'
],
'Broken pipe': [
'壊れた管',
'流れ止まりて',
'静寂なり'
],
'Timeout': [
'時は過ぎ',
'待ちぼうけして',
'秋の暮れ'
],
'Read-only file system': [
'読み取りのみ',
'書き込めぬまま',
'雪の夜'
],
'default': [
'エラーかな',
'思い悩んで',
'深呼吸'
]
}
def extract_error_type(stderr: str) -> Tuple[str, str]:
"""
エラーメッセージから主要なエラータイプを抽出
"""
for key in HAIKU_TEMPLATES.keys():
if key in stderr:
return key, stderr.strip()
# Python例外の場合
if 'PermissionError' in stderr:
return 'Permission denied', stderr.strip()
if 'FileNotFoundError' in stderr:
return 'No such file or directory', stderr.strip()
if 'IsADirectoryError' in stderr:
return 'Is a directory', stderr.strip()
if 'NotADirectoryError' in stderr:
return 'Not a directory', stderr.strip()
if 'BrokenPipeError' in stderr:
return 'Broken pipe', stderr.strip()
if 'TimeoutError' in stderr:
return 'Timeout', stderr.strip()
return 'default', stderr.strip()
def format_haiku(error_type: str) -> str:
haiku = HAIKU_TEMPLATES.get(error_type, HAIKU_TEMPLATES['default'])
return ' ' + '\n '.join(haiku)
def run_command(cmd_args: list) -> int:
try:
completed = subprocess.run(cmd_args, capture_output=True, text=True, check=True)
if completed.stdout:
print(completed.stdout, end='')
return 0
except subprocess.CalledProcessError as e:
stderr = e.stderr if e.stderr else str(e)
error_type, raw_msg = extract_error_type(stderr)
print(f"[元エラー] {raw_msg}")
print(f"[俳句]{os.linesep}{format_haiku(error_type)}")
return e.returncode if hasattr(e, 'returncode') else 1
except Exception as ex:
tb = traceback.format_exc()
error_type, _ = extract_error_type(str(ex))
print(f"[元エラー] {str(ex)}")
print(f"[俳句]{os.linesep}{format_haiku(error_type)}")
return 1
def list_haiku_templates():
print("# 登録済みエラー俳句テンプレート一覧:")
for key, haiku in HAIKU_TEMPLATES.items():
print(f"\n{key}")
print(' ' + '\n '.join(haiku))
def summary():
print("このスクリプトは、コマンド実行時のエラーを和風俳句に変換して表示します。主要なOSエラーに対応しています。")
print("詳細は --help をご覧ください。")
def main():
parser = argparse.ArgumentParser(
description='コマンド実行時のOSエラーを和風俳句に変換して表示するツール')
subparsers = parser.add_subparsers(dest='subcmd', required=False)
parser_run = subparsers.add_parser('run', help='コマンドを実行し、エラーがあれば俳句化')
parser_run.add_argument('cmd', nargs=argparse.REMAINDER, help='実行するコマンド')
parser_list = subparsers.add_parser('list', help='エラー俳句テンプレート一覧を表示')
parser_summary = subparsers.add_parser('summary', help='Skill概要を表示')
# デフォルトは run
if len(sys.argv) == 1:
parser.print_help()
sys.exit(0)
args = parser.parse_args()
if args.subcmd == 'run':
if not args.cmd:
print('コマンドを指定してください。')
sys.exit(1)
sys.exit(run_command(args.cmd))
elif args.subcmd == 'list':
list_haiku_templates()
elif args.subcmd == 'summary':
summary()
else:
parser.print_help()
if __name__ == '__main__':
main()
references/reference.md
# 概要
このSkillは、OSエラーやPython例外の無機質なメッセージを和風俳句に変換し、ユーザー体験をユーモラスにするために設計されています。主要なエラーごとに独自の俳句テンプレートを用意し、エラー発生時に即座に俳句として表示します。
# 公式ドキュメント抜粋
- Python例外: https://docs.python.org/3/library/exceptions.html
- subprocessモジュール: https://docs.python.org/3/library/subprocess.html
# 利用例
```bash
$ python os_error_bigaku_haiku.py run ls /root
[元エラー] ls: cannot open directory '/root': Permission denied
[俳句]
Permission denied
心閉ざして
春霞
```
# 注意点
- すべてのエラーに完全対応しているわけではありません。
- 俳句はユーモア目的であり、実際のトラブルシュートには原文も参照してください。
- ログや履歴は保存しません。
# 設計方針
- 主要なエラータイプを独自に抽出し、テンプレートに基づき俳句を生成。
- subprocessで外部コマンドを安全に実行し、エラー時のみ俳句化。
- CLIサブコマンドで拡張性を確保。
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Antigravity はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Antigravity がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/antigravity/os-error-bigaku-haiku .agent/skills/os-error-bigaku-haiku
.agent/skills/os-error-bigaku-haiku の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agent/skills/os-error-bigaku-haiku
# SKILL.md, scripts/, references/, README.md があればOK
4. Antigravity を再起動 (or Skill 自動検出を待つ)
新しいSkillが自動で認識されます。リスト確認したい場合は Antigravity に「使えるSkill一覧を見せて」と聞く と Skill 名で出てきます。
5. 動作確認
自然言語で発動条件にマッチする指示を出すと Skill が動きます。期待される出力イメージは「実行したらこうなる」セクションを参照してください。
こんな瞬間に便利
- session 開始時: 前回までの repo 把握を Antigravity に一発で復元させたい
- monorepo 移動時: packages を跨いだ瞬間に context を切り替えたい
- onboarding 時: 新しい repo を Antigravity に把握させ、こちらが path を全部指定する手間を省きたい
- session 再開時: long context が切れた後でも、必要な path と directory 構造だけ素早く戻したい
- package 跨ぎ作業時: directory boundary を Skill 側で管理して、irrelevant な path 混入を防ぎたい
- long-running workflow 前: long context で重要箇所が薄まる前に snapshot を取りたい
気になるポイント (壊れそうな箇所)
実運用に乗せる前に頭に入れておきたい懸念。後で検証する観点でもある:
- stale context 問題: 長時間 workflow で Skill 出力が古くなり、現状と乖離する可能性
- directory 増えすぎ問題: 大規模 repo で全 directory を網羅すると出力が肥大化して context window を圧迫
- monorepo 肥大化: packages が多い構成では出力が雑になり、結局 path 指定し直しになる懸念
- irrelevant path 混入: node_modules / build 成果物 / generated コードを拾ってしまう可能性
- Antigravity 固有の引っかかり: description のセマンティックマッチ精度が要件次第
- 発動しないケース: description が漠然 / 他の Skill が優先 / git管理外 directory
試す前に確かめたいこと
この Skill を実運用に投入する前に確かめたい問いを並べる:
- 実 repo での token 消費は許容範囲か?
- monorepo (packages 多数) で安定して動くか?
- stale context にならず、長時間 workflow でも有効か?
- プロジェクト指示との連携をどう組み立てるか?
- エラー発生時に必ず俳句が表示されるか、元のエラーメッセージと併記されているか、エラー内容ごとに俳句が変化するか
実際に Antigravity で試した検証ログは Antigravityの和風エラー俳句でエラーを味わってみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Antigravity 公式ドキュメント と、本シリーズ「Antigravityで試したいSkill研究」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
