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 マッチだけで自動発動するため、明示的なコマンド入力も不要
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記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
