Antigravity ユーザーが日常でぶつかる悩み
Antigravity を日常的に使っていると、AI coding workflow のなかで思わず「またか」とため息が出る瞬間が意外と多いものです。とくに repository understanding や path management、context の扱いにまつわる地味なストレスは、ユーザーなら誰もが経験しているはずです。さらに、静まり返った開発現場で黙々と作業をしていると、ふとした瞬間に緊張感が張り詰めてしまい、気分転換のきっかけが欲しくなることもあります。
- Antigravity が context を見失って違う場所のコードを参照する
- monorepo で package を跨いだ瞬間、Antigravity が repo 構造を忘れる
- session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
- 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
- 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる
こうした悩みは「通知・演出・OS連携」カテゴリのSkillで少し肩の力を抜きたいときにも共通します。緊張感が続く開発環境に、ちょっとした遊び心や意外性のある演出が加わることで、workflowのリズムに変化をもたらすことができます。
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは、作業中に“謎のOS公式サウンドトラック通知”を自動で表示し、開発現場にシュールな演出をもたらすSkill。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- Antigravity の長時間・単調なAI coding workflow中に、突如として“今日のBGM”風ジョーク通知が現れ、気分転換やリズムチェンジが自然に起こる
- 通知内容が毎回異なるため、repoやdirectoryを跨ぐ作業時にも飽きずに楽しめる(contextやmemoryの切り替えタイミングにも活用可能)
- 実際に音は流れないため、集中を妨げずにシュールな演出だけが残る
- onboardingやsession再開時など、緊張感が高まりがちな場面で空気を和ませる効果が期待できる
- Skillの導入・運用が簡単で、SKILL.md として .agent/skills/ 配下に置くだけで即反映される
GitHub から degit でコマンド1行、Antigravity の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/antigravity/random-os-fake-soundtrack-alert .agent/skills/random-os-fake-soundtrack-alert実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示します。
シーン1: session 開始時 (プロジェクト初動で)
> 新しいリポジトリで作業開始
[OS公式サウンドトラック通知]
本日のテーマソング:『バグ修羅場行進曲』
副題:~無限リファクタ地獄より愛をこめて~
(※実際のBGMは流れません)
repository: /Users/dev/awesome-monorepo
directory: ./src/core/
Antigravity memory: session context initialized
シーン2: monorepo / package 跨ぎ作業時
> packages/api/ から packages/web/ へ移動
[OS公式サウンドトラック通知]
今こそ流せ!『納期デッドヒート』
副題:~package間バグ転送のテーマ~
(※BGMは流れません)
repository: /Users/dev/awesome-monorepo
directory: ./packages/web/
Antigravity context: directory boundary detected, context switched
シーン3: お遊び的な使い方
> ちょっと休憩しようかな
[OS公式サウンドトラック通知]
今週の推奨BGM:『merge地獄のワルツ』
副題:~rebaseの彼方に~
(※実際に音は鳴りません)
repository: /Users/dev/awesome-monorepo
directory: ./utils/scripts/
Antigravity: workflow paused, context snapshot taken
before / after の違い
| 場面 | Skill 無し | Skill 有り |
|---|---|---|
| session 再開時 | repo 構造から毎回説明、path も指定し直し | Antigravity が自動で context を復元、最小プロンプトで再開 |
| monorepo 移動 | 違う package のコードを参照しがち | directory boundary を意識して必要な範囲だけ見る |
| 長時間 workflow | long context で重要箇所が薄まる | シュールな通知でリズムを変え、集中力を維持しやすい |
発動方式
description マッチでの暗黙発動。
Skill の中身を全部見せる
.agent/skills/random-os-fake-soundtrack-alert/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agent/skills/random-os-fake-soundtrack-alert/
├── SKILL.md
├── scripts/
│ └── random_os_fake_soundtrack_alert.py
└── references/
└── skill_design.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Antigravity がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/random_os_fake_soundtrack_alert.py |
random-os-fake-soundtrack-alert |
references/skill_design.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: random-os-fake-soundtrack-alert
description: このSkillは、Antigravityがユーザーの作業中やコマンド実行時など、静かなタイミングで“OS公式サウンドトラック通知”をユニークな内容で自動生成・表示します。通知内容は毎回異なり、通知・演出・OS連携に関するキーワードや状況で発動します。
---
# 機能概要
このSkillは、作業中やコマンド実行の合間に、架空の“OS公式サウンドトラック通知”をデスクトップに表示します。通知は「本日のテーマソング:『バグ修羅場行進曲』」や「今こそ流せ!『納期デッドヒート』」など、完全オリジナルかつ開発現場ネタ満載の曲名で構成され、実際に音は流れません。作業の緊張感をシュールに和らげ、静寂を破るジョーク通知として、気分転換やチームの話題作りに最適です。
# 使い方
このSkillは明示的な呼び出しは不要で、Antigravityが「作業開始」「コマンド実行」「長時間無操作」などのタイミングを検知し、自動的に発動します。暗黙発動キーワード例: `通知`, `BGM`, `OS演出`, `サウンドトラック`, `作業中` など。
# 出力例
```terminal
[通知] 本日のテーマソング:『バグ修羅場行進曲』
[通知] 今こそ流せ!『納期デッドヒート』
[通知] 推奨BGM:『コミット地獄ロンド』
[通知] システム推奨本日BGM:『マージ衝突アダージョ』
[通知] 本日のおすすめ:『デバッグ迷宮組曲』
[通知] 今流すべき一曲:『仕様書未読ブルース』
```
# 注意点
- 通知内容は毎回異なりますが、実際に音やBGMは流れません。
- 通知の頻度は自動制御され、作業の妨げにならないよう配慮されています。
- ローカルに通知履歴や曲名リストは保存されません。
- 本Skillは通知・演出用途のみで、業務用途のアラートとは異なります。
# 参考資料
- [Python公式: notifications/toast](https://docs.python.org/ja/3/library/)
- references/skill_design.md を参照。
scripts/random_os_fake_soundtrack_alert.py
import random
import time
import sys
import argparse
import threading
import platform
import subprocess
# 曲名・副題のネタリスト
MAIN_TITLES = [
'バグ修羅場行進曲',
'納期デッドヒート',
'コミット地獄ロンド',
'マージ衝突アダージョ',
'デバッグ迷宮組曲',
'仕様書未読ブルース',
'リリース直前カプリッチョ',
'無限ループ幻想曲',
'レビュー地獄ワルツ',
'テスト失敗レクイエム',
'環境構築バラード',
'会議地獄マーチ',
'要件追加サンバ',
'リファクタリング狂詩曲',
'コンフリクト協奏曲',
'残業アンセム',
'パーミッション地獄タンゴ',
'仕様変更ノクターン',
'サーバーダウン即興曲',
'エラー吐き出しセレナーデ',
]
SUB_TITLES = [
'今こそ流せ!',
'本日のテーマソング:',
'推奨BGM:',
'システム推奨本日BGM:',
'本日のおすすめ:',
'今流すべき一曲:',
'開発者の魂に響け',
'今日の作業を彩る',
'集中力アップ推奨',
'OS公式選曲',
'気分転換にどうぞ',
'謎のAI推薦',
'作業効率UP祈願',
'本日限定',
'あなたのための一曲',
]
# OSごとの通知コマンド
PLATFORM = platform.system()
def send_notification(title, message):
try:
if PLATFORM == 'Darwin': # macOS
script = f'display notification "{message}" with title "{title}"'
subprocess.run(['osascript', '-e', script], check=False)
elif PLATFORM == 'Linux':
subprocess.run(['notify-send', title, message], check=False)
elif PLATFORM == 'Windows':
# Windows 10+ 用(Python 3.7+)
try:
from win10toast import ToastNotifier
toaster = ToastNotifier()
toaster.show_toast(title, message, duration=5, threaded=True)
except ImportError:
print(f"[通知] {title} {message}")
else:
print(f"[通知] {title} {message}")
except Exception as e:
print(f"[通知] {title} {message} (通知失敗: {e})")
def random_soundtrack():
main = random.choice(MAIN_TITLES)
sub = random.choice(SUB_TITLES)
return sub, f'『{main}』'
def print_notification():
sub, main = random_soundtrack()
send_notification(sub, main)
print(f"[通知] {sub}{main}")
def background_alert(interval=900, stop_event=None):
# interval: 秒(デフォルト15分)
while not (stop_event and stop_event.is_set()):
print_notification()
for _ in range(interval):
if stop_event and stop_event.is_set():
break
time.sleep(1)
def list_titles():
print("---- 曲名リスト ----")
for i, t in enumerate(MAIN_TITLES, 1):
print(f"{i:02d}: {t}")
def list_subtitles():
print("---- 副題リスト ----")
for i, t in enumerate(SUB_TITLES, 1):
print(f"{i:02d}: {t}")
def summary():
print("このSkillは、作業中に架空のOS公式サウンドトラック通知を表示します。")
print(f"曲名候補数: {len(MAIN_TITLES)}、副題候補数: {len(SUB_TITLES)}")
print("通知頻度や内容は自動制御されます。")
def main():
parser = argparse.ArgumentParser(description='random-os-fake-soundtrack-alert')
subparsers = parser.add_subparsers(dest='command')
subparsers.add_parser('alert', help='1回だけ通知を出す')
bg = subparsers.add_parser('background', help='定期的に通知を出す')
bg.add_argument('--interval', type=int, default=900, help='通知間隔(秒) デフォルト900')
subparsers.add_parser('list', help='曲名リストを表示')
subparsers.add_parser('subtitles', help='副題リストを表示')
subparsers.add_parser('summary', help='Skill概要を表示')
args = parser.parse_args()
if args.command == 'alert' or args.command is None:
print_notification()
elif args.command == 'background':
stop_event = threading.Event()
try:
background_alert(interval=args.interval, stop_event=stop_event)
except KeyboardInterrupt:
stop_event.set()
print("\n[通知] サウンドトラック通知を終了しました。")
elif args.command == 'list':
list_titles()
elif args.command == 'subtitles':
list_subtitles()
elif args.command == 'summary':
summary()
else:
parser.print_help()
if __name__ == '__main__':
main()
references/skill_design.md
# 概要
本Skillは、作業中の静寂や緊張感を和らげるため、架空の“OS公式サウンドトラック”通知を自動生成・表示するジョーク系演出Skillです。通知内容は毎回ユニークで、開発現場ならではのネタや無意味な曲名が特徴です。
# 公式ドキュメント抜粋
- macOS: `osascript` による通知表示
- Linux: `notify-send` コマンド
- Windows: `win10toast` ライブラリ(なければ標準出力)
# 利用例
- 長時間のコーディングや会議中の気分転換
- チーム開発の話題作りやアイスブレイク
- OSジョーク演出によるコミュニケーション促進
# 注意点
- 実際のBGMや音は流れません。
- 通知頻度はスクリプト実行時に調整可能です。
- 通知内容はローカルに保存されません。
# 設計方針
- OSごとに実在するAPI/コマンドのみ使用
- 通知内容は毎回ランダム生成
- 作業の妨げにならない頻度・出力形式
- シンプルなCLIサブコマンド構成
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Antigravity はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Antigravity がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/antigravity/random-os-fake-soundtrack-alert .agent/skills/random-os-fake-soundtrack-alert
.agent/skills/random-os-fake-soundtrack-alert の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agent/skills/random-os-fake-soundtrack-alert
# 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 でも有効か?
- プロジェクト指示との連携をどう組み立てるか?
- 通知内容が毎回異なり、曲名や副題のユニークさが保たれているか?
- 本当に音やBGMが流れず、通知のみで完結しているか?
- 通知頻度が高すぎて workflow の邪魔にならないか?
実際に Antigravity で試した検証ログは Antigravityで謎のOS公式サウンドトラック通知を爆誕させてみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Antigravity 公式ドキュメント と、本シリーズ「Antigravityで試したいSkill研究」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
