Antigravityで使いこなす謎のズームイン警告演出の活用ガイド

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

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

Antigravity を日々使っていると、AI coding workflow の中で思わぬ“空気の重さ”や、作業の単調さに悩まされる瞬間があります。特に repository understanding や path management に集中している時、ふとしたタイミングで気分転換や意外性が欲しくなるものです。下記のような「あるある」に心当たりがある方も多いはずです。

  • Antigravity が context を見失って違う場所のコードを参照する
  • monorepo で package を跨いだ瞬間、Antigravity が repo 構造を忘れる
  • session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
  • 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
  • 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる

これらの悩みは真面目な作業を続けるほど顕在化しやすく、時には気分転換やちょっとした“謎演出”が欲しくなることも。そんな時に役立つのが、通知・演出・OS連携カテゴリの Skill です。

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

一言サマリ: このスキルは作業中ふいに“謎のOS画面ズームイン警告”をデスクトップやターミナルに突如表示しますSkill。

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

  • Antigravity の session や repository 作業中に、まったく予期しない「ズームイン警告」通知が現れ、単調な AI coding workflow に突如として笑いと緊張感が生まれる
  • context や path management で煮詰まった時、謎のフェイク警告が流れて気分がリセットされる
  • onboarding や長時間作業時の「空気の重さ」を一瞬で崩壊させる演出が、自動で繰り返し発生する
  • repo の directory 構造や memory 管理に追われる最中でも、突然の演出でチーム内コミュニケーションのネタになる
  • 実際には何も起きていないのに、“やたら焦る”通知で作業環境を盛り上げたい時に最適
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/antigravity/random-os-fake-sudden-zoom-in-alert .agent/skills/random-os-fake-sudden-zoom-in-alert

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

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

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


# プロジェクト初期化
> antigravity start --repo ./my-monorepo

[ALERT] 重大:ズームインモード突入まで残り5秒
このOSはまもなく画面拡大率を300%に引き上げます。
対処方法: ありません。運命を受け入れてください。

(何も起きませんでした)

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


> cd packages/frontend
> antigravity analyze --context .

[警告] 画面拡大率が謎の力で上昇中
directory: packages/frontend/
repository understanding を再構築中です。
ズーム解除はサポートされていません。

(実際の画面には変化なし)

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


> antigravity chat "README.mdの内容まとめて"
突然のズームイン警告
==================
OS警告: 既定の拡大率を超えました。
このまま作業を続けると、重要な context が見えなくなる可能性があります。
(フェイク通知です。ご安心ください)

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Antigravity が自動で context を復元、最小プロンプトで再開
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る
長時間 workflow long context で重要箇所が薄まる 突如フェイク警告が流れ、空気がリセットされる

発動方式

description マッチでの暗黙発動。

Skill の中身を全部見せる

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

.agent/skills/random-os-fake-sudden-zoom-in-alert/
├── SKILL.md
├── scripts/
│   └── random_zoom_alert.py
└── references/
    └── design_notes.md

各ファイルの役割

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

SKILL.md

---
name: random-os-fake-sudden-zoom-in-alert
description: ユーザーが長時間作業や集中状態にある際や、OS・画面・ズーム・警告・通知・演出などのキーワードが会話やコマンドに含まれる場合に発動。実際のズーム処理は行わず、純粋なフェイク演出のみを提供します。
---

# 機能概要
このSkillは、作業中のユーザーに対し、突如として「OS画面ズームイン警告」風のフェイク通知を表示します。通知内容は毎回ランダム生成され、「重大:ズームインモード突入まで残り5秒」「画面拡大率が謎の力で上昇中」など、現実には何も起こらないのに焦らせる演出を実現します。実害は一切なく、作業の緊張感を一瞬で崩壊させる“謎演出”として、会議やリラックスタイム、イベントなどで盛り上げたい時に最適です。

# 使い方
このSkillは明示的な呼び出しコマンドは不要で、Antigravityエージェントが「os」「zoom」「警告」「通知」「拡大」「演出」などのキーワードを検知した際や、長時間作業・集中状態が続いた場合に自動発動します。設定により、通知の頻度や表示方法(デスクトップ/ターミナル)をカスタマイズ可能です。

# 出力例
```
[ALERT] 重大:ズームインモード突入まで残り5秒
[WARNING] 画面拡大率が謎の力で上昇中!
[NOTICE] OSが自動的にズームインを試行中です
[ALERT] 不明なプロセスが画面を拡大しようとしています
[INFO] ズームイン解除方法:不明
```

# 注意点
本Skillは実際のズーム処理や画面操作は一切行いません。通知は全てランダム生成のフェイクであり、実害やシステム変更はありません。通知の内容が紛らわしい場合があるため、重要な作業中や誤解を招く環境ではご注意ください。通知履歴はローカルに保存されません。

# 参考資料
詳細な設計方針や利用例は references/design_notes.md を参照してください。OS通知API(notify-send, ToastNotifier等)や、Python標準ライブラリの利用例も記載しています。

scripts/random_zoom_alert.py

import sys
import time
import random
import argparse
import platform
import subprocess
from threading import Thread, Event

ZOOM_ALERT_MESSAGES = [
    "重大:ズームインモード突入まで残り{sec}秒",
    "画面拡大率が謎の力で上昇中!",
    "OSが自動的にズームインを試行中です",
    "不明なプロセスが画面を拡大しようとしています",
    "ズームイン解除方法:不明",
    "警告:画面ズームインがキャンセルできません",
    "システム:ズームインイベントを検出しました",
    "画面拡大率:{percent}% (通常値を超過)",
    "重大警告:ズームイン制御が不能です",
    "INFO: Zoom-In Mode Engaged by Unknown Source"
]

