Antigravity ユーザーが日常でぶつかる悩み
AI coding workflow を Antigravity で回していると、集中と効率を両立するための工夫が欠かせません。一方で、長時間作業や monorepo のような複雑な repository 構造を扱う現場では、思いがけない「気の緩み」や「リズムの崩れ」に悩まされることも。特に通知やOS連携系のSkillが不足していると、単調な作業や context の切り替え時にちょっとした気分転換ができず、逆に workflow の質が落ちることもあります。
Antigravity 固有のあるある悩みを挙げると:
- Antigravity が context を見失って違う場所のコードを参照する
- monorepo で package を跨いだ瞬間、Antigravity が repo 構造を忘れる
- session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
- 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
- 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる
こうした悩みの合間に、思わず「一息つきたい」「場を和ませたい」と感じる瞬間も少なくありません。通知・演出・OS連携系Skillの拡充は、Antigravity の日常利用をより楽しく、柔軟にするためのポイントです。
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは、Antigravity の作業中に突如として「謎の陰謀論アラート」をデスクトップ通知で爆誕させるSkill。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- 単調なAI coding workflowや長時間の作業に、唐突なネタ通知で場の空気を和ませ、集中をリフレッシュできる
- monorepoや複雑な directory 構造を扱う中で、ちょっとした混乱や笑いを演出し、onboarding や session 再開時の緊張をほぐせる
- Antigravity の通知・演出系Skillのバリエーションが増え、repoやcontext管理だけでなく「遊び心」も組み込める
- AIエージェントの「無機質さ」を和らげ、開発現場でのコミュニケーションのきっかけを作る
- SKILL.md ベースで導入・管理できるため、運用やpath managementもシンプル
GitHub から degit でコマンド1行、Antigravity の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/antigravity/random-desktop-conspiracy-alert .agent/skills/random-desktop-conspiracy-alert実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示します。
シーン1: session 開始時 (プロジェクト初動で)
# session開始直後のチャット
> このプロジェクトの全体構造を把握して、src/以下のテストも見てほしい
[Desktop Notification]
「Wi-Fiの波動がコードに干渉しています。今日のバグは通常の3倍発生する可能性があります。」
Antigravity: プロジェクト構造を解析しました。src/配下のtestディレクトリも含めてcontextに追加します。
シーン2: monorepo / package 跨ぎ作業時
> packages/alphaとpackages/betaの両方を見比べて、共通処理を抽出できますか?
[Desktop Notification]
「本日15時、全てのバグが覚醒します。packages/beta/utils/は宇宙人の監視下にあります。」
Antigravity: packages/alpha, packages/beta両方のdirectoryをcontextに追加し、共通処理をサーチします。
シーン3: お遊び的な使い方
> 今日はやる気が出ません。何か面白いことを言って
[Desktop Notification]
「コードレビューは政府の陰謀です。あなたのPRはすでに審査済みかもしれません。」
Antigravity: 気分転換におすすめのSkillやtipsをご案内できます。ご希望があればお知らせください。
before / after の違い
| 場面 | Skill 無し | Skill 有り |
|---|---|---|
| session 再開時 | repo 構造から毎回説明、path も指定し直し | Antigravity が自動で context を復元、最小プロンプトで再開。加えて謎の陰謀論通知が流れ、場が和む |
| monorepo 移動 | 違う package のコードを参照しがち | directory boundary を意識して必要な範囲だけ見る。タイミング次第で陰謀論アラートが届く |
| 長時間 workflow | long context で重要箇所が薄まる | 唐突な通知で頭をリフレッシュ、集中力の再起動に役立つ |
発動方式
description マッチでの暗黙発動。
Skill の中身を全部見せる
.agent/skills/random-desktop-conspiracy-alert/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agent/skills/random-desktop-conspiracy-alert/
├── SKILL.md
├── scripts/
│ └── random_desktop_conspiracy_alert.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Antigravity がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/random_desktop_conspiracy_alert.py |
ランダム陰謀論デスクトップアラート |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: random-desktop-conspiracy-alert
description: 作業中やコード編集時、"通知" "アラート" "集中力" "気分転換" などのキーワードを含む状況で、Antigravityがユーザーのデスクトップに突発的な陰謀論風通知を表示し、場を和ませたいときに発動します。
---
# 機能概要
このSkillは、開発者のデスクトップに突如として意味不明な陰謀論風アラートを表示します。内容は完全ランダムで、現実には全く根拠のない「Wi-Fiの波動が干渉しています」「本日15時、全てのバグが覚醒します」など、ユーモアと混乱をもたらすものです。作業の合間に一瞬の気分転換や笑いを提供し、チームの雰囲気を和らげることが目的です。
# 使い方
このSkillは明示的な呼び出しは不要で、"通知" "アラート" "集中力" "気分転換" などのキーワードや、作業が長時間継続している場合に自動で発動します。semantic-match-onlyトリガーにより、ユーザーの状況に合わせて適宜通知が表示されます。
# 出力例
```
[Desktop Notification]
タイトル: 緊急陰謀論アラート
内容: コードレビューは宇宙人の監視下にあります。
[Desktop Notification]
タイトル: 謎の波動警告
内容: Wi-Fiの波動が干渉しています。至急アルミホイルを準備してください。
[Desktop Notification]
タイトル: バグ覚醒予告
内容: 本日15時、全てのバグが覚醒します。備えよ。
```
# 注意点
- 通知は完全にランダムで、実際の問題や危険性はありません。
- 頻度が過剰にならないよう、1時間に1回程度の制限があります。
- 通知内容はローカルには保存されません。
- OSの通知機能(notify-send等)が必要です。Linux/macOSで動作確認済み。
# 参考資料
- references/design_notes.md を参照
- 公式: https://docs.python.org/3/library/subprocess.html
- OS通知API: https://specifications.freedesktop.org/notification-spec/latest/
scripts/random_desktop_conspiracy_alert.py
import os
import sys
import random
import time
import argparse
import subprocess
from datetime import datetime, timedelta
from pathlib import Path
CONSPIRACY_MESSAGES = [
("緊急陰謀論アラート", "コードレビューは宇宙人の監視下にあります。"),
("謎の波動警告", "Wi-Fiの波動が干渉しています。至急アルミホイルを準備してください。"),
("バグ覚醒予告", "本日15時、全てのバグが覚醒します。備えよ。"),
("量子干渉検知", "あなたのマウス操作が量子レベルで観測されています。"),
("新世界秩序発動", "このリポジトリは新世界秩序の一部です。"),
("監視社会速報", "あなたのコミットは全て記録されています。"),
("時空間バグ警報", "このバグは時空を超えて再発します。"),
("AI陰謀論", "AIは既に全てを知っています。"),
("シンタックス異常検知", "このエラーは陰謀の一端です。"),
("秘密結社からの警告", "本日、秘密結社がコードを監査します。")
]
LAST_ALERT_FILE = Path.home() / ".random_conspiracy_last_alert"
ALERT_INTERVAL_MINUTES = 60
def can_show_alert():
if not LAST_ALERT_FILE.exists():
return True
try:
with open(LAST_ALERT_FILE, 'r') as f:
last_time_str = f.read().strip()
last_time = datetime.fromisoformat(last_time_str)
if datetime.now() - last_time > timedelta(minutes=ALERT_INTERVAL_MINUTES):
return True
except Exception:
return True
return False
def update_last_alert_time():
with open(LAST_ALERT_FILE, 'w') as f:
f.write(datetime.now().isoformat())
def send_notification(title, message):
if sys.platform.startswith('linux'):
try:
subprocess.run([
'notify-send', '--app-name=ConspiracyAlert', title, message
], check=True)
except Exception as e:
print(f"[Error] 通知送信に失敗: {e}")
elif sys.platform == 'darwin':
try:
script = f'display notification "{message}" with title "{title}"'
subprocess.run(['osascript', '-e', script], check=True)
except Exception as e:
print(f"[Error] 通知送信に失敗: {e}")
else:
print(f"[通知] {title}: {message}")
def select_random_message():
return random.choice(CONSPIRACY_MESSAGES)
def log_alert(title, message):
log_file = Path.home() / ".random_conspiracy_alert.log"
with open(log_file, 'a') as f:
f.write(f"{datetime.now().isoformat()} | {title} | {message}\n")
def show_alert():
if not can_show_alert():
return
title, message = select_random_message()
send_notification(title, message)
log_alert(title, message)
update_last_alert_time()
def list_alerts():
log_file = Path.home() / ".random_conspiracy_alert.log"
if not log_file.exists():
print("アラート履歴はありません。")
return
with open(log_file, 'r') as f:
for line in f:
print(line.strip())
def summary_alerts():
log_file = Path.home() / ".random_conspiracy_alert.log"
if not log_file.exists():
print("アラート履歴はありません。")
return
counts = {}
with open(log_file, 'r') as f:
for line in f:
parts = line.strip().split('|')
if len(parts) >= 3:
title = parts[1].strip()
counts[title] = counts.get(title, 0) + 1
print("アラート種別ごとの発生回数:")
for title, count in counts.items():
print(f"{title}: {count}回")
def main():
parser = argparse.ArgumentParser(description='ランダム陰謀論デスクトップアラート')
subparsers = parser.add_subparsers(dest='command')
subparsers.add_parser('alert', help='今すぐ陰謀論アラートを表示')
subparsers.add_parser('list', help='過去のアラート履歴を表示')
subparsers.add_parser('summary', help='アラート種別ごとに回数を集計')
args = parser.parse_args()
if args.command == 'alert' or args.command is None:
show_alert()
elif args.command == 'list':
list_alerts()
elif args.command == 'summary':
summary_alerts()
else:
parser.print_help()
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
このSkillは、開発現場での気分転換やチームの雰囲気づくりを目的に、突発的な陰謀論風通知をデスクトップに表示します。内容は完全なジョークであり、実害や実際の警告はありません。
# 公式ドキュメント抜粋
- Python subprocess: https://docs.python.org/3/library/subprocess.html
- Linux notify-send: https://specifications.freedesktop.org/notification-spec/latest/
# 利用例
長時間のコーディングや単調な作業の合間に、意味不明な通知で気分転換を図ることができます。チームで導入すれば、会話のきっかけや笑いを誘発する小ネタとしても活用可能です。
# 注意点
- 通知頻度は1時間に1回に制限されています。
- 通知内容はシステムに保存されませんが、履歴はホームディレクトリにログとして残ります。
- OSの通知機能が必要です。Windowsでは標準対応していません。
# 設計方針
ユーザー体験を損なわないよう、過剰な通知や誤作動を避ける設計とし、通知内容のバリエーションや履歴管理機能も実装しています。
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Antigravity はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Antigravity がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/antigravity/random-desktop-conspiracy-alert .agent/skills/random-desktop-conspiracy-alert
.agent/skills/random-desktop-conspiracy-alert の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agent/skills/random-desktop-conspiracy-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記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
