name: claude-code
description: Delegate coding tasks to Claude Code (Anthropic's CLI agent). Use for building features, refactoring, PR reviews, and iterative coding. Requires the claude CLI installed.
version: 2.2.0
author: Hermes Agent + Teknium
license: MIT
metadata:
hermes:
tags: [Coding-Agent, Claude, Anthropic, Code-Review, Refactoring, PTY, Automation]
related_skills: [codex, hermes-agent, opencode]
Claude Code โ Hermes Orchestration Guide
Delegate coding tasks to Claude Code (Anthropic's autonomous coding agent CLI) via the Hermes terminal. Claude Code v2.x can read files, write code, run shell commands, spawn subagents, and manage git workflows autonomously.
Prerequisites
- - Install:
npm install -g @anthropic-ai/claude-code - - Auth: run
claudeonce to log in (browser OAuth for Pro/Max, or setANTHROPIC_API_KEY) - - Console auth:
claude auth login --consolefor API key billing - - SSO auth:
claude auth login --ssofor Enterprise - - Check status:
claude auth status(JSON) orclaude auth status --text(human-readable) - - Health check:
claude doctorโ checks auto-updater and installation health - - Version check:
claude --version(requires v2.x+) - - Update:
claude updateorclaude upgrade - - One-shot coding tasks (fix a bug, add a feature, refactor)
- - CI/CD automation and scripting
- - Structured data extraction with
--json-schema - - Piped input processing (
cat file | claude -p "analyze this") - - Any task where you don't need multi-turn conversation
- - Multi-turn iterative work (refactor โ review โ fix โ test cycle)
- - Tasks requiring human-in-the-loop decisions
- - Exploratory coding sessions
- - When you need to use Claude's slash commands (
/compact,/review,/model) - - FastAPI backend with SQLAlchemy ORM
- - PostgreSQL database, Redis cache
- - pytest for testing with 90% coverage target
- -
make testโ run full test suite - -
make lintโ ruff + mypy - -
make devโ start dev server on :8000 - - Type hints on all public functions
- - Docstrings in Google style
- - 2-space indentation for YAML, 4-space for Python
- - No wildcard imports
- - Project rules:
.claude/rules/*.mdโ team-shared, git-tracked - - User rules:
~/.claude/rules/*.mdโ personal, global - - Limit: 25KB or 200 lines per project
- - This is separate from CLAUDE.md โ it's Claude's own notes about the project, accumulated across sessions
- - Injection vulnerabilities (SQL, XSS, command injection)
- - Authentication/authorization flaws
- - Secrets in code
- - Unsafe deserialization
- - Tool descriptions: 2KB cap per server for tool descriptions and server instructions
- - Result size: Default capped; use
maxResultSizeCharsannotation to allow up to 500K characters for large outputs - - Output tokens:
export MAX_MCP_OUTPUT_TOKENS=50000โ cap output from MCP servers to prevent context flooding - - Transports:
stdio(local process),http(remote),sse(server-sent events) - -
โฏat bottom = waiting for your input (Claude is done or asking a question) - -
โlines = Claude is actively using tools (reading, writing, running commands) - -
โตโต bypass permissions on= status bar showing permissions mode - -
โ medium ยท /effort= current effort level in status bar - -
ctrl+o to expand= tool output was truncated (can be expanded interactively) - - < 70% โ Normal operation, full precision
- - 70-85% โ Precision starts dropping, consider
/compact - - > 85% โ Hallucination risk spikes significantly, use
/compactor/clear
Two Orchestration Modes
Hermes interacts with Claude Code in two fundamentally different ways. Choose based on the task.
Mode 1: Print Mode (-p) โ Non-Interactive (PREFERRED for most tasks)
Print mode runs a one-shot task, returns the result, and exits. No PTY needed. No interactive prompts. This is the cleanest integration path.
`
terminal(command="claude -p 'Add error handling to all API calls in src/' --allowedTools 'Read,Edit' --max-turns 10", workdir="/path/to/project", timeout=120)
`
When to use print mode:
Print mode skips ALL interactive dialogs โ no workspace trust prompt, no permission confirmations. This makes it ideal for automation.
Mode 2: Interactive PTY via tmux โ Multi-Turn Sessions
Interactive mode gives you a full conversational REPL where you can send follow-up prompts, use slash commands, and watch Claude work in real time. Requires tmux orchestration.
`
Start a tmux session
terminal(command="tmux new-session -d -s claude-work -x 140 -y 40")
Launch Claude Code inside it
terminal(command="tmux send-keys -t claude-work 'cd /path/to/project && claude' Enter")
Wait for startup, then send your task
(after ~3-5 seconds for the welcome screen)
terminal(command="sleep 5 && tmux send-keys -t claude-work 'Refactor the auth module to use JWT tokens' Enter")
Monitor progress by capturing the pane
terminal(command="sleep 15 && tmux capture-pane -t claude-work -p -S -50")
Send follow-up tasks
terminal(command="tmux send-keys -t claude-work 'Now add unit tests for the new JWT code' Enter")
Exit when done
terminal(command="tmux send-keys -t claude-work '/exit' Enter")
`
When to use interactive mode:
PTY Dialog Handling (CRITICAL for Interactive Mode)
Claude Code presents up to two confirmation dialogs on first launch. You MUST handle these via tmux send-keys:
Dialog 1: Workspace Trust (first visit to a directory)
`
โฏ 1. Yes, I trust this folder โ DEFAULT (just press Enter)
2. No, exit
`
Handling: tmux send-keys -t โ default selection is correct.
Dialog 2: Bypass Permissions Warning (only with --dangerously-skip-permissions)
`
โฏ 1. No, exit โ DEFAULT (WRONG choice!)
2. Yes, I accept
`
Handling: Must navigate DOWN first, then Enter:
`
tmux send-keys -t
`
Robust Dialog Handling Pattern
`
Launch with permissions bypass
terminal(command="tmux send-keys -t claude-work 'claude --dangerously-skip-permissions \"your task\"' Enter")
Handle trust dialog (Enter for default "Yes")
terminal(command="sleep 4 && tmux send-keys -t claude-work Enter")
Handle permissions dialog (Down then Enter for "Yes, I accept")
terminal(command="sleep 3 && tmux send-keys -t claude-work Down && sleep 0.3 && tmux send-keys -t claude-work Enter")
Now wait for Claude to work
terminal(command="sleep 15 && tmux capture-pane -t claude-work -p -S -60")
`
Note: After the first trust acceptance for a directory, the trust dialog won't appear again. Only the permissions dialog recurs each time you use --dangerously-skip-permissions.
CLI Subcommands
| Subcommand | Purpose | |
| ------------ | --------- | |
claude | Start interactive REPL | |
claude "query" | Start REPL with initial prompt | |
claude -p "query" | Print mode (non-interactive, exits when done) | |
cat file \ | claude -p "query" | Pipe content as stdin context |
claude -c | Continue the most recent conversation in this directory | |
claude -r "id" | Resume a specific session by ID or name | |
claude auth login | Sign in (add --console for API billing, --sso for Enterprise) | |
claude auth status | Check login status (returns JSON; --text for human-readable) | |
claude mcp add | Add an MCP server | |
claude mcp list | List configured MCP servers | |
claude mcp remove | Remove an MCP server | |
claude agents | List configured agents | |
claude doctor | Run health checks on installation and auto-updater | |
claude update / claude upgrade | Update Claude Code to latest version | |
claude remote-control | Start server to control Claude from claude.ai or mobile app | |
claude install [target] | Install native build (stable, latest, or specific version) | |
claude setup-token | Set up long-lived auth token (requires subscription) | |
claude plugin / claude plugins | Manage Claude Code plugins | |
claude auto-mode | Inspect auto mode classifier configuration | |
| To load | Flag | |
| --------- | ------ | |
| System prompt additions | --append-system-prompt "text" or --append-system-prompt-file path | |
| Settings | --settings | |
| MCP servers | --mcp-config | |
| Custom agents | --agents ' | |
| Flag | Effect | |
| ------ | -------- | |
-p, --print | Non-interactive one-shot mode (exits when done) | |
-c, --continue | Resume most recent conversation in current directory | |
-r, --resume | Resume specific session by ID or name (interactive picker if no ID) | |
--fork-session | When resuming, create new session ID instead of reusing original | |
--session-id | Use a specific UUID for the conversation | |
--no-session-persistence | Don't save session to disk (print mode only) | |
--add-dir | Grant Claude access to additional working directories | |
-w, --worktree [name] | Run in an isolated git worktree at .claude/worktrees/ | |
--tmux | Create a tmux session for the worktree (requires --worktree) | |
--ide | Auto-connect to a valid IDE on startup | |
--chrome / --no-chrome | Enable/disable Chrome browser integration for web testing | |
--from-pr [number] | Resume session linked to a specific GitHub PR | |
--file | File resources to download at startup (format: file_id:relative_path) | |
| Flag | Effect | |
| ------ | -------- | |
--model | Model selection: sonnet, opus, haiku, or full name like claude-sonnet-4-6 | |
--effort | Reasoning depth: low, medium, high, max, auto | Both |
--max-turns | Limit agentic loops (print mode only; prevents runaway) | |
--max-budget-usd | Cap API spend in dollars (print mode only) | |
--fallback-model | Auto-fallback when default model is overloaded (print mode only) | |
--betas | Beta headers to include in API requests (API key users only) | |
| Flag | Effect | |
| ------ | -------- | |
--dangerously-skip-permissions | Auto-approve ALL tool use (file writes, bash, network, etc.) | |
--allow-dangerously-skip-permissions | Enable bypass as an option without enabling it by default | |
--permission-mode | default, acceptEdits, plan, auto, dontAsk, bypassPermissions | |
--allowedTools | Whitelist specific tools (comma or space-separated) | |
--disallowedTools | Blacklist specific tools | |
--tools | Override built-in tool set ("" = none, "default" = all, or tool names) | |
| Flag | Effect | |
| ------ | -------- | |
--output-format | text (default), json (single result object), stream-json (newline-delimited) | |
--input-format | text (default) or stream-json (real-time streaming input) | |
--json-schema | Force structured JSON output matching a schema | |
--verbose | Full turn-by-turn output | |
--include-partial-messages | Include partial message chunks as they arrive (stream-json + print) | |
--replay-user-messages | Re-emit user messages on stdout (stream-json bidirectional) | |
| Flag | Effect | |
| ------ | -------- | |
--append-system-prompt | Add to the default system prompt (preserves built-in capabilities) | |
--append-system-prompt-file | Add file contents to the default system prompt | |
--system-prompt | Replace the entire system prompt (use --append instead usually) | |
--system-prompt-file | Replace the system prompt with file contents | |
--bare | Skip hooks, plugins, MCP discovery, CLAUDE.md, OAuth (fastest startup) | |
--agents ' | Define custom subagents dynamically as JSON | |
--mcp-config | Load MCP servers from JSON file (repeatable) | |
--strict-mcp-config | Only use MCP servers from --mcp-config, ignoring all other MCP configs | |
--settings | Load additional settings from a JSON file or inline JSON | |
--setting-sources | Comma-separated sources to load: user, project, local | |
--plugin-dir | Load plugins from directories for this session only | |
--disable-slash-commands | Disable all skills/slash commands | |
| Flag | Effect | |
| ------ | -------- | |
-d, --debug [filter] | Enable debug logging with optional category filter (e.g., "api,hooks", "!1p,!file") | |
--debug-file | Write debug logs to file (implicitly enables debug mode) | |
| Flag | Effect | |
| ------ | -------- | |
--teammate-mode | How agent teams display: auto, in-process, or tmux | |
--brief | Enable SendUserMessage tool for agent-to-user communication | |
| Command | Purpose | |
| --------- | --------- | |
/help | Show all commands (including custom and MCP commands) | |
/compact [focus] | Compress context to save tokens; CLAUDE.md survives compaction. E.g., /compact focus on auth logic | |
/clear | Wipe conversation history for a fresh start | |
/context | Visualize context usage as a colored grid with optimization tips | |
/cost | View token usage with per-model and cache-hit breakdowns | |
/resume | Switch to or resume a different session | |
/rewind | Revert to a previous checkpoint in conversation or code | |
/btw | Ask a side question without adding to context cost | |
/status | Show version, connectivity, and session info | |
/todos | List tracked action items from the conversation | |
/exit or Ctrl+D | End session | |
| Command | Purpose | |
| --------- | --------- | |
/review | Request code review of current changes | |
/security-review | Perform security analysis of current changes | |
/plan [description] | Enter Plan mode with auto-start for task planning | |
/loop [interval] | Schedule recurring tasks within the session | |
/batch | Auto-create worktrees for large parallel changes (5-30 worktrees) | |
| Command | Purpose | |
| --------- | --------- | |
/model [model] | Switch models mid-session (use arrow keys to adjust effort) | |
/effort [level] | Set reasoning effort: low, medium, high, max, or auto | |
/init | Create a CLAUDE.md file for project memory | |
/memory | Open CLAUDE.md for editing | |
/config | Open interactive settings configuration | |
/permissions | View/update tool permissions | |
/agents | Manage specialized subagents | |
/mcp | Interactive UI to manage MCP servers | |
/add-dir | Add additional working directories (useful for monorepos) | |
/usage | Show plan limits and rate limit status | |
/voice | Enable push-to-talk voice mode (20 languages; hold Space to record, release to send) | |
/release-notes | Interactive picker for version release notes | |
| Key | Action | |
| ----- | -------- | |
Ctrl+C | Cancel current input or generation | |
Ctrl+D | Exit session | |
Ctrl+R | Reverse search command history | |
Ctrl+B | Background a running task | |
Ctrl+V | Paste image into conversation | |
Ctrl+O | Transcript mode โ see Claude's thinking process | |
Ctrl+G or Ctrl+X Ctrl+E | Open prompt in external editor | |
Esc Esc | Rewind conversation or code state / summarize | |
| Key | Action | |
| ----- | -------- | |
Shift+Tab | Cycle permission modes (Normal โ Auto-Accept โ Plan) | |
Alt+P | Switch model | |
Alt+T | Toggle thinking mode | |
Alt+O | Toggle Fast Mode | |
| Key | Action | |
| ----- | -------- | |
\ + Enter | Quick newline | |
Shift+Enter | Newline (alternative) | |
Ctrl+J | Newline (alternative) | |
| Prefix | Action | |
| -------- | -------- | |
! | Execute bash directly, bypassing AI (e.g., !npm test). Use ! alone to toggle shell mode. | |
@ | Reference files/directories with autocomplete (e.g., @./src/api/) | |
# | Quick add to CLAUDE.md memory (e.g., # Use 2-space indentation) | |
/ | Slash commands | |
| Hook | When it fires | Common use |
| ------ | -------------- | ------------ |
UserPromptSubmit | Before Claude processes a user prompt | Input validation, logging |
PreToolUse | Before tool execution | Security gates, block dangerous commands (exit 2 = block) |
PostToolUse | After a tool finishes | Auto-format code, run linters |
Notification | On permission requests or input waits | Desktop notifications, alerts |
Stop | When Claude finishes a response | Completion logging, status updates |
SubagentStop | When a subagent completes | Agent orchestration |
PreCompact | Before context memory is cleared | Backup session transcripts |
SessionStart | When a session begins | Load dev context (e.g., git status) |
| Variable | Content | |
| ---------- | --------- | |
CLAUDE_PROJECT_DIR | Current project path | |
CLAUDE_FILE_PATHS | Files being modified | |
CLAUDE_TOOL_INPUT | Tool parameters as JSON | |
| Flag | Scope | Storage |
| ------ | ------- | --------- |
-s user | Global (all projects) | ~/.claude.json |
-s local | This project (personal) | .claude/settings.local.json (gitignored) |
-s project | This project (team-shared) | .claude/settings.json (git-tracked) |
| Variable | Effect | |
| ---------- | -------- | |
ANTHROPIC_API_KEY | API key for authentication (alternative to OAuth) | |
CLAUDE_CODE_EFFORT_LEVEL | Default effort: low, medium, high, max, or auto | |
MAX_THINKING_TOKENS | Cap thinking tokens (set to 0 to disable thinking entirely) | |
MAX_MCP_OUTPUT_TOKENS | Cap output from MCP servers (default varies; set e.g., 50000) | |
CLAUDE_CODE_NO_FLICKER=1 | Enable alt-screen rendering to eliminate terminal flicker | |
CLAUDE_CODE_SUBPROCESS_ENV_SCRUB | Strip credentials from sub-processes for security |
Cost & Performance Tips
1. Use --max-turns in print mode to prevent runaway loops. Start with 5-10 for most tasks.
2. Use --max-budget-usd for cost caps. Note: minimum ~$0.05 for system prompt cache creation.
3. Use --effort low for simple tasks (faster, cheaper). high or max for complex reasoning.
4. Use --bare for CI/scripting to skip plugin/hook discovery overhead.
5. Use --allowedTools to restrict to only what's needed (e.g., Read only for reviews).
6. Use /compact in interactive sessions when context gets large.
7. Pipe input instead of having Claude read files when you just need analysis of known content.
8. Use --model haiku for simple tasks (cheaper) and --model opus for complex multi-step work.
9. Use --fallback-model haiku in print mode to gracefully handle model overload.
10. Start new sessions for distinct tasks โ sessions last 5 hours; fresh context is more efficient.
11. Use --no-session-persistence in CI to avoid accumulating saved sessions on disk.
Pitfalls & Gotchas
1. Interactive mode REQUIRES tmux โ Claude Code is a full TUI app. Using pty=true alone in Hermes terminal works but tmux gives you capture-pane for monitoring and send-keys for input, which is essential for orchestration.
2. --dangerously-skip-permissions dialog defaults to "No, exit" โ you must send Down then Enter to accept. Print mode (-p) skips this entirely.
3. --max-budget-usd minimum is ~$0.05 โ system prompt cache creation alone costs this much. Setting lower will error immediately.
4. --max-turns is print-mode only โ ignored in interactive sessions.
5. Claude may use python instead of python3 โ on systems without a python symlink, Claude's bash commands will fail on first try but it self-corrects.
6. Session resumption requires same directory โ --continue finds the most recent session for the current working directory.
7. --json-schema needs enough --max-turns โ Claude must read files before producing structured output, which takes multiple turns.
8. Trust dialog only appears once per directory โ first-time only, then cached.
9. Background tmux sessions persist โ always clean up with tmux kill-session -t when done.
10. Slash commands (like /commit) only work in interactive mode โ in -p mode, describe the task in natural language instead.
11. --bare skips OAuth โ requires ANTHROPIC_API_KEY env var or an apiKeyHelper in settings.
12. Context degradation is real โ AI output quality measurably degrades above 70% context window usage. Monitor with /context and proactively /compact.
Rules for Hermes Agents
1. Prefer print mode (-p) for single tasks โ cleaner, no dialog handling, structured output
2. Use tmux for multi-turn interactive work โ the only reliable way to orchestrate the TUI
3. Always set workdir โ keep Claude focused on the right project directory
4. Set --max-turns in print mode โ prevents infinite loops and runaway costs
5. Monitor tmux sessions โ use tmux capture-pane -t to check progress
6. Look for the โฏ prompt โ indicates Claude is waiting for input (done or asking a question)
7. Clean up tmux sessions โ kill them when done to avoid resource leaks
8. Report results to user โ after completion, summarize what Claude did and what changed
9. Don't kill slow sessions โ Claude may be doing multi-step work; check progress instead
10. Use --allowedTools โ restrict capabilities to what the task actually needs