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 問題で煮詰まった時、頭をリセットするきっかけになる
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記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
