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による自動評価通知が“実用性ゼロ”であることを逆手にとった演出が可能
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記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
