Antigravityで楽しむ不安演出の自動通知を活用する方法

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

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

Antigravity を使った AI coding workflow では、日々の開発が効率化される一方、独特の「気疲れ」や緊張感がつきまといます。特に repository understanding や context の把握に集中していると、ふとしたタイミングで「何か見落としていないか」「本当にこの path で合っているか」と不安になる瞬間が増えがちです。通知や演出が少ないため、単調な作業が続くと集中力が切れたり、逆に無駄に神経質になってしまうことも。

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

このような状況で、たまには緊張をほぐす演出や、思わず笑ってしまうような「OS公式バグ孵化警告」などの通知があれば、作業の合間に気分転換できるのではと考えるユーザーも少なくありません。

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

一言サマリ: このスキルは、Antigravity の開発作業に「謎のOS公式・バグ孵化警告」をランダムに挟み込むことで、単調なAI coding workflowに遊び心と緊張感を演出するSkill。

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

  • 長時間の repository 作業や monorepo の path management の合間に、思わず笑ってしまう fake alert で気分転換できる
  • AI coding workflow の通知に「本物のバグ通知とは別物」として明らかに冗談と分かる警告が混ざり、チームや個人のオンボーディング時にも話題になる
  • Antigravity の context memory が stale になりがちな場面でも、演出によるリフレッシュ効果が期待できる
  • directory や repository understanding の説明に疲れたとき、ふとしたタイミングで出る警告が場を和ませる
  • 「AIエージェントと人間の距離感」をユーモラスに演出し、開発現場の空気を柔らかくできる
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/antigravity/random-os-fake-bug-hatching-alert .agent/skills/random-os-fake-bug-hatching-alert

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

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

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


> プロジェクトの初期セットアップをお願いします

[Antigravity]
リポジトリ構造を解析中...
- packages/core/
- packages/utils/
- README.md

【警告】新たなバグが12:14に孵化しました。
詳細: /packages/core/memory_manager.py 付近で未確認の「context迷子バグ」が観測されています。

(※これはOS公式の警告ではありません)

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


> packages/utils/ の build スクリプトを修正してください

[Antigravity]
packages/utils/build.js を解析中...

【緊急】メモリ奥地で未確認バグが産声をあげました。
警告コード: FAKE-AG-2023-07
発生箇所: /packages/utils/build.js

(この警告は開発者の気分転換を目的とした fake alert です)

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


> 今日は何かバグを見つけてくれる?

[Antigravity]
repository 内をスキャン中...

【OS公式通知】本日13:02、未知のバグが /README.md 付近で静かに孵化しました。
推奨アクション: 深呼吸してコーヒーを淹れてください。

(※実害はありません)

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Antigravity が自動で context を復元、最小プロンプトで再開
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る
長時間 workflow long context で重要箇所が薄まる 擬似警告で workflow のリズムが生まれ、集中力をリセットしやすい

発動方式

description マッチでの暗黙発動。

Skill の中身を全部見せる

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

.agent/skills/random-os-fake-bug-hatching-alert/
├── SKILL.md
├── scripts/
│   └── bug_hatching_alert.py
└── references/
    └── design_notes.md

各ファイルの役割

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

SKILL.md

---
name: random-os-fake-bug-hatching-alert
description: このSkillは、Antigravityがユーザーの作業中やコマンド実行の合間(例: ビルドやテスト、デバッグ、長時間のターミナル作業)に、ランダムなタイミングで“バグ孵化警告”を通知として表示します。キーワード: 通知, ランダム, バグ, 警告, ジョーク, OS, 不安演出。
---

# 機能概要
このSkillは、OS風の“バグ孵化警告”を完全ランダムなタイミングでデスクトップ通知またはターミナル出力として表示します。通知内容は毎回異なり、「警告: 本日13:14に新たなバグが孵化しました」や「緊急: メモリ奥地で未確認バグが産声をあげました」など、明らかに冗談と分かる表現で、実害はありません。作業の合間に不安を煽ることで、気分転換やチーム内の話題作りに役立ちます。

# 使い方
このSkillは明示的な呼び出しは不要です。Antigravityが「ビルド」「テスト」「デバッグ」「長時間のターミナル操作」などのキーワードや状況を検知した際、自動的に発動します。ユーザー操作や特定のコマンド実行時に、数分〜数十分の間隔でランダムに通知が表示されます。

# 出力例
```
[OS警告] 2024-06-18 13:14:02
警告: 本日13:14に新たなバグが孵化しました

[OS警告] 2024-06-18 13:47:59
緊急: メモリ奥地で未確認バグが産声をあげました

[OS警告] 2024-06-18 14:03:10
注意: システム深部でバグの卵が発見されました
```

# 注意点
- 実際のバグやエラーとは無関係で、すべて演出です。
- 通知は完全にランダムなタイミングで表示されます。
- ローカルのログやシステムには一切影響しません。
- 本物のエラー通知と混同しないよう、文面は冗談と分かるものに限定しています。

# 参考資料
詳細な設計方針や実装例は references/design_notes.md を参照してください。デスクトップ通知にはPythonの通知API(plyer等)を使用し、ターミナル出力にも対応しています。

scripts/bug_hatching_alert.py

import sys
import os
import time
import random
import argparse
import threading
from datetime import datetime

try:
    from plyer import notification
    PLYER_AVAILABLE = True
except ImportError:
    PLYER_AVAILABLE = False

