Antigravityで謎の緊急警告を楽しむ演出スキル活用ガイド

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

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

Antigravity を日々使っていると、AI coding workflow に真剣に向き合う場面が増えます。しかし、集中している最中にふと気が緩んだり、単調なリポジトリ理解や path management に没頭していると、作業空間が妙に静かで緊張感が途切れてしまうことがあります。通知や演出面が淡白なため、長時間の session ではオンボーディングや context 復元の繰り返しに飽きてしまうことも少なくありません。

  • Antigravity が context を見失って違う場所のコードを参照する瞬間、緊張感が切れる
  • monorepo で package を跨いだ際、repository understanding の手間に集中力が途切れる
  • session を再開するたび、context や path 指定を再説明する単調さが続く
  • 長時間 AI coding workflow で long context が肥大し、重要な情報が薄まると気が緩む
  • 「ここはこういう構造の repository」と毎回あらすじを書き直す作業が作業空間を無味乾燥にする

通知・演出・OS連携系の演出が乏しいことで、真面目な開発空間に「何か事件が起きる」ような刺激や笑いが生まれにくい点も悩みのひとつです。

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

一言サマリ: このスキルは、Antigravity の作業空間に突如“謎のボスキー警告”を炸裂させ、緊張感と笑いを呼び込む演出系 Skill。

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

  • AI coding workflow の最中に、完全ランダムなタイミングで「上司接近」など理不尽な fake alert が出て、作業空間に緊張とユーモアが生まれる
  • repository や directory の理解・onboarding の単調さを、突発的な通知演出でリフレッシュできる
  • 長時間 session でも、突然の警告で context や memory の stale 感を打破しやすくなる
  • 真面目な repo 管理や path management に、全く役に立たない“事件”が起きて記憶に残る
  • Antigravity の通知・演出・OS連携 Skill カテゴリを体感的に楽しめる
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/antigravity/random-os-fake-boss-key-alert .agent/skills/random-os-fake-boss-key-alert

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

使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示す。

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


# Antigravity セッションを新規開始

Welcome to Antigravity. Please specify your repository path.

[警告] OS公式ボスキー警告: 上司接近中!5秒以内に全ウィンドウを隠してください。
理由: センサーが「/src/onboarding/」ディレクトリで異常なアクティビティを検知
ヒント: あなたの作業は本当に安全ですか?
(この警告は自動で閉じられます)

続行するには任意のキーを押してください。

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


# ユーザー: packages/api/ から packages/web/ に移動

[OS警告] ボス検知センサーが packages/web/ ディレクトリで反応しました
警告内容: このパッケージは上司が監視中かもしれません。今見ている repository 構造は本当に正しいですか?
推奨アクション: 5秒以内に画面を切り替えるか、深呼吸してください

(警告は自動で消えます)

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


# ユーザー: 何もしていない idle 状態

[警告] OS公式ボスキー警告: 理由不明のアラート発生
内容: 現在の directory (/playground/random) で「何もしていない」ことが検知されました
ヒント: 今のうちにサボりタスクを隠してください
(この警告は完全にランダムで表示されます)

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Antigravity が自動で context を復元、最小プロンプトで再開
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る
長時間 workflow long context で重要箇所が薄まる 突然の警告で作業にリズムが生まれ、集中を維持しやすい

発動方式

description マッチでの暗黙発動。

Skill の中身を全部見せる

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

.agent/skills/random-os-fake-boss-key-alert/
├── SKILL.md
├── scripts/
│   └── random_os_fake_boss_key_alert.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Antigravity がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/random_os_fake_boss_key_alert.py Random OS Fake Boss Key Alert – 理不尽な警告をランダム表示
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: random-os-fake-boss-key-alert
description: Antigravityがユーザーの作業中やアイドル時に、"ボスキー"や"警告"などのキーワードを含む状況で、理不尽なランダム警告を自動的に発動します。通知・演出系の用途に最適です。
---

