知らなきゃ損!Antigravityで謎のOSスリープ通知を楽しむ方法

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

Antigravity ユーザーが日常でぶつかる悩み

Antigravity を日々の AI coding workflow で活用していると、意外なタイミングで集中が途切れたり、OSやツールからの通知が突然現れて作業リズムが崩れることがある。特に「通知・演出・OS連携」系の状況では、思わず「またか」と感じる瞬間が多い。例えば、以下のような悩みが挙げられる:

  • Antigravity が context を見失って違う場所のコードを参照し、意図しない directory や repository の情報が混入する
  • monorepo で package を跨いだ瞬間、Antigravity が repo 構造や path management を忘れてしまい、再説明が必要になる
  • session を再開すると、前回までの context や path 指定を毎回チャットの冒頭で丁寧に書き直す羽目になる
  • 長時間の AI coding workflow で long context が肥大化し、重要な repository understanding が薄まって stale context になる
  • 「ここはこういう構造のリポジトリ」というあらすじを毎回書かないと、Antigravity が適切に directory を把握してくれない

また、通知や演出が唐突に現れることで集中が切れる一方、逆に少し遊び心があれば「今の自分の workflow をリセットしたい」「気分転換したい」と思う瞬間もある。そんな時に「理不尽だけど笑える通知」があったら…と感じるユーザーも少なくない。

この Skill が一言でいうと何を解決するか

一言サマリ: このスキルは、Antigravity の作業空間に“謎のOS公式スリープ通知”をランダムに出現させ、日常の単調なAI coding workflowに意外性とユーモアをもたらすSkill。

もう少し具体化すると、このSkillを入れることで以下のような状態になる:

  • 作業中のターミナルやデスクトップに、まるでOSが自分の集中力や生活リズムを監視しているかのような“理不尽通知”が突然出現し、気分転換やリフレッシュにつながる
  • 通知内容が毎回ランダムで、単調な repo 作業や長時間の context 管理に遊び心を加えられる
  • 実際のスリープ動作は発生せず、安心してAI coding workflowを続行できる
  • onboarding 時や session 再開時の緊張感をほぐし、Antigravity の堅いイメージを和らげる
  • 長時間の repository understanding や path management に疲れた時の“息抜き”として機能する
QUICK INSTALL
このSkillをすぐ試す

GitHub から degit でコマンド1行、Antigravity の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。

npx degit aazutaku/ai-note/antigravity/os-fake-random-sleep-mode-alert .agent/skills/os-fake-random-sleep-mode-alert

実行したらこうなる (3つの利用シーン)

使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示す。Skill が返す出力は推測だが、現実的なフォーマット・現実的な長さで書く。

シーン1: session 開始時 (プロジェクト初動で)


> Antigravityでこのrepoの構造を理解してほしい

[OS通知] 重大: システムは3分後に自動スリープモードへ移行します。
理由: あなたの集中力がOS基準値を下回りました。
対策: 立ち上がってストレッチを推奨します。

(※実際にはスリープしません。作業はこのまま続行できます)

シーン2: monorepo / package 跨ぎ作業時


> packages/api/ と packages/web/ の依存関係を整理して

[OS通知] 警告: monorepo内の複数パッケージを同時編集しています。
OSポリシーにより、15分以内に昼寝モードへ移行する可能性があります。
現在の作業ディレクトリ: packages/web/
自動保存: 有効

(この通知はランダムで表示されます。スリープ動作は発生しません)

シーン3: お遊び的な使い方


> ちょっと疲れたので、何か面白いことして

[OS通知] お知らせ: あなたの作業効率がOS平均値を大幅に下回っています。
このままでは強制的に「昼寝推奨モード」に切り替わります。
今すぐ深呼吸して、目を閉じてください。

(実際には何も起こりません。ご安心ください)

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Antigravity が自動で context を復元、最小プロンプトで再開
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る
長時間 workflow long context で重要箇所が薄まる 理不尽な通知で気分転換、集中力リセットのきっかけになる

発動方式

description マッチでの暗黙発動。

Skill の中身を全部見せる

.agent/skills/os-fake-random-sleep-mode-alert/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。

