Antigravityで楽しむ謎のメモリリーク通知を活用する方法

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

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

Antigravity を使っていると、AI coding workflow のなかでふとした瞬間に「ちょっと疲れたな」「集中力が切れてきた」と感じることがある。特に monorepo や巨大な repository を扱っていると、context や memory の管理が煩雑になり、気分転換や遊び心が欲しくなる瞬間も少なくない。

また、日々の作業中には「通知」や「演出」といった要素が意外と心のリズムに影響する。Antigravity のような高機能 AI Coding Agent でも、たまには肩の力を抜いた演出やフェイク通知があってもいいのでは、と感じることも。

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

こうした悩みの背景には、AI の repository understanding や path management の限界、また人間側の集中力維持が絡んでいる。「通知・演出・OS連携」系の Skill で、日常にちょっとした刺激や遊び心を取り入れたくなるのも自然な流れだ。

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

一言サマリ: このスキルは、Antigravity の作業空間に「謎のOSメモリリーク警告」をフェイクで出現させ、マンネリ化したAI coding workflowに遊び心とリフレッシュをもたらすSkill。

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

  • 作業や context 切り替えのタイミングで、毎回ランダムなフェイク警告が現れ、気分転換やリズムチェンジを促せる
  • 長時間の repository understanding や monorepo 横断作業中でも、ユーモラスな通知で疲労感を和らげる
  • onboarding や session 再開時の「重たい説明」タイムに、遊び心あるメッセージで場を和ませる
  • 通知は完全にフェイクで、実際のメモリやファイルには一切影響しないため安心して導入できる
  • 導入も削除も簡単で、.agent/skills/ 配下に置くだけで即反映される
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/antigravity/random-os-fake-memory-leak-alert .agent/skills/random-os-fake-memory-leak-alert

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

使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示す。Skill が返す出力は推測だが、現実的なフォーマット・現実的な長さで書く。

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


> 新しいプロジェクトで作業を始める

[OS警告] 重大:メモリがどこかに消えました。
[OS通知] ご注意ください。/src/utils/memory.ts 付近で記憶領域の流出が観測されました。
[ヒント] この警告は冗談です。やる気メモリもリーク中かもしれません。

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


> packages/user-service/ から packages/payment-service/ へ移動

[OS公式] 記憶領域流出中:/packages/payment-service/ で仮想メモリが迷子になっています。
[警告] あなたの context が package 境界を超えました。memory-leak 警戒レベル:高
[ジョーク通知] これはフェイク警告です。安心して monorepo をお楽しみください。

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


> 今日は集中力が続かないな…

[OS通知] 注意:あなたのやる気メモリもリークしています。
[ヒント] /README.md で motivation を再充填してください。
[警告] この警告はフェイクです。心のリソースを大切に。

before / after の違い

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

発動方式

description マッチでの暗黙発動。

Skill の中身を全部見せる

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

.agent/skills/random-os-fake-memory-leak-alert/
├── SKILL.md
├── scripts/
│   └── fake_memory_leak_alert.py
└── references/
    └── design_notes.md

各ファイルの役割

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

SKILL.md

---
name: random-os-fake-memory-leak-alert
description: Antigravityがユーザーの集中作業中や長時間の操作時、または『メモリ』『OS』『リーク』『アラート』などのキーワードを含む文脈を検出した際に発動。通知は必ずフェイクで、実害はありません。
---

# 機能概要
このSkillは、ユーザーが作業に没頭している最中や、OSやメモリに関する話題が出た際に、まるで本物のシステム警告のような『フェイク・メモリリークアラート』をデスクトップ通知として表示します。通知内容は毎回ランダムに生成され、深刻そうな警告からユーモラスな文言まで幅広く、作業中のちょっとした息抜きや驚きを演出します。実際のシステムやメモリには一切影響を与えません。

# 使い方
このSkillは明示的な呼び出しを必要とせず、Antigravityエージェントが自動的にトリガーします。例えば「メモリリーク」「OSクラッシュ」「リソース不足」などのキーワードが会話やコマンドに含まれる場合、または長時間の作業が継続している場合に発動します。明示的なCLIやAPI呼び出しは不要です。

# 出力例
```
[重大] OSメモリリーク警告: システムメモリがどこかに消えました。
[警告] OS公式: 記憶領域が流出しています。至急対応してください。
[注意] あなたのやる気メモリもリークしています。
[アラート] メモリリーク検出: 0xDEADBEEF番地に異常発生。
[通知] 仮想メモリが現実逃避を始めました。
```

# 注意点
- このSkillは通知のみを表示し、実際のシステムやファイルには一切変更を加えません。
- 通知内容は完全にフェイクであり、誤解を招かないよう明確に設計されています。
- ローカル環境での通知にはPython標準や外部ライブラリ(例: plyer, notify2)が利用されます。
- Skillの導入・削除はAntigravityのSkill管理機能から簡単に行えます。

# 参考資料
- references/design_notes.md
- https://docs.python.org/ja/3/library/random.html
- https://plyer.readthedocs.io/en/latest/

scripts/fake_memory_leak_alert.py

