Antigravityで作業中の緊張感を和らげる通知演出の始め方

  • URLをコピーしました!
目次

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/ 配下に置くだけで即反映される
QUICK INSTALL
このSkillをすぐ試す

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記事を探す

本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次