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 に疲れた時の“息抜き”として機能する
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記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
