Antigravityで謎のパッチ通知を自動化して作業に遊び心を加える方法

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

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

Antigravity を日々使っていると、AI coding workflow の中でふとした瞬間に「もうちょっと遊び心が欲しい」「集中しすぎて頭が固くなってきた」と感じることが少なくありません。特に monorepo の巨大な repository を扱う現場では、context や path management に神経を使いすぎて、気分転換が難しい状況に陥りがちです。

さらに、通知や演出が淡白なため、長時間作業の合間に「何か刺激がほしい」と思う瞬間も。そんな時、OSのパッチノートのような“謎の通知”が不意に現れたら、ちょっとした笑いや混乱が生まれ、開発の空気感が一変するかもしれません。

  • Antigravity が context を見失って違う場所のコードを参照する
  • monorepo で package を跨いだ瞬間、Antigravity が repo 構造を忘れる
  • session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
  • 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
  • 通知や演出が単調で、開発現場の空気が張りつめがち

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

一言サマリ: このスキルは、開発現場に突如“謎のOSパッチノート通知”を炸裂させ、Antigravity の日常に予測不能な笑いと刺激をもたらします。

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

  • 作業中に突然現れる“OS公式・怪しすぎるパッチノート”が、集中しすぎた workflow に一瞬のゆるみと笑いを提供
  • 長時間の session や repository understanding の繰り返しで固くなった思考を、ユーモアでリフレッシュ
  • onboarding や path management の合間に、不意打ちで現実と虚構の境界を揺さぶる演出を体験できる
  • monorepo で directory を跨ぐストレスフルな瞬間にも、謎の通知が空気を和ませる
  • Antigravity の context メモリや long context 問題で煮詰まった時、頭をリセットするきっかけになる
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/antigravity/random-os-fake-mysterious-patch-notes .agent/skills/random-os-fake-mysterious-patch-notes

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

使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示す。Skill が返す出力は推測だが、現実的なフォーマット・現実的な長さで書く。

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


> プロジェクトの初期セットアップを手伝って

[OS Patch Notes v12.4.7]
新機能: Alt+F12 で“未来のバグ”を先読みできます
改善: src/utils/ フォルダの空気感が微増しました
既知の問題: まれに README.md が詩的になります
その他: package.json の依存関係が自動で踊り出すことがあります

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


> packages/api/ から packages/web/ に切り替えて

[OS Patch Notes v13.0.1]
新機能: ctrl+shift+Z で“やり直しのやり直し”が可能に
改善: packages/web/components/Button の押し心地が1.5%向上
既知の問題: packages/api/utils で幸運が訪れる場合があります
その他: monorepo 構造が時々夢を見ます

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


> なんか面白いこと起きない?

[OS Patch Notes v99.42.0]
新機能: Spaceキーで“月面ジャンプ”ができるようになりました
改善: .env ファイルの秘密度を強化
既知の問題: たまに context が哲学的な意味を持ちます
その他: directory 構造がシュレディンガー化することがあります

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Antigravity が自動で context を復元、最小プロンプトで再開
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る
長時間 workflow long context で重要箇所が薄まる 不意打ちの通知で気分転換、context の入れ替えもスムーズ

発動方式

description マッチでの暗黙発動。

Skill の中身を全部見せる

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

.agent/skills/random-os-fake-mysterious-patch-notes/
├── SKILL.md
├── scripts/
│   └── random_os_patch_notes.py
└── references/
    └── design_notes.md

各ファイルの役割

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

SKILL.md

---
name: random-os-fake-mysterious-patch-notes
description: 作業中やビルド、デバッグ、コミットなどのタイミングで、OSパッチノート風の謎めいた通知を自動生成・表示したい場合に発動します。キーワード: パッチノート, 通知, OS, 変更履歴, バグ修正。
---

# 機能概要
このSkillは、現実には存在しないOSの“謎のパッチノート”通知を、作業中に不意打ちで表示します。パッチノート内容は毎回ランダム生成され、実在しない新機能や不可解なバグ修正、意味深な既知の問題などが混在。開発者の集中を一瞬だけ攪乱し、作業環境にユーモアと意外性をもたらします。現実と虚構の境界が曖昧になりがちな長時間作業時にも、ちょっとした笑いとリフレッシュを提供します。

# 使い方
このSkillは明示的な呼び出しは不要です。Antigravity内で「パッチノート」「OS更新」「通知」「バグ修正」「新機能」などのキーワードや、ビルド・デバッグ・コミット等のイベントが検知されると自動的に発動します。通知はターミナル出力またはデスクトップ通知として表示されます。

# 出力例
```
[OS Patch Notes v13.4.7]
新機能: Alt+Shiftで未来の自分と会話できるようになりました。
改善: スペースキーの跳躍力を微増。
既知の問題: まれにマウスカーソルが消えたまま戻ってきません。
バグ修正: 記憶の断片が稀に漏れ出る現象を修正。
---
```

