Antigravityで作業中に謎のBGM通知を自動化する方法【発見】

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

Antigravity ユーザーが日常でぶつかる悩み

Antigravityを日常的に使っていると、AI coding workflowの効率化やrepository understandingの向上は実感できるものの、どうしても作業が単調になったり、長時間のsessionで集中力が途切れる瞬間が生まれがちです。特にmonorepoや複雑なdirectory構造の中でcontextを維持し続けるのは大きな負荷となります。そんな時、ちょっとした気分転換やネタ要素が欲しくなることも多いのではないでしょうか。

さらに、通知や演出を通じて作業のリズムを切り替えたり、onboarding時に「空気感」を和らげたい場面もあります。AntigravityのようなAI Coding Agentを使いこなしているユーザーほど、こうした“小さな演出”に敏感です。以下のような悩みを感じたことはありませんか?

  • 集中している最中、ふとしたタイミングで気分転換したいが、適度な刺激や演出が足りない
  • 長時間のAI coding workflowでcontextが膨らみ、重要な情報も埋もれてしまう
  • session再開時やonboarding時に、作業空間に“ちょっとした遊び心”が欲しい
  • monorepoでpackageを跨いだ際、repository understandingを維持しつつ場の雰囲気を和らげたい
  • AIによるpath managementやdirectory切り替えの合間に、無機質なやりとりだけでなく“謎演出”を挟みたい

この Skill が一言でいうと何を解決するか

一言サマリ: このスキルは、Antigravityの作業空間に“謎のOS公式BGM通知”という遊び心ある演出を自動で挿入し、気分転換とリポジトリ理解の切り替えタイミングを演出します。

もう少し具体化すると、このSkillを入れることで以下のような状態になる:

  • AI coding workflowの合間に、ランダムな“それっぽいBGMタイトル”通知が炸裂し、作業に新鮮なcontextを生み出せる
  • monorepoや複雑なdirectory作業の切り替え時、Antigravityのrepository understandingがリセットされる瞬間を遊び心で和らげる
  • onboardingやsession再開時に、無機質なやりとりだけでなく記憶に残る演出でユーザー体験を向上
  • 一切音は鳴らず、通知や出力だけで安全に“ネタ感”を伝えられる
  • 気分転換や集中力リセットを演出し、長時間のlong context作業でも飽きずに進められる
QUICK INSTALL
このSkillをすぐ試す

GitHub から degit でコマンド1行、Antigravity の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。

npx degit aazutaku/ai-note/antigravity/random-os-fake-mysterious-soundtrack-alert .agent/skills/random-os-fake-mysterious-soundtrack-alert

実行したらこうなる (3つの利用シーン)

使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示します。

シーン1: session 開始時 (プロジェクト初動で)


# プロジェクト開始
> このプロジェクトの構造を確認して、作業を始めたい

[Antigravity OS公式通知]
本日の作業用BGM: 『第3会議室の静寂』
ジャンル: 不明
推奨タイミング: session開始直後

(※実際に音楽は流れません。雰囲気だけお楽しみください)

シーン2: monorepo / package 跨ぎ作業時


> packages/api と packages/web の両方を編集したい

[Antigravity OS公式BGM推奨]
あなたのための本日の一曲: 『Cドライブ幻想曲』
ジャンル: 謎
おすすめ利用シーン: monorepo package移動時

(※この通知は演出です。音は流れません)

シーン3: お遊び的な使い方


> 今日は何か面白いことない?

[Antigravity OS公式“本日のBGM”]
本日のおすすめ: 『未定義変数のバラード』
ジャンル: 未分類
気分転換にどうぞ

(※BGMはイメージです)

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Antigravity が自動で context を復元、最小プロンプトで再開+BGM通知で雰囲気転換
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る+BGM通知で切り替えを演出
長時間 workflow long context で重要箇所が薄まる 適度なタイミングでBGM通知、集中力リセットを促す

発動方式

description マッチでの暗黙発動。

Skill の中身を全部見せる

.agent/skills/random-os-fake-mysterious-soundtrack-alert/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。

