0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude/Codex起動時にターミナル背景色を自動変更する(AI別パレット対応)

0
Posted at

はじめに

AI CLIを並行利用していると、「今どのAIで作業しているか」を一目で識別したくなります。
今回は、AI起動時にターミナル背景色を自動変更する仕組みを作りました。

元ネタ

まず、着想の元になったメモはこちらです(ありがとうございます)。

このアイデアをベースに、今回はこちらの方向に拡張しました。

  • cwd だけでなく AI/プロダクト軸(Claude系・Codex系)で色を分ける
  • 同系色の中で cwd に応じて微妙に変化させる
  • claude / codex 起動時に自動適用し、終了時にリセット

何を実装したか

1. 背景色決定スクリプト(~/bin/term-bg

provider + product + path から色を決定して、OSC 11で背景色を変更します。

#!/usr/bin/env python3
import argparse
import colorsys
import hashlib
import os
import sys

PROVIDER_BASE = {
    "claude": (28.0, 0.72, 0.18),
    "codex": (205.0, 0.70, 0.17),
    "gemini": (150.0, 0.66, 0.17),
    "gpt": (188.0, 0.64, 0.17),
    "cursor": (332.0, 0.58, 0.18),
}

PRODUCT_SHIFT = {
    "code": -8.0,
    "cli": -10.0,
    "chat": 0.0,
    "api": 10.0,
    "desktop": 5.0,
    "web": 3.0,
    "agent": -3.0,
}


def clamp(v, lo, hi):
    return max(lo, min(hi, v))


def ai_palette_color(provider, product, path):
    base_h, base_s, base_l = PROVIDER_BASE.get(provider, (278.0, 0.56, 0.18))
    product_shift = PRODUCT_SHIFT.get(product, 0.0)
    seed = hashlib.md5(f"{provider}:{product}:{path}".encode()).hexdigest()
    bucket = [-2.0, -1.0, 0.0, 1.0, 2.0][int(seed[0], 16) % 5]
    fine_h = ((int(seed[1:3], 16) / 255.0) - 0.5) * 4.0

    hue_deg = (base_h + product_shift + bucket * 6.0 + fine_h) % 360.0
    sat = clamp(base_s + (((int(seed[3:5], 16) / 255.0) - 0.5) * 0.08), 0.46, 0.82)
    lit = clamp(base_l + (((int(seed[5:7], 16) / 255.0) - 0.5) * 0.03), 0.12, 0.24)
    return hue_deg / 360.0, sat, lit


def main():
    parser = argparse.ArgumentParser(add_help=False)
    parser.add_argument("path", nargs="?", default=os.getcwd())
    parser.add_argument("--path", dest="path_opt")
    parser.add_argument("--provider", default="")
    parser.add_argument("--product", default="")
    parser.add_argument("--show", action="store_true")
    args = parser.parse_args()

    path = args.path_opt or args.path
    provider = args.provider.strip().lower()
    product = args.product.strip().lower()

    hue, sat, lit = ai_palette_color(provider, product, path)

    r, g, b = colorsys.hls_to_rgb(hue, lit, sat)
    ri, gi, bi = int(r * 255), int(g * 255), int(b * 255)

    sys.stdout.write(f"\\033]11;rgb:{ri:02x}/{gi:02x}/{bi:02x}\\033\\")

    if args.show:
        print(f"{provider}:{product} {path} -> #{ri:02x}{gi:02x}{bi:02x}")


if __name__ == "__main__":
    main()

実行権限:

chmod +x ~/bin/term-bg

2. ~/.bashrc に起動ラッパーを追加

AIコマンド起動前に色を設定し、終了後にリセットします。

term-bg() { python3 ~/bin/term-bg "$@"; }
term-bg-reset() { printf '\033]11;rgb:00/00/00\033\\'; }

_run_with_ai_bg() {
    local provider="$1"
    local product="$2"
    local cmd="$3"
    shift 3

    term-bg --provider "$provider" --product "$product" --path "$PWD"
    command "$cmd" "$@"
    local exit_code=$?
    term-bg-reset
    return $exit_code
}

claude() { _run_with_ai_bg "claude" "code" "claude" "$@"; }
codex()  { _run_with_ai_bg "codex"  "cli"  "codex"  "$@"; }

反映:

source ~/.bashrc

どう変わったか

同じディレクトリでも、AIで背景が明確に変わります。

  • claude:code -> 暖色系
  • codex:cli -> 青系

--showで確認できます。

~/bin/term-bg --provider claude --product code --path "$PWD" --show
~/bin/term-bg --provider codex  --product cli  --path "$PWD" --show

元ネタとの差分

元ネタ(cwdベース)に対して、今回の実装は以下が主な差分です。

  • cwd 単独ではなく provider + product + cwd で色を決定
  • AIごとにベースパレットを固定(Claude系 / Codex系)
  • シェル関数で自動適用(起動時セット、終了時リセット)

注意点

  • OSC 11が効くターミナルで動作します(端末によっては無効)
  • 背景を濃くする場合、文字色とのコントラストに注意
  • tmux環境では端末設定によって反映可否が変わる場合があります

この記事の作業体制(明示)

今回の公開までの流れは次の通りです。

  • 記事の構成・本文ドラフト作成: AI(Codex)が実施
  • 技術内容の整理と実装内容の反映: AI(Codex)が実施
  • Qiita CLIでの投稿作業(init/login/new/publish): AI(Codex)が実行
  • 認証トークン発行など本人操作が必要な部分: ユーザー(著者)が補助

つまり、"あなたが補助し、AIがまとめて公開まで実行した" という体制です。

おわりに

「見た目で文脈を切り替える」のは地味に効きます。
複数AIを往復する人にはおすすめです。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?