# 注意点
- 実際のOSやアプリの挙動を変更するものではありません。
- ログや履歴はローカルの一時ファイルに保存されますが、個人情報は含みません。
- 実在しない機能やバグ修正が含まれるため、業務用途で混同しないようご注意ください。
- 通知頻度や内容はカスタマイズ可能です。

# 参考資料
- references/design_notes.md
- https://docs.python.org/3/library/random.html
- https://docs.python.org/3/library/subprocess.html

scripts/random_os_patch_notes.py

import random
import argparse
import datetime
import os
import sys
import json
import platform
import subprocess

PATCH_NOTES_FILE = os.path.expanduser('~/.random_os_patch_notes.log')

NEW_FEATURES = [
    "Altキーで未来が見えるようになりました。",
    "Ctrl+Zで昨日に戻れるようになりました。",
    "ターミナルが詩を詠むようになりました。",
    "CapsLockで現実逃避モードが起動します。",
    "Alt+Shiftで未来の自分と会話できます。",
    "タスクバーが意思を持ち始めました。",
    "ウィンドウが気分によって色を変えます。",
    "F5で運勢が表示されるようになりました。",
    "ファイル名を思念で変更できます。",
    "コマンド入力時にヒントが謎めいて表示されます。"
]

IMPROVEMENTS = [
    "スペースキーの跳躍力を微増。",
    "ウィンドウの閉じる速度を1.2倍に最適化。",
    "通知音がたまにメロディになります。",
    "スクロールの滑らかさを曖昧に調整。",
    "バッテリー残量表示が哲学的になりました。",
    "マウスカーソルの気分を尊重するようになりました。",
    "クリップボードの記憶力を強化。",
    "ログイン画面の謎が深まりました。",
    "時計の進み方が気まぐれになりました。",
    "ウィンドウスナップの精度を微調整。"
]

KNOWN_ISSUES = [
    "たまに幸運が訪れます。",
    "まれにマウスカーソルが消えたまま戻りません。",
    "稀にウィンドウが自我を持ちます。",
    "ごく稀に全てがうまくいきます。",
    "時間が逆行する場合があります。",
    "ログイン時に現実感が薄れます。",
    "一部ユーザーで幻聴が聞こえる報告あり。",
    "ファイルが自己主張を始めることがあります。",
    "通知が詩的になる場合があります。",
    "設定画面が哲学的質問を投げかけることがあります。"
]

BUG_FIXES = [
    "記憶の断片が稀に漏れ出る現象を修正。",
    "ウィンドウが突然踊り出す問題を修正。",
    "スクリーンセーバーが夢を見るバグを修正。",
    "ファイル名が詩になる現象を修正。",
    "ターミナルが沈黙するバグを修正。",
    "マウスが自発的に動く現象を修正。",
    "通知が未来の出来事を伝える問題を修正。",
    "カレンダーが13月を表示する不具合を修正。",
    "ログイン音が無音になるバグを修正。",
    "一部のウィンドウが哲学的になる問題を修正。"
]


def generate_patch_notes():
    version = f"v{random.randint(10, 15)}.{random.randint(0,9)}.{random.randint(0,9)}"
    notes = {
        "version": version,
        "date": datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
        "new_features": random.sample(NEW_FEATURES, k=1),
        "improvements": random.sample(IMPROVEMENTS, k=1),
        "known_issues": random.sample(KNOWN_ISSUES, k=1),
        "bug_fixes": random.sample(BUG_FIXES, k=1)
    }
    return notes


def format_patch_notes(notes):
    lines = [f"[OS Patch Notes {notes['version']}]",]
    if notes['new_features']:
        for nf in notes['new_features']:
            lines.append(f"新機能: {nf}")
    if notes['improvements']:
        for imp in notes['improvements']:
            lines.append(f"改善: {imp}")
    if notes['known_issues']:
        for ki in notes['known_issues']:
            lines.append(f"既知の問題: {ki}")
    if notes['bug_fixes']:
        for bf in notes['bug_fixes']:
            lines.append(f"バグ修正: {bf}")
    lines.append("---")
    return '\n'.join(lines)


def notify_desktop(message):
    sys_platform = platform.system()
    try:
        if sys_platform == "Darwin":  # macOS
            subprocess.run([
                "osascript", "-e",
                f'display notification "{message}" with title "謎のOSパッチノート"'
            ], check=True)
        elif sys_platform == "Linux":
            subprocess.run([
                "notify-send", "謎のOSパッチノート", message], check=True)
        elif sys_platform == "Windows":
            import ctypes
            ctypes.windll.user32.MessageBoxW(0, message, "謎のOSパッチノート", 1)
        else:
            print("[通知未対応OS]", message)
    except Exception as e:
        print(f"[通知エラー]: {e}")


