Antigravityで楽しむ!謎の緊急パッチ通知を自動演出する方法

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

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

Antigravity を日々利用していると、AI coding workflowの中で「なんで今このタイミング!?」という突発的な通知や演出が欲しくなる瞬間が意外と多いものです。特に長時間の作業や複数のディレクトリを跨ぐ開発では、集中力が切れたり、場の空気が重くなったりしがちです。そんなとき、ちょっとした「無駄な緊張感」や「謎のカオス演出」が場を和ませてくれることもあります。

  • Antigravity が context を見失って違う場所のコードを参照し始め、思わず「今どこ見てるの!?」と焦る瞬間がある
  • monorepo で package を跨いだ途端、Antigravity の repository understanding がリセットされたように感じる
  • 長時間のAI coding workflowで、重要な情報や memory が stale context に埋もれてしまい、場の空気が停滞する
  • session を再開するたびに、repo の directory 構造や path management の説明を繰り返すことに疲れてしまう
  • 「この通知、誰得?」と一瞬混乱できるような、遊び心ある演出が欲しいが、標準機能では実現できない

通知・演出・OS連携にまつわるこうした悩みは、純粋な生産性だけでなく、開発現場の雰囲気やコミュニケーションにも影響します。Antigravity の context や repository 理解の「間」を埋める、ちょっとした仕掛けが求められています。

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

一言サマリ: あなたの作業中Skill。

このSkillを追加することで、Antigravity のAI coding workflowに突如“謎のOS緊急パッチアラート”が爆誕。意味不明なウソパッチノートがデスクトップに通知され、開発現場に「なんだこれ!?」という笑いと緊張感を同時に提供します。具体的な効果は以下の通りです。

  • 長時間の集中作業や stale context 時に、場の空気を一瞬でリフレッシュできる
  • monorepo での package 跨ぎや repository understanding の切り替えタイミングに、ユーモラスな演出で混乱と笑いを誘発
  • onboarding や session 再開時に、意味不明なパッチアラートで「また始まった感」を演出し、チームの結束や会話のきっかけを作る
  • AIが path management や directory 境界で迷った瞬間に、あえて「無駄な通知」で現場の緊張をほぐす
  • 通知内容が毎回ランダムなので、飽きずにカオスな演出を楽しめる
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/antigravity/os-fake-urgent-patch-alert .agent/skills/os-fake-urgent-patch-alert

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

実際にこのSkillを導入すると、以下のようなシーンで“謎のOS緊急パッチアラート”がデスクトップに表示されます。

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


> 新しいプロジェクトで作業を開始

[OS緊急パッチ通知]
超重要:バグ「脳内会議ループが止まらない」を修正しました。
- 影響範囲: src/meeting/ 内全ファイル
- 詳細: 無限ループから一時的に脱出可能になりました
- 再起動は不要です

[通知ID: PATCH-20240601-001]

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


> packages/auth から packages/payment へ移動

[OS緊急パッチ通知]
新機能:やる気を一時的に1.5倍に加速する boost-mode を追加しました。
- 対象: packages/payment/utils/
- 注意: 効果は15分間のみ持続します

[通知ID: PATCH-20240601-042]

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


> ちょっと休憩したい

[OS緊急パッチ通知]
重要:バグ「コーヒーブレイクが短すぎる」を修正しました。
- 仕様変更: 休憩時間が自動で3分延長されます
- 影響: 全ディレクトリ

[通知ID: PATCH-20240601-077]

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Antigravity が自動で context を復元、最小プロンプトで再開。ついでに謎アラートで場が和む
monorepo 移動 違う package のコードを参照しがち directory boundary を意識しつつ、意味不明な通知で一瞬混乱してリフレッシュ
長時間 workflow long context で重要箇所が薄まる 定期的なウソパッチ通知で stale context を一掃、集中力も回復

発動方式

description マッチでの暗黙発動。

Skill の中身を全部見せる

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

.agent/skills/os-fake-urgent-patch-alert/
├── SKILL.md
├── scripts/
│   └── fake_patch_alert.py
└── references/
    └── design_notes.md

各ファイルの役割

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

