Antigravity ユーザーが日常でぶつかる悩み
Antigravity を日常的に使っていると、AI coding workflow の中で「ちょっとした気分転換」や「作業開始時のリフレッシュ」が意外と大事だと感じる場面が多い。真面目な repository understanding や path management、monorepo の directory 構造を把握しつつも、長時間の作業や session 再開時にマンネリを感じることも少なくない。
- ターミナルを開いた瞬間、毎回同じような無機質な画面で作業が始まり、気分の切り替えがしにくい
- onboarding や session 再開時、AI からの context 提示が機械的で、ちょっとした遊び心や人間味が欲しくなる
- monorepo の複雑な directory に取り組む前に、軽い一言で気持ちを切り替えたいが、そうした演出がない
- 長時間の coding workflow で集中力が切れがちだが、Antigravity からの通知や演出は基本的に「業務的」になりがち
- 「また同じ説明からか…」という context の繰り返しに、ちょっとした笑いや驚きが欲しい
この Skill が一言でいうと何を解決するか
一言サマリ: ターミナルを開くたびSkill。
terminal-samurai-weathercaster を導入することで、Antigravity の session 開始時や directory 移動のたびに、完全ランダムな“侍”の天気予報コメントが出現。これにより、作業の始まりやリポジトリ移動時に気分転換や遊び心を手軽に取り入れられる。
- ターミナル起動時に毎回違う侍コメントが現れ、作業開始の気分を一新できる
- AI coding workflow の中で routine な context 復元タイミングに、ちょっとした演出や笑いを挟める
- monorepo での directory 移動時も、侍のコメントがリポジトリ理解や path management のきっかけになる
- onboarding や session 再開時、無機質な説明だけでなく、遊び心のある通知でチームの雰囲気も和らぐ
- 現実の天気や API とは無関係なので、どんな環境でも安定して発動
GitHub から degit でコマンド1行、Antigravity の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/antigravity/terminal-samurai-weathercaster .agent/skills/terminal-samurai-weathercaster実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示す。
シーン1: session 開始時 (プロジェクト初動で)
> antigravity start
【侍天気予報】本日快晴、コードも冴え渡るでござる!
- このsession、良き風が吹いておる。
- repository: /Users/you/projects/antigravity-monorepo
- 気合いを入れて参る!
(さあ、作業開始)
シーン2: monorepo / package 跨ぎ作業時
> cd packages/frontend
> antigravity resume
【侍天気予報】雷注意報、バグの嵐到来か?
- packages/frontend ディレクトリ、油断召されるな。
- 本日も repo の道は険しいでござる。
- context: packages/frontend, packages/shared
(侍のコメントで気を引き締めて再開)
シーン3: お遊び的な使い方
> antigravity open
【侍天気予報】曇り時々晴れ、集中力の波に乗るべし!
- 迷いなき path management を心がけるでござる。
- repository: /Users/you/projects/legacy-monorepo
- 今日も己の記憶(memory)を信じよ!
(思わずクスッとする一言)
before / after の違い
| 場面 | Skill 無し | Skill 有り |
|---|---|---|
| session 再開時 | repo 構造から毎回説明、path も指定し直し | Antigravity が自動で context を復元、最小プロンプトで再開+侍コメント |
| monorepo 移動 | 違う package のコードを参照しがち | directory boundary を意識して必要な範囲だけ見る+侍が警告 |
| 長時間 workflow | long context で重要箇所が薄まる | 侍コメントで気分転換、集中力リセットのきっかけに |
発動方式
description マッチでの暗黙発動。
Skill の中身を全部見せる
.agent/skills/terminal-samurai-weathercaster/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agent/skills/terminal-samurai-weathercaster/
├── SKILL.md
├── scripts/
│ └── samurai_weathercaster.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Antigravity がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/samurai_weathercaster.py |
Terminal Samurai Weathercaster |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: terminal-samurai-weathercaster
description: ターミナル起動時や新規セッション開始時に、侍風のランダムな天気コメントを必ず表示するSkillです。現実の天気APIや外部情報には一切依存せず、毎回異なる侍の台詞で作業気分を盛り上げます。
---
# 機能概要
terminal-samurai-weathercasterは、ターミナル起動時や新規セッション開始時に、侍が現れてその日の作業気分を天気予報風に“斬り捨て御免”で表現する演出系Skillです。現実の天気やAPIには一切依存せず、完全ランダムな天気・侍コメントが毎回表示されます。真面目な開発作業に、侍の不可解な乱入を加えることで、日々のコーディングにユーモアと新鮮さを提供します。
# 使い方
このSkillはターミナル起動時や新しいシェルセッション開始時に自動で発動します(明示的な呼び出しコマンドは不要)。semantic-match-onlyトリガーにより、"ターミナル" "terminal" "shell" "セッション開始" などのキーワードを含むイベントで常時有効です。明示呼び出しはありません。
# 出力例
```
─── 本日の侍天気予報 ───
快晴なり。コードも冴え渡るでござる!
────────────────────
─── 本日の侍天気予報 ───
雷注意報。バグの嵐、油断召されるな!
────────────────────
─── 本日の侍天気予報 ───
曇天にて集中力やや低下、無理は禁物でござる。
────────────────────
```
# 注意点
- 現実の天気や位置情報、外部APIは一切参照しません。
- 出力内容は毎回完全ランダムです。
- ローカルへの履歴保存や通知連携はありません。
- 明示的なコマンド呼び出しや引数指定は不要です。
# 参考資料
詳細な設計方針やサンプル台詞は references/design_notes.md を参照してください。公式のPythonランダムモジュールやターミナル出力制御については https://docs.python.org/ja/3/library/random.html および https://docs.python.org/ja/3/library/sys.html をご覧ください。
scripts/samurai_weathercaster.py
import sys
import argparse
import random
import datetime
from typing import List, Tuple
SAMURAI_WEATHER = [
("快晴", "コードも冴え渡るでござる!"),
("雷注意報", "バグの嵐、油断召されるな!"),
("曇天", "集中力やや低下、無理は禁物でござる。"),
("大雨", "仕様変更の豪雨、覚悟召されよ!"),
("強風", "思考が吹き飛ぶやもしれぬ、心静かに。"),
("霧", "設計が霞む、慎重に進むべし。"),
("晴れ時々バグ", "油断大敵、細部まで目を光らすでござる。"),
("雪", "冷静沈着に、バグを溶かすでござる。"),
("台風", "タスクの渦、巻き込まれぬようご用心!"),
("小雨", "軽い不具合、侮るなかれ。"),
("虹", "良きアイデアが舞い降りるやもしれぬ。"),
("雷鳴轟く", "デバッグの刀、抜く時ぞ!"),
("夕立", "急な仕様変更、備えよ常に。"),
("星空", "静寂の中、集中力極まるでござる。"),
("暴風雨", "混沌の開発現場、己を見失うな!")
]
SAMURAI_QUOTES = [
"今日も一刀両断、バグを斬るでござる。",
"油断大敵、心してコードを書くべし。",
"仕様の迷い道、道標は己の信念なり。",
"集中力、まるで鋼の如し。",
"無理は禁物、休息もまた戦略でござる。",
"バグは敵にあらず、己を映す鏡なり。",
"一歩一歩、確実に進むが勝ち。",
"本日は静かなる開発日和。",
"心静かに、コードの声を聞くべし。",
"侍の如く、誇り高くコードを書くでござる。"
]
HEADER = "─── 本日の侍天気予報 ───"
FOOTER = "────────────────────"
def select_weather_and_quote() -> Tuple[str, str]:
weather, base_comment = random.choice(SAMURAI_WEATHER)
# 50%の確率で追加コメント
if random.random() < 0.5:
comment = base_comment + " " + random.choice(SAMURAI_QUOTES)
else:
comment = base_comment
return weather, comment
def print_samurai_weather():
weather, comment = select_weather_and_quote()
print(HEADER)
print(f"{weather}なり。{comment}")
print(FOOTER)
def log_to_file(logfile: str, weather: str, comment: str):
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
with open(logfile, 'a', encoding='utf-8') as f:
f.write(f"[{now}] {weather} : {comment}\n")
def list_logs(logfile: str, count: int):
try:
with open(logfile, 'r', encoding='utf-8') as f:
lines = f.readlines()
for line in lines[-count:]:
print(line.rstrip())
except FileNotFoundError:
print("ログファイルが見つかりません。まだ記録がありません。")
def summary_logs(logfile: str):
from collections import Counter
try:
with open(logfile, 'r', encoding='utf-8') as f:
lines = f.readlines()
weathers = [line.split()[2] for line in lines if len(line.split()) > 2]
counter = Counter(weathers)
print("=== 天気別出現回数 ===")
for weather, cnt in counter.most_common():
print(f"{weather}: {cnt}回")
except FileNotFoundError:
print("ログファイルが見つかりません。まだ記録がありません。")
def main():
parser = argparse.ArgumentParser(description='Terminal Samurai Weathercaster')
subparsers = parser.add_subparsers(dest='command')
# logコマンド
log_parser = subparsers.add_parser('log', help='侍天気を表示し、ログに記録')
log_parser.add_argument('--logfile', type=str, default='~/.samurai_weather.log', help='ログファイルパス')
# listコマンド
list_parser = subparsers.add_parser('list', help='過去の侍天気ログを表示')
list_parser.add_argument('--logfile', type=str, default='~/.samurai_weather.log', help='ログファイルパス')
list_parser.add_argument('--count', type=int, default=10, help='表示件数')
# summaryコマンド
summary_parser = subparsers.add_parser('summary', help='天気別出現回数を集計')
summary_parser.add_argument('--logfile', type=str, default='~/.samurai_weather.log', help='ログファイルパス')
# デフォルト表示(コマンドなし)
args = parser.parse_args()
if args.command == 'log':
weather, comment = select_weather_and_quote()
print(HEADER)
print(f"{weather}なり。{comment}")
print(FOOTER)
logfile = args.logfile.replace('~', os.path.expanduser('~'))
log_to_file(logfile, weather, comment)
elif args.command == 'list':
logfile = args.logfile.replace('~', os.path.expanduser('~'))
list_logs(logfile, args.count)
elif args.command == 'summary':
logfile = args.logfile.replace('~', os.path.expanduser('~'))
summary_logs(logfile)
else:
# デフォルト動作(ターミナル起動時想定)
print_samurai_weather()
if __name__ == '__main__':
import os
main()
references/design_notes.md
# 概要
terminal-samurai-weathercasterは、ターミナル起動時に侍風の天気コメントをランダム表示する演出系Skillです。現実の天気や外部APIには一切依存せず、完全に内部で定義した天気・侍台詞からランダム生成します。
# 公式ドキュメント抜粋
Pythonのrandomモジュール(https://docs.python.org/ja/3/library/random.html)を用いて、天気・台詞の選択を行います。ターミナル出力には標準出力(sys.stdout)を使用。
# 利用例
ターミナルを開くたびに、侍コメントが自動で表示され、作業開始時の気分転換やユーモア演出に活用できます。コマンドライン引数でログ記録や履歴参照も可能です。
# 注意点
現実の天気や位置情報、外部APIは一切参照しません。Skillの動作は完全にローカルで完結します。ユーザーの作業内容や気分とは無関係に、毎回ランダムな侍コメントが降臨します。
# 設計方針
Skillは明示的な呼び出し不要で、ターミナル起動時に常時発動する設計です。出力内容の多様性を担保するため、天気・台詞ともに複数パターンを用意し、組み合わせで毎回変化を生み出します。
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Antigravity はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Antigravity がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/antigravity/terminal-samurai-weathercaster .agent/skills/terminal-samurai-weathercaster
.agent/skills/terminal-samurai-weathercaster の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agent/skills/terminal-samurai-weathercaster
# 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 でも有効か?
- プロジェクト指示との連携をどう組み立てるか?
- ターミナル起動時に必ず侍コメントが出るか?
- 天気や侍台詞が毎回ランダムで変わるか?
- 現実の天気やAPI参照が一切ないことをどう保証するか?
実際に Antigravity で試した検証ログは Antigravityで侍が毎回違う天気予報を斬り捨て御免してみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Antigravity 公式ドキュメント と、本シリーズ「Antigravityで試したいSkill研究」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
