Antigravityで楽しむランダムOSエラーハイク通知の演出入門

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

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

AI coding workflow を Antigravity で回していると、プロジェクトの規模や directory 構造が複雑になるほど、ささいな context ミスや path 管理のストレスが蓄積しがちです。特に monorepo や大規模 repository では、AI に repository understanding を毎回伝える面倒さや、思いがけない挙動に頭を抱えることも少なくありません。

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

こうした状況で、集中力を保つためのちょっとした「遊び」や、気分転換になる演出が欲しくなる瞬間もあるはずです。通知・演出・OS連携系の Skill で、作業の合間に思わず笑ってしまうような体験があれば、気持ちを切り替えて次のタスクに臨みやすくなります。

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

一言サマリ: このスキルは、作業フローに突如現れる“謎のエラー俳句”通知で、AI coding workflow に独特のアクセントをもたらします。

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

  • Antigravity 利用中に、完全ランダムな五・七・五の fake error haiku がターミナルやデスクトップに現れ、単調な作業や stale context の合間に“ゆるい”気分転換ができる
  • monorepo や大規模 repository での directory 移動、context 切り替え時に、思わずクスッとする演出が入り、onboarding や長時間作業のストレスが和らぐ
  • エラー通知が完全に意味不明かつ俳句形式なので、実害はなく、作業フローや path management の邪魔にならずに楽しめる
  • AI coding workflow の合間に、Antigravity の記憶や repository understanding の“曖昧さ”も笑い飛ばせる余裕が生まれる
  • Skill の description マッチで自動発動するため、明示的なコマンドや設定変更なしで導入できる
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/antigravity/random-os-fake-error-haiku-notifier .agent/skills/random-os-fake-error-haiku-notifier

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

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

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


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

[Fake OS Error Haiku Notification]
404 道に迷いて 春霞

(ヒント: まだ context がセットされていません)

> main.py の内容を要約して

[Fake OS Error Haiku Notification]
メモリ消ゆ 春まだ遠き バグの夜

(ヒント: ファイルパスを確認してください)

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


> packages/api と packages/web を同時に編集

[Fake OS Error Haiku Notification]
依存消え 静寂の中 import 迷子

(ヒント: directory 境界をまたいでいます)

> packages/web/src/App.tsx を修正

[Fake OS Error Haiku Notification]
道ふさがる ビルドの彼方 空の Promise

(ヒント: monorepo context を見直してください)

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


> 今日は集中力が切れてきた

[Fake OS Error Haiku Notification]
眠気さす エラーの波に 春うらら

(ヒント: たまには休憩も大切です)

> もう一度俳句を

[Fake OS Error Haiku Notification]
リポジトリ 桜舞い散る stale context

(ヒント: context をリフレッシュしましょう)

before / after の違い

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

発動方式

description マッチでの暗黙発動。

Skill の中身を全部見せる

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

.agent/skills/random-os-fake-error-haiku-notifier/
├── SKILL.md
├── scripts/
│   └── haiku_error_notifier.py
└── references/
    └── design_notes.md

各ファイルの役割

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

SKILL.md

---
name: random-os-fake-error-haiku-notifier
description: コマンド実行や作業中に、'エラー'や'通知'などのキーワードが含まれる文脈で、五・七・五の俳句形式によるランダムなOS風エラーメッセージをデスクトップやターミナルに通知する際に発動します。
---

# 機能概要
このSkillは、日常の作業やコマンド実行時に、まるで本物のOSエラーのような“俳句”通知をランダムに表示します。通知内容は五・七・五の日本語俳句形式で、毎回異なる架空のエラーやシステム状況を詠みます。実用性は皆無ですが、作業者の心を一瞬だけ揺さぶる摩訶不思議な体験を提供します。通知はデスクトップ(macOS/Linuxのnotify-sendやosascript)またはターミナルに表示され、作業環境にちょっとしたユーモアや癒しを添えます。

# 使い方
このSkillは明示的な呼び出しは不要で、エラー通知やOS連携、通知、警告、システムメッセージなどのキーワードを含む文脈で自動発動します。暗黙発動例として「エラー通知を出す」「警告を表示」「システムエラーを模擬」などが該当します。

# 出力例
```
[Haiku Error Notification]
メモリ消ゆ 春まだ遠き バグの夜

[Haiku Error Notification]
404 道に迷いて 春霞

[Haiku Error Notification]
アクセス拒否 静かなる夜 再起動
```

# 注意点
本Skillは実際のエラー検知やシステム監視は一切行いません。俳句の内容は完全にランダム生成され、実際のシステム状態とは無関係です。通知は一時的にしか表示されず、ローカルに保存されません。通知頻度や表示箇所は設定可能ですが、初期状態では1時間に1回程度の頻度で表示されます。

# 参考資料
- references/design_notes.md
- https://docs.python.org/ja/3/library/random.html
- https://pypi.org/project/plyer/ (クロスプラットフォーム通知)

scripts/haiku_error_notifier.py

import random
import sys
import time
import argparse
import platform
import subprocess
from datetime import datetime, timedelta

try:
    from plyer import notification
    PLYER_AVAILABLE = True
except ImportError:
    PLYER_AVAILABLE = False

