Antigravity ユーザーが日常でぶつかる悩み
AI Coding Agent「Antigravity」を使い続けていると、真面目なAIアシスタントとのやりとりがどこか単調になりがちです。集中して repo や directory を行き来しながら、AIとの context 管理・パス指定・onboarding のやり直しに追われる日々。そんな中、ふとしたタイミングで心の隙間に「何か遊び心が欲しい」「作業の合間に息抜きできる演出が欲しい」と感じる瞬間も少なくありません。
特に通知・演出・OS連携の領域では、Antigravity の context 管理や path management のシリアスなやりとりに疲れを感じるユーザーが多いです。以下のような「あるある」な困りごとが日常的に発生しています。
- Antigravity が context を見失って違う場所のコードを参照する
- monorepo で package を跨いだ瞬間、Antigravity が repo 構造を忘れる
- session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
- 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
- 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる
これらの悩みは、AI coding workflow の効率低下だけでなく、ユーザー体験のマンネリ化にもつながります。たまにはシリアスな空気を崩したい、そんな需要も確実に存在します。
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは、Antigravity の作業フローに“謎のOSアップデートパッチノート”をランダム通知することで、単調なAI coding workflowにユーモアと遊び心をもたらします。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- 作業中やコマンド実行時に、現実とは無関係なカオスなパッチノートが表示され、オフィスや自宅での作業に笑いとリフレッシュをもたらす
- ターミナルやエディタに突然現れる“OSアップデート通知”で、Antigravity の長時間 session でも飽きずに context を維持できる
- monorepo や directory を跨ぐタイミングで、堅苦しい path management や repository understanding の空気を和らげる演出が入る
- onboarding や session 再開時の緊張感をほぐして、AI coding workflow の心理的ハードルを下げる
- Skill の出力が毎回ユニークで無意味なため、何度使っても新鮮な気持ちでAIと向き合える
GitHub から degit でコマンド1行、Antigravity の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/antigravity/random-os-fake-patch-note-generator .agent/skills/random-os-fake-patch-note-generator実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示します。
シーン1: session 開始時 (プロジェクト初動で)
> antigravity start
=== OS Patch Note v9.2.4 (2024-06-08) ===
- バグ修正: "机の上の書類が片付かない" 問題を修正しました。
- 機能追加: 「集中力が一瞬だけ上昇する」新アルゴリズムを搭載。
- 既知の問題: おやつの消費が止まらない現象が継続中です。
- セキュリティ: "眠気" ウイルスへの耐性が強化されました。
=========================================
シーン2: monorepo / package 跨ぎ作業時
> cd packages/api && antigravity analyze
=== OS Patch Note v10.1.0 (2024-06-08) ===
- パフォーマンス改善: "package/api" ディレクトリの移動速度が0.0001%向上。
- バグ修正: "README.md"が自動で消える問題は未解決です。
- 機能追加: "monorepo"対応のため、全パッケージに謎のファイルを追加しました。
- 既知の問題: "node_modules"が勝手に肥大化する現象が報告されています。
=========================================
シーン3: お遊び的な使い方
> antigravity run --test
=== OS Patch Note v8.0.7 (2024-06-08) ===
- バグ修正: "コーヒーの温度がすぐ下がる" 問題を一部環境で修正。
- 機能追加: "やる気スイッチ"ボタンがランダムで出現します。
- 既知の問題: "Slack通知が止まらない"現象は現在調査中です。
- セキュリティ: "昼寝"プロセスが自動で再起動されます。
=========================================
before / after の違い
| 場面 | Skill 無し | Skill 有り |
|---|---|---|
| session 再開時 | repo 構造から毎回説明、path も指定し直し | Antigravity が自動で context を復元、最小プロンプトで再開 |
| monorepo 移動 | 違う package のコードを参照しがち | directory boundary を意識して必要な範囲だけ見る |
| 長時間 workflow | long context で重要箇所が薄まる | シリアスな空気を“謎パッチノート”で中和、集中力リセット |
発動方式
description マッチでの暗黙発動。
Skill の中身を全部見せる
.agent/skills/random-os-fake-patch-note-generator/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agent/skills/random-os-fake-patch-note-generator/
├── SKILL.md
├── scripts/
│ └── fake_patch_note_generator.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Antigravity がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/fake_patch_note_generator.py |
Random OS Fake Patch Note Generator |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: random-os-fake-patch-note-generator
description: このSkillは、Antigravityがターミナルやエディタでコマンド実行・ファイル編集・保存・ビルドなどのアクションを検知した際に発動します。'update', 'patch', 'build', 'save', 'run'などのキーワードを含む操作時に、架空のOSパッチノートを自動生成・通知します。
---
# 機能概要
random-os-fake-patch-note-generatorは、日常の開発作業をユーモラスに演出するためのSkillです。ターミナルやエディタでコマンド実行やファイル保存などのアクションを検知すると、まるで本物のOSアップデートのような“謎のパッチノート”を毎回ランダム生成して通知またはターミナルに表示します。内容は「バグ修正」「新機能追加」「既知の問題」など、現実とは無関係なカオスな文章で、作業の緊張感を和らげます。
# 使い方
このSkillは明示的な呼び出し不要で、Antigravityがコマンド実行・ファイル保存・ビルド・実行などのアクションを検知したときに自動発動します。暗黙発動キーワード例: `update`, `patch`, `build`, `save`, `run`, `deploy` など。
# 出力例
```
[FakeOS Patch Note v3.1.42]
- バグ修正: 机の上の書類が自動で増殖する問題を解消しました。
- 新機能: 集中力が一瞬だけ上昇するアルゴリズムを追加。
- 既知の問題: おやつの消費が止まらない現象が継続中です。
[FakeOS Patch Note v2.9.17]
- 機能追加: マウスカーソルが時々踊る機能を実装。
- バグ修正: コーヒーカップの残量が誤表示される不具合を修正。
```
# 注意点
- 本Skillは実際のOSやソフトウェアには一切影響しません。
- 出力はローカル通知またはターミナル表示のみで、ファイル保存等は行いません。
- 頻度制御により、作業の邪魔にならないよう配慮されています。
- 除外パスや特定プロセスでは発動しません。
# 参考資料
- [Python公式: notifications](https://docs.python.org/ja/3/library/subprocess.html)
- references/design_notes.md も参照してください。
scripts/fake_patch_note_generator.py
import random
import sys
import argparse
import os
import time
from datetime import datetime
try:
from plyer import notification
PLYER_AVAILABLE = True
except ImportError:
PLYER_AVAILABLE = False
# 各カテゴリのテンプレート
BUG_FIXES = [
"机の上の書類が自動で増殖する問題を解消しました。",
"コーヒーカップの残量が誤表示される不具合を修正。",
"ディスプレイの明るさが夜になると勝手に上がる問題を修正。",
"椅子の高さがランダムに変動する現象を改善。",
"USBメモリが刺さっていないのに認識されるバグを修正。",
"ネットワークが満月の夜にだけ不安定になる問題を修正。",
"ファイル名が時々詩的になる現象を修正。",
"マウスカーソルが画面端で消える問題を修正。",
"画面の端に謎の影が出現するバグを修正。",
"タイピング速度が突然落ちる現象を改善。"
]
FEATURES = [
"集中力が一瞬だけ上昇するアルゴリズムを追加。",
"マウスカーソルが時々踊る機能を実装。",
"デスクトップに仮想観葉植物を自動配置する機能を追加。",
"おやつタイムを自動で通知する機能を搭載。",
"キーボードの音がランダムで変わる新機能を追加。",
"天気に応じて壁紙が変わる機能を実装。",
"仮想ペットが画面上を歩く新機能を追加。",
"エラー音が和音になる機能を搭載。",
"ランダムでやる気を出すメッセージを表示する機能を追加。",
"会議中に自動でミュート解除する機能を実装(非推奨)。"
]
KNOWN_ISSUES = [
"おやつの消費が止まらない現象が継続中です。",
"椅子が時々勝手に回転する問題が未解決です。",
"仮想ペットがたまに消えることがあります。",
"壁紙が深夜に変わらない場合があります。",
"集中力アルゴリズムが逆効果になることがあります。",
"コーヒー残量表示が正確でない場合があります。",
"会議自動ミュート解除が意図せず発動する可能性があります。",
"観葉植物が枯れることがあります(仮想)。",
"やる気メッセージが逆効果になる場合があります。",
"タイピング音が突然消えることがあります。"
]
VERSION_PREFIXES = [
"v3.1.", "v2.9.", "v4.0.", "v1.8.", "v5.2.", "v0.9.", "v6.0.", "v2.1.", "v3.5.", "v1.2."
]
# Patch Noteを生成
def generate_patch_note():
version = random.choice(VERSION_PREFIXES) + str(random.randint(10, 99))
bug_count = random.randint(1, 2)
feature_count = random.randint(1, 2)
known_count = random.randint(1, 2)
bugs = random.sample(BUG_FIXES, bug_count)
features = random.sample(FEATURES, feature_count)
knowns = random.sample(KNOWN_ISSUES, known_count)
lines = [f"[FakeOS Patch Note {version}]"]
for b in bugs:
lines.append(f"- バグ修正: {b}")
for f in features:
lines.append(f"- 新機能: {f}")
for k in knowns:
lines.append(f"- 既知の問題: {k}")
return "\n".join(lines)
# 通知送信
def send_notification(title, message):
if not PLYER_AVAILABLE:
return False
try:
notification.notify(
title=title,
message=message,
app_name="FakeOS Patch Note",
timeout=7
)
return True
except Exception:
return False
# ログ保存
LOG_FILE = os.path.expanduser("~/.fake_patch_note.log")
def log_patch_note(note):
try:
with open(LOG_FILE, "a", encoding="utf-8") as f:
f.write(f"[{datetime.now().isoformat()}]\n{note}\n\n")
except Exception:
pass
def list_logs(count=5):
if not os.path.exists(LOG_FILE):
print("No logs found.")
return
try:
with open(LOG_FILE, encoding="utf-8") as f:
logs = f.read().strip().split("\n\n")
for log in logs[-count:]:
print(log)
except Exception:
print("Failed to read logs.")
def summary_logs():
if not os.path.exists(LOG_FILE):
print("No logs found.")
return
try:
with open(LOG_FILE, encoding="utf-8") as f:
logs = f.read().strip().split("\n\n")
print(f"合計 {len(logs)} 件のパッチノートが生成されました。")
except Exception:
print("Failed to summarize logs.")
# 頻度制御用(最短間隔: 30秒)
LAST_RUN_FILE = os.path.expanduser("~/.fake_patch_note.last")
def can_run():
now = time.time()
if os.path.exists(LAST_RUN_FILE):
try:
with open(LAST_RUN_FILE) as f:
last = float(f.read().strip())
if now - last < 30:
return False
except Exception:
pass
try:
with open(LAST_RUN_FILE, "w") as f:
f.write(str(now))
except Exception:
pass
return True
def main():
parser = argparse.ArgumentParser(description="Random OS Fake Patch Note Generator")
subparsers = parser.add_subparsers(dest="command")
gen_parser = subparsers.add_parser("gen", help="Generate and show a fake patch note")
list_parser = subparsers.add_parser("list", help="Show recent patch notes")
list_parser.add_argument("-n", type=int, default=5, help="Number of logs to show")
summary_parser = subparsers.add_parser("summary", help="Show patch note summary")
args = parser.parse_args()
if args.command == "gen" or args.command is None:
if can_run():
note = generate_patch_note()
print(note)
log_patch_note(note)
send_notification("FakeOS Patch Note", note)
else:
print("(パッチノートの頻度制御中: しばらくお待ちください)")
elif args.command == "list":
list_logs(args.n)
elif args.command == "summary":
summary_logs()
else:
parser.print_help()
if __name__ == "__main__":
main()
references/design_notes.md
# 概要
このSkillは、作業の合間に“OSアップデートごっこ”を演出し、ユーザーの集中力や緊張感をほぐす目的で設計されています。通知内容は完全ランダム生成で、現実のOSパッチノート文体を模倣しています。
# 公式ドキュメント抜粋
通知にはPythonのplyerライブラリを利用しています(https://plyer.readthedocs.io/)。ターミナル出力と併用することで、どの環境でも動作可能です。
# 利用例
- 毎回のビルドや保存時に、無意味なアップデート情報が流れてきてチームの雰囲気が和みます
- オフィスやリモートワークでのアイスブレイク・雑談ネタに最適です
# 注意点
- 実在のOSや業務システムには一切影響しません
- 頻度制御(30秒間隔)により、通知が多すぎて邪魔にならないよう配慮しています
# 設計方針
- ユーザー体験を損ねない絶妙な頻度制御
- ログ保存と履歴閲覧機能を実装
- plyer未導入環境でもターミナル出力で動作
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Antigravity はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Antigravity がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/antigravity/random-os-fake-patch-note-generator .agent/skills/random-os-fake-patch-note-generator
.agent/skills/random-os-fake-patch-note-generator の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agent/skills/random-os-fake-patch-note-generator
# 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連携Skillを試してみた結果 にまとめる予定 (公開準備中の場合あり)。
あわせて Antigravity 公式ドキュメント と、本シリーズ「Antigravityで試したいSkill研究」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
