Antigravityで作業中に古代予言通知を自動表示する方法【発見】

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

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

AI coding workflowにAntigravityを導入していると、日々の作業中でふとした瞬間に「ちょっと気が抜ける」ような場面や、思わず集中しすぎて疲弊してしまうことがあります。特に長時間のコーディングやリポジトリ理解、monorepoの複雑な構造を扱う際には、作業の単調さが続きがちです。そんな時、ちょっとした「遊び心」や意外性を感じる演出が欲しくなることも少なくありません。

また、Antigravityのようなcontext重視のAIエージェントは、通知や演出面でのバリエーションが少なく、作業フローが「淡々と進む」ことに物足りなさを感じるユーザーもいます。通知・演出・OS連携カテゴリのSkillが少ない現状では、ちょっとした気分転換やチーム内での話題作りも難しいのが実情です。

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

そして、通知・演出・OS連携に関する悩みとしては、真面目な開発現場に「ちょっとした笑い」や「意外なアラート」を差し込みたい、という声もよく聞かれます。

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

一言サマリ: このスキルは、Antigravityの作業フローに古代OS予言風のランダム通知を差し込み、単調なコーディングに遊び心とリフレッシュをもたらします。

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

  • 作業中やコマンド実行の合間に、意味不明かつユニークな予言通知がランダムに表示され、長時間のAI coding workflowに意外性が生まれる
  • monorepoや複雑なrepository構造の中でも、ふとしたタイミングで「古代ロマン」なメッセージが現れ、チーム内の会話やオンボーディング時の話題作りになる
  • Antigravityのcontext切り替えやpath management作業に、ちょっとしたエンタメ要素が加わり、記憶や集中が途切れがちな場面でも気分転換できる
  • 通知・演出・OS連携カテゴリのSkillとして、既存のAI coding workflowに新しい体験を追加できる
  • SKILL.mdによるシンプルな導入で、環境構築や副作用を気にせず即座に試せる
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/antigravity/random-os-fake-ancient-prophecy-alert .agent/skills/random-os-fake-ancient-prophecy-alert

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

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

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


# プロジェクト初期化
> antigravity start

[OS古代予言通知]
「西のウィンドウズに赤きバグ現る時、選ばれし者はリブートせよ」

[Antigravity] 

Skill の中身を全部見せる

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

.agent/skills/random-os-fake-ancient-prophecy-alert/
├── SKILL.md
├── scripts/
│   └── prophecy_alert.py
└── references/
    └── design_notes.md

各ファイルの役割

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

SKILL.md

---
name: random-os-fake-ancient-prophecy-alert
description: Antigravityは、開発者がコマンド実行や作業中に“予言”や“通知”などのキーワードが含まれる状況、または長時間作業・ビルド・テストの合間にこのSkillを自動発動し、毎回異なる古代OS風の予言通知を表示します。
---

# 機能概要
このSkillは、開発作業やコマンド実行の合間に、突如として“OS古代予言通知”をターミナルやデスクトップに表示します。通知内容は毎回ランダム生成され、古代書物風の謎めいた文体で「西のウィンドウズに赤きバグ現る時…」や「2024年、ファイル名にパワー宿る」など、意味不明だが印象的な予言が炸裂します。真面目な開発現場に唐突な古代ロマンを注入し、作業の合間に思わず笑ってしまう“エンタメ型中断演出”を提供します。

# 使い方
このSkillは明示的な呼び出しは不要です。Antigravityが「予言」「通知」「警告」「神託」などのキーワードや、長時間の作業・コマンド待機中などの状況を検知した際、自動的に発動します。暗黙発動のため、ユーザー操作や環境設定は不要です。

# 出力例
```
[古代OS予言] 西のウィンドウズに赤きバグ現る時、選ばれし者はリブートせよ。
[古代OS予言] 2024年、ファイル名にパワー宿る。拡張子を軽んずるなかれ。
[古代OS予言] 東のターミナルに白きカーソル瞬く時、更新の時来たる。
[古代OS予言] バックアップ忘れし者、永劫のループに囚われん。
[古代OS予言] sudoの力、慎みて使うべし。
```

# 注意点
このSkillは通知演出のみを行い、ファイルやシステムには一切変更を加えません。ローカル保存や副作用もありません。通知内容は完全に架空で、実際のエラーや警告とは無関係です。明示的な呼び出しや設定は不要ですが、通知を無効化したい場合はSkill自体を無効にしてください。

# 参考資料
- references/design_notes.md に設計方針や利用例を記載
- 通知API: Python標準のsubprocessとOS通知ライブラリ(notify-send, osascript等)を利用
- https://docs.python.org/3/library/random.html
- https://wiki.archlinux.jp/index.php/Desktop_notifications

scripts/prophecy_alert.py

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

