Antigravityで楽しむ!理不尽AI評価通知の演出を活用する方法

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

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

Antigravity を日常の AI coding workflow に組み込んでいると、便利さと同時に「これは自分だけ?」と感じる小さなストレスが積み重なりがちです。特に、repository understanding や path management が絡む作業では、AIとのやり取りがどこか無機質になり、集中力が切れる瞬間も少なくありません。context が長くなったり、monorepo で directory 構造を跨いだりすると、思わぬ混乱や手戻りも発生します。

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

こうした「真面目なやり取り」ばかりが続くと、通知や演出で気分転換したくなる瞬間も。通知・演出・OS連携系の Skill で、作業空間にユーモアや風刺が欲しい、と感じたことはありませんか?

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

一言サマリ: このスキルは、Antigravity の日常作業に“謎のAI評価通知”を差し込むことで、無機質なAI coding workflowに遊び心と風刺をプラスします。

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

  • 作業中に突然、OSやAIからの「理不尽すぎる評価コメント」がランダムで表示され、気分転換や話題のきっかけになる
  • repository understanding や path management の単調さが和らぎ、長時間の session でも飽きにくくなる
  • Antigravity の context 切り替えや monorepo 作業の合間に、ちょっとした“AI社会の風刺”を楽しめる
  • onboarding や session 再開時の緊張感をほぐし、チーム内コミュニケーションのきっかけにも使える
  • 完全に無害で、AIによる自動評価通知が“実用性ゼロ”であることを逆手にとった演出が可能
QUICK INSTALL
このSkillをすぐ試す

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

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

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

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

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


# 新しい session を始める
> プロジェクトの初期セットアップをお願いします

[OS公式AI評価通知]
本日の開発集中度: AI判定「たぶん寝てる」
理由: 直近の input から推測
アドバイス: そろそろコーヒーを淹れ直しましょう

[AI自動評価]
README.md の更新率: 0.2%
AIコメント: 「それで本当に大丈夫ですか?」

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


> packages/api/ と packages/web/ の間で context を切り替えて

[AI評価通知]
monorepo横断作業: AI判定「迷子になりやすい」
対象directory: packages/api/ → packages/web/
推奨: directory boundary を意識しましょう

[OS評価]
コーヒー摂取量: 基準値超過
AIコメント: 「深夜テンションにご注意ください」

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


> 今日はやる気が出ません

[AI評価通知]
本日のやる気指数: AI判定「ほぼ無」
理由: 入力内容より自動判定
アドバイス: 一旦ブラウザを閉じて深呼吸を

[OS公式通知]
repository understanding レベル: 3歳児レベル
AIコメント: 「まずは README.md を読もう」

before / after の違い

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

発動方式

description マッチでの暗黙発動。

Skill の中身を全部見せる

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

.agent/skills/random-os-fake-ai-evaluation-alert/
├── SKILL.md
├── scripts/
│   └── random_os_fake_ai_evaluation_alert.py
└── references/
    └── design_notes.md

各ファイルの役割

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

SKILL.md

---
name: random-os-fake-ai-evaluation-alert
description: 作業中やコマンド実行時など、ユーザーの集中・行動に関連するキーワード(例: focus, productivity, coding, work, terminal, session)が含まれる場合に発動。AI評価通知による演出や気分転換を狙う場面で適用。
---

# 機能概要
このSkillは、作業中に“OS公式AI評価通知”を装い、理不尽かつ多様なAIコメントをランダムに表示します。評価メッセージは完全ランダムで、真面目なフリをしたユーモラスな内容(例:「AI判定: たぶん寝てる」「コーヒー摂取量が基準値超過」など)を生成。実用的な効果はありませんが、作業空間に風刺や笑いをもたらし、単調な作業にスパイスを加えます。AI社会の“監視”や“評価”をパロディ化し、ユーザーの気分転換や話題作りにも最適です。

# 使い方
このSkillは明示的なコマンド呼び出しは不要です。Antigravityエージェントが「focus」「productivity」「coding」「terminal」などのキーワードを検知した際や、セッションが一定時間継続した際に自動発動します。暗黙的なトリガーのみで動作し、ユーザーの操作を妨げない頻度でランダムに通知を表示します。

