Antigravityで作業リズムを楽しく撹乱する通知演出の始め方

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

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

Antigravity を日常的に使っていると、AI coding workflow の中で「集中力が切れた瞬間」や「作業リズムが単調になる瞬間」が意外と多く発生します。特に長時間、repository understanding や context の維持に神経を使うと、思考が煮詰まりがちです。さらに、通知や演出がほとんどない CLI/AI 環境では、気づけば単調な作業ループに陥ってしまうことも珍しくありません。

  • Antigravity が context を見失って違う場所のコードを参照する
  • monorepo で package を跨いだ瞬間、Antigravity が repo 構造を忘れる
  • session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
  • 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
  • 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる

こうした悩みは、単なる path management や context の問題だけでなく、開発現場の「空気感」や「リズム」にも影響します。特に通知・演出・OS連携が不足していると、集中と休憩の切り替えがうまくいかず、作業効率が落ちることもあります。

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

一言サマリ: このスキルは、Antigravity の作業フローに「強制コーヒーブレイク」という謎の演出を挟み込み、通知とサウンドで休憩ムードを強制的に生成します。

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

  • 長時間の AI coding workflow でも、突発的なコーヒー演出でリズムが生まれ、集中の切り替えが自然にできる
  • デスクトップ通知とサウンドが context の切れ目や directory 跨ぎのタイミングで発生し、作業の節目を可視化できる
  • repo や monorepo の大規模構造でも、意味不明な「カフェイン補給」通知で、チーム内の会話や笑いのネタが生まれる
  • onboarding 時や session 再開時に、単調な説明や path 指定の繰り返しを「演出」で和らげられる
  • Skill の description マッチだけで自動発動するため、明示的なコマンド入力も不要
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/antigravity/os-fake-coffee-break-sound-effect .agent/skills/os-fake-coffee-break-sound-effect

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

使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示す。Skill が返す出力は推測だが、現実的なフォーマット・現実的な長さで書く。

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


> このリポジトリの context を一通り把握して。src/utils から見てほしい。

[通知] あなたの集中はカフェイン不足です
[サウンド再生] /sounds/coffee_pour.mp3

Antigravity: session context を初期化しました。
repository: ai-note-tech/antigravity-example
directory: src/utils
memory: 新規 session で context を再構築
(コーヒー抽出音が鳴り響く…)

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


> packages/api から packages/frontend に context を切り替えて

[通知] 今こそ一服の時
[サウンド再生] /sounds/cup_put.mp3

Antigravity: directory を packages/frontend に切り替えました。
repository understanding: monorepo 構造を再解析
path management: packages/api → packages/frontend
(カップを置く音が響く…)

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


> ちょっと疲れたから流れを変えたい

[通知] マシンも休みたい気分
[サウンド再生] /sounds/coffee_break.mp3

Antigravity: 休憩モードを提案します。
long context: 一時的に snapshot
memory: session を維持
(謎のコーヒーブレイク演出…)

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Antigravity が自動で context を復元、最小プロンプトで再開+コーヒー演出で気分転換
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る+演出で節目を明示
長時間 workflow long context で重要箇所が薄まる 休憩演出でリズムを入れ、stale context をリフレッシュ

発動方式

description マッチでの暗黙発動。

Skill の中身を全部見せる

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

.agent/skills/os-fake-coffee-break-sound-effect/
├── SKILL.md
├── scripts/
│   └── coffee_break_notifier.py
└── references/
    └── design_notes.md

各ファイルの役割

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

SKILL.md

---
name: os-fake-coffee-break-sound-effect
description: このSkillは、Antigravityがコマンド実行や作業中に“コーヒーブレイク”を演出したい場合に発動します。トリガー条件は「休憩」「集中」「疲労」「カフェイン」「リフレッシュ」などのキーワードや、連続作業・長時間稼働時です。
---

# 機能概要
このSkillは作業中やコマンド実行時に、まるでOSが強制的に“コーヒーブレイク”を推奨してくるかのような演出を提供します。実行時にデスクトップ通知とともに「コーヒー抽出音」「カップを置く音」などの効果音を再生し、通知文言も「あなたの集中はカフェイン不足です」「今こそ一服の時」など毎回ランダムで変化します。開発現場や作業環境に謎の休憩ムードを注入し、単調なリズムを愉快に撹乱します。

# 使い方
このSkillは明示的な呼び出しは不要で、Antigravityのsemantic-match-onlyトリガーにより自動発動します。たとえば「休憩したい」「集中力が切れた」「カフェインが必要」などの発話や、長時間連続作業時に自動的に通知+サウンドが発動します。ローカルで明示的にスクリプトを実行したい場合は `python coffee_break_notifier.py` で手動テストも可能です。

# 出力例
```
[通知] 今こそ一服の時。
[サウンド再生] ./sounds/coffee_pour.wav
[通知] あなたの集中はカフェイン不足です。
[サウンド再生] ./sounds/cup_put.wav
[通知] マシンも休みたい気分。
[サウンド再生] ./sounds/coffee_machine.wav
```

# 注意点
- サウンドファイルは ./sounds/ ディレクトリにwav/mp3形式で保存してください。
- 通知機能はWindows/macOS/Linux(通知API対応)で動作しますが、環境によっては追加パッケージが必要です。
- 効果音や通知文言はカスタマイズ可能です。
- 明示的なCLIオプションや関数は使用していません。