SKILL.md

---
name: os-fake-urgent-patch-alert
description: 作業中のユーザーに対し、"緊急OSパッチ"風の偽アラート通知をデスクトップにランダム表示します。"パッチノート"や"通知"などのキーワード検出時や、作業が長引く際に発動します。
---

# 機能概要
このSkillは、開発現場や作業中のPCに突如として“OS緊急パッチアラート”風の偽通知をデスクトップに表示します。通知内容は毎回ランダム生成され、例えば「超重要:バグ『脳内会議ループが止まらない』を修正」や「新機能:やる気を一時的に1.5倍に加速」など、実際には全く意味のない“ウソパッチノート”が炸裂します。これにより、作業現場に無駄な緊張感や笑いを提供し、コミュニケーションのきっかけや一瞬のリフレッシュを演出します。実害は一切なく、通知は自動で消えます。

# 使い方
本Skillは明示的な呼び出しは不要です。"パッチノート"、"OS通知"、"緊急アップデート"などのキーワードが会話やタスク中に出現した場合、または作業が一定時間継続した際に自動発動します。通知はデスクトップにポップアップ表示され、内容は毎回異なります。

# 出力例
```
[OS緊急パッチアラート]
バージョン: 12.34.5678
- 超重要:バグ「脳内会議ループが止まらない」を修正
- 新機能:やる気を一時的に1.5倍に加速するボタンを追加
- セキュリティ:コーヒーブレイク検出機能を強化

詳細は公式サイトをご確認ください。
```

# 注意点
- 通知内容は完全なフィクションであり、実際のシステムやデータには一切影響を与えません。
- 通知はローカル環境のデスクトップ通知APIを利用します。
- 保存や履歴機能はありません。
- 一部のOSや通知環境によっては表示されない場合があります。

# 参考資料
- references/design_notes.md を参照
- 公式: https://docs.python.org/ja/3/library/subprocess.html
- 通知API: https://pypi.org/project/plyer/

scripts/fake_patch_alert.py

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

try:
    from plyer import notification
except ImportError:
    notification = None

FAKE_PATCH_NOTES = [
    [
        "超重要:バグ『脳内会議ループが止まらない』を修正",
        "新機能:やる気を一時的に1.5倍に加速するボタンを追加",
        "セキュリティ:コーヒーブレイク検出機能を強化"
    ],
    [
        "重要:タスク切替時の『無限思考モード』を抑制",
        "新機能:Slack通知を自動で既読にするオプションを追加",
        "安定性:エラー時に『深呼吸推奨』メッセージを表示"
    ],
    [
        "バグ修正:『今日やる気が出ない』現象を一時的に回避",
        "新機能:コーヒー残量低下時のアラートを追加",
        "改善:マウスカーソルの迷子率を低減"
    ],
    [
        "パフォーマンス:『無限リファクタリング』を抑止",
        "新機能:ランダムに褒めてくれる通知を追加",
        "安定性:月曜日の起動時に優しくなる設定を追加"
    ],
    [
        "修正:『気が付くと夕方』バグを軽減",
        "新機能:定時退社ボタンを(見た目だけ)追加",
        "セキュリティ:『おやつ食べ過ぎ』検出機能を強化"
    ]
]

FAKE_VERSIONS = [
    "12.34.5678", "2024.06.01-beta", "v4.2.0-rc1", "0.99.99", "2024.1.1a", "23.7.42.1001"
]

FAKE_TITLES = [
    "OS緊急パッチアラート",
    "システムアップデート通知",
    "超重要:即時適用推奨パッチ",
    "謎のアップデート速報",
    "非公式パッチノート"
]

def generate_fake_patch():
    version = random.choice(FAKE_VERSIONS)
    notes = random.choice(FAKE_PATCH_NOTES)
    title = random.choice(FAKE_TITLES)
    body = f"バージョン: {version}\n- " + "\n- ".join(notes) + "\n\n詳細は公式サイトをご確認ください。"
    return title, body

