Antigravityで作業中の気分を可視化する新感覚ガイド

  • URLをコピーしました!
目次

Antigravity ユーザーが日常でぶつかる悩み

Antigravity を日々使っていると、AI coding workflow の効率化や repository understanding 向上のためにさまざまな Skill を追加したくなる一方で、作業が単調になりがちだったり、ちょっとした気分転換や遊び心が欲しくなる瞬間も多い。特に context や path management に気を取られていると、作業のリズムが崩れたり、長時間の session で集中力が切れることも珍しくない。

  • Antigravity が context を見失って違う場所のコードを参照するたび、気分が下がる
  • monorepo で package を跨いだ瞬間、repository の全体像や directory 構造を再把握するのが面倒
  • session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない繰り返しに疲れる
  • 長時間の AI coding workflow で long context が膨らみ、重要な情報が埋もれてしまう
  • 「ここはこういう構造のリポジトリです」と毎回冒頭で説明することにマンネリを感じる

こうした課題に加え、作業の合間に「今日は何モード?」といった軽い演出や遊びが欲しいと思う瞬間も、実は多くの Antigravity ユーザーが共感するポイントだ。

この Skill が一言でいうと何を解決するか

一言サマリ: このスキルは、Antigravity の作業体験に“謎のOS風 気分バロメーター”を導入し、毎回のコマンド実行時に完全ランダムな気分モードを表示する Skill。

もう少し具体化すると、このSkillを入れることで以下のような状態になる:

  • AI coding workflow の合間に、ターミナルやエディタで“今の気分モード”がランダムに表示され、作業に遊び心とリズムが生まれる
  • session 開始や monorepo 移動など repository understanding が必要なタイミングで、気分バロメーターが「今のあなたは◯◯モード」と演出してくれる
  • path management や context 指定の繰り返し作業に、ちょっとしたカオス感や気分転換が加わることで、長時間作業のマンネリ感を和らげられる
  • onboarding や session 再開時にも、Antigravity の通知・演出 Skill として“自分だけのOS風”の雰囲気を楽しめる
  • Skill の発動は description マッチによる自動で、手間なく導入できる
QUICK INSTALL
このSkillをすぐ試す

GitHub から degit でコマンド1行、Antigravity の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。

npx degit aazutaku/ai-note/antigravity/random-os-mood-barometer .agent/skills/random-os-mood-barometer

実行したらこうなる (3つの利用シーン)

使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示す。

シーン1: session 開始時 (プロジェクト初動で)


> antigravity start

[OS Mood Barometer]
──────────────────────────────
本日の気分モード: 絶好調エンジニアモード
──────────────────────────────
あなたの productivity は MAX!
repository: ./my-app
directory: src/
──────────────────────────────
Tip: 今日は大胆なリファクタリングもおすすめです。

シーン2: monorepo / package 跨ぎ作業時


> cd packages/api && antigravity run

[OS Mood Barometer]
──────────────────────────────
現在の気分モード: バグ吸引フェイズ
──────────────────────────────
要注意: 不思議とバグを引き寄せる予感…
repository: ./monorepo
directory: packages/api/
──────────────────────────────
Tip: コミット前にテストを念入りに!

シーン3: お遊び的な使い方


> ls && antigravity suggest

[OS Mood Barometer]
──────────────────────────────
気分モード: アイデア枯渇ゾーン
──────────────────────────────
今日は新しい発想が湧きにくいかも?
repository: ./sandbox
directory: experiments/
──────────────────────────────
Tip: 休憩してコーヒーでも飲みませんか?

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Antigravity が自動で context を復元、最小プロンプトで再開
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る
長時間 workflow long context で重要箇所が薄まる 気分バロメーターでマンネリを和らげ、集中力維持に一役

発動方式

description マッチでの暗黙発動。

Skill の中身を全部見せる

.agent/skills/random-os-mood-barometer/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。

.agent/skills/random-os-mood-barometer/
├── SKILL.md
├── scripts/
│   └── random_os_mood_barometer.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Antigravity がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/random_os_mood_barometer.py 謎のOS風 気分バロメーター
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: random-os-mood-barometer
description: コマンド実行やエディタ操作などのイベント発生時に、Antigravityが“謎のOS風 気分バロメーター”を画面端やメニューバー風に自動表示します。triggerType: always, semantic-match-only。気分モードは完全ランダムで、作業生産性やテンションを根拠なく演出します。
---