import sys
import random
import time
import argparse
import threading
import platform

try:
    if platform.system() == 'Linux':
        import notify2
    elif platform.system() == 'Windows':
        from win10toast import ToastNotifier
    elif platform.system() == 'Darwin':
        import subprocess
    else:
        notify2 = None
except ImportError:
    notify2 = None

def get_random_alert():
    titles = [
        '重大', '警告', '注意', 'アラート', '通知', 'OS公式', 'システム', 'Error', 'Critical'
    ]
    bodies = [
        'OSメモリリーク警告: システムメモリがどこかに消えました。',
        '記憶領域が流出しています。至急対応してください。',
        'あなたのやる気メモリもリークしています。',
        'メモリリーク検出: 0xDEADBEEF番地に異常発生。',
        '仮想メモリが現実逃避を始めました。',
        'RAMがRAMENになりました。',
        'プロセスが記憶を失いました。',
        'OSが自分の存在を疑い始めました。',
        '記憶領域がブラックホール化しています。',
        'メモリバンクが夢の国へ旅立ちました。',
        'システムのやる気が0%になりました。',
        '警告: メモリがどこかでパーティー中。',
        'エラー: メモリが現実逃避を決意しました。',
        '注意: 仮想メモリが物理的に疲弊しています。',
        'メモリリーク: 物理法則が崩壊しました。'
    ]
    title = random.choice(titles)
    body = random.choice(bodies)
    return title, body

def send_notification(title, message):
    system = platform.system()
    if system == 'Linux' and notify2:
        notify2.init('FakeMemoryLeakAlert')
        n = notify2.Notification(title, message)
        n.set_urgency(notify2.URGENCY_CRITICAL)
        n.show()
    elif system == 'Windows':
        try:
            toaster = ToastNotifier()
            toaster.show_toast(title, message, duration=5, threaded=True)
        except Exception as e:
            print(f"[通知失敗] {e}")
    elif system == 'Darwin':
        try:
            subprocess.run([
                'osascript', '-e',
                f'display notification "{message}" with title "{title}"'
            ])
        except Exception as e:
            print(f"[通知失敗] {e}")
    else:
        print(f"[{title}] {message}")

def alert_once():
    title, msg = get_random_alert()
    send_notification(title, msg)

def alert_loop(interval, count):
    for _ in range(count):
        alert_once()
        time.sleep(interval)

def list_alerts():
    print("--- フェイクメモリリーク通知例 ---")
    for _ in range(10):
        title, msg = get_random_alert()
        print(f"[{title}] {msg}")

def summary():
    print("このSkillは、OSメモリリークを模したフェイク通知をランダムに生成し、ユーザーの画面に表示します。実際のシステムには一切影響を与えません。\n")
    print("サポートOS: Linux (notify2), Windows (win10toast), macOS (osascript)\n")
    print("通知例:")
    list_alerts()

def parse_args():
    parser = argparse.ArgumentParser(description='Fake OS Memory Leak Alert Skill')
    subparsers = parser.add_subparsers(dest='command')

    parser_alert = subparsers.add_parser('alert', help='1回だけフェイクアラートを表示')
    parser_loop = subparsers.add_parser('loop', help='N回フェイクアラートを表示')
    parser_loop.add_argument('--interval', type=int, default=10, help='通知間隔(秒)')
    parser_loop.add_argument('--count', type=int, default=5, help='通知回数')
    parser_list = subparsers.add_parser('list', help='通知例を10件表示')
    parser_summary = subparsers.add_parser('summary', help='Skill概要と通知例を表示')
    return parser.parse_args()

def main():
    args = parse_args()
    if args.command == 'alert':
        alert_once()
    elif args.command == 'loop':
        alert_loop(args.interval, args.count)
    elif args.command == 'list':
        list_alerts()
    elif args.command == 'summary':
        summary()
    else:
        print("コマンドを指定してください: alert | loop | list | summary")

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
本Skillは、OSやメモリに関する会話や長時間の作業時に、ユーザーの注意を引くためのフェイク通知を表示します。通知内容は毎回ランダムで、実際のシステムには一切影響を与えません。

# 公式ドキュメント抜粋
- Python random: https://docs.python.org/ja/3/library/random.html
- plyer (通知用): https://plyer.readthedocs.io/en/latest/
- notify2 (Linux通知): https://pypi.org/project/notify2/
- win10toast (Windows通知): https://pypi.org/project/win10toast/

# 利用例
- 長時間作業の合間にユーザーの集中をリセットする演出
- メモリやシステム関連のジョークやネタとして

# 注意点
- 本Skillは通知のみで、ファイルやシステムには何も変更を加えません。
- 通知内容は完全なフィクションです。誤解を招かないよう設計しています。
- 通知が不要な場合はSkillを無効化してください。

# 設計方針
- OSごとに適切な通知APIを利用し、導入・削除が容易な構造としています。
- 通知例は随時拡張可能で、ユーザー体験を損なわないよう配慮しています。

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/antigravity/random-os-fake-memory-leak-alert .agent/skills/random-os-fake-memory-leak-alert

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

3. ファイル配置確認

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