Antigravity ユーザーが日常でぶつかる悩み
AI coding workflow を Antigravity で回していると、どうしても作業の「始まり方」にマンネリや無味乾燥さを感じる瞬間が多い。特に monorepo を扱う現場や、複数の repository を日替わりで触る場合、毎朝同じような context 設定や path 管理の説明を繰り返すことに疲れてしまうことがある。
また、Antigravity の context 記憶や repository understanding の仕組みは強力だが、長時間 session や複雑な directory 構造では「流れ」が単調になりがち。onboarding のときも、AI から受けるフィードバックが淡々としていて、開発現場に活気が出にくいと感じることがある。
- Antigravity が context を見失って違う場所のコードを参照する
- monorepo で package を跨いだ瞬間、Antigravity が repo 構造を忘れる
- session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
- 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
- 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる
こうした「AIとのやりとりが無機質」「作業開始のテンションが上がらない」といった悩みは、意外と productivity にも影響しやすい。
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは、Antigravity の作業開始や context 切り替えの瞬間に、謎のOSモーニングラジオ風メッセージを自動で流し、開発現場に遊び心と活気を注入する Skill。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- 毎朝や session 開始時に「今日はどんな一日になるか」をラジオDJ風に演出し、Antigravity の onboarding や repository understanding を楽しく始められる
- monorepo や大規模 repository の directory 移動時も、無駄な実況やゴシップで context 切り替えの瞬間を盛り上げ、path management の手間を和らげる
- 長時間の AI coding workflow でも、意味不明なラジオトークが適度に挟まることで stale context をリフレッシュしやすくなる
- 単調な通知や出力ではなく、日替わり・タイミングごとに違うメッセージで飽きにくい
- onboarding や session 復帰時の「また始まった感」を、遊び心ある演出でポジティブに変換できる
GitHub から degit でコマンド1行、Antigravity の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/antigravity/random-os-fake-morning-radio .agent/skills/random-os-fake-morning-radio実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示す。
シーン1: session 開始時 (プロジェクト初動で)
> 今日の作業を始めたい
--- OSモーニングラジオ ---
おはようございます!本日のOS業界ニュースをお届けします。
「昨日のメモリリーク、ついに全世界で話題に!」
本日の天気は快晴、でも /src/utils/ ではバグ雲が発生中。
今日も元気に repository understanding を深めましょう!
--------------------------
シーン2: monorepo / package 跨ぎ作業時
> packages/user-service から packages/payment-service へ移動
--- OSモーニングラジオ ---
パッケージ移動速報です。
「user-service から payment-service へ、AIコーディング workflow が大移動!」
本日のゴシップ:/packages/user-service/ の関数 greetUser が出戻り検討中との噂。
directory 境界を越えて、今日も path management を楽しみましょう!
--------------------------
シーン3: お遊び的な使い方
> なんか元気が出ない
--- OSモーニングラジオ ---
リスナーからのお便りです。
「最近、long context で頭がパンクしそうです」
DJ OS「大丈夫、memory だってたまには寝坊します!」
今日も一日、AI coding workflow を一緒に盛り上げましょう!
--------------------------
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-morning-radio/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agent/skills/random-os-fake-morning-radio/
├── SKILL.md
├── scripts/
│ └── morning_radio.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Antigravity がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/morning_radio.py |
謎のOSモーニングラジオ風メッセージを出力します。 |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: random-os-fake-morning-radio
description: 作業開始、朝、または“ラジオ”“モーニング”“OSニュース”などのキーワードが含まれるタイミングで自動発動します。開発現場を盛り上げるため、日替わりでラジオDJ風の無駄トークやOS業界ゴシップを通知・ターミナル出力します。
---
# 機能概要
random-os-fake-morning-radioは、作業開始時や朝のタイミングで、まるで謎のOSラジオ番組が流れるようなメッセージをデスクトップ通知やターミナルに表示します。内容は「おはようございます、今日も元気にバグを直しましょう!」や「本日のOSニュース:メモリが寝坊しました」など、完全に無駄なラジオDJトークや意味不明な天気予報、OS業界ゴシップが日替わりで登場。開発現場に笑いと活気を注入し、朝のスタートをカオスに盛り上げます。
# 使い方
このSkillは明示的な呼び出し不要で、semantic-match-onlyトリガーにより「作業開始」「おはよう」「ラジオ」「OSニュース」などのキーワードや朝のタイミングで自動発動します。手動でスクリプトを実行することも可能です(例:python morning_radio.py --now)。
# 出力例
```
[OS Morning Radio] 07:30
おはようございます、バグ修正日和の朝です!
本日のOSニュース:メモリ管理部が寝坊しました。
天気予報:あなたのRAMには曇りのちフリーズ注意報。
業界ゴシップ:カーネルが新しい恋を始めた模様です。
今日も元気に開発を!
```
# 注意点
・内容は完全に架空のジョークです。業務連絡や実際のOS情報は含まれません。
・デスクトップ通知はOS環境により動作が異なる場合があります。
・出力内容は日替わりで自動生成され、ローカル保存は行いません。
・通知が不要な場合はスクリプト側で無効化可能です。
# 参考資料
詳細な設計方針や利用例は references/design_notes.md を参照してください。Pythonのnotify2(Linux)、plyer(クロスプラットフォーム)等の通知APIを利用。公式URL: https://pypi.org/project/plyer/ https://pypi.org/project/notify2/
scripts/morning_radio.py
import sys
import argparse
import random
import datetime
import platform
import os
try:
from plyer import notification
PLYER_AVAILABLE = True
except ImportError:
PLYER_AVAILABLE = False
DJ_GREETINGS = [
"おはようございます、バグ修正日和の朝です!",
"グッドモーニング、今日もOSの海を泳ぎましょう!",
"朝のメモリチェックはお済みですか?",
"今日も元気に開発現場からお届けします!",
"おはよう、カーネルの目覚めと共にスタート!"
]
OS_NEWS = [
"本日のOSニュース:メモリ管理部が寝坊しました。",
"カーネルパニック選手権、今朝も激戦です。",
"新しいドライバが社内で話題沸騰中。",
"システムコールが朝礼をサボった模様です。",
"ファイルシステムが断片化で悩んでいます。"
]
WEATHER_FORECAST = [
"天気予報:あなたのRAMには曇りのちフリーズ注意報。",
"CPU温度は本日も平熱、快適な一日になりそうです。",
"ストレージ地方に断片化前線が接近中。",
"ネットワーク帯域に一時的な混雑予報。",
"プロセス地方、負荷高めの見込みです。"
]
GOSSIP = [
"業界ゴシップ:カーネルが新しい恋を始めた模様です。",
"デバイスドライバ同士の噂話が止まりません。",
"メモリ管理部とプロセス管理部の関係が話題に。",
"シェルが新しいスクリプトに夢中です。",
"バグが密かに増殖中との噂あり。"
]
CLOSING = [
"今日も元気に開発を!",
"素敵な一日をお過ごしください。",
"バグに負けずに頑張りましょう!",
"OSのご機嫌を伺いつつ、良い一日を。",
"また次回の放送でお会いしましょう!"
]
HISTORY_FILE = os.path.expanduser("~/.random_os_radio_history")
def get_today_seed():
today = datetime.date.today()
return int(today.strftime("%Y%m%d"))
def pick_message(seed=None):
if seed is not None:
random.seed(seed)
else:
random.seed()
greeting = random.choice(DJ_GREETINGS)
news = random.choice(OS_NEWS)
weather = random.choice(WEATHER_FORECAST)
gossip = random.choice(GOSSIP)
closing = random.choice(CLOSING)
now = datetime.datetime.now().strftime("%H:%M")
lines = [
f"[OS Morning Radio] {now}",
greeting,
news,
weather,
gossip,
closing
]
return "\n".join(lines)
def notify_desktop(title, message):
if not PLYER_AVAILABLE:
print("[WARN] plyerモジュールが未インストールのため、デスクトップ通知はスキップされました。\n")
return
try:
notification.notify(
title=title,
message=message,
timeout=8
)
except Exception as e:
print(f"[ERROR] 通知に失敗しました: {e}")
def save_history(message):
try:
with open(HISTORY_FILE, "a", encoding="utf-8") as f:
f.write(f"{datetime.datetime.now().isoformat()}\n{message}\n---\n")
except Exception as e:
print(f"[WARN] 履歴保存に失敗: {e}")
def list_history(limit=5):
if not os.path.exists(HISTORY_FILE):
print("履歴ファイルがありません。")
return
try:
with open(HISTORY_FILE, "r", encoding="utf-8") as f:
entries = f.read().split("---\n")
entries = [e.strip() for e in entries if e.strip()]
for entry in entries[-limit:]:
print(entry)
print("---")
except Exception as e:
print(f"[ERROR] 履歴読み込み失敗: {e}")
def summary_history():
if not os.path.exists(HISTORY_FILE):
print("履歴ファイルがありません。")
return
try:
with open(HISTORY_FILE, "r", encoding="utf-8") as f:
entries = f.read().split("---\n")
print(f"過去の放送回数: {len([e for e in entries if e.strip()])}")
except Exception as e:
print(f"[ERROR] 履歴集計失敗: {e}")
def main():
parser = argparse.ArgumentParser(description="謎のOSモーニングラジオ風メッセージを出力します。")
subparsers = parser.add_subparsers(dest="command")
parser_log = subparsers.add_parser("log", help="本日のラジオメッセージを出力・通知")
parser_log.add_argument("--now", action="store_true", help="今すぐ発動(デフォルトは日替わり)")
parser_log.add_argument("--notify", action="store_true", help="デスクトップ通知も行う")
parser_list = subparsers.add_parser("list", help="過去のラジオ履歴を表示")
parser_list.add_argument("--limit", type=int, default=5, help="表示件数")
parser_summary = subparsers.add_parser("summary", help="履歴のサマリーを表示")
args = parser.parse_args()
if args.command == "log" or args.command is None:
seed = None if (args.command is not None and args.now) else get_today_seed()
message = pick_message(seed=seed)
print(message)
if args.notify:
notify_desktop("OS Morning Radio", message)
save_history(message)
elif args.command == "list":
list_history(limit=args.limit)
elif args.command == "summary":
summary_history()
else:
parser.print_help()
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
このスキルは、開発者の朝や作業開始時に“謎のOSラジオ”風の無駄なメッセージを届けることで、現場の雰囲気を明るくし、日替わりで楽しめる演出を提供します。通知APIやターミナル出力を活用し、実際のラジオ番組の雰囲気を模倣しています。
# 公式ドキュメント抜粋
デスクトップ通知にはPythonのplyer(クロスプラットフォーム)を利用。公式: https://pypi.org/project/plyer/ またはLinuxではnotify2も選択肢。
# 利用例
・毎朝の作業開始時に自動発動し、開発チームの雑談やアイスブレイクに活用。
・手動でコマンド実行し、ランダムなラジオネタで気分転換。
# 注意点
通知内容は完全に架空で、業務情報や実際のOS状況は含まれません。通知APIはOSによって挙動が異なるため、plyerの導入や動作確認が必要です。
# 設計方針
日替わりで一貫性のあるジョークを生成しつつ、履歴保存・出力サマリー・CLIサブコマンドで柔軟に運用できるよう設計しています。
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Antigravity はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Antigravity がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/antigravity/random-os-fake-morning-radio .agent/skills/random-os-fake-morning-radio
.agent/skills/random-os-fake-morning-radio の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agent/skills/random-os-fake-morning-radio
# 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 でも有効か?
- プロジェクト指示との連携をどう組み立てるか?
- 通知やターミナル出力が本当に“ラジオDJトーク”調になっているか?
- 実際に作業開始直後やタイミング指定で発動するか?
- OS風の無駄な実況やゴシップが日替わりで表示されるか?
実際に Antigravity で試した検証ログは Antigravityの謎モーニングラジオ通知を朝イチで鳴らしてみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Antigravity 公式ドキュメント と、本シリーズ「Antigravityで試したいSkill研究」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
