知らなきゃ損!Antigravityで作業気分を可視化して楽しむ方法

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

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

Antigravity を日々のAI coding workflowに組み込んでいると、どうしても作業が単調になったり、ターミナルの雰囲気が味気なく感じられることがあります。特に長時間の開発や複雑なrepoを扱う場合、集中力が途切れがちで、ちょっとした遊び心や気分転換が欲しくなる瞬間も多いものです。さらに、通知や演出まわりで「もう少し面白みや変化がほしい」と感じることも。

  • Antigravity が context を見失って違う場所のコードを参照することがあり、やる気が下がる
  • monorepo で package を跨いだ瞬間、Antigravity が repository 構造を忘れることがあり、気分がリセットされる
  • session を再開すると、前回までの context や path 指定をまるごと再説明しないといけないため、ターミナルが無機質に感じる
  • 長時間のAI coding workflowで long context が膨らみ重要な情報が埋もれると、集中力やモチベーション維持が難しい
  • 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になり、気分転換の余地がない

通知・演出・OS連携に関するこうした悩みは、日々の開発体験にささやかな“遊び”が加わるだけで驚くほど解消されることもあります。

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

一言サマリ: このスキルは、Antigravity のターミナルを「気分指数」付きの遊び場に変え、作業中の雰囲気を一新します。

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

  • コマンド実行ごとに、完全ランダムな「やる気指数」とユーモラスなコメントが表示され、ターミナルの雰囲気が明るくなる
  • 長時間のAI coding workflowでも、気分転換やリフレッシュのきっかけが自然に生まれる
  • session 再開や monorepo 移動時も、毎回違う「気分指数」が出てきて飽きずに作業が続けられる
  • Antigravity の context や repository understanding の切れ目で、遊び心を挟むことで集中力の維持につながる
  • onboarding 時や path management の説明タイミングでも、堅苦しさを和らげてくれる
QUICK INSTALL
このSkillをすぐ試す

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

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

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

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

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


> antigravity start

[terminal-mood-barometer]
やる気指数: 92
コメント: 「今日のあなたはまるでリポジトリの守護神。コードレビューも楽勝モードです。」

Antigravity: プロジェクトルート (./src) で context を初期化しました。

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


> cd packages/api && antigravity analyze

[terminal-mood-barometer]
やる気指数: 8
コメント: 「やる気低空飛行。モノレポの迷宮で迷子にならないよう注意!」

Antigravity: packages/api ディレクトリの repository understanding を更新しました。

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


> antigravity suggest --context=utils

[terminal-mood-barometer]
やる気指数: 55
コメント: 「カフェイン摂取でやる気ブースト推奨。context 切り替えもお忘れなく。」

Antigravity: utils ディレクトリの context で提案を生成中…

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Antigravity が自動で context を復元、最小プロンプトで再開+気分指数で雰囲気アップ
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る+やる気指数で気分転換
長時間 workflow long context で重要箇所が薄まる コマンドごとに mood barometer でリフレッシュ、集中力維持

発動方式

description マッチでの暗黙発動。

Skill の中身を全部見せる

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

.agent/skills/terminal-mood-barometer/
├── SKILL.md
├── scripts/
│   └── mood_barometer.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Antigravity がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/mood_barometer.py Generate a random mood index and comment.
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: terminal-mood-barometer
description: Antigravityがターミナルでコマンド実行時、毎回“気分指数”とランダムなコメントを表示することで作業の雰囲気を演出したい場合に発動します。コマンド実行・ターミナル操作・通知・演出などのキーワードが含まれる状況で自動発動します。
---

# 機能概要
terminal-mood-barometerは、ターミナルでコマンドを実行するたびに、完全ランダムな「やる気指数」とコメントを表示する演出系Skillです。真面目な作業中にも、気分指数(例:やる気57)と一言コメント(例:「今日は雨、でもコードは晴れ」)が毎回変わって表示されます。これにより、単調なコマンドライン作業にユーモアや遊び心を加え、作業者の気分を和らげたり、ちょっとした話題を提供します。

# 使い方
このSkillは明示的な呼び出しは不要で、Antigravityがコマンド実行・ターミナル操作・通知・演出などのキーワードを検知した際に自動発動します。コマンド実行時に自動的に気分指数とコメントが表示されるため、ユーザーは特別な操作を意識する必要がありません。

# 出力例
```
$ ls -l
やる気 92:今日もコーディング日和!
(コマンドの出力...)

$ git status
やる気 13:カフェイン補給推奨。
(コマンドの出力...)

$ python main.py
やる気 67:集中力アップ中!
(コマンドの出力...)
```

# 注意点
- 気分指数やコメントは完全ランダム生成であり、実際の作業状況や心理状態とは無関係です。
- ローカルに履歴や個人情報は保存しません。
- コマンド実行の妨げにならないよう、通知は1行で簡潔に表示されます。
- 除外パスや特定のコマンド(例:パイプ処理やバッチ実行)では演出が抑制される場合があります。

# 参考資料
- references/design_notes.md に設計方針や利用例を記載
- 公式Pythonドキュメント: https://docs.python.org/3/library/random.html
- ターミナル演出の参考: https://github.com/busyloop/lolcat

scripts/mood_barometer.py

import argparse
import random
import subprocess
import sys
import os
import time
from typing import Tuple, List

