norboten · cheat sheet

Claude Code in a job — what it loads, what it may do, and what it costs — cheat sheet

claude-code, ai-services, ai-agents
# what a session loaded
claude -p hi --output-format stream-json --verbose 2>/dev/null | head -1 \
  | jq '{model, permissionMode, apiKeySource, agents, mcp_servers, tools, claude_code_version}'

# a job-shaped run
claude -p "…" --permission-mode dontAsk --model sonnet \
  --tools "Read,Edit,Glob,Grep" --allowedTools "Edit(./docs/**)" \
  --max-turns 10 --max-budget-usd 1.00 --no-session-persistence --output-format json

# a classification: no tools, structured answer, no thinking
MAX_THINKING_TOKENS=0 claude -p "…" --model haiku --tools "" --max-turns 3 \
  --json-schema '{"type":"object","properties":{"label":{"type":"string"}},"required":["label"]}' \
  --output-format json | jq -r '.structured_output.label'

# afterwards
jq -c '{subtype, num_turns, is_error, permission_denials, total_cost_usd, models: (.modelUsage|keys)}' run.json
s=$(ls -t ~/.claude/projects/<project>/*.jsonl | head -1)
jq -r 'select(.type=="user") | .message.content[]? | select(.type=="tool_result") | .content' "$s"
ls "${s%.jsonl}"/subagents/

# levels, highest first: managed, command line, .claude/settings.local.json, .claude/settings.json, ~/.claude/settings.json
cat /etc/claude-code/managed-settings.json     # Linux; must be readable (0644)

# hooks: JSON on stdin; exit 2 blocks PreToolUse
jq -r '.tool_input.command // .tool_input.file_path // ""'
echo "reason" >&2; exit 2

# subagent: .claude/agents/<name>.md with name, description, tools, model
# MCP: .mcp.json; tools are mcp__<server>__<tool>; "${VAR}" from the environment
claude -p hi --output-format stream-json --verbose | head -1 | jq '.mcp_servers'