.agent/skills/random-os-fake-mysterious-soundtrack-alert/
├── SKILL.md
├── scripts/
│   └── mysterious_soundtrack_alert.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Antigravity がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/mysterious_soundtrack_alert.py OS謎BGM推奨通知スクリプト
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: random-os-fake-mysterious-soundtrack-alert
description: このSkillは、Antigravityがユーザーの作業中やコマンド実行後などに、"BGM"や"作業用BGM"、"集中"、"雰囲気"などのキーワードを含む文脈を検出した際、突然“OS公式・本日の作業用BGM推奨通知”を発動します。通知はジャンル不明・独自タイトルのBGM名をランダム表示し、音は鳴りませんが演出感を演出します。
---

# 機能概要
このSkillは、作業中やコマンド実行の合間に、まるでOS公式からの通知のような“本日の作業用BGM推奨”を突然表示します。実際に音楽は流れませんが、毎回ジャンル不明・独自タイトルのBGM名(例:「第3会議室の静寂」「Cドライブ幻想曲」「未定義変数のバラード」など)がランダムで登場し、作業空間に謎の演出感を与えます。気分転換や小ネタとして、単調な作業の合間に“謎のOS感”を体験できます。

# 使い方
このSkillは明示的な呼び出しは不要です。Antigravityが「BGM」「作業用BGM」「雰囲気」「集中」などのキーワードや、長時間の作業・コマンド実行後など、演出や気分転換が有効そうなタイミングで自動的に発動します。ユーザーは特別な設定をせずとも、唐突に“BGM推奨通知”を受け取ることができます。

# 出力例
```
[OS公式通知] 本日の作業用BGM推奨: 『第3会議室の静寂』
[OS公式通知] 本日の作業用BGM推奨: 『Cドライブ幻想曲』
[OS公式通知] 本日の作業用BGM推奨: 『未定義変数のバラード』
[OS公式通知] 本日の作業用BGM推奨: 『システム再起動前夜』
[OS公式通知] 本日の作業用BGM推奨: 『仮想デスクトップの黄昏』
```

# 注意点
- 実際に音楽は流れません。通知・演出のみです。
- ローカルへのファイル保存や履歴管理は行いません。
- OSの通知API(Windows: win10toast, macOS: osascript, Linux: notify-send等)を用いて、環境に応じて最適な通知手段を選択します。
- ネタ要素が強いため、業務環境や集中が必要な場面では注意してご利用ください。

# 参考資料
- references/design_notes.md に設計方針や利用例を記載
- 通知API公式: https://github.com/jithurjacob/Windows-10-Toast-Notifications, https://specifications.freedesktop.org/notification-spec/latest/ など

scripts/mysterious_soundtrack_alert.py

import sys
import random
import argparse
import platform
import subprocess
from typing import List

BGM_TITLES = [
    '第3会議室の静寂',
    'Cドライブ幻想曲',
    '未定義変数のバラード',
    'システム再起動前夜',
    '仮想デスクトップの黄昏',
    'メモリ解放の祈り',
    'タスクスケジューラの夢',
    'ログイン画面の彼方',
    'バックアップ未完のエチュード',
    'プロセス監視者の夜',
    'カーネルパニック小夜曲',
    'バッテリー残量のワルツ',
    'ファイルハンドルの迷宮',
    'セーフモードの残響',
    '未保存ドキュメントのレクイエム',
    'シェルプロンプトの微笑み',
    '仮想環境の幻影',
    'パーミッション拒否の子守唄',
    'ネットワーク遅延のカノン',
    'アップデート待機の無音'
]

NOTIFY_TITLE = 'OS公式通知'
NOTIFY_PREFIX = '本日の作業用BGM推奨: '


def pick_random_title() -> str:
    return random.choice(BGM_TITLES)


def send_notification(message: str):
    system = platform.system()
    try:
        if system == 'Darwin':
            # macOS: osascript
            script = f'display notification "{message}" with title "{NOTIFY_TITLE}"'
            subprocess.run(['osascript', '-e', script], check=True)
        elif system == 'Linux':
            # Linux: notify-send
            subprocess.run(['notify-send', NOTIFY_TITLE, message], check=True)
        elif system == 'Windows':
            try:
                from win10toast import ToastNotifier
                toaster = ToastNotifier()
                toaster.show_toast(NOTIFY_TITLE, message, duration=5, threaded=True)
            except ImportError:
                # Fallback: print to terminal
                print(f'[{NOTIFY_TITLE}] {message}')
        else:
            # Unknown OS: fallback
            print(f'[{NOTIFY_TITLE}] {message}')
    except Exception as e:
        print(f'[{NOTIFY_TITLE}] {message}')
        print(f'通知送信失敗: {e}', file=sys.stderr)