def save_patch_notes(notes):
    try:
        with open(PATCH_NOTES_FILE, 'a', encoding='utf-8') as f:
            f.write(json.dumps(notes, ensure_ascii=False) + '\n')
    except Exception as e:
        print(f"[ファイル保存エラー]: {e}")


def list_patch_notes(limit=10):
    notes_list = []
    if not os.path.exists(PATCH_NOTES_FILE):
        print("No patch notes found.")
        return
    try:
        with open(PATCH_NOTES_FILE, 'r', encoding='utf-8') as f:
            for line in f.readlines()[-limit:]:
                try:
                    notes = json.loads(line.strip())
                    notes_list.append(notes)
                except Exception:
                    continue
        for notes in notes_list:
            print(format_patch_notes(notes))
    except Exception as e:
        print(f"[履歴取得エラー]: {e}")


def summary_patch_notes():
    if not os.path.exists(PATCH_NOTES_FILE):
        print("No patch notes found.")
        return
    try:
        total = 0
        features = set()
        improvements = set()
        issues = set()
        fixes = set()
        with open(PATCH_NOTES_FILE, 'r', encoding='utf-8') as f:
            for line in f:
                try:
                    notes = json.loads(line.strip())
                    total += 1
                    features.update(notes.get('new_features', []))
                    improvements.update(notes.get('improvements', []))
                    issues.update(notes.get('known_issues', []))
                    fixes.update(notes.get('bug_fixes', []))
                except Exception:
                    continue
        print(f"合計パッチノート数: {total}")
        print(f"新機能ユニーク数: {len(features)}")
        print(f"改善ユニーク数: {len(improvements)}")
        print(f"既知の問題ユニーク数: {len(issues)}")
        print(f"バグ修正ユニーク数: {len(fixes)}")
    except Exception as e:
        print(f"[サマリー取得エラー]: {e}")


def main():
    parser = argparse.ArgumentParser(description='謎のOSパッチノート通知ジェネレータ')
    subparsers = parser.add_subparsers(dest='command')

    parser_log = subparsers.add_parser('log', help='新しいパッチノートを生成し通知')
    parser_list = subparsers.add_parser('list', help='パッチノート履歴を表示')
    parser_list.add_argument('--limit', type=int, default=5, help='表示件数')
    parser_summary = subparsers.add_parser('summary', help='パッチノート履歴のサマリー')

    args = parser.parse_args()

    if args.command == 'log' or args.command is None:
        notes = generate_patch_notes()
        formatted = format_patch_notes(notes)
        print(formatted)
        notify_desktop(formatted.replace('\n', ' '))
        save_patch_notes(notes)
    elif args.command == 'list':
        list_patch_notes(limit=args.limit)
    elif args.command == 'summary':
        summary_patch_notes()
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
このSkillは、作業環境に“謎のOS公式パッチノート”をランダム生成・通知することで、開発者に一瞬の混乱と笑いを提供します。現実には存在しない機能やバグ修正、意味深な既知の問題など、毎回異なる内容を自動生成します。

# 公式ドキュメント抜粋
Pythonの標準ライブラリ(random, argparse, subprocess, json)を活用し、クロスプラットフォームで通知を行います。通知APIはmacOS(osascript)、Linux(notify-send)、Windows(MessageBoxW)に対応しています。

# 利用例
- 長時間のコーディングやビルド待ちの合間に、ターミナルやデスクトップ上で謎のパッチノート通知が突然表示される。
- チーム開発で“謎の更新”を話題にしてリフレッシュ。

# 注意点
- 実際のシステムやアプリに影響はありません。
- 通知内容は完全にフィクションであり、業務用途の履歴管理などには利用できません。

# 設計方針
「不意打ち感」と「毎回異なる内容」を重視し、通知の多様性と意外性を担保。履歴やサマリー機能も備え、過去の“謎パッチ”を振り返ることも可能です。

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/antigravity/random-os-fake-mysterious-patch-notes .agent/skills/random-os-fake-mysterious-patch-notes

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

3. ファイル配置確認

ls .agent/skills/random-os-fake-mysterious-patch-notes
# 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 でも有効か?
  • プロジェクト指示との連携をどう組み立てるか?
  • OSパッチノート風の通知内容が毎回異なることを確認できるか?
  • 実在しない機能・バグ修正が混在していることを検証できるか?
  • 通知タイミングの自然さと不意打ち感が本当に得られるか?

実際に Antigravity で試した検証ログは Antigravityで謎のOSパッチノート通知を炸裂させてみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Antigravity 公式ドキュメント と、本シリーズ「Antigravityで試したいSkill研究」の他記事も参照のこと。

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

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

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

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