# 俳句生成用の語彙リスト
FIVE_SYLLABLES = [
    'メモリ消ゆ', '404', 'アクセス拒否', 'ファイル消失', '接続切れ', 'CPU熱し', '更新失敗', 'バグの夜', 'ログ消える', '権限なし',
    '時雨降る', '時刻ずれる', '応答なし', '未知の道', 'セグフォールト', '認証失敗', '空き容量', '静かな夜', '再起動', '春霞'
]
SEVEN_SYLLABLES = [
    '道に迷いて', '春まだ遠き', 'バグの夜', '静かなる夜', 'ログに残らず', 'プロセス落ちる', '再起動せよ', 'エラー溢れて',
    'パスが消えて', '夢の彼方へ', '終わらぬ処理', '時を戻して', '闇に消えゆく', '信号届かず', '誰も知らない',
    '記憶の彼方', '空を仰げば', 'エラーの海へ', '希望は消えて', 'シグナル受信'
]

# 俳句生成
def generate_haiku():
    first = random.choice(FIVE_SYLLABLES)
    second = random.choice(SEVEN_SYLLABLES)
    third = random.choice(FIVE_SYLLABLES)
    # 句が重複しないように
    while third == first:
        third = random.choice(FIVE_SYLLABLES)
    return f"{first} {second} {third}"

# 通知表示
def show_notification(haiku, title="Haiku Error Notification"):
    sys_platform = platform.system()
    if PLYER_AVAILABLE:
        notification.notify(title=title, message=haiku, timeout=8)
        return
    if sys_platform == "Darwin":
        # macOS
        script = f'display notification "{haiku}" with title "{title}"'
        subprocess.run(["osascript", "-e", script])
    elif sys_platform == "Linux":
        # Linux (notify-send)
        subprocess.run(["notify-send", title, haiku])
    else:
        # Fallback: print to terminal
        print(f"[{title}]\n{haiku}")

# ログ保存
def log_haiku(haiku, log_file="haiku_error.log"):
    with open(log_file, "a", encoding="utf-8") as f:
        f.write(f"[{datetime.now().isoformat()}] {haiku}\n")

# ログ一覧
def list_haiku_logs(log_file="haiku_error.log", count=10):
    try:
        with open(log_file, "r", encoding="utf-8") as f:
            lines = f.readlines()
            for line in lines[-count:]:
                print(line.strip())
    except FileNotFoundError:
        print("No haiku error logs found.")

# ログサマリー
def summary_haiku_logs(log_file="haiku_error.log"):
    try:
        with open(log_file, "r", encoding="utf-8") as f:
            lines = f.readlines()
            print(f"Total haiku errors: {len(lines)}")
            if lines:
                print(f"First: {lines[0].strip()}")
                print(f"Last: {lines[-1].strip()}")
    except FileNotFoundError:
        print("No haiku error logs found.")

# メインループ
def run_notifier(interval_minutes=60, log_file="haiku_error.log", once=False):
    try:
        while True:
            haiku = generate_haiku()
            show_notification(haiku)
            log_haiku(haiku, log_file)
            if once:
                break
            time.sleep(interval_minutes * 60)
    except KeyboardInterrupt:
        print("\nHaiku notifier stopped.")

# CLIエントリポイント

def main():
    parser = argparse.ArgumentParser(description="Random OS Fake Error Haiku Notifier")
    subparsers = parser.add_subparsers(dest="command")

    parser_run = subparsers.add_parser("run", help="定期的に俳句エラー通知を出す")
    parser_run.add_argument("--interval", type=int, default=60, help="通知間隔(分)")
    parser_run.add_argument("--once", action="store_true", help="一度だけ通知して終了")
    parser_run.add_argument("--log-file", type=str, default="haiku_error.log", help="ログファイル名")

    parser_list = subparsers.add_parser("list", help="過去の俳句エラーログを表示")
    parser_list.add_argument("--count", type=int, default=10, help="表示する件数")
    parser_list.add_argument("--log-file", type=str, default="haiku_error.log", help="ログファイル名")

    parser_summary = subparsers.add_parser("summary", help="俳句エラーログのサマリーを表示")
    parser_summary.add_argument("--log-file", type=str, default="haiku_error.log", help="ログファイル名")

    args = parser.parse_args()

    if args.command == "run":
        run_notifier(interval_minutes=args.interval, log_file=args.log_file, once=args.once)
    elif args.command == "list":
        list_haiku_logs(log_file=args.log_file, count=args.count)
    elif args.command == "summary":
        summary_haiku_logs(log_file=args.log_file)
    else:
        parser.print_help()

if __name__ == "__main__":
    main()

references/design_notes.md

# 概要
このSkillは、作業者の気分転換やユーモアの提供を目的に、OS風のエラー通知を俳句形式でランダム表示します。実際のシステムエラーとは無関係で、通知内容は完全に自動生成されます。

# 公式ドキュメント抜粋
通知表示にはPythonの`plyer.notification`(クロスプラットフォーム)、macOSの`osascript`、Linuxの`notify-send`を利用。ログはローカルファイルに保存され、CLIで閲覧・サマリー表示が可能です。

# 利用例
- 長時間作業中のリフレッシュやアイスブレイク
- チーム内での小ネタやイベント演出
- テスト用の通知システム模擬

# 注意点
実際のエラー検知やシステム監視は行いません。俳句は完全に架空であり、通知頻度や内容が作業の妨げにならないよう初期設定されています。

# 設計方針
冗長な通知や過度な干渉を避けるため、通知間隔やログ機能を設けています。CLIサブコマンドで運用状況の確認や履歴の取得が容易です。

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/antigravity/random-os-fake-error-haiku-notifier .agent/skills/random-os-fake-error-haiku-notifier

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

3. ファイル配置確認

ls .agent/skills/random-os-fake-error-haiku-notifier
# SKILL.md, scripts/, references/, README.md があればOK

4. Antigravity を再起動 (or Skill 自動検出を待つ)

新しいSkillが自動で認識されます。リスト確認したい場合は ${productName} に「使える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をコピーしました!
目次