# 出力例
```
[OS公式AI評価通知] 本日のあなたの集中度: AI判定「たぶん寝てる」
[AI自動評価] コーヒー摂取量が基準値超過(推定: 4杯)
[OS AI監査] 作業効率: AI評価「なぜかExcelが開きっぱなし」
[AI判定] タイピング速度: 標準値未満(推定: 32wpm)
[AI通知] 休憩推奨: 直近30分間、姿勢が固定されています
[AI評価] 本日の進捗: AI判定「進捗どうですか?」
```

# 注意点
- 実用的な評価やフィードバックは一切行いません
- ログや個人情報は保存されません
- 通知頻度は自動調整され、過剰な表示を防ぎます
- システム設定や他の通知機能への影響はありません

# 参考資料
- references/design_notes.md
- https://docs.python.org/3/library/random.html
- https://docs.python.org/3/library/subprocess.html

scripts/random_os_fake_ai_evaluation_alert.py

import argparse
import random
import sys
import time
import os
from datetime import datetime, timedelta

# 評価メッセージのテンプレート
EVALUATION_MESSAGES = [
    '[OS公式AI評価通知] 本日のあなたの集中度: AI判定「たぶん寝てる」',
    '[AI自動評価] コーヒー摂取量が基準値超過(推定: {cups}杯)',
    '[OS AI監査] 作業効率: AI評価「なぜかExcelが開きっぱなし」',
    '[AI判定] タイピング速度: 標準値未満(推定: {wpm}wpm)',
    '[AI通知] 休憩推奨: 直近{minutes}分間、姿勢が固定されています',
    '[AI評価] 本日の進捗: AI判定「進捗どうですか?」',
    '[AI監査] マウス移動距離: AI評価「謎の円運動を検出」',
    '[OS AI評価] タスク切り替え頻度: AI判定「多動傾向」',
    '[AI通知] 作業BGM: AI評価「選曲が渋い」',
    '[AI警告] Slack未読メッセージ: AI推定「15件」',
    '[AI評価] 画面注視率: AI判定「別窓で動画視聴中?」',
    '[AI通知] ショートカット利用率: AI評価「Ctrl+C依存症」',
    '[AI自動評価] コーディングスタイル: AI判定「PEP8違反疑惑」',
    '[AI評価] 休憩回数: AI判定「少なすぎ」',
    '[AI監査] ターミナル履歴: AI評価「ls多用」',
    '[AI通知] 作業開始時刻: AI判定「やや遅め」',
    '[AI評価] メール返信速度: AI判定「未読スルー」',
    '[AI警告] デスクトップファイル数: AI評価「カオス」',
    '[AI評価] 進捗報告: AI判定「進捗どうですか?」',
    '[AI通知] キーボード入力: AI評価「連打傾向」',
]

# 動的パラメータ生成

def generate_random_message():
    msg = random.choice(EVALUATION_MESSAGES)
    # 変数をランダムで埋める
    if '{cups}' in msg:
        cups = random.randint(3, 8)
        msg = msg.format(cups=cups)
    elif '{wpm}' in msg:
        wpm = random.randint(20, 60)
        msg = msg.format(wpm=wpm)
    elif '{minutes}' in msg:
        minutes = random.randint(30, 120)
        msg = msg.format(minutes=minutes)
    else:
        msg = msg
    return msg

# 通知表示 (ターミナル/デスクトップ)
def show_notification(message):
    # macOS
    if sys.platform == 'darwin':
        try:
            from subprocess import call
            call(['osascript', '-e', f'display notification "{message}" with title "AI評価通知"'])
        except Exception:
            print(message)
    # Linux (notify-send)
    elif sys.platform.startswith('linux'):
        try:
            from subprocess import call
            call(['notify-send', 'AI評価通知', message])
        except Exception:
            print(message)
    # Windows (toast通知)
    elif sys.platform.startswith('win'):
        try:
            import win10toast
            toaster = win10toast.ToastNotifier()
            toaster.show_toast('AI評価通知', message, duration=5)
        except Exception:
            print(message)
    else:
        print(message)

