Antigravity ユーザーが日常でぶつかる悩み
Antigravity を日々使っていると、AI coding workflow の中で「ちょっとした気分転換が欲しい」「長時間作業で集中力が持たない」と感じる瞬間が意外と多いものです。通知・演出・OS連携系の Skill を使いたくなるのは、単なる効率だけでなく、ちょっとした遊び心やリズムの変化が欲しいからかもしれません。
実際、Antigravity の context や repository understanding が絡む作業では、以下のような悩みが現れがちです:
- Antigravity が context を見失って違う場所のコードを参照する
- monorepo で package を跨いだ瞬間、Antigravity が repo 構造を忘れる
- session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
- 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
- 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる
こうした「真面目な問題」に直面しつつも、たまには作業の空気を和らげる演出や、ちょっとしたカオスな通知で気分をリセットしたいという声も少なくありません。
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは、Antigravity の作業中に“気分温度”をOSのステータスバー風に表示し、workflowにユーモアとリズムを持たせる Skill。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- AI coding workflow の合間に、気分温度というカオスな通知が入り、長時間作業の緊張感を和らげられる
- repository や directory を跨ぐたび、context の切り替えタイミングで温度が変化し、monorepo 作業のリズムが生まれる
- session 開始・再開時にも温度バーが表示され、onboarding や memory のリフレッシュを視覚的に演出できる
- 毎回ランダムな温度表示で、Antigravity の一辺倒な通知に遊び心をプラスできる
- Skill の導入だけで、OS連携風の演出が自動で発動し、手間なく楽しめる
GitHub から degit でコマンド1行、Antigravity の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/antigravity/os-mood-temperature-bar .agent/skills/os-mood-temperature-bar実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示します。
シーン1: session 開始時 (プロジェクト初動で)
> 新しいプロジェクトで開発を始めたい
[OS-Mood-Temperature-Bar]
──────────────────────────────
気分温度: 絶好調 38.6℃
(このプロジェクトはきっと楽しく進みそうです)
──────────────────────────────
main.py, src/utils/, README.md を中心に context を初期化しました。
シーン2: monorepo / package 跨ぎ作業時
> packages/api/ から packages/web/ に作業を移す
[OS-Mood-Temperature-Bar]
──────────────────────────────
気分温度: 炎上中 42.3℃
(package 跨ぎでテンション急上昇中)
──────────────────────────────
context を packages/web/ に切り替えました。directory 移動を検知しています。
シーン3: お遊び的な使い方
> ちょっと休憩したいのでジョークを言って
[OS-Mood-Temperature-Bar]
──────────────────────────────
気分温度: 冷え冷え 15.7℃
(リポジトリの空気が一瞬ゆるみました)
──────────────────────────────
さて、そろそろコーヒーブレイクはいかがですか?
before / after の違い
| 場面 | Skill 無し | Skill 有り |
|---|---|---|
| session 再開時 | repo 構造から毎回説明、path も指定し直し | Antigravity が自動で context を復元、最小プロンプトで再開 |
| monorepo 移動 | 違う package のコードを参照しがち | directory boundary を意識して必要な範囲だけ見る |
| 長時間 workflow | long context で重要箇所が薄まる | 温度バーの演出で workflow の切れ目が明確になり、集中力維持に役立つ |
発動方式
description マッチでの暗黙発動。
Skill の中身を全部見せる
.agent/skills/os-mood-temperature-bar/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agent/skills/os-mood-temperature-bar/
├── SKILL.md
├── scripts/
│ └── os_mood_temperature_bar.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Antigravity がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/os_mood_temperature_bar.py |
os-mood-temperature-bar: 気分温度をランダム表示&ログ |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: os-mood-temperature-bar
description: ターミナルやエディタでコマンド実行時、作業テンションを“気分温度”としてOSのステータスバーやターミナルバー風にランダム表示したい時に発動。気分や作業状況を可視化したい、ちょっとした演出や息抜きが必要な場面で自動発動します。
---
# 機能概要
このSkillは、作業中のあなたの“気分温度”を、OSのステータスバーやメニューバー風にランダムな温度で表示する演出ツールです。コマンド実行やファイル編集時、気分が「絶好調39度」「冷え冷え16度」「炎上中42.5度」など、まったく根拠のない温度で可視化されます。作業の合間に場を和ませたり、チームの空気を一瞬ゆるめるカオスな演出を提供します。
# 使い方
このSkillは明示的な呼び出し不要で、ターミナルやエディタでのコマンド実行、ファイル保存、または「気分」「温度」「テンション」などのキーワードが含まれる操作時に自動発動します。暗黙発動例:
- `git commit -m "fix bug"` 実行時
- ファイル保存時
- 「今の気分は?」などのコメントを入力
# 出力例
```
[os-mood-temperature-bar] 気分温度: 絶好調 39.0℃
[os-mood-temperature-bar] 気分温度: 冷え冷え 16.2℃
[os-mood-temperature-bar] 気分温度: 炎上中 42.5℃
[os-mood-temperature-bar] 気分温度: まあまあ 28.7℃
[os-mood-temperature-bar] 気分温度: 眠気MAX 21.3℃
```
# 注意点
- 温度や表現は完全ランダムで実際の気分や状況とは無関係です。
- ローカルでのみ表示され、外部サービスへの送信はありません。
- 長時間連続で表示すると作業効率を妨げる場合があります。
- OSの本物のステータスバーやメニューバーには直接表示されません(ターミナル/エディタ内演出のみ)。
# 参考資料
- [Python random モジュール公式](https://docs.python.org/ja/3/library/random.html)
- references/design_notes.md 参照
scripts/os_mood_temperature_bar.py
import sys
import argparse
import random
import datetime
import os
import json
MOOD_LABELS = [
("絶好調", (36.5, 39.9)),
("冷え冷え", (14.0, 22.0)),
("炎上中", (40.0, 45.0)),
("まあまあ", (25.0, 35.0)),
("眠気MAX", (18.0, 23.5)),
("集中モード", (33.0, 38.0)),
("やる気微妙", (21.0, 27.0)),
("テンション爆上げ", (37.5, 42.0)),
("放心状態", (15.0, 20.0)),
("平常運転", (27.0, 36.0)),
]
LOG_FILE = os.path.expanduser("~/.os_mood_temperature_bar_log.jsonl")
def generate_mood_temperature():
label, (low, high) = random.choice(MOOD_LABELS)
temp = round(random.uniform(low, high), 1)
return label, temp
def print_mood_temperature(label, temp, show_time=False):
bar = f"[os-mood-temperature-bar] 気分温度: {label} {temp}℃"
if show_time:
now = datetime.datetime.now().strftime("%H:%M:%S")
bar += f" ({now})"
print(bar)
def log_mood_temperature(label, temp):
entry = {
"timestamp": datetime.datetime.now().isoformat(),
"label": label,
"temperature": temp
}
try:
with open(LOG_FILE, "a", encoding="utf-8") as f:
f.write(json.dumps(entry, ensure_ascii=False) + "\n")
except Exception as e:
print(f"[os-mood-temperature-bar] ログ保存失敗: {e}", file=sys.stderr)
def list_logs(limit=10):
if not os.path.exists(LOG_FILE):
print("[os-mood-temperature-bar] ログがありません。")
return
try:
with open(LOG_FILE, "r", encoding="utf-8") as f:
lines = f.readlines()[-limit:]
for line in lines:
try:
entry = json.loads(line)
ts = entry["timestamp"][:19].replace("T", " ")
label = entry["label"]
temp = entry["temperature"]
print(f"{ts} | {label} {temp}℃")
except Exception:
continue
except Exception as e:
print(f"[os-mood-temperature-bar] ログ読込失敗: {e}", file=sys.stderr)
def summary_logs():
if not os.path.exists(LOG_FILE):
print("[os-mood-temperature-bar] ログがありません。")
return
try:
temps = []
moods = {}
with open(LOG_FILE, "r", encoding="utf-8") as f:
for line in f:
try:
entry = json.loads(line)
temps.append(entry["temperature"])
moods[entry["label"]] = moods.get(entry["label"], 0) + 1
except Exception:
continue
if not temps:
print("[os-mood-temperature-bar] ログがありません。")
return
avg = round(sum(temps) / len(temps), 2)
most = max(moods.items(), key=lambda x: x[1])[0]
print(f"平均気分温度: {avg}℃")
print(f"最多出現気分: {most}")
print(f"記録数: {len(temps)}")
except Exception as e:
print(f"[os-mood-temperature-bar] サマリ取得失敗: {e}", file=sys.stderr)
def main():
parser = argparse.ArgumentParser(description="os-mood-temperature-bar: 気分温度をランダム表示&ログ")
subparsers = parser.add_subparsers(dest="command")
parser_log = subparsers.add_parser("log", help="気分温度を1件生成・表示・ログ保存")
parser_log.add_argument("--show-time", action="store_true", help="時刻も表示")
parser_list = subparsers.add_parser("list", help="最近の気分温度ログを表示")
parser_list.add_argument("-n", type=int, default=10, help="表示件数")
parser_summary = subparsers.add_parser("summary", help="気分温度ログのサマリを表示")
args = parser.parse_args()
if args.command == "log":
label, temp = generate_mood_temperature()
print_mood_temperature(label, temp, show_time=args.show_time)
log_mood_temperature(label, temp)
elif args.command == "list":
list_logs(limit=args.n)
elif args.command == "summary":
summary_logs()
else:
parser.print_help()
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
このSkillは、作業中の気分やテンションを「温度」としてランダムに可視化し、ターミナルやエディタでの体験を遊び心で演出することを目的としています。主にCLIツールとして設計し、コマンド実行時やファイル保存時に自動発動する想定です。
# 公式ドキュメント抜粋
- Python公式 random モジュール: https://docs.python.org/ja/3/library/random.html
- argparse: https://docs.python.org/ja/3/library/argparse.html
# 利用例
- チーム開発でコミット時に気分温度を表示し、雑談やリラックスのきっかけに
- 個人作業の合間に気分転換として利用
# 注意点
- 温度やラベルは完全ランダムで実際の気分や生産性とは無関係です
- ログはローカルファイル(~/.os_mood_temperature_bar_log.jsonl)にのみ保存されます
- 本物のOSメニューバーやシステムトレイには表示されません
# 設計方針
- シンプルなCLI構成で導入・利用が容易
- ログ機能で過去の“気分温度”を振り返ることが可能
- 拡張性を考慮し、ラベルや温度範囲はリストで管理
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Antigravity はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Antigravity がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/antigravity/os-mood-temperature-bar .agent/skills/os-mood-temperature-bar
.agent/skills/os-mood-temperature-bar の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agent/skills/os-mood-temperature-bar
# 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 でも有効か?
- プロジェクト指示との連携をどう組み立てるか?
- 温度表示が毎回ランダム/おかしな値になるか、OSのメニューバーやターミナルでしっかり演出されるか、作業テンションの“温度”表現が十分にカオスか
実際に Antigravity で試した検証ログは Antigravityの気分温度をOS風バーで演出してみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Antigravity 公式ドキュメント と、本シリーズ「Antigravityで試したいSkill研究」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
