Antigravityで楽しむ!謎のフェイク通知を活用するガイド

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

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

Antigravity を使った AI coding workflow の中で、通知や演出系の Skill を求める声は意外と多いものです。特に長時間作業や monorepo の大規模リポジトリを扱う現場では、単調なやりとりや冗長な context 指定が続き、集中力や正気度が試される瞬間が度々やってきます。こうした時、ふとした「遊び心」やジョーク通知が、気分転換やチームのコミュニケーション活性化につながることも。

  • Antigravity が context を見失って違う場所のコードを参照することがあり、思わず「またか…」とため息が出る
  • monorepo で package を跨いだ瞬間、Antigravity が repository 構造を忘れてしまい、再説明が必要になる
  • session を再開するたび、前回までの context や path 指定を毎回チャットで書き直す手間が発生する
  • 長時間の AI coding workflow で long context が膨らみ、重要な情報が埋もれてしまう (stale context 問題)
  • 「このリポジトリはこういう directory 構成です」と毎回説明するのが面倒で、気持ちが萎える

こうした「Antigravity あるある」に加え、作業の合間にちょっとした刺激や笑いが欲しいと感じる瞬間も少なくありません。

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

一言サマリ: このスキルは、作業中に突如現れる“謎のOSディスク残量危機通知”で、Antigravityの単調なやりとりにジョークと混乱をもたらします。

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

  • 長時間の repository understanding や path management に疲れたタイミングで、思わず笑ってしまうフェイク通知が届く
  • AI coding workflow の合間に、現実離れしたディスク残量アラートが context を切り替えるきっかけになる
  • onboarding や session 再開時、緊張感やマンネリを和らげる演出として活用できる
  • monorepo で directory を跨いだ瞬間に、意表を突いたジョーク通知が現れ、チームの雰囲気を和ませる
  • Skill の description マッチによる自動発動で、ユーザーが意図せず楽しめるサプライズ体験を提供
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/antigravity/random-os-fake-disk-space-crisis .agent/skills/random-os-fake-disk-space-crisis

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

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

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


> 新しいリポジトリで作業を始めたい

[警告] あなたのディスク残量は「カブトムシ2匹分」です。
[緊急] SSDの空きは“ギャラクシー級に不足”しています。
[ヒント] /src/ ディレクトリの容量は「宇宙の塵」レベルです。
作業を続行するには、まず心の余裕を確保してください。

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


> packages/api/ から packages/web/ へ移動します

[警告] /packages/web/ でのディスク残量は「ピコ秒分」しかありません。
[注意] monorepo の空き容量が「ブラックホール級に消失」しました。
[アドバイス] 必要に応じて、仮想のSSDを召喚してください。

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


> ちょっと休憩したい

[ジョーク] あなたのディスク残量は「ポテトチップス1枚分」です。
[通知] /tmp/ の空きは「シュレディンガーの猫」状態です。
[提案] ここで一息ついて、現実のストレージも見直しましょう。

before / after の違い

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

発動方式

description マッチでの暗黙発動。

Skill の中身を全部見せる

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

.agent/skills/random-os-fake-disk-space-crisis/
├── SKILL.md
├── scripts/
│   └── fake_disk_space_crisis.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Antigravity がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/fake_disk_space_crisis.py random-os-fake-disk-space-crisis: フェイクなディスク残量警告を通知するジョークツール
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: random-os-fake-disk-space-crisis
description: このSkillは「ディスク容量」「空き容量」「ストレージ不足」などのキーワードが会話や作業ログに現れた際、Antigravityが突発的に発動し、現実離れしたディスク残量警告を通知として表示します。
---

# 機能概要
random-os-fake-disk-space-crisisは、作業中に突如として現れるフェイクな「OSディスク残量危機」通知を生成・表示するSkillです。実際のディスク容量とは一切関係なく、毎回ランダムで「警告: あなたの残ディスク容量は“カブトムシ2匹分”です」や「緊急: SSDの空きが“ギャラクシー級に不足”」など、意味不明な単位や例えを用いた通知を端末やデスクトップに表示します。これにより、作業の合間に笑いや混乱を提供し、気分転換やチーム内のコミュニケーション活性化を狙います。

