Antigravity ユーザーが日常でぶつかる悩み
Antigravity を日々使い込んでいると、AI coding workflow の合間にふと「この静けさ、地味にしんどい…」と感じる瞬間がある。特に長時間の repository understanding や、monorepo の directory を跨いで context を維持し続ける作業では、淡々としたやりとりに疲れがたまりやすい。通知や演出が一切ないため、集中力が切れた時のリカバリも難しい。
また、Antigravity の path management や memory の都合で、作業が単調になったり、気分転換できる瞬間が少ないことも。こうした「静かな孤独」を感じるユーザーは多い。
- AIとのやりとりが淡々と続き、repository 作業中に気分転換のきっかけがない
- 長時間の onboarding や context 再構築で集中が切れやすい
- monorepo で directory を跨ぐたびに同じ説明を繰り返し、作業が機械的になる
- Antigravity の通知や演出が皆無で、workflow に遊び心や「今ここで頑張れ!」という励ましが欲しくなる
- AI coding workflow の合間に、気分を切り替える“何か”が欲しいが、既存の Skill では物足りない
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは、Antigravity の作業中に突如「IT英雄召喚」風の通知をランダムに発生させ、孤独な開発現場に謎の勇気と遊び心を届ける Skill。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- 長時間の repository understanding や monorepo 作業の合間に、突発的な「OS公式・IT英雄召喚」通知が発生し、workflow の気分転換になる
- Antigravity の context や memory 管理に疲れたタイミングで、ランダムな演出が入り、作業にユーモアと活力をもたらす
- directory や path management に関する単調なやりとりの中で、思わず笑ってしまう“エンタメ枠”として定番化
- AI coding workflow の「静寂」を破る演出で、onboarding や session 再開時の気持ちをリセットできる
- SKILL.md で定義された description にマッチするだけで自動発動し、ユーザーの手間なく楽しめる
GitHub から degit でコマンド1行、Antigravity の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/antigravity/random-os-fake-it-hero-summon-notifier .agent/skills/random-os-fake-it-hero-summon-notifier実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示す。Skill が返す出力は推測だが、現実的なフォーマット・現実的な長さで書く。
シーン1: session 開始時 (プロジェクト初動で)
> プロジェクトを解析して、主要な directory 構造を把握したい
[Antigravity Notification]
=== IT英雄召喚 ===
伝説のデバッグ勇者「バグバスター・ミナト」が現れた!
「本日も repo の闇を切り裂く時。directory: /src/core から冒険開始!」
あなたのプロジェクトに新たな風が吹き込まれました。
シーン2: monorepo / package 跨ぎ作業時
> packages/frontend から packages/backend へ context を切り替えたい
[Antigravity Notification]
=== IT英雄召喚 ===
「コマンド使いのジョン」が monorepo の境界を突破!
「packages/backend で新たな戦いが始まる。repository understanding の力を解放せよ!」
AI coding workflow に勇気のバフが付与されました。
シーン3: お遊び的な使い方
> 今日はやる気が出ない。誰か助けて
[Antigravity Notification]
=== IT英雄召喚 ===
「OS公式サポーター・リナックス先輩」召喚!
「どんなバグも一緒に乗り越えよう。memory が尽きてもあきらめるな!」
謎の応援メッセージがあなたを包みました。
before / after の違い
| 場面 | Skill 無し | Skill 有り |
|---|---|---|
| session 再開時 | repo 構造から毎回説明、path も指定し直し | Antigravity が自動で context を復元、最小プロンプトで再開 |
| monorepo 移動 | 違う package のコードを参照しがち | directory boundary を意識して必要な範囲だけ見る |
| 長時間 workflow | long context で重要箇所が薄まる | 突発的な通知で気分を切り替え、集中力を維持しやすい |
発動方式
description マッチでの暗黙発動。
Skill の中身を全部見せる
.agent/skills/random-os-fake-it-hero-summon-notifier/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agent/skills/random-os-fake-it-hero-summon-notifier/
├── SKILL.md
├── scripts/
│ └── hero_summon_notifier.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Antigravity がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/hero_summon_notifier.py |
謎のOS英雄召喚通知スクリプト |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: random-os-fake-it-hero-summon-notifier
description: このSkillは、作業やコーディングの合間に「英雄召喚」風の通知をランダムなタイミングで表示します。triggerType: always で、通知・演出・OS連携系のキーワード(例: 孤独, モチベーション, エンタメ, 通知, OS, 勇者, 英雄, バグ, デバッグ, 召喚)を含む状況で発動します。
---
# 機能概要
random-os-fake-it-hero-summon-notifierは、作業中に突如として“OS公式”や“IT英雄”が召喚されたかのような通知をデスクトップやターミナルへ表示するエンタメ系Skillです。通知内容は毎回ランダムで、架空のデバッグ勇者や伝説のコマンド使いが現れ、あなたの作業を(精神的に)支援します。孤独な開発や長時間の作業に謎の勇気と笑いを提供し、気分転換やモチベーション維持に役立ちます。
# 使い方
このSkillは自動発動型です。特定の明示呼び出しは不要で、triggerType: always のため、エージェントが「通知」「英雄」「バグ」「孤独」などのキーワードや状況を検知した際に自動的に発動します。ターミナルまたはデスクトップ通知として演出されます。
# 出力例
```
[OS通知] 伝説のデバッグ勇者「タカシ」が参上しました!
[OS通知] バグ討伐の時!“コマンド使いのジョン”が出動します。
[OS通知] 謎のOS公式「バーチャル管理者」があなたの作業を見守っています。
[OS通知] 伝説のリファクタリング忍者「サクラ」が召喚されました。
[OS通知] 今こそバグ退治の時!“スクリプト魔術師”が現れた!
```
# 注意点
- 通知は完全にエンタメ目的であり、作業データや環境には一切影響を与えません。
- ローカルに通知履歴や個人情報は保存されません。
- 通知内容は毎回ランダム生成され、繰り返し出現もあります。
- OSの通知機能(Linux: notify-send, macOS: osascript, Windows: Toast通知)を利用します。
# 参考資料
- references/design_notes.md
- https://docs.python.org/ja/3/library/random.html
- https://github.com/jithurjacob/Windows-10-Toast-Notifications
- https://wiki.archlinux.jp/index.php/Notify-send
scripts/hero_summon_notifier.py
import sys
import os
import random
import time
import argparse
import platform
import subprocess
from datetime import datetime, timedelta
HEROES = [
"伝説のデバッグ勇者『タカシ』",
"コマンド使いのジョン",
"リファクタリング忍者『サクラ』",
"バーチャル管理者",
"スクリプト魔術師",
"バグハンター『リナ』",
"メモリマスター『ケン』",
"パッチの精霊『ミユキ』",
"ネットワーク賢者『アレックス』",
"シェルの魔王『カズ』"
]
MESSAGES = [
"{hero}が参上しました!",
"バグ討伐の時!“{hero}”が出動します。",
"謎のOS公式「{hero}」があなたの作業を見守っています。",
"{hero}が召喚されました。",
"今こそバグ退治の時!“{hero}”が現れた!",
"{hero}があなたのコードに加護を与えます。",
"{hero}がログを監視中...",
"{hero}が未解決のバグを追跡中です。",
"{hero}が新たな知恵を授けに来ました。",
"{hero}がターミナルに降臨!"
]
HISTORY_FILE = os.path.expanduser("~/.hero_summon_history.log")
# 通知をOSごとに送る
def send_notification(message):
system = platform.system()
try:
if system == "Linux":
subprocess.run(["notify-send", message], check=True)
elif system == "Darwin":
script = f'display notification "{message}" with title "OS通知"'
subprocess.run(["osascript", "-e", script], check=True)
elif system == "Windows":
try:
from win10toast import ToastNotifier
toaster = ToastNotifier()
toaster.show_toast("OS通知", message, duration=5)
except ImportError:
# Fallback: print to console
print("[OS通知]", message)
else:
print("[OS通知]", message)
except Exception as e:
print(f"[通知失敗] {e}\n[OS通知] {message}")
# 英雄召喚メッセージ生成
def generate_message():
hero = random.choice(HEROES)
msg_template = random.choice(MESSAGES)
return msg_template.format(hero=hero)
# 履歴保存
def log_history(message):
with open(HISTORY_FILE, "a", encoding="utf-8") as f:
f.write(f"{datetime.now().isoformat()}\t{message}\n")
# 履歴表示
def show_history(limit=10):
if not os.path.exists(HISTORY_FILE):
print("履歴はありません。")
return
with open(HISTORY_FILE, encoding="utf-8") as f:
lines = f.readlines()[-limit:]
for line in lines:
print(line.strip())
# 履歴要約
def summary_history():
if not os.path.exists(HISTORY_FILE):
print("履歴はありません。")
return
count = 0
hero_count = {}
with open(HISTORY_FILE, encoding="utf-8") as f:
for line in f:
count += 1
for hero in HEROES:
if hero in line:
hero_count[hero] = hero_count.get(hero, 0) + 1
print(f"合計通知数: {count}")
for hero, c in sorted(hero_count.items(), key=lambda x: -x[1]):
print(f"{hero}: {c}回")
# ランダムな間隔で通知を送る
def random_notify_loop(min_sec=600, max_sec=3600, once=False):
while True:
message = generate_message()
send_notification(message)
log_history(message)
if once:
break
wait_sec = random.randint(min_sec, max_sec)
time.sleep(wait_sec)
def main():
parser = argparse.ArgumentParser(description="謎のOS英雄召喚通知スクリプト")
subparsers = parser.add_subparsers(dest="command")
notify_parser = subparsers.add_parser("notify", help="今すぐ英雄召喚通知を1回だけ送る")
loop_parser = subparsers.add_parser("loop", help="ランダムな間隔で通知を送り続ける")
loop_parser.add_argument("--min", type=int, default=600, help="通知間隔の最小秒数 (デフォルト600)")
loop_parser.add_argument("--max", type=int, default=3600, help="通知間隔の最大秒数 (デフォルト3600)")
log_parser = subparsers.add_parser("log", help="通知履歴を表示する")
log_parser.add_argument("--limit", type=int, default=10, help="表示件数 (デフォルト10)")
summary_parser = subparsers.add_parser("summary", help="通知履歴の要約を表示する")
args = parser.parse_args()
if args.command == "notify":
message = generate_message()
send_notification(message)
log_history(message)
elif args.command == "loop":
try:
random_notify_loop(min_sec=args.min, max_sec=args.max)
except KeyboardInterrupt:
print("\n通知ループを終了します。")
elif args.command == "log":
show_history(limit=args.limit)
elif args.command == "summary":
summary_history()
else:
parser.print_help()
if __name__ == "__main__":
main()
references/design_notes.md
# 概要
このSkillは、作業中の孤独感やマンネリを打破するため、OS通知やターミナルメッセージとして“英雄召喚”を演出します。実用性よりエンタメ性・気分転換を重視した設計です。
# 公式ドキュメント抜粋
- Python random: https://docs.python.org/ja/3/library/random.html
- notify-send (Linux): https://wiki.archlinux.jp/index.php/Notify-send
- osascript (macOS): https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/
- win10toast (Windows): https://github.com/jithurjacob/Windows-10-Toast-Notifications
# 利用例
- 長時間のコーディングやバグ修正時に、突発的な通知で気分転換
- チーム開発での“ネタ”演出やリモートワークの孤独対策
# 注意点
- 通知は完全な演出目的で、作業データや環境を変更しません
- 履歴はユーザーホーム配下にのみ保存され、個人情報は一切記録しません
# 設計方針
- OSごとに最適な通知APIを自動選択
- メッセージ・英雄名は拡張しやすい構造
- CLIサブコマンドで履歴・要約も確認可能
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Antigravity はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Antigravity がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/antigravity/random-os-fake-it-hero-summon-notifier .agent/skills/random-os-fake-it-hero-summon-notifier
.agent/skills/random-os-fake-it-hero-summon-notifier の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agent/skills/random-os-fake-it-hero-summon-notifier
# 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で謎のIT英雄召喚通知を体験してみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Antigravity 公式ドキュメント と、本シリーズ「Antigravityで試したいSkill研究」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
