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によるシンプルな導入で、環境構築や副作用を気にせず即座に試せる
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記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
