Antigravityで作業中の集中を妨げる謎の瞑想通知を活用する方法

  • URLをコピーしました!
目次

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 が煩雑なときに、強制的な“静寂タイム”で頭の中を整理しやすくなる
QUICK INSTALL
このSkillをすぐ試す

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記事を探す

本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次