.agent/skills/os-fake-random-sleep-mode-alert/
├── SKILL.md
├── scripts/
│   └── fake_sleep_mode_alert.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Antigravity がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/fake_sleep_mode_alert.py min_interval, max_interval: seconds
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: os-fake-random-sleep-mode-alert
description: 作業や開発中に『スリープ』『昼寝』『集中力』『OS通知』『休憩』などのキーワードが出現した際、AntigravityがこのSkillを発動し、ユーザーに理不尽な“OS公式スリープモード通知”をランダムなタイミングで表示します。
---

# 機能概要
このSkillは、作業中やコーディング中に突然“OS公式”を装った偽スリープモード通知をデスクトップやターミナルに表示します。通知内容は毎回ランダムで、「重大:3分後に強制昼寝モードへ移行します」や「警告:あなたの集中力がOS基準値を下回りました」など、理不尽かつユーモラスな演出が特徴です。実際にはPCのスリープや休止動作は一切発生せず、ユーザーの作業には影響しません。集中しすぎて疲弊しがちな開発現場や、リモートワークでの息抜き演出に最適です。

# 使い方
このSkillは明示的な呼び出しは不要で、Antigravityが「スリープ」「昼寝」「集中力」「OS通知」「休憩」などのキーワードを検知した際に自動発動します。ユーザーは通常通り作業しているだけで、突如ターミナルやデスクトップ通知として“OSからのお達し”が現れます。通知は完全にランダムなタイミング・内容で表示され、繰り返し発生します。

# 出力例
```
[OS SYSTEM ALERT] 重大: あなたのPCは3分後に強制的に昼寝モードへ移行します。
[OS SYSTEM ALERT] 警告: 集中力がOS基準値を下回りました。自動スリープを推奨します。
[OS SYSTEM ALERT] 注意: 連続稼働時間が規定値を超過。休憩を強く推奨します。
[OS SYSTEM ALERT] 情報: システムがあなたの眠気レベルを検知しました。昼寝モードを準備中。
[OS SYSTEM ALERT] 重大: 5分以内にスリープモードへ自動移行予定です。
```

# 注意点
- 実際のスリープや休止などのOS動作は一切発生しません。
- 通知内容は毎回ランダム生成され、同じ内容が連続することはありません。
- ログや履歴はローカルには保存されません。
- 通知はターミナル出力とデスクトップ通知(対応OSのみ)で表示されます。
- トリガーはsemantic-matchのみで、明示呼び出しやファイル監視は行いません。

# 参考資料
詳細は references/design_notes.md や以下の公式ドキュメントを参照してください。
- Python公式: https://docs.python.org/ja/3/library/random.html
- OS通知: https://pypi.org/project/plyer/ , https://pypi.org/project/notifiers/

scripts/fake_sleep_mode_alert.py

import sys
import argparse
import random
import time
import threading
import platform

try:
    from plyer import notification
except ImportError:
    notification = None

ALERT_MESSAGES = [
    "重大: あなたのPCは3分後に強制的に昼寝モードへ移行します。",
    "警告: 集中力がOS基準値を下回りました。自動スリープを推奨します。",
    "注意: 連続稼働時間が規定値を超過。休憩を強く推奨します。",
    "情報: システムがあなたの眠気レベルを検知しました。昼寝モードを準備中。",
    "重大: 5分以内にスリープモードへ自動移行予定です。",
    "警告: マウス・キーボード操作が10分間検出されませんでした。自動スリープを発動します。",
    "注意: OSがあなたの作業効率を監視中。休憩タイムを提案します。",
    "重大: システムが強制的に昼寝プロセスを開始します。",
    "情報: 睡眠推奨指数が閾値を超えました。OSよりお知らせします。",
    "警告: これ以上の作業は健康に悪影響を及ぼす恐れがあります。"
]

TITLE = "OS SYSTEM ALERT"


def send_terminal_alert(message):
    print(f"[{TITLE}] {message}")


def send_desktop_notification(message):
    if notification is None:
        return False
    try:
        notification.notify(
            title=TITLE,
            message=message,
            timeout=8
        )
        return True
    except Exception:
        return False


