A subagent exists only where Claude Code looks, with the keys it requires — cheat sheet
claude-code, ai-agents
# where Claude Code looks (project wins over user)
ls .claude/agents/ ~/.claude/agents/
# a minimal, restricted subagent
cat > .claude/agents/security-reviewer.md <<'EOF'
---
name: security-reviewer
description: Reviews a diff for security problems before it merges. Use it for every pre-merge review.
tools: Read, Grep, Glob
model: haiku
---
You are the security reviewer. …
EOF
# one-off agents for a single session, without files
claude -p "…" --agents '{"reviewer": {"description": "Reviews diffs", "prompt": "You review.", "tools": ["Read"], "model": "haiku"}}'
# did the last session delegate, to what, on which model?
s=$(ls -t ~/.claude/projects/<project>/*.jsonl | head -1)
jq -r 'select(.type=="user") | .message.content[]? | select(.type=="tool_result") | .content' "$s"
cat "${s%.jsonl}"/subagents/*.meta.json
jq -c 'select(.type=="assistant") | .message.model' "${s%.jsonl}"/subagents/agent-*.jsonl | sort | uniq -c
# models per run, main agent and subagents together
jq '.modelUsage | keys' run.json