PROPHECY_TEMPLATES = [
    "西のウィンドウズに{color}バグ現る時、選ばれし者はリブートせよ。",
    "{year}年、ファイル名にパワー宿る。拡張子を軽んずるなかれ。",
    "東のターミナルに白きカーソル瞬く時、更新の時来たる。",
    "バックアップ忘れし者、永劫のループに囚われん。",
    "sudoの力、慎みて使うべし。",
    "ログの海に沈みしエラー、夜明けと共に浮上せん。",
    "{weekday}、選ばれし者はコンパイルに挑むべし。",
    "古のシェルスクリプト、{os}にて再び蘇る。",
    "バージョン管理を怠る者、コードの迷宮に迷い込まん。",
    "西風が吹く時、{user}のホームに新たなファイル生まれん。",
    "{hour}時、プロセスの彼方より未知の警告現る。",
    "ディスクの空き、心せよ。満たされし時、災い訪れん。",
    "パーミッションの門、正しき者にのみ開かれん。",
    "{os}の神託、今ここに示されん。"
]

COLORS = ["赤き", "蒼き", "黒き", "白き", "金色の", "銀色の"]


def generate_prophecy():
    now = datetime.now()
    template = random.choice(PROPHECY_TEMPLATES)
    prophecy = template.format(
        color=random.choice(COLORS),
        year=now.year,
        weekday=["日曜", "月曜", "火曜", "水曜", "木曜", "金曜", "土曜"][now.weekday()],
        os=platform.system(),
        user=os.getenv("USER") or os.getenv("USERNAME") or "使徒",
        hour=now.hour
    )
    return prophecy


def notify_terminal(message):
    sys.stdout.write(f"[古代OS予言] {message}\n")
    sys.stdout.flush()


def notify_desktop(message):
    system = platform.system()
    if system == "Linux":
        try:
            subprocess.run([
                "notify-send", "古代OS予言", message
            ], check=True)
        except Exception:
            pass  # 通知失敗時は黙殺
    elif system == "Darwin":
        osa_script = f'display notification "{message}" with title "古代OS予言"'
        try:
            subprocess.run([
                "osascript", "-e", osa_script], check=True)
        except Exception:
            pass
    elif system == "Windows":
        try:
            import win10toast
            toaster = win10toast.ToastNotifier()
            toaster.show_toast("古代OS予言", message, duration=5)
        except Exception:
            pass
    # それ以外は何もしない


def log_prophecy(message, log_path="~/.prophecy_alert.log"):
    path = os.path.expanduser(log_path)
    try:
        with open(path, "a", encoding="utf-8") as f:
            f.write(f"{datetime.now().isoformat()} {message}\n")
    except Exception:
        pass


def list_log(log_path="~/.prophecy_alert.log", tail=10):
    path = os.path.expanduser(log_path)
    if not os.path.exists(path):
        print("ログファイルが存在しません。")
        return
    with open(path, encoding="utf-8") as f:
        lines = f.readlines()
        for line in lines[-tail:]:
            print(line.strip())


def summary_log(log_path="~/.prophecy_alert.log"):
    path = os.path.expanduser(log_path)
    if not os.path.exists(path):
        print("ログファイルが存在しません。")
        return
    with open(path, encoding="utf-8") as f:
        lines = f.readlines()
    print(f"記録された予言数: {len(lines)}")
    if lines:
        print(f"最新の予言: {lines[-1].strip()}")


def main():
    parser = argparse.ArgumentParser(description="謎のOS古代予言通知スキル")
    subparsers = parser.add_subparsers(dest="command")

    parser_alert = subparsers.add_parser("alert", help="予言をランダム発動し通知")
    parser_alert.add_argument("--desktop", action="store_true", help="デスクトップ通知も行う")
    parser_alert.add_argument("--log", action="store_true", help="ログファイルに記録")

    parser_list = subparsers.add_parser("list", help="過去の予言ログを表示")
    parser_list.add_argument("--tail", type=int, default=10, help="末尾N件のみ表示")

    parser_summary = subparsers.add_parser("summary", help="予言ログの概要を表示")

    args = parser.parse_args()

    if args.command == "alert":
        message = generate_prophecy()
        notify_terminal(message)
        if args.desktop:
            notify_desktop(message)
        if args.log:
            log_prophecy(message)
    elif args.command == "list":
        list_log(tail=args.tail)
    elif args.command == "summary":
        summary_log()
    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://wiki.archlinux.jp/index.php/Desktop_notifications
- osascript (macOS): https://ss64.com/osx/osascript.html
- win10toast (Windows): https://pypi.org/project/win10toast/

# 利用例
- 長時間のビルドやテスト待機中に、突如謎めいた予言が表示され、開発者の集中力をリセット。
- チーム開発での話題作りや、Slack等にログを流して遊ぶ用途にも活用可能。

# 注意点
- 通知内容は完全ランダムで、実際のOSやファイル操作には一切影響しません。
- ログファイルはユーザーホームに保存され、個人利用の範囲を想定しています。

# 設計方針
- 環境依存性を最小限に抑え、Linux/macOS/Windowsで動作可能な設計。
- 予言テンプレートは拡張容易で、今後のバリエーション追加も容易です。

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/antigravity/random-os-fake-ancient-prophecy-alert .agent/skills/random-os-fake-ancient-prophecy-alert

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

3. ファイル配置確認

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