Antigravity ユーザーが日常でぶつかる悩み
Antigravity を日々使い込むエンジニアの間では、AI coding workflow の中で「ちょっとした遊び心」や「気分転換」が欲しくなる瞬間が意外と多い。特に長時間の作業や複雑な monorepo を扱っていると、集中力が切れたり、同僚とのやりとりにひと笑い挟みたくなるものだ。
一方で、通知・演出・OS連携系の Skill は Antigravity の context や repository understanding に直接影響しないものの、日常の“間”を作る役割で密かに人気がある。以下のような「あるある」な悩みがよく聞かれる:
- Antigravity が context を見失って違う場所のコードを参照する
- monorepo で package を跨いだ瞬間、Antigravity が repo 構造を忘れる
- session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
- 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
- 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる
これらの課題に加え、たまには AI とのやりとりに“フェイクな演出”やサプライズが欲しいという声も増えている。
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは、作業中に突如現れる“謎のOS再起動カウントダウン”で、Antigravity のAI coding workflowに遊び心と緊張感をプラスするSkill。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- 気分転換や話題作りになる“フェイク通知”が、作業の合間に自動で出現する
- 「謎のアップデート適用中」など意味不明な理由付きでカウントダウンが始まり、職場やチームでちょっとした盛り上がりを演出できる
- 実際には再起動されず、数字が0になると必ず「ジョークです」と明示されるので安心
- Antigravity の context や memory には影響せず、通常の repository understanding や path management を邪魔しない
- 長時間のAI coding workflowやonboardingの“間”に、ちょっとしたサプライズを加えられる
GitHub から degit でコマンド1行、Antigravity の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/antigravity/os-fake-reboot-countdown-prank .agent/skills/os-fake-reboot-countdown-prank実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示す。Skill が返す出力は推測だが、現実的なフォーマット・現実的な長さで書く。
シーン1: session 開始時 (プロジェクト初動で)
> プロジェクトの初期化とセットアップをお願いします
[OS再起動カウントダウン]
理由: RAMの気分転換
再起動まで: 10秒
10...
9...
8...
7...
6...
5...
4...
3...
2...
1...
0
ジョークです。作業を続けてください。
シーン2: monorepo / package 跨ぎ作業時
> packages/core と packages/ui の両方を修正したい
[OS再起動カウントダウン]
理由: 謎のアップデート適用中
再起動まで: 15秒
15...
14...
13...
(中略)
2...
1...
0
ジョークです。実際の再起動は行われません。
シーン3: お遊び的な使い方
> 今日は何か面白いことない?
[OS再起動カウントダウン]
理由: OS自己啓発モード突入
再起動まで: 7秒
7...
6...
5...
4...
3...
2...
1...
0
ジョークです。引き続きAntigravityをご利用ください。
before / after の違い
| 場面 | Skill 無し | Skill 有り |
|---|---|---|
| session 再開時 | repo 構造から毎回説明、path も指定し直し | Antigravity が自動で context を復元、最小プロンプトで再開 |
| monorepo 移動 | 違う package のコードを参照しがち | directory boundary を意識して必要な範囲だけ見る |
| 長時間 workflow | long context で重要箇所が薄まる | フェイク通知で気分転換、集中力をリセット |
発動方式
description マッチでの暗黙発動。
Skill の中身を全部見せる
.agent/skills/os-fake-reboot-countdown-prank/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agent/skills/os-fake-reboot-countdown-prank/
├── SKILL.md
├── scripts/
│ └── fake_reboot_countdown.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Antigravity がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/fake_reboot_countdown.py |
OSフェイク再起動カウントダウン・プランク |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: os-fake-reboot-countdown-prank
description: ユーザーが「再起動」「アップデート」「OS」「カウントダウン」などのキーワードを含む会話や作業中に、AntigravityがこのSkillを自動発動し、フェイクの再起動カウントダウン通知を表示します。実際の再起動は行われません。
---
# 機能概要
このSkillは、PC作業中に突然“OS再起動カウントダウン”ウィンドウを表示し、ユーザーや周囲を驚かせるためのジョーク演出を提供します。カウントダウンには毎回異なる「謎の理由」(例:「RAMの気分転換」「OS自己啓発モード」など)が表示され、数字が0になると「ジョークです」とだけ表示されます。実際に再起動やシャットダウンは一切行われません。オフィスやチーム内でのちょっとした混乱や笑いを誘うための攻めた通知演出Skillです。
# 使い方
このSkillは明示的な呼び出しは不要です。Antigravityが「再起動」「アップデート」「OS」「カウントダウン」などのキーワードや、システム関連の会話を検知した際に自動的に発動します。手動でスクリプトを実行する場合は、コマンドラインから `python fake_reboot_countdown.py` を実行してください。カウントダウン秒数や理由をカスタマイズしたい場合は、`--seconds` や `--reason` オプションを利用できます。
# 出力例
```
[OS通知] システム再起動まで: 30秒
理由: RAMの気分転換
...
[OS通知] システム再起動まで: 0秒
ジョークです
```
# 注意点
- このSkillは実際の再起動やシステム操作は一切行いません。
- 表示はローカル端末上のみに限定されます。
- 業務や重要な作業中のユーザーには十分配慮してください。
- 画面上にウィンドウ/通知が表示されるため、仮想環境やリモートデスクトップでは挙動が異なる場合があります。
# 参考資料
詳細な設計方針や利用例は references/design_notes.md を参照してください。OS通知の実装にはPythonの標準GUIライブラリ(tkinter)およびクロスプラットフォーム通知APIを活用しています。
scripts/fake_reboot_countdown.py
import argparse
import random
import sys
import threading
import time
import platform
try:
import tkinter as tk
from tkinter import messagebox
except ImportError:
tk = None
REASONS = [
'謎のアップデート適用中',
'RAMの気分転換',
'OS自己啓発モード突入',
'未知のパッチを適用中',
'システムの気まぐれ',
'バーチャルメモリのストレッチ',
'OSの自我発現準備',
'ファイルシステムのストレス解消',
'プロセスの自己反省タイム',
'カーネルの深呼吸'
]
class FakeRebootCountdown:
def __init__(self, seconds=30, reason=None, gui=True):
self.seconds = seconds
self.reason = reason or random.choice(REASONS)
self.gui = gui and tk is not None
self._stop_event = threading.Event()
def show_gui_countdown(self):
root = tk.Tk()
root.title('OS通知')
root.resizable(False, False)
root.attributes('-topmost', True)
root.geometry('+{}+{}'.format(root.winfo_screenwidth() - 320, 40))
label = tk.Label(root, text='', font=('Arial', 16), padx=20, pady=10)
label.pack()
reason_label = tk.Label(root, text='理由: ' + self.reason, font=('Arial', 12), fg='gray')
reason_label.pack()
def update():
if self.seconds >= 0:
label.config(text=f'システム再起動まで: {self.seconds}秒')
self.seconds -= 1
root.after(1000, update)
else:
label.config(text='ジョークです')
reason_label.config(text='')
root.after(3000, root.destroy)
update()
root.mainloop()
def show_terminal_countdown(self):
print(f'[OS通知] システム再起動まで: {self.seconds}秒')
print(f'理由: {self.reason}')
for i in range(self.seconds, -1, -1):
sys.stdout.write(f'\r残り: {i}秒 ')
sys.stdout.flush()
time.sleep(1)
print('\nジョークです')
def run(self):
if self.gui:
self.show_gui_countdown()
else:
self.show_terminal_countdown()
def main():
parser = argparse.ArgumentParser(description='OSフェイク再起動カウントダウン・プランク')
subparsers = parser.add_subparsers(dest='command')
parser_run = subparsers.add_parser('run', help='カウントダウンを開始')
parser_run.add_argument('--seconds', type=int, default=30, help='カウントダウン秒数 (デフォルト30)')
parser_run.add_argument('--reason', type=str, help='理由テキスト (省略時はランダム)')
parser_run.add_argument('--no-gui', action='store_true', help='GUIウィンドウを使わずターミナル表示')
parser_list = subparsers.add_parser('list-reasons', help='利用可能な理由一覧を表示')
parser.add_argument('--version', action='version', version='os-fake-reboot-countdown-prank 1.0')
args = parser.parse_args()
if args.command == 'run':
countdown = FakeRebootCountdown(
seconds=args.seconds,
reason=args.reason,
gui=not args.no_gui
)
countdown.run()
elif args.command == 'list-reasons':
print('利用可能な理由一覧:')
for i, reason in enumerate(REASONS, 1):
print(f' {i}. {reason}')
else:
parser.print_help()
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
このSkillは、実際のOS再起動を伴わず、ユーザーにカウントダウン型のフェイク通知を表示するために設計されています。主に職場やチーム内でのジョーク・演出用途を想定しています。
# 公式ドキュメント抜粋
Python標準のtkinterを利用し、クロスプラットフォームでシンプルなGUI通知ウィンドウを実現しています。CLIからの呼び出しや理由テキストのカスタマイズも可能です。
# 利用例
- `python fake_reboot_countdown.py run --seconds 20`
- `python fake_reboot_countdown.py run --reason "OSの気まぐれ" --no-gui`
- `python fake_reboot_countdown.py list-reasons`
# 注意点
実際の再起動やシステム操作は一切行いません。業務や重要な作業中のユーザーには十分配慮してください。仮想環境やリモートデスクトップでのGUI表示は環境依存となります。
# 設計方針
「驚き」と「安全性」を両立するため、終了時には必ず「ジョークです」と明示し、誤解を防ぐ仕様としています。
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Antigravity はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Antigravity がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/antigravity/os-fake-reboot-countdown-prank .agent/skills/os-fake-reboot-countdown-prank
.agent/skills/os-fake-reboot-countdown-prank の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agent/skills/os-fake-reboot-countdown-prank
# 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の謎の再起動カウントダウンを試してみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Antigravity 公式ドキュメント と、本シリーズ「Antigravityで試したいSkill研究」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
