# 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'