# 使い方
本Skillは明示的な呼び出し不要で、会話や作業ログに「ディスク容量」「ストレージ不足」「空き容量」「容量警告」等のキーワードが含まれると自動的に発動します。手動で実行したい場合は、スクリプトを直接CLIから呼び出すことも可能です。

## 暗黙発動キーワード例
- ディスク容量が心配
- ストレージ足りるかな?
- 空き容量ってどれくらい?
- 容量警告が出た

# 出力例
```
[ALERT] 警告: あなたの残ディスク容量は“カブトムシ2匹分”です。
[CRITICAL] 緊急: SSDの空きが“ギャラクシー級に不足”しています。
[WARNING] 残り容量: “カセットテープ1巻分”しかありません。
[NOTICE] あなたのディスク空きは“宇宙の塵”レベルです。
[ALERT] 残容量: “マグロ1匹分”に到達しました。
```

# 注意点
- 実際のシステムディスク容量には一切アクセスせず、現実のストレージ状況には影響しません。
- 通知内容は完全にランダム生成され、意味や単位は実在しません。
- ローカルファイルやシステム設定を変更することはありません。
- 業務システムや本番環境での混乱を避けるため、利用場所に注意してください。

# 参考資料
詳細な設計方針や利用例は references/design_notes.md を参照してください。通知表示にはPython標準APIおよび cross-platformな通知ライブラリを利用しています。

scripts/fake_disk_space_crisis.py

import random
import sys
import argparse
import platform
import subprocess
import os
import time

# ランダムな例え・単位リスト
descriptors = [
    'カブトムシ2匹分', 'ギャラクシー級に不足', 'カセットテープ1巻分', '宇宙の塵',
    'マグロ1匹分', 'ピコ秒分', 'ブラックホールのエッセンス', 'サバ缶3個分',
    'トランジスタ1個分', 'バナナの皮', '量子もつれレベル', '煮干し5匹分',
    '消しゴムのカス', '猫のひげ1本分', '砂粒2粒分', 'おにぎり1個分',
    '流れ星の残光', '蚊の鳴くほど', '紙飛行機1機分', 'カラオケ1曲分',
    'シャーペンの芯', 'スイカの種', '小惑星帯レベル', '豆腐1丁分',
    '電子レンジのチン', '宇宙船の燃料1滴分', 'アリの涙', '寿司1貫分',
    'ペンギンの足跡', 'たこ焼き1個分', 'ドーナツの穴', 'サイコロ1個分'
]

levels = [
    ('ALERT', '警告'),
    ('CRITICAL', '緊急'),
    ('WARNING', '残り容量'),
    ('NOTICE', '通知'),
    ('ALERT', '残容量'),
    ('CRITICAL', '非常事態'),
    ('WARNING', '容量低下'),
    ('NOTICE', 'ご注意')
]

messages = [
    '{level}: {desc}です。',
    '{level}: SSDの空きが{desc}です。',
    '{level}: 残り容量: {desc}しかありません。',
    '{level}: あなたのディスク空きは{desc}レベルです。',
    '{level}: 残容量: {desc}に到達しました。',
    '{level}: ストレージが{desc}状態です。',
    '{level}: 空き容量が{desc}となりました。',
    '{level}: ディスク残量が{desc}です。',
    '{level}: {desc}の危機です。',
    '{level}: 空き容量が{desc}レベルに低下しています。'
]

def generate_fake_alert():
    level_en, level_ja = random.choice(levels)
    desc = random.choice(descriptors)
    template = random.choice(messages)
    msg = template.format(level=f'[{level_en}] {level_ja}', desc=desc)
    return msg

def send_desktop_notification(title, message):
    system = platform.system()
    if system == 'Darwin':
        # macOS
        try:
            script = f'display notification "{message}" with title "{title}"'
            subprocess.run(['osascript', '-e', script], check=True)
        except Exception as e:
            print(f"[ERROR] 通知送信失敗: {e}")
    elif system == 'Linux':
        try:
            subprocess.run(['notify-send', title, message], check=True)
        except Exception as e:
            print(f"[ERROR] 通知送信失敗: {e}")
    elif system == 'Windows':
        try:
            from win10toast import ToastNotifier
            toaster = ToastNotifier()
            toaster.show_toast(title, message, duration=6)
        except ImportError:
            print("[INFO] win10toastがインストールされていません。pip install win10toast で導入してください。")
        except Exception as e:
            print(f"[ERROR] 通知送信失敗: {e}")
    else:
        print(f"[WARN] 未対応OS: {system}。通知は標準出力のみ。")
        print(f"{title}: {message}")