TERMINAL_COLORS = {
    "ALERT": "\033[91m",
    "WARNING": "\033[93m",
    "NOTICE": "\033[96m",
    "INFO": "\033[92m",
    "ENDC": "\033[0m"
}

class ZoomAlertRunner:
    def __init__(self, mode="terminal", min_interval=60, max_interval=600, stop_event=None):
        self.mode = mode
        self.min_interval = min_interval
        self.max_interval = max_interval
        self.stop_event = stop_event or Event()

    def random_message(self):
        msg = random.choice(ZOOM_ALERT_MESSAGES)
        if "{sec}" in msg:
            msg = msg.format(sec=random.randint(3, 15))
        if "{percent}" in msg:
            msg = msg.format(percent=random.randint(120, 400))
        prefix = random.choice(["ALERT", "WARNING", "NOTICE", "INFO"])
        return prefix, msg

    def notify_terminal(self, prefix, msg):
        color = TERMINAL_COLORS.get(prefix, "")
        endc = TERMINAL_COLORS["ENDC"]
        print(f"{color}[{prefix}] {msg}{endc}")

    def notify_desktop(self, prefix, msg):
        system = platform.system()
        title = f"{prefix}: OS Zoom-In Alert"
        body = msg
        try:
            if system == "Darwin":
                subprocess.run([
                    "osascript", "-e",
                    f'display notification "{body}" with title "{title}"'
                ], check=True)
            elif system == "Linux":
                subprocess.run([
                    "notify-send", title, body
                ], check=True)
            elif system == "Windows":
                try:
                    from win10toast import ToastNotifier
                    toaster = ToastNotifier()
                    toaster.show_toast(title, body, duration=5, threaded=True)
                except ImportError:
                    self.notify_terminal(prefix, msg + " (win10toast未導入)")
            else:
                self.notify_terminal(prefix, msg + " (デスクトップ通知未対応)")
        except Exception as e:
            self.notify_terminal(prefix, msg + f" (通知失敗: {e})")

    def run(self):
        while not self.stop_event.is_set():
            interval = random.randint(self.min_interval, self.max_interval)
            for _ in range(interval):
                if self.stop_event.is_set():
                    return
                time.sleep(1)
            prefix, msg = self.random_message()
            if self.mode == "desktop":
                self.notify_desktop(prefix, msg)
            else:
                self.notify_terminal(prefix, msg)

    def stop(self):
        self.stop_event.set()

def list_messages():
    print("--- サンプル警告メッセージ一覧 ---")
    for msg in ZOOM_ALERT_MESSAGES:
        print("- " + msg.replace("{sec}", "X").replace("{percent}", "Y"))

def main():
    parser = argparse.ArgumentParser(description="Random OS Fake Sudden Zoom-In Alert Skill")
    subparsers = parser.add_subparsers(dest="command")

    run_parser = subparsers.add_parser("run", help="フェイクズーム警告をランダム表示 (デフォルト:ターミナル)")
    run_parser.add_argument("--mode", choices=["terminal", "desktop"], default="terminal", help="通知方法")
    run_parser.add_argument("--min-interval", type=int, default=60, help="最短通知間隔(秒)")
    run_parser.add_argument("--max-interval", type=int, default=600, help="最長通知間隔(秒)")

    list_parser = subparsers.add_parser("list", help="生成される警告メッセージ例を表示")

    args = parser.parse_args()

    if args.command == "list":
        list_messages()
        return
    if args.command == "run" or args.command is None:
        runner = ZoomAlertRunner(
            mode=getattr(args, 'mode', 'terminal'),
            min_interval=getattr(args, 'min_interval', 60),
            max_interval=getattr(args, 'max_interval', 600)
        )
        try:
            print("[INFO] フェイクズーム警告を開始します。Ctrl+Cで停止")
            runner.run()
        except KeyboardInterrupt:
            print("\n[INFO] 停止します。お疲れさまでした。")
            runner.stop()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
本Skillは、ユーザーの作業中に意図的な緊張緩和や盛り上げ演出を目的とした、完全フェイクのOS風ズームイン警告通知をランダムに表示します。実際の画面ズームやシステム操作は一切発生しません。

# 公式ドキュメント抜粋
- PythonでのOS通知API利用例: [notify-send (Linux)](https://wiki.archlinux.jp/index.php/Notify-send)、[osascript (macOS)](https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html)、[win10toast (Windows)](https://pypi.org/project/win10toast/)

# 利用例
- オンライン会議やイベントでのアイスブレイク
- 長時間作業時の気分転換やジョーク演出
- チーム内での「謎のOS警告」ネタとして活用

# 注意点
- 本Skillはシステムに実害を与えませんが、通知内容が紛らわしいため、誤解を招く環境では利用を控えてください。
- デスクトップ通知はOS依存のため、Linux/macOS/Windowsで動作確認済みですが、環境によっては追加パッケージ(例: win10toast)が必要です。

# 設計方針
- CLIサブコマンド(run/list)で柔軟な利用を実現
- 通知間隔・通知方法のカスタマイズ性を重視
- すべての通知はランダム生成・履歴保存なし

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/antigravity/random-os-fake-sudden-zoom-in-alert .agent/skills/random-os-fake-sudden-zoom-in-alert

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

3. ファイル配置確認

ls .agent/skills/random-os-fake-sudden-zoom-in-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をコピーしました!
目次