Antigravity ユーザーが日常でぶつかる悩み
Antigravity を使った AI coding workflow では、repository understanding や context 管理が強力な一方、通知・演出周りの機能は意外と淡白に感じることが多い。特に長時間作業や monorepo での directory・path management に没頭していると、現実と仮想の境界が曖昧になり、集中力が落ちたり、気分転換のきっかけを見失いがちだ。
こんな悩み、経験があるはず:
- Antigravity が context を見失って違う場所のコードを参照する瞬間、ちょっとした現実逃避やリフレッシュのきっかけが欲しい
- monorepo で package を跨いだタイミング、repo の構造やパス管理に没頭しすぎて集中力が散漫になる
- session を再開したとき、前回までの流れや memory を思い出すのに手間取り、気分転換もできずに作業が重く感じる
- long context で重要な情報が薄まり、workflow の途中で「何やってたっけ?」となるが、気分を切り替えるきっかけがない
- 「ここはこういう構造の repository」と毎回説明しながら、単調な作業に没頭しすぎて現実感覚が薄れる
特に「通知・演出・OS連携」カテゴリの機能が不足していると、作業空間が単調になり、ちょっとした遊び心や意外性が欲しくなる瞬間がある。
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは、Antigravity の作業空間に“偽のシステムメンテナンス通知”というカオスな演出をランダムで挿入し、集中環境を意図的にかき乱す Skill。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- AI coding workflow の合間に、現実味ゼロのシステム保守案内が突如表示され、作業空間に意外性と遊び心をプラスできる
- monorepo の directory や repo 構造管理に没頭しすぎたタイミングで、強制的に気分転換できるトリガーが生まれる
- session の切れ目や長時間作業の途中で「現実に引き戻す」きっかけとなり、stale context や集中力低下を防ぎやすくなる
- onboarding やペアプロの現場でも、予期せぬ演出でチームに笑いと話題を提供できる
- 通知内容が毎回異なり、しかも現実味がないため、誤動作やデータ損失の心配なく安心して導入できる
GitHub から degit でコマンド1行、Antigravity の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/antigravity/random-os-fake-system-maintenance-alert .agent/skills/random-os-fake-system-maintenance-alert実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示す。Skill が返す出力は推測だが、現実的なフォーマット・現実的な長さで書く。
シーン1: session 開始時 (プロジェクト初動で)
> 新しいプロジェクトのセットアップを始めたい
[システム通知]
重要:本日21:00より全システムのディレクトリ名を逆さまにします。
影響範囲:すべての repository、特に src/ 配下のファイル
備考:パス管理の混乱をお楽しみください。
[Antigravity]
context を初期化しました。repo 構造の把握を開始します。
シーン2: monorepo / package 跨ぎ作業時
> packages/core/ から packages/ui/ のコードを参照したい
[システム通知]
緊急:マウス左クリック機能が右クリックに統合されます。
対象:packages/ui/ ディレクトリ全体
開始時刻:今すぐ
ご不便をお楽しみください。
[Antigravity]
directory 境界を検出しました。context を packages/ui/ に切り替えます。
シーン3: お遊び的な使い方
> このリポジトリ、今日のタスクをまとめて
[システム通知]
お知らせ:本日深夜、全ファイルの拡張子が「.mystery」に変換されます。
理由:特にありません。AI の気まぐれです。
影響:README.md, scripts/*.py など全ファイル
[Antigravity]
repository understanding を再スキャン中です。
before / after の違い
| 場面 | Skill 無し | Skill 有り |
|---|---|---|
| session 再開時 | repo 構造から毎回説明、path も指定し直し | Antigravity が自動で context を復元、最小プロンプトで再開 |
| monorepo 移動 | 違う package のコードを参照しがち | directory boundary を意識して必要な範囲だけ見る |
| 長時間 workflow | long context で重要箇所が薄まる | カオスな通知で一度リセット、集中力を切り替えやすい |
発動方式
description マッチでの暗黙発動。
Skill の中身を全部見せる
.agent/skills/random-os-fake-system-maintenance-alert/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agent/skills/random-os-fake-system-maintenance-alert/
├── SKILL.md
├── scripts/
│ └── random_os_fake_system_maintenance_alert.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Antigravity がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/random_os_fake_system_maintenance_alert.py |
謎のOSシステムメンテナンス予告通知をランダム表示するスクリプト |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: random-os-fake-system-maintenance-alert
description: 作業やコーディング中、Antigravityが「メンテナンス」「保守」「システム通知」などの文脈を検知した際に、現実離れしたカオスなOSメンテナンス予告を自動でランダム表示します。集中力を和らげたい場面や、会議・ペアプロの雰囲気を変えたい時に最適です。
---
# 機能概要
このSkillは、作業中に突如として「謎のOSシステムメンテナンス予告通知」をランダムに生成・表示します。通知内容は、現実味ゼロでカオスなメッセージ(例:「21:00より全システムを逆さまにします」)が中心。現場の緊張を和らげたり、会議やペアプロの空気を一変させる演出として活用できます。通知はデスクトップまたはターミナル上に現れ、実際のシステムには一切影響を与えません。
# 使い方
本Skillは明示的な呼び出しは不要です。Antigravityが「メンテナンス」「保守」「通知」「アップデート」などのキーワードや文脈を検知した場合、自動で発動します。手動テストしたい場合は、スクリプトを直接実行してもOKです。
# 出力例
```
[ALERT] 重要:本日21:00より全システムを逆さまにします。
[ALERT] 緊急:マウス左クリック機能が右クリックに統合されます。
[ALERT] ご注意:全ユーザーのパスワードが「password」に初期化されます。
[ALERT] 臨時:画面の明るさがランダムに変動します。
[ALERT] 予告:全ファイル名がモールス信号表記に変換されます。
```
# 注意点
- 本Skillは通知のみを表示し、実際のシステムやファイルには一切変更を加えません。
- ローカル保存やログ記録は行いません。
- 真面目な現場での使用は、空気を読みつつご活用ください。
- 通知内容は完全にランダム生成されるため、同じ内容が連続する場合もあります。
# 参考資料
- references/design_notes.md を参照
- [Python公式: notifications, subprocess, random](https://docs.python.org/3/library/)
- [notify-send (Linux通知)](https://specifications.freedesktop.org/notification-spec/latest/)
- [AppleScript (Mac通知)](https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html)
scripts/random_os_fake_system_maintenance_alert.py
import sys
import os
import random
import argparse
import platform
import subprocess
import time
from typing import List
FAKE_ALERTS = [
'重要:本日21:00より全システムを逆さまにします。',
'緊急:マウス左クリック機能が右クリックに統合されます。',
'ご注意:全ユーザーのパスワードが「password」に初期化されます。',
'臨時:画面の明るさがランダムに変動します。',
'予告:全ファイル名がモールス信号表記に変換されます。',
'速報:Ctrl+Cが無効化されます。',
'緊急:ターミナルの背景色が1分ごとに変化します。',
'重要:システム時刻が10分進みます。',
'ご案内:全ユーザーのデスクトップが共有されます。',
'臨時:CapsLockが常時オンになります。',
'予告:すべての通知が英語に変換されます。',
'重要:本日深夜に全プロセスが自動再起動されます。',
'緊急:ファイルの拡張子がランダムに変更されます。',
'ご注意:マウスホイールが逆回転になります。',
'速報:全ウィンドウが自動で最小化されます。',
'臨時:すべてのショートカットキーが入れ替わります。',
'予告:ターミナルのフォントが手書き風になります。',
'重要:全ユーザーの壁紙が「富士山」に統一されます。',
'緊急:ログイン画面のBGMが「第九」に変更されます。',
'ご案内:明日から全員root権限での作業となります。',
'臨時:全ユーザーのホームディレクトリが一時的に「/tmp」に移動されます。',
'予告:ファイル検索コマンドが「find」から「seek」に変更されます。',
'重要:全システムの言語設定がランダム化されます。',
'緊急:ネットワーク通信がモールス信号で暗号化されます。',
'ご注意:明日午前中は全ユーザーのアカウント名が入れ替わります。',
'速報:全アプリケーションが縦書き表示に切り替わります。',
'臨時:すべてのファイルがzip圧縮されます。',
'予告:ターミナルのプロンプトが俳句になります。',
'重要:全ユーザーのパスワードが「12345678」に変更されます。',
'緊急:全システムの時計が逆回転します。',
]
def pick_random_alerts(n: int = 1) -> List[str]:
return random.sample(FAKE_ALERTS, k=min(n, len(FAKE_ALERTS)))
def show_terminal_alert(alert: str):
print(f"[ALERT] {alert}")
def show_desktop_notification(alert: str):
system = platform.system()
try:
if system == "Linux":
# notify-send is available on most Linux desktops
subprocess.run([
"notify-send", "偽システムメンテナンス通知", alert
], check=False)
elif system == "Darwin":
# macOS notification via AppleScript
script = f'display notification "{alert}" with title "偽システムメンテナンス通知"'
subprocess.run([
"osascript", "-e", script
], check=False)
elif system == "Windows":
# Windows 10+ notification via powershell
powershell_script = f"[Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] > $null; " \
f"$template = [Windows.UI.Notifications.ToastNotificationManager]::GetTemplateContent([Windows.UI.Notifications.ToastTemplateType]::ToastText02); " \
f"$textNodes = $template.GetElementsByTagName('text'); " \
f"$textNodes.Item(0).AppendChild($template.CreateTextNode('偽システムメンテナンス通知')) > $null; " \
f"$textNodes.Item(1).AppendChild($template.CreateTextNode('{alert}')) > $null; " \
f"$notifier = [Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier('FakeMaintenance'); " \
f"$notification = [Windows.UI.Notifications.ToastNotification]::new($template); " \
f"$notifier.Show($notification);"
subprocess.run(["powershell", "-Command", powershell_script], check=False)
else:
show_terminal_alert(alert)
except Exception as e:
show_terminal_alert(alert)
def show_alert(alert: str, mode: str = "auto"):
if mode == "desktop":
show_desktop_notification(alert)
elif mode == "terminal":
show_terminal_alert(alert)
elif mode == "auto":
if sys.stdout.isatty():
show_terminal_alert(alert)
else:
show_desktop_notification(alert)
else:
show_terminal_alert(alert)
def list_alerts():
for i, alert in enumerate(FAKE_ALERTS, 1):
print(f"{i:2d}: {alert}")
def summary():
print(f"登録済み偽メンテナンス通知数: {len(FAKE_ALERTS)}")
print("例:")
for alert in pick_random_alerts(3):
print(f" - {alert}")
def main():
parser = argparse.ArgumentParser(
description='謎のOSシステムメンテナンス予告通知をランダム表示するスクリプト')
subparsers = parser.add_subparsers(dest='command', help='サブコマンド')
parser_alert = subparsers.add_parser('alert', help='ランダムな偽メンテナンス通知を表示')
parser_alert.add_argument('-n', '--number', type=int, default=1, help='通知数 (デフォルト: 1)')
parser_alert.add_argument('--mode', choices=['auto', 'desktop', 'terminal'], default='auto', help='通知方法')
parser_alert.add_argument('--interval', type=float, default=0, help='複数通知時の間隔(秒)')
parser_list = subparsers.add_parser('list', help='登録済み通知一覧を表示')
parser_summary = subparsers.add_parser('summary', help='通知数や例を表示')
args = parser.parse_args()
if args.command == 'alert':
alerts = pick_random_alerts(args.number)
for i, alert in enumerate(alerts):
show_alert(alert, mode=args.mode)
if args.interval > 0 and i < len(alerts) - 1:
time.sleep(args.interval)
elif args.command == 'list':
list_alerts()
elif args.command == 'summary':
summary()
else:
parser.print_help()
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
このSkillは、OSのシステムメンテナンス通知を模したカオスなメッセージをランダム生成し、ユーザーの集中力や現実感覚を一時的に攪乱する演出を目的としています。実際のシステムには一切影響を与えません。
# 公式ドキュメント抜粋
- [Python random](https://docs.python.org/3/library/random.html)
- [notify-send (Linux通知)](https://specifications.freedesktop.org/notification-spec/latest/)
- [AppleScript (Mac通知)](https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html)
# 利用例
- ペアプロや会議中に場の雰囲気を変えたい時
- 長時間作業の合間にリフレッシュしたい時
- チームの雑談ネタやアイスブレイクとして
# 注意点
- 通知内容は完全なジョークです。実際の業務やシステム運用とは無関係です。
- データ損失や誤動作リスクはありません。
# 設計方針
- 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-maintenance-alert .agent/skills/random-os-fake-system-maintenance-alert
.agent/skills/random-os-fake-system-maintenance-alert の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agent/skills/random-os-fake-system-maintenance-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 でも有効か?
- プロジェクト指示との連携をどう組み立てるか?
- 通知内容が毎回ランダムかつカオスで、誤動作やデータ損失リスクがゼロであることを確認できるか?
- 10分程度で即試せる導入・動作検証フローが確立できるか?
実際に Antigravity で試した検証ログは Antigravityの謎メンテ通知を試してみた!集中力をかき乱す演出がクセになる にまとめる予定 (公開準備中の場合あり)。
あわせて Antigravity 公式ドキュメント と、本シリーズ「Antigravityで試したいSkill研究」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
