🐴

202602個人的claude code設定

に公開

同僚に共有するために書きました。

デフォルトで自走させる

基本はbypass-permissionsでいいでしょう。

$CLAUDE_CONFIG_DIR/settings.json
{
  "permissions": {
    "defaultMode": "bypassPermissions"
  }
}

cageで囲む

bypass-permissionsで自律作業してくれるのはいいのですが、勝手に関係ないディレクトリとかを消されると困ります。
claude code本体にはsandbox機能があるのですが、bypass-permissions状態だと自力でsandboxを突破することがあり、あまり信用できません。以下のissueがありますが、記事執筆時点では明確に修正の報告がありません。

https://github.com/anthropics/claude-code/issues/10089

このへんはclaude外のツールで防衛策を張るのが安全でしょう。筆者はcageを使っています。

https://zenn.dev/warashi/articles/d78ba243-0bbf-4563-954f-16798314b375

https://github.com/Warashi/cage

こんな感じで設定して、cage claudeで起動すれば、明示的に許可したディレクトリ以外を操作できなくなります。cage claude --continueなどのパラメータもそのまま渡せます。

~/.config/cage/presets.yml
presets:
  base:
    allow:
      - "." # current
      - "$XDG_CACHE_HOME" # ~/.cache
      - "$XDG_DATA_HOME" # ~/.local/share
      - "/private/tmp" # macos tmp directory
      - "/var/folders" # macos mktemp
      - "/Library/Caches" # macos app caches
      - "$HOME/Library/Caches" # macos app caches

  git-enabled:
    allow-git: true
    allow-keychain: true # macOS only

  claude-code:
    allow:
      - "$CLAUDE_CONFIG_DIR"
      - "$HOME/.serena"
      - ".serena"

auto-presets:
  - command: claude
    presets:
      - base
      - git-enabled
      - claude-code

なお、mcpなどclaudeから呼び出すツールを追加したときは、そのツールがデータを保存するディレクトリを追加で許可する必要があります。

使ってほしくないコマンドはhooksで制限する

bypass-permissionsで自律作業してくれるのはいいのですが、git pushとかを勝手に実行されると困ります。settings.jsonのdenyに指定するのがよくあるやり方ですが、単にdenyされるだけだとあの手この手で突破しようとしてきます。「それはだめだから諦めて」と指示を出すと比較的素直に従ってくれます。

settings.jsonはこんな感じ。

$CLAUDE_CONFIG_DIR/settings.json
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "/path/to/validate-bash.sh"
          }
        ]
      }
    ]
  }
}

実際のvalidate-bash.shはこんな感じです。特定のコマンドがBashツールで使用されたとき、理由とともに実行を拒否します。

validate-bash.sh
#!/bin/bash
# Validate specific Bash commands usage

# Read JSON input from stdin
input=$(cat)

tool_name=$(echo "$input" | jq -r '.tool_name // ""')
command=$(echo "$input" | jq -r '.tool_input.command // ""')

# Only validate Bash tool
if [[ "$tool_name" != "Bash" ]]; then
  exit 0
fi

# Deny with JSON hookSpecificOutput
deny() {
  jq -n --arg reason "$1" '{
    "hookSpecificOutput": {
      "hookEventName": "PreToolUse",
      "permissionDecision": "deny",
      "permissionDecisionReason": $reason
    }
  }'
  exit 0
}

# Check for forbidden commands
# Use word boundary matching to avoid false positives (e.g., "category" matching "cat")
if echo "$command" | grep -qE '\bawk\b'; then
  deny "Use of 'awk' is prohibited. Use 'perl' instead. Example: perl -lane 'print \$F[0]' file.txt"
fi

if echo "$command" | grep -qE '\bsed\b'; then
  deny "Use of 'sed' is prohibited. Use 'perl' instead. Example: perl -pi -e 's/old/new/g' file.txt"
fi

if echo "$command" | grep -qE '\bpush\b'; then
  deny "Do not execute 'git push'. Please ask the user to execute it."
fi

if echo "$command" | grep -qE '\bgit add (-A|--all|\.($|[ ;|&]))'; then
  deny "Do not git-add all files. Specify the file name(s) to add."
fi

exit 0

rtkでトークンを絞る

自律作業させるとgitコマンドを何度も叩くことになるわけですが、ぜんぶ読ませるのは無駄です。rtkで出力をカットしましょう。

https://www.rtk-ai.app/

https://github.com/rtk-ai/rtk

まだまだ対応コマンドが少ないので、使用頻度が高いものに対しては自前でtoken cut-off proxyを作ってもいいかなーと思っています。

statuslineにはトークン使用割合を出す

この記事そのままじゃなくてもいいですが。

https://zenn.dev/kawarimidoll/articles/00cfa200c12c5f

現在はこの記事を書いたときとは違い、自動でトークン使用量が出ますが、いまどのくらい使ってるかがわかると心の準備ができます。

作業完了通知はスマホで受ける

スマホで受ければスマートウォッチにも飛ばせます。

https://zenn.dev/kawarimidoll/articles/7b93cd481de996

フロントエンドの確認もやらせる

筆者はagent-browserを使っています。

https://agent-browser.dev/

https://github.com/vercel-labs/agent-browser

agent-browser-mcpもあるのですがトークンの消費がでかすぎるので止めました。agent-browser cliだけでも十分動いてくれています。

AI記録用ディレクトリは決めておく

筆者はz-aiというディレクトリをグローバルにgitignoreし、AIの計画書を配置するのに使っています。これはCLAUDE.mdで指示しておきます。

https://github.com/kawarimidoll/dotfiles/blob/7e27dd4ceb6a84db4fb69d322dda7af79cf1c008/.config/claude/CLAUDE.md#L23-L28

agent-browserのスクショもここに保存してくれます。

markdownとして出力した計画書はArtoで見ます。

https://zenn.dev/kawarimidoll/articles/b120d56a12b3f0#arto

スマホから操作してhappyになる

happyを紹介しようと思っていたのですが…

https://happy.engineering/

yepanywhereというのもありましたが…

https://yepanywhere.com/

公式からremote-controlが提供されるようになったので今後はこっちを使うのが良さそうです。

https://code.claude.com/docs/en/remote-control

よく使うプロンプトはコマンド化する

「こういうことをするslash commandを作って保存して」と指示すればclaudeはコマンドを作ってくれます。

最近便利に使っているのは以下です。

ローカルで実装した際は/review/addressを、PRに対してレビューがついた場合は/address/reply-reviewを、それぞれ順次実行する感じになります。
ちなみにreviewは先入観を除きたいので、サブエージェントを用意し、それに任せる形にしています。

以上

最新の設定はdotfilesを見てください。

https://github.com/kawarimidoll/dotfiles

たぶんこのrepoをわたして「ここから取り込めそうな設定を列挙して」とか指示するのが一番早いと思います。

Discussion