🗂

Claude Code の Plan Mode で作成した計画を GitHub Gist で閲覧する

に公開

Claude Code の Plan Mode で作成したプランを見やすくするために、プラン作成後に自動で Gist にアップロードしてそこで確認するという方法を試したところ便利でした。

  • 良い点
    • プレビュー用の専用のアプリケーションを必要としない
    • 編集履歴も残るのでプランをちゃんとバージョン管理していなくてもバックアップが残る
    • GitHub の Issue や Pull Request に貼るのも Gist URL を貼るだけで良い
  • 注意点
    • Secret Gist は URL を知っていれば誰でもアクセスできるため、機密情報の扱いには気をつける必要がある

方法としては Claude Code の Hooks 機能を使えば実現できます。

前提:Hooks について

Claude Code の Hooks は、特定のイベント発生時にカスタムスクリプトを実行できる機能です。今回は PreToolUse フックの ExitPlanMode イベントを利用します。ExitPlanMode はプランの承認リクエスト時に呼ばれるツールなので、このタイミングでスクリプトを実行できます。

実装

Hook スクリプト

.claude/hooks/upload-plan-gist.sh として以下のスクリプトを配置します。

#!/bin/bash
# Upload plan to GitHub Gist
# Called by Claude Code hook (PreToolUse:ExitPlanMode)
# Requires: .session_id, .tool_input.plan, .cwd in JSON stdin

INPUT="$(cat)"

SESSION_ID="$(printf '%s' "$INPUT" | jq -r '.session_id // empty')"
PLAN_CONTENT="$(printf '%s' "$INPUT" | jq -r '.tool_input.plan // empty')"
CWD="$(printf '%s' "$INPUT" | jq -r '.cwd // empty')"

[[ -z "$SESSION_ID" || -z "$PLAN_CONTENT" ]] && exit 0

CACHE_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/claude-plan-gist"
GIST_URL_FILE="${CACHE_DIR}/${SESSION_ID}"
mkdir -p "$CACHE_DIR"

if [[ -f "$GIST_URL_FILE" ]]; then
  GIST_URL="$(cat "$GIST_URL_FILE")"
  printf '%s' "$PLAN_CONTENT" | gh gist edit "$GIST_URL" -f PLAN.md - && open -g "$GIST_URL"
else
  GIST_OUTPUT="$(printf '%s' "$PLAN_CONTENT" | gh gist create -d "$(basename "$CWD")" -f PLAN.md - 2>&1)" || exit 0
  GIST_URL="$(printf '%s\n' "$GIST_OUTPUT" | tail -n 1)"
  printf '%s' "$GIST_URL" > "$GIST_URL_FILE"
  open -g "$GIST_URL"
fi

設定ファイル

.claude/settings.json に Hook を登録します。

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "ExitPlanMode",
        "hooks": [
          {
            "type": "command",
            "command": ".claude/hooks/upload-plan-gist.sh"
          }
        ]
      }
    ]
  }
}

仕組み

このスクリプトは以下のように動作します。

  1. 初回実行時: gh gist create で新しい Gist を作成し、URL をセッション ID と紐づけてキャッシュに保存
  2. 2回目以降: キャッシュから Gist URL を取得し、gh gist edit で既存の Gist を更新

セッション ID ごとに Gist を管理するため、同じセッション内でプランを修正しても同じ Gist が更新されます。新しいセッションを開始すると新しい Gist が作成されます。

Discussion