Skip to content

原文(日本語に翻訳)

スクリプト連携のために claude agents --json を追加 - ライブ中のClaudeセッションをJSONとして一覧表示(tmux-resurrect、ステータスバー、セッションピッカーでの活用を想定)

原文(英語)

Added claude agents --json to list live Claude sessions as JSON for scripting (tmux-resurrect, status bars, session pickers)

概要

claude agents --json は、現在実行中のすべてのClaudeエージェントセッション情報をJSON形式で出力する新しいオプションです。この機能により、tmuxのステータスバー、セッションピッカー、tmux-resurrectなどのツールとClaudeのセッション情報を簡単に連携させることができます。シェルスクリプトや外部ツールからセッション一覧を取得・解析する際に特に有用です。

基本的な使い方

bash
# ライブセッション一覧をJSON形式で出力
claude agents --json

# jqを使って見やすく整形
claude agents --json | jq .

# 特定のフィールドだけ抽出
claude agents --json | jq '.[].session_id'

実践例

tmuxステータスバーへの組み込み

tmuxのステータスバーにアクティブなClaudeセッション数を表示する設定例です。

bash
# ~/.tmux.conf
set -g status-right '#(claude agents --json 2>/dev/null | jq "length" 2>/dev/null || echo 0) agents | %H:%M'

# またはシェルスクリプトとして
# ~/bin/claude-session-count.sh
#!/bin/bash
count=$(claude agents --json 2>/dev/null | jq 'length' 2>/dev/null || echo 0)
echo "Claude: ${count} sessions"

セッションピッカーの実装

fzfと組み合わせてインタラクティブなセッションピッカーを作成できます。

bash
#!/bin/bash
# claude-session-picker.sh - fzfでセッションを選択してアタッチ

selected=$(claude agents --json | jq -r '.[] | "\(.session_id)\t\(.working_directory // "unknown")\t\(.status // "running")"' | \
  fzf --delimiter='\t' --with-nth=2,3 --header="Claude Sessions")

if [ -n "$selected" ]; then
  session_id=$(echo "$selected" | cut -f1)
  echo "Attaching to session: $session_id"
  # セッションにアタッチする処理
fi

tmux-resurrectとの連携

tmux-resurrectでtmuxセッションを復元する際にClaudeセッション情報も保存・復元する例です。

bash
#!/bin/bash
# save-claude-sessions.sh - セッション情報をファイルに保存

claude agents --json > ~/.tmux-claude-sessions.json
echo "Saved $(jq 'length' ~/.tmux-claude-sessions.json) Claude sessions"

# 保存した情報の確認
cat ~/.tmux-claude-sessions.json | jq '.[] | {id: .session_id, dir: .working_directory}'

シェルスクリプトでのセッション監視

定期的にセッション状態を監視するスクリプトです。

bash
#!/bin/bash
# monitor-agents.sh - セッション状態を定期監視

while true; do
  sessions=$(claude agents --json 2>/dev/null)
  count=$(echo "$sessions" | jq 'length' 2>/dev/null || echo 0)
  
  echo "$(date '+%H:%M:%S') - Active Claude sessions: $count"
  
  if [ "$count" -gt 0 ]; then
    echo "$sessions" | jq -r '.[] | "  - \(.session_id): \(.working_directory // "unknown")"'
  fi
  
  sleep 30
done

注意点

  • --json フラグはライブ(現在実行中)のセッションのみを対象とします
  • JSON出力の具体的なスキーマはバージョンによって変わる可能性があるため、スクリプトでは必要なフィールドのみを参照することを推奨します
  • セッションが存在しない場合は空の配列 [] が返されます
  • エラーが発生した場合は標準エラー出力にメッセージが表示され、終了コードが非ゼロになります
  • スクリプト内で使用する際は 2>/dev/null でエラー出力を抑制することを検討してください

関連情報