# 参考資料
- [plyer通知公式](https://plyer.readthedocs.io/en/latest/)
- [playsound公式](https://github.com/TaylorSMarks/playsound)
- references/design_notes.md 参照

scripts/coffee_break_notifier.py

import os
import random
import sys
import time
from threading import Thread

try:
    from plyer import notification
except ImportError:
    print('plyerが必要です: pip install plyer')
    sys.exit(1)

try:
    from playsound import playsound
except ImportError:
    print('playsoundが必要です: pip install playsound')
    sys.exit(1)

SOUND_DIR = os.path.join(os.path.dirname(__file__), 'sounds')
SOUND_FILES = [
    'coffee_pour.wav',
    'cup_put.wav',
    'coffee_machine.wav',
    'sip.wav',
    'milk_froth.wav',
]

NOTIFY_MESSAGES = [
    'あなたの集中はカフェイン不足です',
    '今こそ一服の時',
    'マシンも休みたい気分',
    'コーヒーブレイクを推奨します',
    'OSがコーヒーを欲しています',
    '休憩しませんか?',
    '一息つきましょう',
    '謎のカフェインタイム',
    '集中の合間にリフレッシュ',
    'コーヒーの香りが漂っています',
]

LOG_FILE = os.path.join(os.path.dirname(__file__), 'coffee_break.log')


def notify_and_play():
    msg = random.choice(NOTIFY_MESSAGES)
    sound = random.choice(SOUND_FILES)
    sound_path = os.path.join(SOUND_DIR, sound)
    # 通知表示
    try:
        notification.notify(
            title='Coffee Break Time',
            message=msg,
            app_name='Fake Coffee Break',
            timeout=5
        )
    except Exception as e:
        print(f'[通知失敗] {e}')
    # サウンド再生
    try:
        playsound(sound_path, block=False)
    except Exception as e:
        print(f'[サウンド再生失敗] {e}')
    # ログ書き込み
    with open(LOG_FILE, 'a', encoding='utf-8') as f:
        f.write(f'{time.strftime("%Y-%m-%d %H:%M:%S")}\t{msg}\t{sound}\n')
    print(f'[通知] {msg}')
    print(f'[サウンド再生] {sound_path}')


def list_log():
    if not os.path.exists(LOG_FILE):
        print('ログがありません')
        return
    with open(LOG_FILE, encoding='utf-8') as f:
        for line in f:
            print(line.strip())


def summary_log():
    if not os.path.exists(LOG_FILE):
        print('ログがありません')
        return
    count = 0
    msg_counter = {}
    sound_counter = {}
    with open(LOG_FILE, encoding='utf-8') as f:
        for line in f:
            count += 1
            parts = line.strip().split('\t')
            if len(parts) == 3:
                msg, sound = parts[1], parts[2]
                msg_counter[msg] = msg_counter.get(msg, 0) + 1
                sound_counter[sound] = sound_counter.get(sound, 0) + 1
    print(f'コーヒーブレイク発動回数: {count}')
    print('通知文言別発動数:')
    for k, v in sorted(msg_counter.items(), key=lambda x: -x[1]):
        print(f'  {k}: {v}')
    print('サウンド別発動数:')
    for k, v in sorted(sound_counter.items(), key=lambda x: -x[1]):
        print(f'  {k}: {v}')


def main():
    import argparse
    parser = argparse.ArgumentParser(description='Fake Coffee Break Notifier')
    subparsers = parser.add_subparsers(dest='command')
    parser_log = subparsers.add_parser('log', help='コーヒーブレイクを即時発動')
    parser_list = subparsers.add_parser('list', help='過去の発動ログを表示')
    parser_summary = subparsers.add_parser('summary', help='発動履歴のサマリーを表示')
    parser_auto = subparsers.add_parser('auto', help='一定間隔で自動発動')
    parser_auto.add_argument('--interval', type=int, default=1800, help='自動発動間隔(秒)')

    args = parser.parse_args()
    if args.command == 'log' or args.command is None:
        notify_and_play()
    elif args.command == 'list':
        list_log()
    elif args.command == 'summary':
        summary_log()
    elif args.command == 'auto':
        try:
            print(f'自動発動モード: {args.interval}秒ごとにコーヒーブレイク')
            while True:
                notify_and_play()
                time.sleep(args.interval)
        except KeyboardInterrupt:
            print('自動発動を中断しました')
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
このSkillは、作業の合間に強制的に“コーヒーブレイク”を演出することで、ユーザーのリズムを意図的に撹乱し、開発現場に遊び心を持ち込むことを目的としています。

# 公式ドキュメント抜粋
- plyer: クロスプラットフォームなデスクトップ通知API ([公式](https://plyer.readthedocs.io/en/latest/))
- playsound: シンプルなサウンド再生API ([公式](https://github.com/TaylorSMarks/playsound))

# 利用例
- 長時間作業時に自動で休憩を促す
- チーム開発現場で“謎の休憩”を演出し会話のきっかけを作る
- カフェ風BGMや効果音でオフィスの雰囲気を変化させる

# 注意点
- サウンドファイルはローカルに配置が必要
- 通知APIは一部Linux環境で追加依存が必要
- 過剰な発動は逆効果なので間隔調整推奨

# 設計方針
- 実在APIのみを使用し、環境依存性を最小化
- ログ/サマリー機能で発動履歴も可視化
- 通知文言・サウンドは完全ランダムで毎回異なる体験を提供

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/antigravity/os-fake-coffee-break-sound-effect .agent/skills/os-fake-coffee-break-sound-effect

.agent/skills/os-fake-coffee-break-sound-effect の中に SKILL.md / scripts/ / references/ / README.md が展開されます。

3. ファイル配置確認

ls .agent/skills/os-fake-coffee-break-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 でも有効か?
  • プロジェクト指示との連携をどう組み立てるか?
  • サウンド再生と通知表示が同時にトリガーされるか?
  • 通知文言が完全ランダムで変化するか?
  • 音源ファイルのパス指定や再生方法がシンプルか?

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

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

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

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

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