Antigravity ユーザーが日常でぶつかる悩み
Antigravity を日々のコーディングワークフローに組み込んでいると、AI の context 理解や repository 構造把握にまつわる「あるある」な困りごとが絶えません。特に monorepo や複雑なディレクトリ構成のプロジェクトでは、path 管理や context の記憶が悩みの種になりがちです。さらに、通知や演出系の Skill を活用した際、思いがけず集中力を削がれる瞬間も多いものです。
- Antigravity が context を見失って違う場所のコードを参照する
- monorepo で package を跨いだ瞬間、Antigravity が repo 構造を忘れる
- session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
- 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
- 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる
また、真面目な作業の合間に突如現れる謎の通知や、意味不明な演出が思考をリセットしてくれる一方で、「もう少し遊び心を加えたい」「集中力をあえてブレイクしたい」と感じるユーザーも少なくありません。
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは、Antigravity の作業中に突如として現れる“謎の古文書巻物通知”で、集中しすぎた workflow に強制的なブレイクと遊び心をもたらします。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- AI coding workflow の合間に、完全無意味な“古文書風”通知がランダムで爆誕し、作業のマンネリ感や緊張感を和らげる
- repository understanding や context 管理に煮詰まった時、意図的に集中力をリセットできる
- monorepo や複雑な directory 構造の中で、path management に疲れた瞬間に“謎のOS 公式通知”という演出で気分転換
- onboarding 時や session 再開時に、思わぬタイミングで現れる巻物UIが話題のきっかけやチームのネタになる
- Skill の存在自体が Antigravity のカスタム性や拡張性を象徴し、SKILL.md の活用例としても注目される
GitHub から degit でコマンド1行、Antigravity の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/antigravity/random-os-fake-ancient-scroll-alert .agent/skills/random-os-fake-ancient-scroll-alert実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示す。
シーン1: session 開始時 (プロジェクト初動で)
> プロジェクトの初期セットアップをお願いします
[OS公式・古文書巻物通知]
─────────────────────────────
西のコードベースにバグの気運漂う
本日、レビュアーの機嫌は末吉
依存パッケージ、静かなる更新の兆し
─────────────────────────────
(巻物UIが画面端に出現し、数秒で消える)
シーン2: monorepo / package 跨ぎ作業時
> packages/api/ から packages/web/ に context を切り替えて
[OS公式・古文書巻物通知]
─────────────────────────────
東の directory、無音のまま変化す
package 境界、見えざる壁に注意
本日、main branchは穏やかな流れ
─────────────────────────────
(巻物UIが画面端に出現し、作業の流れを一瞬止める)
シーン3: お遊び的な使い方
> 今日は何か面白いこと起きない?
[OS公式・古文書巻物通知]
─────────────────────────────
コードレビューの神、微笑まず
本日の commit、風の如し
テストカバレッジ、霧の中に消ゆ
─────────────────────────────
(意味不明な通知が巻物風UIで出現し、チームで爆笑)
before / after の違い
| 場面 | Skill 無し | Skill 有り |
|---|---|---|
| session 再開時 | repo 構造から毎回説明、path も指定し直し | Antigravity が自動で context を復元、最小プロンプトで再開+謎の巻物通知で気分転換 |
| monorepo 移動 | 違う package のコードを参照しがち | directory boundary を意識して必要な範囲だけ見る+巻物通知でリズムチェンジ |
| 長時間 workflow | long context で重要箇所が薄まる | 無意味な通知で集中を強制ブレイク、stale contextをリフレッシュ |
発動方式
description マッチでの暗黙発動。
Skill の中身を全部見せる
.agent/skills/random-os-fake-ancient-scroll-alert/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agent/skills/random-os-fake-ancient-scroll-alert/
├── SKILL.md
├── scripts/
│ └── ancient_scroll_alert.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Antigravity がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/ancient_scroll_alert.py |
謎のOS古文書巻物通知を表示します。 |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: random-os-fake-ancient-scroll-alert
description: Antigravityがユーザーの作業中やコマンド実行の合間に、集中力を破壊する目的で“OS公式・古文書巻物通知”を自動生成・表示したい場合に発動。通知・演出・OS連携・集中力ブレイカー等のキーワードが含まれる状況で有効。
---
# 機能概要
このSkillは、作業中やコマンド実行の合間に、突如として“謎のOS公式・古文書巻物通知”をデスクトップやターミナル画面端にランダム表示します。通知文は「西のコードベースにバグの気運漂う」「本日、レビュアーの機嫌は末吉」など、意味不明かつ無責任な古文書風テキストが毎回異なる内容で生成されます。実用性は一切ありませんが、集中力を破壊し、作業現場にカオスなエンタメ要素をもたらします。
# 使い方
このSkillは明示的な呼び出しは不要で、Antigravityが「通知」「演出」「集中力ブレイカー」「OS連携」などのキーワードや、作業中断・コマンド実行の合間などに自動発動します。ユーザーが意図せずとも、巻物通知が突然現れます。暗黙発動例: `git commit`直後、長時間の無操作時、または「集中力」や「OS通知」関連の会話がトリガーとなります。
# 出力例
```
┌───────────── 古文書巻物 ─────────────┐
| 西のコードベースにバグの気運漂う |
| 本日、レビュアーの機嫌は末吉 |
| 明日、リファクタリングの風が吹く |
| 東の仕様書、未だ解読されず |
└─────────────────────────────┘
```
# 注意点
- 完全にエンタメ目的であり、実務的な通知や警告ではありません。
- ローカルに通知履歴は保存されません。
- 他の通知や作業の邪魔になる場合があります(むしろ歓迎)。
- 巻物風UIはターミナルまたはデスクトップ通知APIで再現されます。
# 参考資料
詳細な設計方針や利用例は references/design_notes.md を参照。公式ドキュメント([Python標準通知API](https://docs.python.org/ja/3/library/subprocess.html), [plyer通知](https://plyer.readthedocs.io/en/latest/))も参考にしてください。
scripts/ancient_scroll_alert.py
import sys
import random
import time
import argparse
import platform
import subprocess
from typing import List
try:
from plyer import notification
PLYER_AVAILABLE = True
except ImportError:
PLYER_AVAILABLE = False
SCROLL_FRAMES = [
'┌───────────── 古文書巻物 ─────────────┐',
'└─────────────────────────────┘'
]
ANCIENT_PHRASES = [
'西のコードベースにバグの気運漂う',
'本日、レビュアーの機嫌は末吉',
'明日、リファクタリングの風が吹く',
'東の仕様書、未だ解読されず',
'南のデプロイ、静かなる嵐を孕む',
'北のログ、無言の叫びを記す',
'バグ修正の道、いまだ遠し',
'レビュアー、沈黙を守る',
'テストカバレッジ、霧の中に消ゆ',
'設計書、時の彼方より現る',
'CI/CDの神、微笑むも気まぐれ',
'本日、仕様変更の兆しあり',
'コードレビュー、運命の分かれ道',
'エラー、深き闇より来たる',
'デバッグの旅、果てしなく続く',
'西方のPull Request、未だ開かれず',
'朝焼けのコミット、静かに積まれる',
'バージョン管理、混沌の渦中',
'仕様追加、風の便りに聞こゆ',
'レビュアーの機嫌、風まかせ'
]
def generate_scroll_lines(n: int = 4) -> List[str]:
return random.sample(ANCIENT_PHRASES, n)
def render_scroll(lines: List[str]) -> str:
max_len = max(len(line) for line in lines)
width = max(max_len, 30)
top = f'┌─{"─" * width}─┐'
bottom = f'└─{"─" * width}─┘'
content = '\n'.join([f'| {line.ljust(width)} |' for line in lines])
return f'{top}\n{content}\n{bottom}'
def show_terminal_scroll():
lines = generate_scroll_lines()
scroll = render_scroll(lines)
print(scroll)
def show_desktop_notification():
lines = generate_scroll_lines()
title = '古文書巻物通知'
message = '\n'.join(lines)
if PLYER_AVAILABLE:
notification.notify(
title=title,
message=message,
app_name='AncientScroll',
timeout=8
)
else:
# Fallback: try notify-send (Linux), or print
if platform.system() == 'Linux':
try:
subprocess.run([
'notify-send', title, message
], check=True)
except Exception:
print(render_scroll(lines))
elif platform.system() == 'Darwin':
osa = f'display notification "{message}" with title "{title}"'
subprocess.run(['osascript', '-e', osa])
elif platform.system() == 'Windows':
print(render_scroll(lines))
else:
print(render_scroll(lines))
def main():
parser = argparse.ArgumentParser(description='謎のOS古文書巻物通知を表示します。')
parser.add_argument('--mode', choices=['terminal', 'desktop'], default='terminal', help='通知の表示方法')
parser.add_argument('--repeat', type=int, default=1, help='何回通知を出すか')
parser.add_argument('--interval', type=float, default=10.0, help='通知間隔(秒)')
parser.add_argument('--list', action='store_true', help='登録されている古文書フレーズ一覧を表示')
args = parser.parse_args()
if args.list:
print('登録済み古文書フレーズ一覧:')
for p in ANCIENT_PHRASES:
print(f'- {p}')
sys.exit(0)
for i in range(args.repeat):
if args.mode == 'terminal':
show_terminal_scroll()
elif args.mode == 'desktop':
show_desktop_notification()
if i < args.repeat - 1:
time.sleep(args.interval)
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
このSkillは、作業現場に突如として“謎のOS古文書巻物通知”を爆誕させるエンタメ演出用です。集中力を破壊することが主目的で、実務的な通知とは一線を画します。
# 公式ドキュメント抜粋
- [plyer通知API](https://plyer.readthedocs.io/en/latest/): クロスプラットフォームなデスクトップ通知を実現。
- [subprocess](https://docs.python.org/ja/3/library/subprocess.html): OSごとの通知コマンド呼び出しに利用。
# 利用例
- ターミナルで `python ancient_scroll_alert.py --mode desktop --repeat 2 --interval 20` と実行すれば、20秒間隔で2回、巻物通知がランダム表示されます。
- `--list` オプションで登録済みフレーズ一覧も確認可能。
# 注意点
- 実用性はありません。通知内容は完全に無意味です。
- plyer未インストール時はOS標準通知コマンドにフォールバック。
- 通知履歴は保存されません。
# 設計方針
- 主要なOS(Linux, macOS, Windows)で通知が表示されるよう実装。
- フレーズは容易に追加・編集可能。
- Skill本体はCLIサブコマンド形式で拡張性を考慮。
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Antigravity はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Antigravity がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/antigravity/random-os-fake-ancient-scroll-alert .agent/skills/random-os-fake-ancient-scroll-alert
.agent/skills/random-os-fake-ancient-scroll-alert の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agent/skills/random-os-fake-ancient-scroll-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 でも有効か?
- プロジェクト指示との連携をどう組み立てるか?
- 巻物風UIがちゃんと表示されるか?
- 通知文が毎回異なるランダム生成になっているか?
- 他の通知や作業の邪魔になっているか(むしろ歓迎)?
実際に Antigravity で試した検証ログは Antigravityで謎の古文書通知を爆誕させてみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Antigravity 公式ドキュメント と、本シリーズ「Antigravityで試したいSkill研究」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