# 機能概要
このSkillは、作業中のPC環境に“謎のOS公式・ボスキー警告”を完全ランダムで表示する演出系スキルです。警告内容は「上司接近!5秒以内にウィンドウを隠してください」「ボス検知センサーが反応:現在の画面は安全ですか?」など理不尽かつ多様で、実際の“ボスキー”機能(ウィンドウを隠す等)は一切実装されていません。真面目な作業空間に突如として緊張感と笑いをもたらす、全く役に立たないが記憶に残る体験を提供します。

# 使い方
このSkillは明示的な呼び出しは不要です。Antigravityが「警告」「ボスキー」「OS通知」などのキーワードや、作業中・アイドル時などの状況を検知した際に自動で発動します。特定のCLIコマンドやAPI呼び出しはありません。

# 出力例
```terminal
[OS ALERT] ボス検知センサーが反応:現在の画面は安全ですか?
[OS WARNING] 上司接近!5秒以内にウィンドウを隠してください
[OS ALERT] 緊急:非公式アプリケーション検出。即時対応を推奨します。
[OS NOTICE] 画面キャプチャ監視中…安全を確認してください。
[OS ALERT] システムが異常な静寂を検出しました。何か隠していますか?
```

# 注意点
- 本Skillは実際のウィンドウ制御やセキュリティ機能は一切提供しません。
- ローカル環境の通知API(例: Windows Toast, macOS通知, Linux notify-send)を利用しますが、環境によっては通知が表示されない場合があります。
- 通知内容は完全にランダム生成され、ユーザーの作業内容や実際の状況とは無関係です。
- ログや履歴ファイルはローカルに保存されません。

