Antigravity ユーザーが日常でぶつかる悩み
AI coding workflow を Antigravity で回していると、日々の開発現場には思わぬ「空気の重さ」や「無機質なやりとり」がつきまといがちです。context や repository understanding の精度が向上しても、ふとした瞬間に会話が無味乾燥になり、集中力が切れることも。特に monorepo のような巨大な repository では、directory や path management の煩雑さに加え、session の切り替えタイミングで思考が停滞することもあります。
そんな時、現場の空気を一瞬だけリフレッシュしたり、チームの onboarding の雰囲気を和ませたいと感じることも。「AI とのやりとりが淡々としすぎて、ちょっとした遊び心が欲しい」と思った経験はありませんか?
- Antigravity が context を見失って違う場所のコードを参照するタイミングで、場の空気が微妙に重くなる
- monorepo で package を跨いだ瞬間、Antigravity が repo 構造を忘れたような挙動を見せ、気まずい沈黙が流れる
- session を再開するたびに、前回までの context や path 指定をまるごと再説明しなければならず、マンネリ感が漂う
- 長時間の AI coding workflow で long context が膨らみすぎ、重要な情報が薄まり stale context になってしまう
- 「このリポジトリはこういう構造」と毎回チャット冒頭で説明する手間が、開発現場の雰囲気を単調にしてしまう
このような「通知・演出・OS連携」カテゴリの課題に、ちょっとしたカオスを持ち込んで空気を変えたい――そんなニーズが芽生えることもあるでしょう。
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは、Antigravity の開発現場に“無意味なカオス通知”を突如出現させ、場の空気を一瞬でリセットする演出 Skill。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- AI coding workflow の単調な流れに、突発的な“謎のOS緊急アラート”を差し込み、リポジトリ理解や context 管理の空気を和らげる
- monorepo や大規模 repository で path management に疲れたタイミングで、意味不明な警告が現れ、開発現場に笑いとリフレッシュをもたらす
- session 再開や onboarding の瞬間に、Antigravity を使う全員の集中力を一度ほぐす“無害な混乱”を演出できる
- 通知内容が業務とは完全に無関係なため、真面目なやりとりに飽きた時のアイスブレイクとして使える
- 通知の ON/OFF が簡単に切り替えられるため、必要な時だけカオスを呼び込める
GitHub から degit でコマンド1行、Antigravity の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/antigravity/desktop-chaos-alert .agent/skills/desktop-chaos-alert実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示す。
シーン1: session 開始時 (プロジェクト初動で)
> 新しいプロジェクトのディレクトリ構成を確認して
[Antigravity]
ディレクトリ構造を解析中...
[OS ALERT] 危険:バグが自我を獲得しました
詳細: src/utils/chaos_manager.py で異常な自己参照を検出しました。
推奨: コーヒーブレイクを推奨します。
[Antigravity]
project-root/
├── src/
├── tests/
└── README.md
シーン2: monorepo / package 跨ぎ作業時
> packages/core/ のコードを packages/ui/ から参照したい
[Antigravity]
monorepo 構造を再確認します...
[OS ALERT] 注意:メモリがピクニック中
詳細: packages/core/ の context が一時的に消失しました。
推奨: しばらく深呼吸してください。
[Antigravity]
packages/
├── core/
└── ui/
シーン3: お遊び的な使い方
> なんとなく気分転換したい
[OS ALERT] 深刻:キーボードが人生に迷っています
詳細: 入力内容が哲学的すぎます。
推奨: 5分間の散歩を推奨します。
[Antigravity]
(通常の出力は省略)
before / after の違い
| 場面 | Skill 無し | Skill 有り |
|---|---|---|
| session 再開時 | repo 構造から毎回説明、path も指定し直し | Antigravity が自動で context を復元、最小プロンプトで再開+カオス通知で空気が和む |
| monorepo 移動 | 違う package のコードを参照しがち | directory boundary を意識して必要な範囲だけ見る+ユーモラスなアラートでリフレッシュ |
| 長時間 workflow | long context で重要箇所が薄まる | 突発的なアラートで集中力をリセットできる |
発動方式
description マッチでの暗黙発動。
Skill の中身を全部見せる
.agent/skills/desktop-chaos-alert/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agent/skills/desktop-chaos-alert/
├── SKILL.md
├── scripts/
│ └── desktop_chaos_alert.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Antigravity がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/desktop_chaos_alert.py |
desktop-chaos-alert: 謎のOS緊急アラートをデスクトップ通知で爆誕させます |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: desktop-chaos-alert
description: Antigravityが「カオス」「混乱」「緊張緩和」「ジョーク」「通知」「警告」などのキーワードや、場の空気を和ませたい・リフレッシュしたい文脈を検知した際に発動します。真面目すぎる雰囲気を一瞬で壊したいときに自動発動します。
---
# 機能概要
このSkillは、デスクトップに突然「謎のOS緊急アラート」風の通知を表示し、作業現場にカオスな笑いをもたらします。通知内容は『危険:バグが自我を獲得しました』『注意:メモリがピクニック中』など、全く業務に関係ない意味不明な警告ばかり。実害ゼロで、真面目な空気をぶち壊したい・チームの緊張を和らげたいときに最適です。
# 使い方
本Skillは明示的な呼び出しは不要です。Antigravityが「カオス」「混乱」「ジョーク」「通知」「警告」などのキーワードや、場の空気を和ませたい・リフレッシュしたいといった文脈を検知した際、自動的に発動します。明示的な呼び出し例はありません。
## 暗黙発動キーワード例
- 「カオスな通知を出して」
- 「場の空気を壊したい」
- 「ジョークアラート」
- 「謎警告を表示」
# 出力例
```terminal
[通知] 危険:バグが自我を獲得しました
[通知] 注意:メモリがピクニック中
[通知] 深刻:キーボードが人生に迷っています
[通知] 警告:OSが哲学的問いに悩んでいます
[通知] 重大:CPUが詩を書き始めました
```
# 注意点
- 本Skillは実際のシステムや業務には影響を与えません。
- 通知はローカル環境でのみ表示されます(macOS, Windows, Linux対応)。
- オフにしたい場合はスクリプトを停止またはアンインストールしてください。
- 通知内容は完全にランダムで、業務連絡や重要情報は一切含まれません。
# 参考資料
- [plyer公式ドキュメント](https://plyer.readthedocs.io/en/latest/)
- references/design_notes.md も参照してください。
scripts/desktop_chaos_alert.py
import argparse
import random
import sys
import threading
import time
from plyer import notification
CHAOS_MESSAGES = [
'危険:バグが自我を獲得しました',
'注意:メモリがピクニック中',
'深刻:キーボードが人生に迷っています',
'警告:OSが哲学的問いに悩んでいます',
'重大:CPUが詩を書き始めました',
'警告:マウスが散歩に出かけました',
'注意:ディスプレイが夢を見ています',
'危険:ネットワークが迷子になりました',
'深刻:電源が昼寝中です',
'警告:ファイルシステムがダンスしています',
'重大:プロセスが哲学者になりました',
'警告:RAMが宇宙旅行に出発しました',
'注意:GPUが絵を描いています',
'深刻:システムクロックが逆走中',
'警告:USBが自己主張を始めました'
]
LOG_FILE = 'chaos_alert.log'
class ChaosAlert:
def __init__(self, interval=60, once=False, dry_run=False):
self.interval = interval
self.once = once
self.dry_run = dry_run
self.running = False
self.thread = None
def show_alert(self, message=None):
msg = message or random.choice(CHAOS_MESSAGES)
title = '謎のOS緊急アラート'
if self.dry_run:
print(f'[通知] {msg}')
else:
notification.notify(title=title, message=msg, app_name='desktop-chaos-alert', timeout=8)
self.log_alert(msg)
def log_alert(self, msg):
with open(LOG_FILE, 'a', encoding='utf-8') as f:
f.write(f'{time.strftime("%Y-%m-%d %H:%M:%S")} {msg}\n')
def start(self):
self.running = True
if self.once:
self.show_alert()
else:
self.thread = threading.Thread(target=self._loop, daemon=True)
self.thread.start()
try:
while self.running:
time.sleep(1)
except KeyboardInterrupt:
self.running = False
print('Chaos Alertを停止しました。')
def _loop(self):
while self.running:
self.show_alert()
for _ in range(self.interval):
if not self.running:
break
time.sleep(1)
def stop(self):
self.running = False
if self.thread:
self.thread.join()
@staticmethod
def list_logs(limit=20):
try:
with open(LOG_FILE, 'r', encoding='utf-8') as f:
lines = f.readlines()[-limit:]
for line in lines:
print(line.strip())
except FileNotFoundError:
print('ログファイルが見つかりません。')
@staticmethod
def summary():
try:
with open(LOG_FILE, 'r', encoding='utf-8') as f:
lines = f.readlines()
print(f'通知履歴: {len(lines)} 件')
counts = {}
for line in lines:
for msg in CHAOS_MESSAGES:
if msg in line:
counts[msg] = counts.get(msg, 0) + 1
for msg, cnt in sorted(counts.items(), key=lambda x: -x[1]):
print(f' {msg}: {cnt}回')
except FileNotFoundError:
print('ログファイルが見つかりません。')
def main():
parser = argparse.ArgumentParser(description='desktop-chaos-alert: 謎のOS緊急アラートをデスクトップ通知で爆誕させます')
subparsers = parser.add_subparsers(dest='command')
run_parser = subparsers.add_parser('run', help='カオス通知を開始')
run_parser.add_argument('--interval', type=int, default=60, help='通知間隔(秒)')
run_parser.add_argument('--once', action='store_true', help='一度だけ通知')
run_parser.add_argument('--dry-run', action='store_true', help='通知をprintで擬似表示')
list_parser = subparsers.add_parser('list', help='通知履歴を表示')
list_parser.add_argument('--limit', type=int, default=20, help='表示件数')
summary_parser = subparsers.add_parser('summary', help='通知履歴のサマリを表示')
args = parser.parse_args()
if args.command == 'run':
alert = ChaosAlert(interval=args.interval, once=args.once, dry_run=args.dry_run)
alert.start()
elif args.command == 'list':
ChaosAlert.list_logs(limit=args.limit)
elif args.command == 'summary':
ChaosAlert.summary()
else:
parser.print_help()
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
このSkillは、開発現場の緊張緩和やアイスブレイクを目的に、実害ゼロのカオスな通知をデスクトップに表示します。通知内容は完全に無意味で、業務やシステムには一切影響しません。
# 公式ドキュメント抜粋
通知には plyer ライブラリを使用しています。plyerはクロスプラットフォームな通知APIを提供し、macOS/Windows/Linuxで動作します。
# 利用例
- チームの雰囲気が張り詰めているときに自動発動
- コードレビューやデバッグ中にジョークとして
- オンライン会議の合間のリフレッシュに
# 注意点
- 通知はローカルPCにのみ表示され、リモートセッションやサーバー環境では機能しません。
- 通知履歴はchaos_alert.logに保存されますが、個人情報や業務情報は記録されません。
# 設計方針
安全性と無害性を重視し、通知内容は完全にランダム生成・固定リストから選択。ユーザーがいつでも停止・履歴確認できるCLIサブコマンド設計としています。
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Antigravity はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Antigravity がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/antigravity/desktop-chaos-alert .agent/skills/desktop-chaos-alert
.agent/skills/desktop-chaos-alert の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agent/skills/desktop-chaos-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 を取りたい
- 現場の空気が重い時: 意味不明な通知で一瞬リセットしたい
- チームのアイスブレイク: onboarding やペアプロ時に場を和ませたい
気になるポイント (壊れそうな箇所)
実運用に乗せる前に頭に入れておきたい懸念。後で検証する観点でもある:
- stale context 問題: 長時間 workflow で Skill 出力が古くなり、現状と乖離する可能性
- directory 増えすぎ問題: 大規模 repo で全 directory を網羅すると出力が肥大化して context window を圧迫
- monorepo 肥大化: packages が多い構成では出力が雑になり、結局 path 指定し直しになる懸念
- irrelevant path 混入: node_modules / build 成果物 / generated コードを拾ってしまう可能性
- Antigravity 固有の引っかかり: description のセマンティックマッチ精度が要件次第
- 発動しないケース: description が漠然 / 他の Skill が優先 / git管理外 directory
- 通知が鬱陶しくなるリスク: 頻度やタイミングの調整が必要
- OS通知の互換性: 一部の環境で通知が正しく表示されない場合がある
試す前に確かめたいこと
この Skill を実運用に投入する前に確かめたい問いを並べる:
- 実 repo での token 消費は許容範囲か?
- monorepo (packages 多数) で安定して動くか?
- stale context にならず、長時間 workflow でも有効か?
- プロジェクト指示との連携をどう組み立てるか?
- 意図しないタイミングで通知が出現しないか?
- 通知内容が本当に業務と無関係なカオスであるか?
- 通知が安全かつ簡単にオフにできるか?
実際に Antigravity で試した検証ログは Antigravityで謎のOS緊急アラートを爆誕させてみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Antigravity 公式ドキュメント と、本シリーズ「Antigravityで試したいSkill研究」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