def print_terminal(message: str):
    print(f'[{NOTIFY_TITLE}] {message}')


def alert_once(to_terminal: bool = False):
    title = pick_random_title()
    message = f'『{title}』'
    if to_terminal:
        print_terminal(NOTIFY_PREFIX + message)
    else:
        send_notification(NOTIFY_PREFIX + message)


def alert_batch(count: int = 5, to_terminal: bool = False):
    for _ in range(count):
        alert_once(to_terminal=to_terminal)


def list_titles():
    for t in BGM_TITLES:
        print(f'- {t}')


def parse_args():
    parser = argparse.ArgumentParser(description='OS謎BGM推奨通知スクリプト')
    subparsers = parser.add_subparsers(dest='command')

    parser_once = subparsers.add_parser('once', help='1回だけ通知')
    parser_once.add_argument('--terminal', action='store_true', help='ターミナル出力のみ')

    parser_batch = subparsers.add_parser('batch', help='複数回通知')
    parser_batch.add_argument('-n', '--number', type=int, default=5, help='通知回数')
    parser_batch.add_argument('--terminal', action='store_true', help='ターミナル出力のみ')

    parser_list = subparsers.add_parser('list', help='BGMタイトル一覧を表示')

    return parser.parse_args()


def main():
    args = parse_args()
    if args.command == 'once':
        alert_once(to_terminal=args.terminal)
    elif args.command == 'batch':
        alert_batch(count=args.number, to_terminal=args.terminal)
    elif args.command == 'list':
        list_titles()
    else:
        print('コマンドを指定してください (once, batch, list)', file=sys.stderr)
        sys.exit(1)


if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
このSkillは、ユーザーの作業体験に“謎のOS公式BGM推奨通知”という演出を加えることで、単調な作業やコマンド実行の合間に気分転換や小ネタを提供することを目的としています。実際に音は鳴らさず、通知やターミナル出力のみで安全に“雰囲気”を演出します。

# 公式ドキュメント抜粋
- Windows: win10toast (https://github.com/jithurjacob/Windows-10-Toast-Notifications)
- Linux: notify-send (https://specifications.freedesktop.org/notification-spec/latest/)
- macOS: osascript 経由の通知

# 利用例
- 長時間のコーディングやビルド後に唐突なBGMタイトル通知で気分転換
- チーム内のリモート作業時の雑談ネタやアイスブレイク

# 注意点
- 実際の音楽再生は行いません
- 通知APIの利用には各OSでの権限や環境設定が必要な場合があります
- ネタ要素が強いため、業務環境での利用は適切なタイミングを選んでください

# 設計方針
- クロスプラットフォームで動作し、OSごとに最適な通知APIを選択
- BGMタイトルは毎回ランダム生成で“ジャンル不明感”を重視
- ローカル保存や履歴管理は行わず、シンプルな演出に徹する

導入手順

このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Antigravity はファイル配置後に再起動するだけで自動認識します。

1. 前提

  • Node.js v16 以上 (degit 実行に必要)
  • Antigravity がローカルで動いていること

2. degit でフォルダ取得

プロジェクトのルートで以下のコマンドを実行します。

npx degit aazutaku/ai-note/antigravity/random-os-fake-mysterious-soundtrack-alert .agent/skills/random-os-fake-mysterious-soundtrack-alert

.agent/skills/random-os-fake-mysterious-soundtrack-alert の中に SKILL.md / scripts/ / references/ / README.md が展開されます。

3. ファイル配置確認

ls .agent/skills/random-os-fake-mysterious-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 構造だけ素早く戻したい+BGM通知で再スタート感を演出
  • 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タイトル”がちゃんと表示されるか?
  • 通知やターミナル出力のタイミングが絶妙か?
  • 一切音が鳴らず安全にネタ感だけ伝わるか?

実際に Antigravity で試した検証ログは Antigravityで謎の作業用BGM通知を体験してみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Antigravity 公式ドキュメント と、本シリーズ「Antigravityで試したいSkill研究」の他記事も参照のこと。

関連タグで他のSkill記事を探す

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

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

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