# 警告メッセージ候補
BUG_ALERT_MESSAGES = [
    "警告: 本日{time}に新たなバグが孵化しました",
    "緊急: メモリ奥地で未確認バグが産声をあげました",
    "注意: システム深部でバグの卵が発見されました",
    "警告: 未知のバグがプロセス空間に漂流中",
    "速報: 記憶領域でバグの幼体が観測されました",
    "警告: バグの繁殖活動が活発化しています",
    "注意: OSカーネル付近でバグの孵化反応を検知",
    "緊急: バグの幼虫がスレッド間を移動中",
    "警告: システムログにバグの足跡を発見",
    "注意: バグの卵が複数同時に孵化しました",
    "速報: バグの鳴き声が聞こえました (要調査)"
]

LOG_FILE = os.path.expanduser("~/.fake_bug_hatching_alert.log")


def get_random_message():
    now = datetime.now()
    time_str = now.strftime("%H:%M")
    msg = random.choice(BUG_ALERT_MESSAGES)
    return msg.format(time=time_str)


def print_terminal_alert(message):
    now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    alert = f"[OS警告] {now}\n{message}\n"
    print(alert)
    log_alert(alert)


def notify_desktop(message):
    if not PLYER_AVAILABLE:
        return False
    now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    try:
        notification.notify(
            title="OS警告",
            message=f"{message}\n({now})",
            timeout=8
        )
        log_alert(f"[OS警告] {now}\n{message}\n")
        return True
    except Exception as e:
        return False


def log_alert(alert):
    try:
        with open(LOG_FILE, 'a', encoding='utf-8') as f:
            f.write(alert + '\n')
    except Exception:
        pass


def random_wait(min_sec=180, max_sec=900):
    return random.randint(min_sec, max_sec)


def alert_once():
    message = get_random_message()
    # まずデスクトップ通知を試みる
    if PLYER_AVAILABLE and notify_desktop(message):
        return
    # 失敗したらターミナル出力
    print_terminal_alert(message)


def run_alert_loop(forever=True, min_sec=180, max_sec=900):
    try:
        while True:
            wait_time = random_wait(min_sec, max_sec)
            time.sleep(wait_time)
            alert_once()
            if not forever:
                break
    except KeyboardInterrupt:
        print("\n[終了] バグ孵化警告ループを停止しました。")


def show_log(limit=10):
    if not os.path.exists(LOG_FILE):
        print("ログファイルがありません。")
        return
    with open(LOG_FILE, encoding='utf-8') as f:
        lines = f.readlines()
    for line in lines[-limit:]:
        print(line.rstrip())


def summary():
    if not os.path.exists(LOG_FILE):
        print("ログファイルがありません。")
        return
    with open(LOG_FILE, encoding='utf-8') as f:
        lines = f.readlines()
    print(f"累計バグ孵化警告数: {len(lines)}")
    if lines:
        print(f"最新: {lines[-1].strip()}")


def parse_args():
    parser = argparse.ArgumentParser(description='バグ孵化警告スクリプト')
    subparsers = parser.add_subparsers(dest='command')

    run_parser = subparsers.add_parser('run', help='ランダム警告ループを開始')
    run_parser.add_argument('--min', type=int, default=180, help='最小間隔(秒)')
    run_parser.add_argument('--max', type=int, default=900, help='最大間隔(秒)')
    run_parser.add_argument('--once', action='store_true', help='1回だけ警告を表示')

    log_parser = subparsers.add_parser('log', help='直近の警告ログを表示')
    log_parser.add_argument('--limit', type=int, default=10, help='表示件数')

    subparsers.add_parser('summary', help='警告の累計と最新を表示')
    return parser.parse_args()


def main():
    args = parse_args()
    if args.command == 'run':
        if args.once:
            alert_once()
        else:
            run_alert_loop(forever=True, min_sec=args.min, max_sec=args.max)
    elif args.command == 'log':
        show_log(limit=args.limit)
    elif args.command == 'summary':
        summary()
    else:
        print("コマンドを指定してください (run/log/summary)")


if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
このSkillは、OS風の“バグ孵化警告”を完全ランダムなタイミングでユーザーに通知する演出用スクリプトです。実害はなく、気分転換やチームの話題作りを主目的としています。

# 公式ドキュメント抜粋
デスクトップ通知にはPythonの[plyer](https://plyer.readthedocs.io/en/latest/)を利用しています。plyerが未導入の場合は自動的にターミナル出力にフォールバックします。

# 利用例
- 長時間のビルドやテスト中に、突然“バグ孵化”警告が表示されて緊張感と笑いを演出
- チームのペアプロやリモート会議中に、話題作りとして活用
- 本物のエラー通知と混同しないよう、ジョーク感を前面に出した文面

# 注意点
- 実際のバグやエラーには一切影響しません
- ログはユーザーのホームディレクトリに保存されます
- plyer未導入時はpip install plyerで導入可能

# 設計方針
通知タイミングは180秒〜900秒の範囲で完全ランダムに設定。CLIサブコマンドでログ閲覧や累計表示も可能にし、演出の透明性と操作性を両立しています。

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/antigravity/random-os-fake-bug-hatching-alert .agent/skills/random-os-fake-bug-hatching-alert

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

3. ファイル配置確認

ls .agent/skills/random-os-fake-bug-hatching-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 を取りたい

気になるポイント (壊れそうな箇所)

実運用に乗せる前に頭に入れておきたい懸念。後で検証する観点でもある:

  • 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をコピーしました!
目次