Antigravity ユーザーが日常でぶつかる悩み
Antigravity を使った AI coding workflow では、集中しているときにふと気が抜けたり、長い作業で context がぼやけてしまうことがよくあります。特に monorepo での作業や大規模な repository を扱う場合、Antigravity の context 管理や path management の煩雑さに疲弊する瞬間も少なくありません。そんななか、ちょっとした“遊び心”やリフレッシュが欲しくなるタイミングも多いものです。
- Antigravity が context を見失って違う場所のコードを参照する
- monorepo で package を跨いだ瞬間、Antigravity が repo 構造を忘れる
- session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
- 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
- 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる
また、集中力が途切れたり、同じ作業の繰り返しで気分転換が欲しい瞬間に、何か“意図的な割り込み”があると逆にリズムが整う、という体験もあります。Antigravity の通知・演出・OS連携 Skill を活用して、そんな悩みやマンネリを少しでも和らげたいと思うユーザーも多いでしょう。
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは、Antigravity の作業フローに突如「謎のOSシャットダウン瞑想タイム」を挿入し、集中のリズムを意図的に崩すことで、開発者の気分転換やリフレッシュを演出する Skill。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- Antigravity の AI coding workflow の合間に、毎回ランダムな“瞑想通知”や進捗バーが出現し、気分転換やリズム調整ができる
- 長時間の repository understanding や path management の“煮詰まり”を、強制的にリセットするきっかけが生まれる
- monorepo での directory 跨ぎや session 再開時の“脳みそリセット”を、ユーモラスな演出でサポート
- 意味不明なシャットダウン通知やタイマー演出で、思わず二度見・苦笑いする謎体験を得られる
- onboarding 時や context が煩雑なときに、強制的な“静寂タイム”で頭の中を整理しやすくなる
GitHub から degit でコマンド1行、Antigravity の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/antigravity/random-os-fake-shutdown-meditation .agent/skills/random-os-fake-shutdown-meditation実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示します。
シーン1: session 開始時 (プロジェクト初動で)
> Antigravity で新しいプロジェクトを開く
[通知] システムは5分間、無の境地に入ります。
[瞑想度] ███▒▒▒▒▒▒▒▒▒▒ 30%
[タイマー] 4:59 ... 4:58 ... 4:57 ...
[ヒント] OS推奨: 椅子で悟りを開いてください
[再開] 瞑想タイム終了。repository understanding を再開します。
シーン2: monorepo / package 跨ぎ作業時
> packages/api/ から packages/web/ に移動
[通知] 強制メンテ:心の再起動モード
[瞑想度] ██████▒▒▒▒▒▒ 60%
[タイマー] 2:00 ... 1:59 ... 1:58 ...
[ヒント] directory 構造を忘れてください。今は“無”です。
[再開] monorepo context 復元。path management を続行します。
シーン3: お遊び的な使い方
> ちょっと休憩したい
[通知] OS推奨: 目を閉じて深呼吸してください
[瞑想度] ██████████ 100%
[タイマー] 0:30 ... 0:29 ... 0:28 ...
[ヒント] repository understanding を一時停止中
[再開] 気分転換完了。AI coding workflow を再開します。
before / after の違い
| 場面 | Skill 無し | Skill 有り |
|---|---|---|
| session 再開時 | repo 構造から毎回説明、path も指定し直し | Antigravity が自動で context を復元、最小プロンプトで再開 |
| monorepo 移動 | 違う package のコードを参照しがち | directory boundary を意識して必要な範囲だけ見る |
| 長時間 workflow | long context で重要箇所が薄まる | 強制リセットで情報の鮮度を保つタイミングができる |
発動方式
description マッチでの暗黙発動。
Skill の中身を全部見せる
.agent/skills/random-os-fake-shutdown-meditation/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agent/skills/random-os-fake-shutdown-meditation/
├── SKILL.md
├── scripts/
│ └── random_os_fake_shutdown_meditation.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Antigravity がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/random_os_fake_shutdown_meditation.py |
random-os-fake-shutdown-meditation: 謎のシャットダウン瞑想タイムを演出 |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: random-os-fake-shutdown-meditation
description: 作業やコーディングに没頭している際、"シャットダウン"や"再起動"、"メンテナンス"などのキーワードや、長時間の連続作業が検出された場合に発動。意味不明な瞑想通知や進捗バー、タイマーをランダムに表示し、集中を一時的に撹乱します。
---
# 機能概要
このSkillは、開発者が作業に没頭しているタイミングで突如“謎のOSシャットダウン瞑想タイム”を演出します。OS風のデスクトップ通知や画面端に「システムは5分間、無の境地に入ります」「強制メンテ:心の再起動モード」など、意味不明なメッセージがランダム表示されます。また、瞑想進捗バーや静寂タイマーも出現し、開発者の集中をユーモラスに撹乱します。単調な作業にアクセントを加え、思わず二度見・苦笑いする体験を提供します。
# 使い方
このSkillは明示的な呼び出しは不要です。Antigravityが「シャットダウン」「再起動」「メンテナンス」「瞑想」「集中」「無心」などのキーワードや、長時間の連続作業を検知した際に自動発動します。暗黙トリガー例:
- "そろそろ再起動しようかな"
- "集中しすぎて疲れた"
- "メンテナンスウィンドウ"
# 出力例
```
[通知] システムは5分間、無の境地に入ります。
[進捗バー] 瞑想度: 34% [==== ]
[タイマー] 残り 04:12
[通知] 強制メンテ:心の再起動モード
[通知] OS推奨:椅子で悟りを開いてください。
```
# 注意点
- 本Skillは通知や演出のみを行い、実際のOSシャットダウンやシステム操作は行いません。
- ローカル通知APIやクロスプラットフォームのGUIライブラリを利用します。
- 一部の環境では通知や進捗バーが正しく表示されない場合があります。
- 設定や履歴はローカル保存されません。
# 参考資料
- [Python公式: plyer通知API](https://plyer.readthedocs.io/en/latest/)
- references/design_notes.md 参照
scripts/random_os_fake_shutdown_meditation.py
import random
import time
import argparse
import sys
import threading
import platform
try:
from plyer import notification
except ImportError:
notification = None
try:
import tkinter as tk
from tkinter import ttk
except ImportError:
tk = None
SHUTDOWN_MESSAGES = [
"システムは5分間、無の境地に入ります。",
"強制メンテ:心の再起動モード",
"OS推奨:椅子で悟りを開いてください。",
"謎のシャットダウン瞑想タイム発動。",
"進捗バーで悟りを計測中...",
"今こそ静寂を強制します。",
"あなたの心を再起動しています...",
"OSメンテナンス: 一時的に思考停止してください。",
"瞑想モード:何も考えないでください。",
"システム推奨:深呼吸タイム。"
]
PROGRESS_BAR_LENGTH = 30
MEDITATION_TIME_SEC = 5 * 60 # 5分
def send_notification(title, message):
if notification:
try:
notification.notify(
title=title,
message=message,
timeout=10
)
except Exception as e:
print(f"[通知失敗]: {e}")
else:
print(f"[通知] {title}: {message}")
def random_message():
return random.choice(SHUTDOWN_MESSAGES)
def print_progress_bar(percent):
filled = int(PROGRESS_BAR_LENGTH * percent)
bar = '=' * filled + ' ' * (PROGRESS_BAR_LENGTH - filled)
sys.stdout.write(f"\r[進捗バー] 瞑想度: {int(percent*100)}% [{bar}]")
sys.stdout.flush()
def meditation_timer(duration=MEDITATION_TIME_SEC):
start = time.time()
end = start + duration
while time.time() < end:
elapsed = time.time() - start
percent = min(elapsed / duration, 1.0)
print_progress_bar(percent)
remain = int(end - time.time())
mins, secs = divmod(remain, 60)
sys.stdout.write(f" [タイマー] 残り {mins:02d}:{secs:02d}")
sys.stdout.flush()
time.sleep(1)
print_progress_bar(1.0)
sys.stdout.write(" [タイマー] 完了!\n")
sys.stdout.flush()
def gui_progress_bar(duration=MEDITATION_TIME_SEC):
if not tk:
print("tkinterが利用できません。CLI進捗バーを利用します。")
meditation_timer(duration)
return
root = tk.Tk()
root.title("謎のOSシャットダウン瞑想タイム")
root.geometry("400x120+100+100")
label = tk.Label(root, text=random_message(), font=("Meiryo", 12))
label.pack(pady=10)
progress = ttk.Progressbar(root, orient="horizontal", length=350, mode="determinate")
progress.pack(pady=10)
timer_label = tk.Label(root, text="", font=("Meiryo", 10))
timer_label.pack()
def update():
elapsed = time.time() - start
percent = min(elapsed / duration, 1.0)
progress['value'] = percent * 100
remain = int(duration - elapsed)
mins, secs = divmod(max(remain,0), 60)
timer_label.config(text=f"残り {mins:02d}:{secs:02d}")
if elapsed < duration:
root.after(1000, update)
else:
timer_label.config(text="瞑想タイム終了!")
root.after(2000, root.destroy)
start = time.time()
update()
root.mainloop()
def trigger_meditation(mode="auto", duration=MEDITATION_TIME_SEC):
message = random_message()
send_notification("謎のOSシャットダウン瞑想タイム", message)
print(f"[通知] {message}")
if mode == "gui":
gui_progress_bar(duration)
else:
meditation_timer(duration)
send_notification("瞑想タイム終了", "作業を再開できます。")
print("[通知] 瞑想タイム終了。作業を再開できます。\n")
def main():
parser = argparse.ArgumentParser(description="random-os-fake-shutdown-meditation: 謎のシャットダウン瞑想タイムを演出")
parser.add_argument('--mode', choices=['auto', 'cli', 'gui'], default='auto', help='進捗バー表示モード')
parser.add_argument('--duration', type=int, default=MEDITATION_TIME_SEC, help='瞑想タイム(秒)')
parser.add_argument('--test', action='store_true', help='テスト通知のみ発行')
parser.add_argument('--list-messages', action='store_true', help='全メッセージ一覧表示')
args = parser.parse_args()
if args.list_messages:
print("-- メッセージ一覧 --")
for msg in SHUTDOWN_MESSAGES:
print(f"- {msg}")
sys.exit(0)
if args.test:
send_notification("テスト通知", random_message())
sys.exit(0)
mode = args.mode
if mode == 'auto':
if tk:
mode = 'gui'
else:
mode = 'cli'
trigger_meditation(mode=mode, duration=args.duration)
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
このSkillは、開発者の作業フローに突如“謎のOSシャットダウン瞑想”を挿入することで、集中のリズムに意図的なノイズを加え、ユーモラスかつリフレッシュな体験を提供します。
# 公式ドキュメント抜粋
- [plyer通知API公式](https://plyer.readthedocs.io/en/latest/): クロスプラットフォームなデスクトップ通知をPythonから簡単に発行可能。
- [tkinter公式](https://docs.python.org/ja/3/library/tkinter.html): 標準GUIライブラリで簡易ウィンドウや進捗バーを実装。
# 利用例
- 長時間のコーディングや集中作業中に、突然“瞑想タイム”が発動し、通知や進捗バーで一時的に作業を中断。
- チームのリフレッシュタイムやイベント演出にも応用可能。
# 注意点
- 実際のOSシャットダウンや再起動は一切行いません。
- 通知やGUI表示は環境依存で、全てのOSで完全な見た目を保証しません。
- ログや履歴は保存されません。
# 設計方針
- ユーモアと安全性を両立し、開発者の作業環境を壊さず演出だけを提供。
- 既存の通知/GUI APIのみを使い、余計な依存や副作用を排除。
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Antigravity はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Antigravity がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/antigravity/random-os-fake-shutdown-meditation .agent/skills/random-os-fake-shutdown-meditation
.agent/skills/random-os-fake-shutdown-meditation の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agent/skills/random-os-fake-shutdown-meditation
# 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で通知・演出・OS連携Skillを試してみた結果 にまとめる予定 (公開準備中の場合あり)。
あわせて Antigravity 公式ドキュメント と、本シリーズ「Antigravityで試したいSkill研究」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