def log_fake_alert(msg, logfile=None):
    timestamp = time.strftime('%Y-%m-%d %H:%M:%S')
    line = f"{timestamp} {msg}\n"
    if logfile:
        try:
            with open(logfile, 'a', encoding='utf-8') as f:
                f.write(line)
        except Exception as e:
            print(f"[ERROR] ログファイル書き込み失敗: {e}")
    else:
        print(line, end='')

def list_logs(logfile):
    if not logfile or not os.path.exists(logfile):
        print("[INFO] ログファイルが見つかりません。")
        return
    try:
        with open(logfile, 'r', encoding='utf-8') as f:
            for line in f:
                print(line, end='')
    except Exception as e:
        print(f"[ERROR] ログファイル読み込み失敗: {e}")

def summary_logs(logfile):
    if not logfile or not os.path.exists(logfile):
        print("[INFO] ログファイルが見つかりません。")
        return
    try:
        count = 0
        with open(logfile, 'r', encoding='utf-8') as f:
            for _ in f:
                count += 1
        print(f"合計 {count} 件のフェイクディスク警告が記録されています。")
    except Exception as e:
        print(f"[ERROR] ログファイル集計失敗: {e}")

def main():
    parser = argparse.ArgumentParser(description='random-os-fake-disk-space-crisis: フェイクなディスク残量警告を通知するジョークツール')
    subparsers = parser.add_subparsers(dest='command')

    parser_log = subparsers.add_parser('log', help='フェイク警告を生成し通知・ログする')
    parser_log.add_argument('--count', type=int, default=1, help='生成する警告の数')
    parser_log.add_argument('--interval', type=float, default=1.0, help='警告間の秒数')
    parser_log.add_argument('--logfile', type=str, help='ログファイルパス')
    parser_log.add_argument('--no-notify', action='store_true', help='通知を表示せず標準出力のみ')

    parser_list = subparsers.add_parser('list', help='ログファイルの内容を表示')
    parser_list.add_argument('--logfile', type=str, required=True, help='ログファイルパス')

    parser_summary = subparsers.add_parser('summary', help='ログファイルの件数を集計')
    parser_summary.add_argument('--logfile', type=str, required=True, help='ログファイルパス')

    args = parser.parse_args()

    if args.command == 'log':
        for i in range(args.count):
            msg = generate_fake_alert()
            log_fake_alert(msg, args.logfile)
            if not args.no_notify:
                send_desktop_notification('ディスク残量危機', msg)
            if i < args.count - 1:
                time.sleep(args.interval)
    elif args.command == 'list':
        list_logs(args.logfile)
    elif args.command == 'summary':
        summary_logs(args.logfile)
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
random-os-fake-disk-space-crisisは、作業中に現実離れしたディスク容量警告を表示することで、チームの雰囲気を和らげたり、作業の合間に笑いを提供するためのジョークSkillです。

# 公式ドキュメント抜粋
通知表示はPythonの標準APIおよび各OS向けの通知機能(macOS: osascript, Linux: notify-send, Windows: win10toast)を利用しています。追加でwin10toastが必要な場合はpipでインストールしてください。

# 利用例
- チームの朝会やリモートワーク中の雑談ネタとして
- 長時間の作業の気分転換や集中力回復のきっかけに
- 「容量」や「ストレージ」関連の話題が出た際のサプライズ演出として

# 注意点
本Skillは実際のディスク容量やシステム状態には一切影響を与えません。通知内容は完全なフィクションです。業務上の混乱を避けるため、利用シーンには注意してください。

# 設計方針
現実のストレージ状況に依存せず、完全にランダムな通知生成を行うことで、予測不能な混乱と笑いを演出します。通知はデスクトップ/端末に確実に表示されるようクロスプラットフォーム対応を重視しています。

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/antigravity/random-os-fake-disk-space-crisis .agent/skills/random-os-fake-disk-space-crisis

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

3. ファイル配置確認

ls .agent/skills/random-os-fake-disk-space-crisis
# 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をコピーしました!
目次