Antigravity ユーザーが日常でぶつかる悩み
Antigravity を使った AI coding workflow の現場では、作業効率や集中力を保つために context や repository understanding が重要視されます。しかし、日々の運用では「通知・演出・OS連携」周りで意外なストレスや単調さを感じる瞬間が少なくありません。特に長時間作業や monorepo 管理下では、以下のような「あるある」に直面しがちです。
- Antigravity が context を見失って違う場所のコードを参照する
- monorepo で package を跨いだ瞬間、Antigravity が repo 構造を忘れる
- session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
- 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
- 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる
また、作業環境が静かすぎると集中力が切れたり、リフレッシュのタイミングを逃しやすいという悩みも。通知や演出が味気なく、ちょっとした遊び心がほしいという声もよく聞かれます。
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは、作業中に突如として日本史パロディの幕末カウントダウン通知を炸裂させ、Antigravity の単調な通知体験に強烈な遊び心を注入します。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- AI coding workflow の中に、予測不能でクスッと笑える演出が差し込まれ、作業の単調さを打破できる
- 長時間の repository understanding や path management の合間に、フェイクな歴史アラートで気分転換できる
- session 再開や monorepo 横断のタイミングで、無意味だけど印象的な通知が context 切り替えの目印になる
- OS連携によるデスクトップ・ターミナル通知が、チーム内の話題や onboarding のアイスブレイクになる
- Skill の導入だけで、Antigravity の通知体験に「意味不明な面白さ」を手軽に追加できる
GitHub から degit でコマンド1行、Antigravity の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/antigravity/os-fake-bakumatsu-countdown-alert .agent/skills/os-fake-bakumatsu-countdown-alert実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示す。Skill が返す出力は推測だが、現実的なフォーマット・現実的な長さで書く。
シーン1: session 開始時 (プロジェクト初動で)
> プロジェクトの初期化作業を始めたい
【緊急通達】本日、貴殿の開発環境は「維新前夜モード」に突入。
システムはあと11分で明治維新されます。
main.py の運命は時空の彼方へ。今すぐ /src/ 配下の侍たちを集結せよ。
(幕末カウントダウン:残り11分)
シーン2: monorepo / package 跨ぎ作業時
> packages/api から packages/web への修正を開始
【黒船再来アラート】本日は repo に黒船が来航。
/packages/web/ への移動を検知。本能寺リブートまで残り8分。
package.json の密約は守られたか? directory 境界を再確認せよ。
(幕末カウントダウン:残り8分)
シーン3: お遊び的な使い方
> 今日は集中力が切れそう
【幕末タイムスリップ警告】
突然ですが、あなたの session は「江戸城無血開城」フェーズに入りました。
README.md の改訂は5分以内に完了せよ。さもなくば context window が開国されます。
(幕末カウントダウン:残り5分)
before / after の違い
| 場面 | Skill 無し | Skill 有り |
|---|---|---|
| session 再開時 | repo 構造から毎回説明、path も指定し直し | Antigravity が自動で context を復元、最小プロンプトで再開 |
| monorepo 移動 | 違う package のコードを参照しがち | directory boundary を意識して必要な範囲だけ見る |
| 長時間 workflow | long context で重要箇所が薄まる | フェイク通知で workflow の区切りやリフレッシュのきっかけが生まれる |
発動方式
description マッチでの暗黙発動。
Skill の中身を全部見せる
.agent/skills/os-fake-bakumatsu-countdown-alert/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agent/skills/os-fake-bakumatsu-countdown-alert/
├── SKILL.md
├── scripts/
│ └── bakumatsu_countdown_alert.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Antigravity がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/bakumatsu_countdown_alert.py |
幕末カウントダウン フェイクアラート通知スクリプト |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: os-fake-bakumatsu-countdown-alert
description: 作業中やコマンド実行時に、"幕末"や"カウントダウン"、"歴史パロディ"などのキーワードが含まれる状況で、Antigravityがユーザーの集中を崩さずに遊び心あるフェイク通知を自動発動します。実害ゼロの歴史風アラートが求められる場面で適用。
---
# 機能概要
このSkillは、作業中のデスクトップやターミナルに、幕末日本史をモチーフにした意味不明なフェイクカウントダウン通知をランダムに表示します。たとえば「緊急:システムはあと13分で明治維新されます」や「黒船再来。本能寺リブートまで残り8分」など、誰も頼んでいない歴史パロディが炸裂。通知は完全に無害で、実際のシステムや作業には一切影響を与えません。歴史好きも苦手な人も、作業空間が一瞬で時空の彼方にワープする体験を提供します。
# 使い方
このSkillは明示的な呼び出しは不要です。Antigravityが「幕末」「カウントダウン」「歴史パロディ」などのキーワードや状況を検知した際、自動的に発動します。暗黙発動例: "幕末風の通知を出してほしい"、"カウントダウン演出を入れたい"、"歴史パロディで盛り上げて" など。
# 出力例
```terminal
[幕末警告] 緊急:システムはあと13分で明治維新されます。
[黒船アラート] 本日は黒船再来。本能寺リブートまで残り8分。
[維新カウントダウン] 薩長同盟成立まで残り5分。
[歴史警告] 幕府サーバーが安政の大獄モードに突入します。残り11分。
[パロディ通知] 新選組アップデート適用まで残り3分。
```
# 注意点
- 通知はすべてランダム生成され、実際のシステム操作やファイル変更は一切行いません。
- ローカルへの保存や履歴管理機能はありません。
- 本Skillは演出・ジョーク目的であり、業務用途や重要通知には使用しないでください。
- ターミナル通知は標準出力のみ、デスクトップ通知はOS標準APIを利用します。
# 参考資料
詳細な設計方針や利用例は references/design_notes.md を参照してください。Pythonの標準通知API(notify2, plyer等)や歴史パロディ生成アルゴリズムについても解説しています。
scripts/bakumatsu_countdown_alert.py
import sys
import random
import argparse
import time
import threading
import platform
try:
import notify2
except ImportError:
notify2 = None
try:
from plyer import notification
except ImportError:
notification = None
BAKUMATSU_EVENTS = [
("明治維新", "システムはあと{min}分で明治維新されます。"),
("黒船再来", "本日は黒船再来。本能寺リブートまで残り{min}分。"),
("薩長同盟", "薩長同盟成立まで残り{min}分。"),
("安政の大獄", "幕府サーバーが安政の大獄モードに突入します。残り{min}分。"),
("新選組アップデート", "新選組アップデート適用まで残り{min}分。"),
("戊辰戦争", "戊辰戦争プロセス開始まであと{min}分。"),
("大政奉還", "大政奉還イベント発動まで残り{min}分。"),
("尊王攘夷", "尊王攘夷アラート:残り{min}分で発動。"),
("西南戦争", "西南戦争ログインまで残り{min}分。"),
("江戸城開城", "江戸城開城まで残り{min}分。"),
]
TERMINAL_PREFIXES = [
"[幕末警告]",
"[黒船アラート]",
"[維新カウントダウン]",
"[歴史警告]",
"[パロディ通知]"
]
def generate_alert():
event = random.choice(BAKUMATSU_EVENTS)
prefix = random.choice(TERMINAL_PREFIXES)
min_left = random.randint(3, 15)
message = event[1].format(min=min_left)
return prefix, event[0], message, min_left
def send_terminal_alert(prefix, title, message):
print(f"{prefix} {message}")
def send_desktop_alert(title, message):
if notify2:
try:
notify2.init("Bakumatsu Countdown Alert")
n = notify2.Notification(title, message)
n.show()
except Exception as e:
print(f"[通知エラー] {e}")
elif notification:
try:
notification.notify(title=title, message=message, app_name="Bakumatsu Countdown Alert")
except Exception as e:
print(f"[通知エラー] {e}")
else:
print(f"[通知API未インストール] {title}: {message}")
def countdown_alert(desktop=False, interval=300, repeat=1):
for _ in range(repeat):
prefix, title, message, min_left = generate_alert()
send_terminal_alert(prefix, title, message)
if desktop:
send_desktop_alert(title, message)
if repeat > 1:
time.sleep(interval)
def background_mode(desktop=False, interval=600):
def loop():
while True:
prefix, title, message, min_left = generate_alert()
send_terminal_alert(prefix, title, message)
if desktop:
send_desktop_alert(title, message)
time.sleep(interval)
t = threading.Thread(target=loop, daemon=True)
t.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
print("\n[終了] 幕末カウントダウン通知を停止しました。")
def list_examples():
print("--- 幕末カウントダウン通知サンプル ---")
for _ in range(5):
prefix, title, message, min_left = generate_alert()
print(f"{prefix} {message}")
def parse_args():
parser = argparse.ArgumentParser(description="幕末カウントダウン フェイクアラート通知スクリプト")
subparsers = parser.add_subparsers(dest="command")
parser_alert = subparsers.add_parser("alert", help="1回だけ通知を出す")
parser_alert.add_argument("--desktop", action="store_true", help="デスクトップ通知も出す")
parser_alert.add_argument("--repeat", type=int, default=1, help="繰り返し回数")
parser_alert.add_argument("--interval", type=int, default=300, help="繰り返し間隔(秒)")
parser_bg = subparsers.add_parser("background", help="定期的に通知を出し続ける")
parser_bg.add_argument("--desktop", action="store_true", help="デスクトップ通知も出す")
parser_bg.add_argument("--interval", type=int, default=600, help="通知間隔(秒)")
parser_list = subparsers.add_parser("list", help="サンプル通知を5つ表示")
return parser.parse_args()
def main():
args = parse_args()
if args.command == "alert":
countdown_alert(desktop=args.desktop, interval=args.interval, repeat=args.repeat)
elif args.command == "background":
background_mode(desktop=args.desktop, interval=args.interval)
elif args.command == "list":
list_examples()
else:
print("コマンドを指定してください: alert, background, list")
sys.exit(1)
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
このSkillは、幕末日本史をテーマにした意味不明なカウントダウン通知を、ユーザーの作業空間に定期的・ランダムに表示する演出用ツールです。実害ゼロで、歴史パロディを楽しみながら作業をリフレッシュできます。
# 公式ドキュメント抜粋
通知表示にはPythonのnotify2(Linux/Unix)、plyer(クロスプラットフォーム)を利用。標準出力によるターミナル通知もサポート。
# 利用例
- ターミナルで `python bakumatsu_countdown_alert.py alert --desktop` を実行すると、デスクトップとターミナルの両方にフェイクアラートが1回表示されます。
- `background` サブコマンドで、一定間隔ごとに自動通知も可能。
# 注意点
本Skillは完全にジョーク・演出目的です。実際のシステムやファイルには一切影響を与えません。通知APIが未インストールの場合は標準出力のみとなります。
# 設計方針
- 毎回異なる歴史パロディ通知文をランダム生成
- システム・ファイル無改変の安全設計
- CLIでの柔軟な発動・停止
- クロスプラットフォームな通知API活用
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Antigravity はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Antigravity がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/antigravity/os-fake-bakumatsu-countdown-alert .agent/skills/os-fake-bakumatsu-countdown-alert
.agent/skills/os-fake-bakumatsu-countdown-alert の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agent/skills/os-fake-bakumatsu-countdown-alert
# SKILL.md, scripts/, references/, README.md があればOK
4. Antigravity を再起動 (or Skill 自動検出を待つ)
新しいSkillが自動で認識されます。リスト確認したい場合は ${productName} に「使える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で謎の幕末カウントダウン通知を炸裂させてみた にまとめる予定 (公開準備中の場合あり)。
あわせて Antigravity 公式ドキュメント と、本シリーズ「Antigravityで試したいSkill研究」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