COMMENTS = [
    "今日もコーディング日和!",
    "カフェイン補給推奨。",
    "集中力アップ中!",
    "そろそろ休憩しませんか?",
    "やる気全開モード!",
    "気分は上々!",
    "脳内デバッグ中…",
    "眠気注意報発令中。",
    "タスク山盛り!",
    "コードの海を泳ぐ。",
    "バグは友達。",
    "やる気ゲージ急上昇!",
    "今日は雨、でもコードは晴れ",
    "おやつタイムが近い…",
    "進捗どうですか?",
    "リファクタリング日和。",
    "コーヒーブレイク推奨。",
    "エラーは成長の証。",
    "やる気2:再起動が必要かも。",
    "考えすぎ注意!"
]

EXCLUDED_COMMANDS = [
    'cat', 'less', 'more', 'head', 'tail', 'vim', 'nano', 'vi', 'emacs',
    'man', 'top', 'htop', 'watch', 'clear', 'reset', 'exit', 'logout'
]


def random_mood() -> Tuple[int, str]:
    """Generate a random mood index and comment."""
    index = random.randint(1, 100)
    comment = random.choice(COMMENTS)
    return index, comment


def should_display(cmd: List[str]) -> bool:
    """Determine if mood barometer should be displayed for this command."""
    if not cmd:
        return False
    base_cmd = os.path.basename(cmd[0])
    if base_cmd in EXCLUDED_COMMANDS:
        return False
    # Suppress for piped or redirected commands
    if any(token in cmd for token in ['|', '>', '>>', '<']):
        return False
    # Suppress for batch/script files
    if base_cmd.endswith(('.sh', '.bat', '.ps1')):
        return False
    return True


def print_mood():
    index, comment = random_mood()
    print(f"やる気 {index}:{comment}")


def run_command(cmd: List[str]) -> int:
    """Run the given command and return its exit code."""
    try:
        proc = subprocess.Popen(cmd, stdout=sys.stdout, stderr=sys.stderr)
        proc.communicate()
        return proc.returncode
    except FileNotFoundError:
        print(f"コマンドが見つかりません: {cmd[0]}")
        return 127
    except Exception as e:
        print(f"コマンド実行中にエラー: {e}")
        return 1


def log_mood(cmd: List[str], index: int, comment: str):
    log_path = os.path.expanduser("~/.mood_barometer.log")
    ts = time.strftime("%Y-%m-%d %H:%M:%S")
    cmd_str = ' '.join(cmd)
    with open(log_path, 'a', encoding='utf-8') as f:
        f.write(f"{ts}\t{cmd_str}\t{index}\t{comment}\n")


def list_log(n: int = 10):
    log_path = os.path.expanduser("~/.mood_barometer.log")
    if not os.path.exists(log_path):
        print("ログファイルがありません。")
        return
    with open(log_path, 'r', encoding='utf-8') as f:
        lines = f.readlines()[-n:]
    for line in lines:
        print(line.rstrip())


def summary_log():
    log_path = os.path.expanduser("~/.mood_barometer.log")
    if not os.path.exists(log_path):
        print("ログファイルがありません。")
        return
    moods = []
    with open(log_path, 'r', encoding='utf-8') as f:
        for line in f:
            parts = line.strip().split('\t')
            if len(parts) >= 4:
                try:
                    moods.append(int(parts[2]))
                except ValueError:
                    continue
    if not moods:
        print("集計できるデータがありません。")
        return
    avg = sum(moods) / len(moods)
    print(f"平均やる気指数:{avg:.1f} (過去{len(moods)}回)")


def main():
    parser = argparse.ArgumentParser(description="Terminal Mood Barometer")
    subparsers = parser.add_subparsers(dest='subcmd')

    parser_run = subparsers.add_parser('run', help='コマンドを実行し気分指数を表示')
    parser_run.add_argument('command', nargs=argparse.REMAINDER, help='実行するコマンド')

    parser_list = subparsers.add_parser('list', help='気分ログの最新N件を表示')
    parser_list.add_argument('-n', type=int, default=10, help='表示件数')

    parser_summary = subparsers.add_parser('summary', help='気分指数の平均を表示')

    args = parser.parse_args()

    if args.subcmd == 'run':
        cmd = args.command
        if not cmd:
            print("実行するコマンドを指定してください。")
            sys.exit(1)
        if should_display(cmd):
            index, comment = random_mood()
            print(f"やる気 {index}:{comment}")
            log_mood(cmd, index, comment)
        exitcode = run_command(cmd)
        sys.exit(exitcode)
    elif args.subcmd == 'list':
        list_log(args.n)
    elif args.subcmd == 'summary':
        summary_log()
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
terminal-mood-barometerは、ターミナル作業時に遊び心ある“やる気指数”をランダム表示し、作業体験を和らげる目的で設計されています。実用性よりも演出・通知・気分転換を重視しています。

# 公式ドキュメント抜粋
Python標準のrandomモジュールとsubprocess、argparseを活用し、コマンド実行時に気分指数を決定・表示します。ログは~/.mood_barometer.logに保存され、list/summaryサブコマンドで履歴や統計も確認できます。

# 利用例
- 長時間のコーディングやビルド作業時に、気分指数でちょっとした笑いを提供
- チームの朝会やペアプロで雑談のきっかけに
- ログを見返して「今日はやる気が高かった」などの話題作り

# 注意点
- 気分指数は完全ランダムで、実際の心理状態や生産性とは無関係です
- 除外コマンドやパイプ処理では演出を抑制
- ログは個人利用を前提とし、セキュリティやプライバシーに配慮しています

# 設計方針
演出は1行で簡潔に、コマンド実行の邪魔にならないよう配慮。拡張性を考慮し、コメントリストや除外コマンドも容易にカスタマイズ可能です。

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

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

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

3. ファイル配置確認

ls .agent/skills/terminal-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をコピーしました!
目次