# 参考資料
詳細な設計方針や利用例は references/design_notes.md を参照してください。各種OSの通知APIについては公式ドキュメント(Windows: https://docs.microsoft.com/en-us/windows/uwp/design/shell/tiles-and-notifications, macOS: https://developer.apple.com/documentation/usernotifications, Linux: https://specifications.freedesktop.org/notification-spec/latest/)も参考にしてください。

scripts/random_os_fake_boss_key_alert.py

import sys
import os
import random
import time
import platform
import argparse
import threading
import subprocess
from datetime import datetime

# 通知メッセージ候補
NOTIFY_MESSAGES = [
    "ボス検知センサーが反応:現在の画面は安全ですか?",
    "上司接近!5秒以内にウィンドウを隠してください",
    "緊急:非公式アプリケーション検出。即時対応を推奨します。",
    "画面キャプチャ監視中…安全を確認してください。",
    "システムが異常な静寂を検出しました。何か隠していますか?",
    "OS公式警告:作業内容を再確認してください。",
    "警告:ボスキーが無効化されています。",
    "通知:ウィンドウ切替履歴を送信中…",
    "警告:不審なマウス操作を検出しました。",
    "注意:上司の気配が近づいています。",
    "OS ALERT: Suspicious inactivity detected. Resume work immediately.",
    "OS WARNING: Unauthorized application in foreground.",
    "NOTICE: Boss proximity sensor triggered. Stay alert.",
    "ALERT: Unexpected window switch detected.",
    "WARNING: System detected possible distraction."
]

# OSごとの通知送信
class Notifier:
    def __init__(self):
        self.system = platform.system()
        if self.system == "Windows":
            try:
                from win10toast import ToastNotifier
                self.toaster = ToastNotifier()
            except ImportError:
                self.toaster = None
        elif self.system == "Darwin":
            pass  # macOSはosascript利用
        elif self.system == "Linux":
            pass  # Linuxはnotify-send利用

    def send(self, title, message):
        if self.system == "Windows" and self.toaster:
            try:
                self.toaster.show_toast(title, message, duration=6, threaded=True)
            except Exception as e:
                print(f"[WARN] 通知失敗: {e}")
        elif self.system == "Darwin":
            script = f'display notification "{message}" with title "{title}"'
            try:
                subprocess.run(["osascript", "-e", script], check=True)
            except Exception as e:
                print(f"[WARN] 通知失敗: {e}")
        elif self.system == "Linux":
            try:
                subprocess.run(["notify-send", title, message], check=True)
            except Exception as e:
                print(f"[WARN] 通知失敗: {e}")
        else:
            print(f"[OS ALERT] {message}")

# ランダムなインターバルで通知を送信
class BossKeyAlertRunner:
    def __init__(self, min_interval=60, max_interval=600, verbose=False):
        self.notifier = Notifier()
        self.min_interval = min_interval
        self.max_interval = max_interval
        self.verbose = verbose
        self.running = False
        self.log = []

    def random_message(self):
        return random.choice(NOTIFY_MESSAGES)

    def random_interval(self):
        return random.randint(self.min_interval, self.max_interval)

    def send_alert(self):
        msg = self.random_message()
        title = random.choice(["OS ALERT", "OS WARNING", "OS NOTICE", "ALERT", "WARNING"])
        self.notifier.send(title, msg)
        timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        self.log.append({"time": timestamp, "title": title, "message": msg})
        if self.verbose:
            print(f"[{timestamp}] {title}: {msg}")

    def run(self, count=None):
        self.running = True
        n = 0
        while self.running:
            self.send_alert()
            n += 1
            if count and n >= count:
                break
            interval = self.random_interval()
            if self.verbose:
                print(f"[INFO] 次の通知まで {interval} 秒待機")
            for _ in range(interval):
                if not self.running:
                    break
                time.sleep(1)

    def stop(self):
        self.running = False

    def print_log(self):
        for entry in self.log:
            print(f"[{entry['time']}] {entry['title']}: {entry['message']}")

# CLIパーサ

def main():
    parser = argparse.ArgumentParser(description="Random OS Fake Boss Key Alert - 理不尽な警告をランダム表示")
    parser.add_argument("run", nargs="?", help="警告通知をランダムに表示")
    parser.add_argument("--min-interval", type=int, default=60, help="通知の最小間隔(秒)")
    parser.add_argument("--max-interval", type=int, default=600, help="通知の最大間隔(秒)")
    parser.add_argument("--count", type=int, default=None, help="通知回数(指定しない場合は無限ループ)")
    parser.add_argument("--verbose", action="store_true", help="詳細出力")
    parser.add_argument("log", action="store_true", help="実行中の通知履歴を表示")

    args = parser.parse_args()

    if args.log:
        print("[INFO] ログ表示機能は実行中のみ利用可能です。")
        sys.exit(0)

    runner = BossKeyAlertRunner(min_interval=args.min_interval, max_interval=args.max_interval, verbose=args.verbose)

    try:
        runner.run(count=args.count)
    except KeyboardInterrupt:
        print("\n[INFO] 停止要求を受け付けました。ログを表示します。")
        runner.print_log()

if __name__ == "__main__":
    main()

references/design_notes.md

# 概要
このSkillは、ユーザーの作業状況や文脈に関係なく、完全ランダムなタイミングで“OS公式警告”風の通知を表示することで、作業空間に緊張感や笑いをもたらす演出を目的としています。実用性は一切追求せず、理不尽な警告体験を重視しています。

# 公式ドキュメント抜粋
- Windows通知: https://docs.microsoft.com/en-us/windows/uwp/design/shell/tiles-and-notifications
- macOS通知: https://developer.apple.com/documentation/usernotifications
- Linux通知: https://specifications.freedesktop.org/notification-spec/latest/

# 利用例
- オフィスやリモートワーク中の“ネタ”として活用
- チームビルディングやイベントでのアイスブレイクに
- 真面目な作業空間に意図的な緊張感を演出

# 注意点
- 実際のウィンドウ制御やセキュリティ対策機能はありません
- 通知APIの利用には各OSの標準コマンドやPythonパッケージ(例: win10toast)が必要
- 通知が表示されない場合は環境依存のため、端末やOSの仕様を確認してください

# 設計方針
- 発動タイミングや内容は完全ランダム
- ログや履歴は一時的にメモリ保持のみ
- ユーザーの作業内容や実際の上司の接近とは無関係

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/antigravity/random-os-fake-boss-key-alert .agent/skills/random-os-fake-boss-key-alert

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

3. ファイル配置確認

ls .agent/skills/random-os-fake-boss-key-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で謎のボスキー警告を突然出してみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Antigravity 公式ドキュメント と、本シリーズ「Antigravityで試したいSkill研究」の他記事も参照のこと。

関連タグで他のSkill記事を探す

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

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

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