# 機能概要
random-os-mood-barometerは、日々のコマンド実行やエディタ操作のたびに“謎のOS風 気分バロメーター”を画面端やメニューバー風に自動表示するスキルです。判定内容は完全ランダムで、「絶好調エンジニアモード」「バグ吸引フェイズ」「アイデア枯渇ゾーン」など、実際の生産性や気分とは無関係な“今のモード”を演出します。作業中の気分や雰囲気にちょっとしたカオスと遊び心を加え、単調な開発作業にアクセントを与えます。

# 使い方
このSkillは明示的な呼び出しは不要です。Antigravityがコマンド実行やエディタ操作など、semantic-match-onlyなトリガーイベントを検知した際、自動的にバロメーターを表示します。たとえば「git commit」「python main.py」などのコマンド実行時や、ファイル保存時に発動します。明示呼び出しはサポートしていません。

# 出力例
```
[OS-Mood Barometer] 2024-06-10 14:32:11
絶好調エンジニアモード:やる気MAX!今こそ難題に挑戦する時。

[OS-Mood Barometer] 2024-06-10 14:35:02
アイデア枯渇ゾーン:コーヒーブレイク推奨。新しい刺激を求めましょう。

[OS-Mood Barometer] 2024-06-10 14:41:17
バグ吸引フェイズ:今日はバグが寄ってきそうな予感…慎重に!
```

# 注意点
- 出力は標準出力または通知バー風のテキスト表示のみです。
- 実際の生産性や気分とは無関係なランダム演出です。
- ローカルに履歴や個人情報は保存しません。
- 邪魔にならないよう、表示タイミングや場所は調整可能です。

# 参考資料
詳細な設計方針や利用例は references/design_notes.md を参照してください。公式ドキュメント: https://ai-note.tech/skills/random-os-mood-barometer

scripts/random_os_mood_barometer.py

import sys
import random
import argparse
import datetime
import os
from typing import List, Optional

MOOD_LIST = [
    {
        'title': '絶好調エンジニアモード',
        'message': 'やる気MAX!今こそ難題に挑戦する時。'
    },
    {
        'title': 'アイデア枯渇ゾーン',
        'message': 'コーヒーブレイク推奨。新しい刺激を求めましょう。'
    },
    {
        'title': 'バグ吸引フェイズ',
        'message': '今日はバグが寄ってきそうな予感…慎重に!'
    },
    {
        'title': '集中力散漫モード',
        'message': '通知やSNSに注意。深呼吸してリセットしよう。'
    },
    {
        'title': '仕様書迷子タイム',
        'message': 'ドキュメントを見直してみよう。新発見があるかも。'
    },
    {
        'title': 'リファクタリング衝動',
        'message': '今こそコードを美しく整えたい気分。やりすぎ注意。'
    },
    {
        'title': '無限ループの予感',
        'message': 'アルゴリズムの見直し推奨。冷静にデバッグしよう。'
    },
    {
        'title': '新機能ひらめきモード',
        'message': 'アイデアが湧いてきた!すぐにメモしよう。'
    },
    {
        'title': 'レビュー恐怖症',
        'message': '他人の目が気になる日。勇気を出してプルリク送信!'
    },
    {
        'title': '眠気MAXゾーン',
        'message': '休憩推奨。短い仮眠でリフレッシュしよう。'
    }
]

HISTORY_FILE = os.path.expanduser('~/.random_os_mood_history')


def get_random_mood() -> dict:
    return random.choice(MOOD_LIST)


def format_mood_entry(mood: dict, timestamp: Optional[datetime.datetime] = None) -> str:
    if timestamp is None:
        timestamp = datetime.datetime.now()
    ts_str = timestamp.strftime('%Y-%m-%d %H:%M:%S')
    return f"[OS-Mood Barometer] {ts_str}\n{mood['title']}:{mood['message']}\n"


