Antigravity ユーザーが日常でぶつかる悩み
AI coding workflow に Antigravity を導入していると、思いがけず集中が切れる瞬間や、チームの空気がマンネリ化する場面に直面しがちです。特に、長時間の session や複数人での repository 作業では、ちょっとした「脱力ネタ」やリフレッシュが欲しくなることも。そんな時、システム通知や演出系 Skill の存在が気になり始めます。
Antigravity 固有の context 管理や path management の「あるある」も絡めて、以下のような悩みが挙げられます:
- Antigravity が context を見失って違う場所のコードを参照する
- monorepo で package を跨いだ瞬間、Antigravity が repo 構造を忘れる
- session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
- 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
- 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる
また、集中力が途切れたり、チームの雰囲気が硬直化した際に、ちょっとした遊び心や話題作りが欲しいと感じることも多いです。通知・演出・OS連携系の Skill で、意図的に workflow に変化球を投げ込むニーズが高まっています。
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは、Antigravity の作業フロー中に突如「謎のOSシステム再起動通知」をデスクトップに表示し、緊張感と脱力感を絶妙に演出する Skill。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- AI coding workflow の最中、monorepo や複雑な repository understanding の合間に、唐突な「OS再起動予告」が現れ、チームや個人の集中力に刺激を与える
- onboarding や session 再開時など、長時間の path management・context 設定に疲れたタイミングで、気分転換や話題作りのきっかけを自動で提供
- 毎回ランダムな理由・内容で通知されるため、飽きずに使い続けられ、Antigravity の日常業務に遊び心をプラスできる
- 実際のシステムには何も影響しないため、安心して workflow に組み込める
- Skill の description マッチで自動発動するため、特別なコマンドや設定不要で自然な流れで使える
GitHub から degit でコマンド1行、Antigravity の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/antigravity/random-os-fake-system-reboot-notifier .agent/skills/random-os-fake-system-reboot-notifier実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示します。
シーン1: session 開始時 (プロジェクト初動で)
# session 開始直後に自然言語で指示
> プロジェクトのセットアップを始めます。必要な context を教えて。
[通知] 重要なお知らせ: 5分後にシステムは謎の理由で再起動します。
理由: カーネルの気まぐれ
Antigravity: 現在の repository 構造を把握しました。
- root/
- src/
- tests/
- package.json
context を初期化しました。作業を続けてください。
シーン2: monorepo / package 跨ぎ作業時
> packages/api から packages/web に移動して次のタスクを進めます。
[通知] システム警告: 3分後に不可解な理由でOSが再起動されます。
理由: メモリが突然踊り出したため
Antigravity: packages/web ディレクトリに context を切り替えました。
- packages/
- api/
- web/
- components/
- utils/
repository understanding を更新しました。
シーン3: お遊び的な使い方
> 今日は何か面白いことない?
[通知] 重要: 10分後にシステムは再起動されます。
理由: OSがコーヒーブレイクを要求
Antigravity: 気分転換におすすめの Skill をいくつか表示します。
- random-os-fake-system-reboot-notifier
- fake-matrix-terminal
- break-reminder
before / after の違い
| 場面 | Skill 無し | Skill 有り |
|---|---|---|
| session 再開時 | repo 構造から毎回説明、path も指定し直し | Antigravity が自動で context を復元、最小プロンプトで再開 |
| monorepo 移動 | 違う package のコードを参照しがち | directory boundary を意識して必要な範囲だけ見る |
| 長時間 workflow | long context で重要箇所が薄まる | 通知で気分転換、集中力をリセットしやすい |
発動方式
description マッチでの暗黙発動。
Skill の中身を全部見せる
.agent/skills/random-os-fake-system-reboot-notifier/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agent/skills/random-os-fake-system-reboot-notifier/
├── SKILL.md
├── scripts/
│ └── fake_reboot_notifier.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Antigravity がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/fake_reboot_notifier.py |
Fake OS System Reboot Notifier |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: random-os-fake-system-reboot-notifier
description: Antigravityが「再起動」「システム障害」「緊急通知」などのキーワードや、作業中のリフレッシュ・演出を求める文脈でこのSkillを自動発動。通知演出で場を和ませたい時に適切です。
---
# 機能概要
このSkillは、OSのシステム再起動を装ったデスクトップ通知をランダムなタイミング・内容で表示します。実際の再起動やシステム操作は一切行われません。通知文は毎回ネタ感あるランダム生成で、「5分後に再起動します」「理由:カーネルの気まぐれ」など、緊張感と脱力感を同時に演出。オフィスやチームでの話題作り、集中力のリセット、ちょっとしたジョーク用途に最適です。
# 使い方
このSkillは通常、Antigravityから「再起動」「システム障害」「強制終了」「緊急通知」などのキーワードが会話や作業ログに現れた際、もしくはリフレッシュや気分転換を促す文脈で自動発動します。明示的なCLI呼び出しは不要ですが、テストや手動実行時は `python fake_reboot_notifier.py` で即座に通知を表示できます。
# 出力例
```
[通知] 重要なお知らせ:5分後にシステムは謎の理由で再起動します
理由:カーネルの気まぐれ
[通知] システム再起動まで残り2分です
理由:OSの気分転換
[通知] システムはまもなく再起動されます
理由:メモリがやる気を失いました
```
# 注意点
- 実際の再起動やファイル操作は一切行いません
- 通知はローカル環境の通知APIを利用(Windows/Mac/Linux対応)
- サーバーや通知非対応端末では動作しません
- ログや履歴はローカルに一時保存されますが、個人情報は扱いません
# 参考資料
詳細仕様・設計方針は references/design_notes.md を参照。公式API: [plyer.notification](https://plyer.readthedocs.io/en/latest/) を利用。
scripts/fake_reboot_notifier.py
import random
import time
import argparse
import sys
import os
from datetime import datetime
try:
from plyer import notification
except ImportError:
print('plyerモジュールが必要です。\nインストール: pip install plyer')
sys.exit(1)
LOG_FILE = os.path.expanduser('~/.random_os_fake_reboot.log')
REASONS = [
'カーネルの気まぐれ',
'OSの気分転換',
'メモリがやる気を失いました',
'ネットワークの都合',
'未知のエラー',
'システムの自己主張',
'管理者の気まぐれ',
'プロセスが踊りだしました',
'電源ボタンが押された気がしました',
'時間の流れに逆らえません',
'バグが自己増殖',
'ファイルシステムの反乱',
'アップデートの気配',
'ユーザーの集中力低下',
'コーヒーが切れました',
'CPUが休憩を要求',
'仮想メモリの夢',
'セキュリティの気まぐれ',
'OSの自己診断',
'パーミッションの逆襲'
]
TITLES = [
'重要なお知らせ:{min}分後にシステムは謎の理由で再起動します',
'システム再起動まで残り{min}分です',
'システムはまもなく再起動されます',
'再起動予告:{min}分後にシステムが再起動される予定です',
'警告:システム再起動がスケジュールされました',
'通知:OS再起動まであと{min}分',
'ご注意:システムが再起動を要求しています',
'再起動のお知らせ:{min}分後',
'システムからの通知:再起動準備中',
'再起動インフォメーション:{min}分後に開始'
]
MINUTES = [1, 2, 3, 5, 10]
def get_random_notification():
min_left = random.choice(MINUTES)
title_template = random.choice(TITLES)
title = title_template.format(min=min_left)
reason = random.choice(REASONS)
return title, reason, min_left
def show_notification(title, message):
notification.notify(
title=title,
message='理由:' + message,
app_name='Fake OS Reboot Notifier',
timeout=10
)
def log_notification(title, reason):
now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
logline = f'[{now}] {title} | 理由:{reason}\n'
try:
with open(LOG_FILE, 'a', encoding='utf-8') as f:
f.write(logline)
except Exception as e:
print(f'ログ書き込みエラー: {e}')
def list_logs():
if not os.path.exists(LOG_FILE):
print('ログファイルが存在しません。')
return
with open(LOG_FILE, 'r', encoding='utf-8') as f:
lines = f.readlines()
print('=== Fake Reboot 通知履歴 ===')
for line in lines:
print(line.strip())
def summary_logs():
if not os.path.exists(LOG_FILE):
print('ログファイルが存在しません。')
return
count = 0
reasons = {}
with open(LOG_FILE, 'r', encoding='utf-8') as f:
for line in f:
count += 1
if '理由:' in line:
reason = line.split('理由:')[-1].strip()
reasons[reason] = reasons.get(reason, 0) + 1
print(f'通知回数: {count}')
print('理由別内訳:')
for r, c in sorted(reasons.items(), key=lambda x: -x[1]):
print(f' {r}: {c}回')
def main():
parser = argparse.ArgumentParser(description='Fake OS System Reboot Notifier')
subparsers = parser.add_subparsers(dest='command')
parser_notify = subparsers.add_parser('notify', help='ランダムな再起動通知を即座に表示')
parser_log = subparsers.add_parser('list', help='通知履歴を表示')
parser_summary = subparsers.add_parser('summary', help='通知理由の統計を表示')
parser_test = subparsers.add_parser('test', help='複数回テスト通知(デバッグ用)')
parser_test.add_argument('--count', type=int, default=3, help='通知回数')
args = parser.parse_args()
if args.command == 'notify' or args.command is None:
title, reason, min_left = get_random_notification()
show_notification(title, reason)
log_notification(title, reason)
print(f'[通知] {title}\n理由:{reason}')
elif args.command == 'list':
list_logs()
elif args.command == 'summary':
summary_logs()
elif args.command == 'test':
for i in range(args.count):
title, reason, min_left = get_random_notification()
show_notification(title, reason)
log_notification(title, reason)
print(f'[通知] {title}\n理由:{reason}')
time.sleep(1)
else:
parser.print_help()
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
このSkillは、実際のシステム再起動を伴わず、デスクトップ通知APIを利用して“再起動予告”を演出します。通知内容は毎回ランダム生成され、緊張感とユーモアを両立。
# 公式ドキュメント抜粋
通知表示には [plyer.notification](https://plyer.readthedocs.io/en/latest/) を採用。ローカル環境でクロスプラットフォームな通知が可能です。
# 利用例
- チームのリフレッシュタイムや小ネタに
- 集中力低下時の気分転換
- 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-system-reboot-notifier .agent/skills/random-os-fake-system-reboot-notifier
.agent/skills/random-os-fake-system-reboot-notifier の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agent/skills/random-os-fake-system-reboot-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で謎のOS再起動通知を突然出してみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Antigravity 公式ドキュメント と、本シリーズ「Antigravityで試したいSkill研究」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