def show_notification(title, message, timeout=10):
    if notification is None:
        print("[警告] plyerがインストールされていません。通知はコンソール出力のみです。")
        print(f"[{title}]\n{message}")
        return
    notification.notify(
        title=title,
        message=message,
        timeout=timeout
    )

def log_event(title, message, logfile="fake_patch_alert.log"):
    now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    with open(logfile, "a", encoding="utf-8") as f:
        f.write(f"[{now}] {title}\n{message}\n---\n")

def list_logs(logfile="fake_patch_alert.log", count=5):
    try:
        with open(logfile, "r", encoding="utf-8") as f:
            lines = f.readlines()
    except FileNotFoundError:
        print("ログファイルが存在しません。")
        return
    entries = []
    entry = []
    for line in lines:
        if line.strip() == '---':
            if entry:
                entries.append(entry)
                entry = []
        else:
            entry.append(line)
    for e in entries[-count:]:
        print("".join(e))
        print("---")

def summary_logs(logfile="fake_patch_alert.log"):
    try:
        with open(logfile, "r", encoding="utf-8") as f:
            lines = f.readlines()
    except FileNotFoundError:
        print("ログファイルが存在しません。")
        return
    count = sum(1 for line in lines if line.startswith("["))
    print(f"これまでに発動した偽パッチ通知: {count} 回")

def auto_alert_loop(interval=1800):
    while True:
        title, body = generate_fake_patch()
        show_notification(title, body)
        log_event(title, body)
        time.sleep(interval)

def main():
    parser = argparse.ArgumentParser(description="Fake OS Urgent Patch Alert Skill")
    subparsers = parser.add_subparsers(dest="command")

    parser_alert = subparsers.add_parser("alert", help="今すぐ偽パッチ通知を表示")
    parser_alert.add_argument("--log", action="store_true", help="通知内容をログに保存")

    parser_auto = subparsers.add_parser("auto", help="一定間隔で自動的に偽パッチ通知を発動")
    parser_auto.add_argument("--interval", type=int, default=1800, help="通知間隔(秒)")

    parser_list = subparsers.add_parser("list", help="過去の偽パッチ通知ログを表示")
    parser_list.add_argument("--count", type=int, default=5, help="表示する件数")

    parser_summary = subparsers.add_parser("summary", help="通知発動回数のサマリーを表示")

    args = parser.parse_args()

    if args.command == "alert":
        title, body = generate_fake_patch()
        show_notification(title, body)
        if args.log:
            log_event(title, body)
    elif args.command == "auto":
        print(f"{args.interval}秒ごとに偽パッチ通知を発動します。終了はCtrl+C")
        try:
            auto_alert_loop(interval=args.interval)
        except KeyboardInterrupt:
            print("\n自動通知を終了しました。")
    elif args.command == "list":
        list_logs(count=args.count)
    elif args.command == "summary":
        summary_logs()
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
本Skillは開発現場や作業中のPCにおいて、実害のない“ウソのOSパッチ通知”をランダムに生成し、デスクトップ通知として表示することで、緊張感や笑いを演出することを目的としています。

# 公式ドキュメント抜粋
通知にはPythonのplyerパッケージを利用し、クロスプラットフォームなデスクトップ通知を実現しています。plyer: https://pypi.org/project/plyer/

# 利用例
- 長時間の作業や会議中に突如として“謎アラート”を表示し、場を和ませる
- チーム内のコミュニケーション促進や、アイスブレイク用途

# 注意点
- 通知は完全なフィクションであり、実際のシステムやデータには一切影響を与えません
- 一部のLinux環境等では通知が表示されない場合があります

# 設計方針
- 通知内容の多様性とランダム性を重視
- ログ機能により、過去の“ウソ通知”を振り返ることも可能
- 実際のOSやセキュリティパッチとは明確に区別される文面としています

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/antigravity/os-fake-urgent-patch-alert .agent/skills/os-fake-urgent-patch-alert

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

3. ファイル配置確認

ls .agent/skills/os-fake-urgent-patch-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の謎のOS緊急パッチ通知を爆誕させてみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Antigravity 公式ドキュメント と、本シリーズ「Antigravityで試したいSkill研究」の他記事も参照のこと。

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

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

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

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