def log_mood_entry(mood: dict, timestamp: Optional[datetime.datetime] = None) -> None:
    entry = format_mood_entry(mood, timestamp)
    with open(HISTORY_FILE, 'a', encoding='utf-8') as f:
        f.write(entry)


def list_history(limit: int = 10) -> List[str]:
    if not os.path.exists(HISTORY_FILE):
        return []
    with open(HISTORY_FILE, 'r', encoding='utf-8') as f:
        lines = f.read().split('\n')
    # Each entry is 2 lines + empty line
    entries = []
    buf = []
    for line in lines:
        if line.strip() == '' and buf:
            entries.append('\n'.join(buf))
            buf = []
        elif line.strip() != '':
            buf.append(line)
    if buf:
        entries.append('\n'.join(buf))
    return entries[-limit:]


def summary_stats() -> dict:
    if not os.path.exists(HISTORY_FILE):
        return {'total': 0, 'counts': {}}
    with open(HISTORY_FILE, 'r', encoding='utf-8') as f:
        lines = f.readlines()
    counts = {}
    total = 0
    for line in lines:
        if line.startswith('[OS-Mood Barometer]'):
            total += 1
        for mood in MOOD_LIST:
            if mood['title'] in line:
                counts[mood['title']] = counts.get(mood['title'], 0) + 1
    return {'total': total, 'counts': counts}


def print_barometer():
    mood = get_random_mood()
    entry = format_mood_entry(mood)
    print(entry)
    log_mood_entry(mood)


def main():
    parser = argparse.ArgumentParser(description='謎のOS風 気分バロメーター')
    subparsers = parser.add_subparsers(dest='command', help='サブコマンド')

    # show (default)
    parser_show = subparsers.add_parser('show', help='ランダムな気分モードを表示')

    # list
    parser_list = subparsers.add_parser('list', help='過去のバロメーター履歴を表示')
    parser_list.add_argument('--limit', type=int, default=10, help='表示件数 (デフォルト: 10)')

    # summary
    parser_summary = subparsers.add_parser('summary', help='バロメーター履歴の統計を表示')

    args = parser.parse_args()

    if args.command is None or args.command == 'show':
        print_barometer()
    elif args.command == 'list':
        entries = list_history(args.limit)
        if not entries:
            print('履歴がありません。')
        else:
            for entry in entries:
                print(entry)
                print('-' * 40)
    elif args.command == 'summary':
        stats = summary_stats()
        print(f"合計: {stats['total']} 回")
        for k, v in stats['counts'].items():
            print(f"{k}: {v} 回")
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
random-os-mood-barometerは、開発者の作業体験に遊び心を加えるためのスキルです。コマンド実行やエディタ操作のたびに“ランダムな気分モード”を演出し、単調な作業にカオスなアクセントを与えます。

# 公式ドキュメント抜粋
本SkillはAntigravityのsemantic-match-onlyトリガーで自動発動し、明示呼び出しは不要です。出力は標準出力またはメニューバー風のテキスト表示で、履歴や統計もコマンドで確認できます。

# 利用例
- ターミナルで「python main.py」や「git commit」などのコマンド実行時に自動表示
- エディタ保存時に気分モードを演出
- 履歴や統計を確認して、作業の雰囲気を振り返る

# 注意点
実際の生産性や気分とは無関係なランダム演出です。ローカルに履歴は保存されますが、個人情報や作業内容は記録しません。邪魔にならないよう表示タイミングや場所は調整可能です。

# 設計方針
本SkillはシンプルなPythonスクリプトで実装され、CLIサブコマンドで履歴や統計も確認できます。今後はカスタム気分リストや表示スタイルの拡張も検討しています。

導入手順

このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Antigravity はファイル配置後に再起動するだけで自動認識します。

1. 前提

  • Node.js v16 以上 (degit 実行に必要)
  • Antigravity がローカルで動いていること

2. degit でフォルダ取得

プロジェクトのルートで以下のコマンドを実行します。

npx degit aazutaku/ai-note/antigravity/random-os-mood-barometer .agent/skills/random-os-mood-barometer

.agent/skills/random-os-mood-barometer の中に SKILL.md / scripts/ / references/ / README.md が展開されます。

3. ファイル配置確認

ls .agent/skills/random-os-mood-barometer
# 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記事を探す

本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次