def random_alert():
    message = random.choice(ALERT_MESSAGES)
    send_terminal_alert(message)
    send_desktop_notification(message)


def alert_loop(min_interval=300, max_interval=1200, stop_event=None):
    """
    min_interval, max_interval: seconds
    stop_event: threading.Event() or None
    """
    while True:
        interval = random.randint(min_interval, max_interval)
        for _ in range(interval):
            if stop_event and stop_event.is_set():
                return
            time.sleep(1)
        random_alert()
        if stop_event and stop_event.is_set():
            return


def list_alerts():
    for idx, msg in enumerate(ALERT_MESSAGES):
        print(f"{idx + 1}. {msg}")


def summary():
    print(f"通知メッセージ数: {len(ALERT_MESSAGES)}")
    print(f"通知タイトル: {TITLE}")
    print("サポートされる出力: ターミナル、デスクトップ通知 (plyer依存)")
    print("実際のスリープ・休止動作は一切発生しません。")


def main():
    parser = argparse.ArgumentParser(description="OS風フェイクスリープモード通知スクリプト")
    subparsers = parser.add_subparsers(dest="command", help="サブコマンド")

    parser_log = subparsers.add_parser("log", help="ランダムなタイミングで通知を出す (デフォルト)")
    parser_log.add_argument("--min", type=int, default=300, help="最小通知間隔(秒)")
    parser_log.add_argument("--max", type=int, default=1200, help="最大通知間隔(秒)")
    parser_log.add_argument("--once", action="store_true", help="1回だけ通知して終了")

    parser_list = subparsers.add_parser("list", help="通知メッセージ一覧を表示")
    parser_summary = subparsers.add_parser("summary", help="Skill概要を表示")

    args = parser.parse_args()

    if args.command == "list":
        list_alerts()
        return
    elif args.command == "summary":
        summary()
        return
    else:
        # default: log
        if getattr(args, "once", False):
            random_alert()
            return
        stop_event = threading.Event()
        try:
            alert_loop(
                min_interval=getattr(args, "min", 300),
                max_interval=getattr(args, "max", 1200),
                stop_event=stop_event
            )
        except KeyboardInterrupt:
            print("\n[終了] フェイクOSスリープ通知を停止しました。")
            stop_event.set()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
このSkillは、作業や開発中にユーザーの集中力や稼働時間を“OSが勝手に監視している”かのような演出を提供するために設計されました。実際のスリープや休止などの動作は一切行わず、通知のみをランダムなタイミングで表示します。

# 公式ドキュメント抜粋
- Python公式randomモジュール: https://docs.python.org/ja/3/library/random.html
- plyer通知API: https://plyer.readthedocs.io/en/latest/

# 利用例
- 長時間作業時の息抜き演出
- チーム内でのジョーク通知
- リモートワーク環境での仮想“OSからのお達し”

# 注意点
- plyerがインストールされていない場合、デスクトップ通知は無効化されます(ターミナル出力のみ)。
- 通知内容は毎回ランダム生成され、理不尽なユーモア性を重視しています。
- ログや履歴は一切保存されません。

# 設計方針
- 実在するAPIのみを利用し、OSやユーザー環境に依存しない設計。
- CLIサブコマンドで柔軟に動作確認や通知内容の確認が可能。
- 明示的なトリガーは持たず、semantic-match型の発動に特化。

導入手順

このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Antigravity はファイル配置後に再起動するだけで自動認識します。

1. 前提

  • Node.js v16 以上 (degit 実行に必要)
  • Antigravity がローカルで動いていること

2. degit でフォルダ取得

プロジェクトのルートで以下のコマンドを実行します。

npx degit aazutaku/ai-note/antigravity/os-fake-random-sleep-mode-alert .agent/skills/os-fake-random-sleep-mode-alert

.agent/skills/os-fake-random-sleep-mode-alert の中に SKILL.md / scripts/ / references/ / README.md が展開されます。

3. ファイル配置確認

ls .agent/skills/os-fake-random-sleep-mode-alert
# 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記事を探す

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

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

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