Antigravityで作業中の謎アラートを自動化して楽しむ方法

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

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 が簡単に切り替えられるため、必要な時だけカオスを呼び込める
QUICK INSTALL
このSkillをすぐ試す

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

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

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

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