Antigravityで作業中の混乱を楽しむ偽メンテ通知の活用ガイド

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

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 やペアプロの現場でも、予期せぬ演出でチームに笑いと話題を提供できる
  • 通知内容が毎回異なり、しかも現実味がないため、誤動作やデータ損失の心配なく安心して導入できる
QUICK INSTALL
このSkillをすぐ試す

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

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

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

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