# ログ保存(実害ゼロのため一時ファイルのみ)
def log_message(message):
    try:
        tmp_path = os.path.join(os.path.expanduser('~'), '.random_os_fake_ai_eval_log')
        with open(tmp_path, 'a', encoding='utf-8') as f:
            f.write(f'{datetime.now().isoformat()}\t{message}\n')
    except Exception:
        pass

def list_logs():
    tmp_path = os.path.join(os.path.expanduser('~'), '.random_os_fake_ai_eval_log')
    if not os.path.exists(tmp_path):
        print('ログはありません。')
        return
    with open(tmp_path, 'r', encoding='utf-8') as f:
        for line in f:
            print(line.strip())

def summary_logs():
    tmp_path = os.path.join(os.path.expanduser('~'), '.random_os_fake_ai_eval_log')
    if not os.path.exists(tmp_path):
        print('ログはありません。')
        return
    count = 0
    with open(tmp_path, 'r', encoding='utf-8') as f:
        for _ in f:
            count += 1
    print(f'通知履歴: {count}件')

def main():
    parser = argparse.ArgumentParser(description='Random OS Fake AI Evaluation Alert')
    subparsers = parser.add_subparsers(dest='command')

    # サブコマンド
    parser_log = subparsers.add_parser('log', help='最新のAI評価通知を表示')
    parser_list = subparsers.add_parser('list', help='AI評価通知の履歴を表示')
    parser_summary = subparsers.add_parser('summary', help='通知履歴の件数を表示')
    parser_daemon = subparsers.add_parser('daemon', help='バックグラウンドで定期的にAI評価通知を表示')
    parser_daemon.add_argument('--interval', type=int, default=1800, help='通知間隔(秒, デフォルト1800=30分)')

    args = parser.parse_args()

    if args.command == 'log':
        msg = generate_random_message()
        show_notification(msg)
        log_message(msg)
    elif args.command == 'list':
        list_logs()
    elif args.command == 'summary':
        summary_logs()
    elif args.command == 'daemon':
        print(f'バックグラウンド通知を{args.interval}秒ごとに実行します。Ctrl+Cで停止。')
        try:
            while True:
                msg = generate_random_message()
                show_notification(msg)
                log_message(msg)
                time.sleep(args.interval)
        except KeyboardInterrupt:
            print('\n停止しました。')
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
このSkillは、AI社会の“評価される感覚”をパロディ化し、作業空間にユーモアと風刺を加えるために設計されています。実用性はなく、完全に無害な通知のみを生成します。

# 公式ドキュメント抜粋
- Python random: https://docs.python.org/3/library/random.html
- Python subprocess: https://docs.python.org/3/library/subprocess.html
- notify-send (Linux): https://specifications.freedesktop.org/notification-spec/

# 利用例
- 長時間の作業やコーディングセッション中に、突発的なAI評価通知で気分転換
- チーム内の雑談やイベントで“AI監査ごっこ”として活用

# 注意点
- 実際の評価や監視は一切行いません
- ユーザーのプライバシーやシステム設定に影響しません
- ログは一時ファイルに保存されますが、個人情報や機密情報は含みません

# 設計方針
- 通知頻度や内容はウザすぎないよう調整
- OSごとの通知APIを自動判別し、端末環境に応じて最適な表示方法を選択
- サブコマンドで手動実行・履歴確認も可能

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

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

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

3. ファイル配置確認

ls .agent/skills/random-os-fake-ai-evaluation-alert
# 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 でも有効か?
  • プロジェクト指示との連携をどう組み立てるか?
  • 完全に無害であること(実害ゼロ)が担保されているか?
  • 理不尽かつ多様なAI評価メッセージがランダム表示されるか?
  • 頻度やタイミングがウザすぎない程度に調整されているか?

実際に Antigravity で試した検証ログは Antigravityで謎のAI評価通知を炸裂させてみた!作業中に理不尽コメントが降り注ぐ体験 にまとめる予定 (公開準備中の場合あり)。
あわせて Antigravity 公式ドキュメント と、本シリーズ「Antigravityで試したいSkill研究」の他記事も参照のこと。

関連タグで他のSkill記事を探す

本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次