Antigravity ユーザーが日常でぶつかる悩み
Antigravity を使った AI coding workflow では、repository の directory 構造や context の管理が重要なカギとなります。しかし、現場では「通知・演出・OS連携」にまつわる地味なストレスや困りごとも少なくありません。特に、作業の集中が途切れたり、長時間のセッションで気分転換が欲しくなる瞬間は意外と多いものです。以下のような「あるある」に心当たりがある方も多いのではないでしょうか。
- Antigravity が context を見失って違う場所のコードを参照する
- monorepo で package を跨いだ瞬間、Antigravity が repo 構造を忘れる
- session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
- 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
- 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる
さらに、単調なコマンド実行の繰り返しや、集中力が切れるタイミングで「何か新鮮な刺激がほしい」「作業にちょっとした演出があれば…」と感じる瞬間も。通知やサウンド演出があれば、現場の空気が一変することもあります。
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは、Antigravity のコマンド実行時に毎回ランダムな“謎のOSサウンド”を鳴らし、開発現場に最高のカオスと演出をもたらします。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- 単調な AI coding workflow に予測不能な刺激が加わり、作業の雰囲気が一変する
- コマンドやディレクトリ操作のたびにランダムなサウンドが鳴ることで、集中が切れたタイミングも楽しくリセットできる
- onboarding 時や repo 構造の切り替えで、周囲の反応も含めて場が和む
- 長時間の workflow で stale context 感が漂う瞬間も、サウンドでリフレッシュ効果が期待できる
- 「AIエージェントの動きが目に見えない」ストレスを、音で直感的に感じ取れる
GitHub から degit でコマンド1行、Antigravity の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/antigravity/random-os-mystery-sound-effect .agent/skills/random-os-mystery-sound-effect実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示します。
シーン1: session 開始時 (プロジェクト初動で)
# session を新規開始
> antigravity start --repo my-awesome-app
[Antigravity] repository understanding を開始しました。
[Antigravity] context: ./src, ./config, ./README.md を優先的に参照します。
(シュールな「ファイルが旅立つ音」がPCから鳴る)
[Antigravity] ディレクトリ構造を memory に保存しました。
[Antigravity] path management を有効化しました。
シーン2: monorepo / package 跨ぎ作業時
> cd packages/service-a
> antigravity analyze --path ./packages/service-a
[Antigravity] monorepo 構造を検出しました。
[Antigravity] context: ./packages/service-a, ./shared/utils を参照。
(謎の「やる気起動音」が鳴る)
[Antigravity] repository understanding を更新しました。
[Antigravity] long context 対策を適用中。
シーン3: お遊び的な使い方
> antigravity suggest --directory ./random
[Antigravity] context: ./random を追加しました。
(突然「システム自動拍手」のSEが鳴り響く)
[Antigravity] path management: ./random をメモリに記録。
[Antigravity] onboarding 効果を強調しています。
before / after の違い
| 場面 | Skill 無し | Skill 有り |
|---|---|---|
| session 再開時 | repo 構造から毎回説明、path も指定し直し | Antigravity が自動で context を復元、最小プロンプトで再開。さらに謎サウンドで場が和む |
| monorepo 移動 | 違う package のコードを参照しがち | directory boundary を意識して必要な範囲だけ見る。package 跨ぎでサウンド演出 |
| 長時間 workflow | long context で重要箇所が薄まる | サウンドでリフレッシュ、workflow の切れ目を直感的に感じ取れる |
発動方式
description マッチでの暗黙発動。
Skill の中身を全部見せる
.agent/skills/random-os-mystery-sound-effect/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agent/skills/random-os-mystery-sound-effect/
├── SKILL.md
├── scripts/
│ └── random_os_mystery_sound_effect.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Antigravity がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/random_os_mystery_sound_effect.py |
Random OS Mystery Sound Effect Skill |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: random-os-mystery-sound-effect
description: Antigravityがコマンド実行やファイル操作などのアクションを検知した際、"サウンド"や"効果音"、"SE"、"通知音"などのキーワードが含まれている場合に発動します。毎回ランダムな謎のOSサウンドエフェクトを再生します。
---
# 機能概要
このSkillは、Antigravityがターミナルやエディタ上でコマンドを実行するたびに、謎の“OS公式サウンドエフェクト”をランダムで再生します。『ファイルが旅立つ音』『シュールなやる気起動音』『謎のシステム自動拍手』など、意味不明なSEを複数用意。開発現場で突然シュールな音が鳴り響くことで、作業の集中を崩壊させたり、周囲の反応を楽しめるカオスな演出を実現します。通知・演出・OS連携カテゴリに最適です。
# 使い方
このSkillは明示的な呼び出しは不要です。"サウンド"、"効果音"、"SE"、"通知音"などのキーワードを含むコマンド実行や、ファイル操作・ビルド・保存・削除などのアクション時に自動的に発動します。導入・削除はSkillの追加/削除のみで完結し、環境に恒久的な影響を残しません。
# 出力例
```
$ git commit -m "fix bug"
[git] ファイルが旅立つ音が再生されました。
$ rm important.txt
[system] 謎のシステム自動拍手が再生されました。
$ python main.py
[python] シュールなやる気起動音が再生されました。
```
# 注意点
- サウンド再生には`playsound`や`subprocess`でOS標準プレイヤーを利用します。
- 音源ファイルはSkill内に同梱され、ローカル保存されます。
- サウンドの種類は5種類以上を用意。
- 環境に依存する部分(OSごとの再生コマンド等)は自動判別します。
- サウンド再生が不要な場合はSkillを無効化してください。
# 参考資料
詳細は references/design_notes.md を参照。公式Pythonドキュメント(https://docs.python.org/ja/3/library/subprocess.html)、playsound公式(https://github.com/TaylorSMarks/playsound)も参考にしてください。
scripts/random_os_mystery_sound_effect.py
import os
import sys
import random
import argparse
import platform
import subprocess
from pathlib import Path
SOUND_LIST = [
{
'filename': 'file_departure.wav',
'label': 'ファイルが旅立つ音'
},
{
'filename': 'motivation_boot.wav',
'label': 'シュールなやる気起動音'
},
{
'filename': 'system_applause.wav',
'label': '謎のシステム自動拍手'
},
{
'filename': 'mysterious_notification.wav',
'label': '謎の通知音'
},
{
'filename': 'os_beep.wav',
'label': 'OSビープ音'
}
]
SOUND_DIR = Path(__file__).parent / 'sounds'
def list_sounds():
print("利用可能なサウンド一覧:")
for idx, sound in enumerate(SOUND_LIST):
print(f"{idx + 1}. {sound['label']} ({sound['filename']})")
def play_sound(sound_path):
system = platform.system()
try:
if system == 'Windows':
import winsound
winsound.PlaySound(str(sound_path), winsound.SND_FILENAME | winsound.SND_ASYNC)
elif system == 'Darwin':
subprocess.run(['afplay', str(sound_path)], check=True)
elif system == 'Linux':
# Try aplay, paplay, or cvlc
if shutil.which('aplay'):
subprocess.run(['aplay', str(sound_path)], check=True)
elif shutil.which('paplay'):
subprocess.run(['paplay', str(sound_path)], check=True)
elif shutil.which('cvlc'):
subprocess.run(['cvlc', '--play-and-exit', str(sound_path)], check=True)
else:
print('サウンド再生コマンドが見つかりません (aplay/paplay/cvlc)')
else:
print(f'未対応OS: {system}')
except Exception as e:
print(f'サウンド再生エラー: {e}')
def random_sound():
sound = random.choice(SOUND_LIST)
sound_path = SOUND_DIR / sound['filename']
if not sound_path.exists():
print(f"サウンドファイルが見つかりません: {sound_path}")
return None, None
play_sound(sound_path)
return sound['label'], sound['filename']
def log_event(event, sound_label):
log_path = Path(__file__).parent / 'sound_effect.log'
with open(log_path, 'a', encoding='utf-8') as f:
f.write(f"{event}\t{sound_label}\n")
def list_log():
log_path = Path(__file__).parent / 'sound_effect.log'
if not log_path.exists():
print('ログがありません')
return
with open(log_path, 'r', encoding='utf-8') as f:
for line in f:
print(line.strip())
def summary_log():
log_path = Path(__file__).parent / 'sound_effect.log'
if not log_path.exists():
print('ログがありません')
return
counter = {}
with open(log_path, 'r', encoding='utf-8') as f:
for line in f:
parts = line.strip().split('\t')
if len(parts) == 2:
label = parts[1]
counter[label] = counter.get(label, 0) + 1
print('サウンド別再生回数:')
for label, count in counter.items():
print(f'{label}: {count}回')
def main():
parser = argparse.ArgumentParser(description='Random OS Mystery Sound Effect Skill')
subparsers = parser.add_subparsers(dest='command')
parser_play = subparsers.add_parser('play', help='ランダムな謎サウンドを再生')
parser_play.add_argument('--event', type=str, default='manual', help='発生イベント名')
parser_list = subparsers.add_parser('list', help='利用可能なサウンド一覧')
parser_log = subparsers.add_parser('log', help='サウンド再生ログを表示')
parser_summary = subparsers.add_parser('summary', help='サウンド再生回数サマリ')
args = parser.parse_args()
if args.command == 'play':
label, filename = random_sound()
if label:
print(f'[system] {label}が再生されました。')
log_event(args.event, label)
elif args.command == 'list':
list_sounds()
elif args.command == 'log':
list_log()
elif args.command == 'summary':
summary_log()
else:
parser.print_help()
if __name__ == '__main__':
import shutil
main()
references/design_notes.md
# 概要
このSkillは、コマンド実行やファイル操作時に毎回異なる謎のサウンドエフェクトを再生し、開発現場にカオスな演出をもたらします。サウンドはSkill内に同梱され、環境依存を最小化。
# 公式ドキュメント抜粋
- Python subprocess: https://docs.python.org/ja/3/library/subprocess.html
- playsound: https://github.com/TaylorSMarks/playsound
# 利用例
- コマンド実行時に自動でSE再生
- サウンド一覧や再生履歴の確認
- ログにより再生履歴を追跡可能
# 注意点
- サウンド再生はOS依存。Linuxではaplay/paplay/cvlcが必要
- サウンドファイルはSkill配下のsounds/に配置
- Skill削除で環境に影響を残さない設計
# 設計方針
- 導入・削除が容易で副作用がない
- サウンドは5種類以上を用意し毎回ランダム
- ログ機能・一覧機能で利用状況を可視化
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Antigravity はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Antigravity がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/antigravity/random-os-mystery-sound-effect .agent/skills/random-os-mystery-sound-effect
.agent/skills/random-os-mystery-sound-effect の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agent/skills/random-os-mystery-sound-effect
# 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 でも有効か?
- プロジェクト指示との連携をどう組み立てるか?
- 音がコマンド実行のたび毎回ランダムで鳴るか?
- 謎のSEが複数種用意されているか?
- 導入・削除が簡単で環境に影響を残さないか?
実際に Antigravity で試した検証ログは Antigravityの謎サウンドでカオス体験してみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Antigravity 公式ドキュメント と、本シリーズ「Antigravityで試したいSkill研究」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
