hermes-claude-code-tmux
Required procedure for a Hermes agent invoking the Claude Code CLI.
Skill by Clovel
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/clovel-hermes-claude-code-tmux
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: productivity, agent-building
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Python package
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/hermes-claude-code-tmux
What's inside
- Skill name
hermes-claude-code-tmux- Description
- Required procedure for a Hermes agent invoking the Claude Code CLI. Use whenever about to run `claude`, delegate a coding task to Claude Code, dispatch a subagent run, or resume one. Every invocation goes inside a named detached tmux session — never a direct terminal call. Default substrate is an interactive TUI session driven by scripts/cc-drive.py, with print mode the exception. Supersedes the bundled autonomous-ai-agents/claude-code skill where they conflict.
- License
- MIT
- Instructions
- 515 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
Agent Skills spec issues
- body: 515 lines (spec recommends under 500)
Files (8)
- SKILL.md
- alternative-multiplexer-runtimes.md · references/
- permissions-and-mcp-grants.md · references/
- tracker-writes-via-mcp.md · references/
- verifying-a-delegated-run.md · references/
- cc-drive.py · scripts/
- cc-live.py · scripts/
- trust_cloned_repos.py · scripts/
SKILL.md (first lines)
# hermes-claude-code-tmux
How a Hermes agent invokes Claude Code. Read this **before** the first `claude` call
of a task, not after one fails.
## Precedence
Where this skill and the bundled `autonomous-ai-agents/claude-code` skill disagree,
**this skill wins**. The bundled skill assumes a foreground call; that assumption is
wrong here.
## Authentication: subscription, not API key
Claude Code is authenticated with a **Claude subscription (OAuth)**, not an
`ANTHROPIC_API_KEY`. Two consequences:
- **Never pass `--max-budget-usd`.** It expresses an API-billing cap, which does not
apply to subscription auth.
- **Never pass `--bare`.** It skips auto-discovery of skills, hooks, MCP servers,
subagents and `CLAUDE.md` — exactly the context that should be loaded.
If a `claude` call fails on authentication, do **not** reach for an API key. Re-check
the OAuth session instead; a fresh box needs one interactive `claude` login on the
desktop, because print mode cannot prompt.
## MCP servers are live — scope and word prompts accordingly
Claude Code here inherits the account's claude.ai MCP servers. **Do not assume a
roster — read it:**
```bash
claude mcp list # every server, and whether it is authenticated
```
Authentication state is the one fact in this area guaranteed to change: a server gets
connected, a token expires, a new one is added. A roster written into this file is
therefore wrong shortly after it is written, and wrong in the most misleading
direction — it reads as authoritative. Run the command while preparing the dispatch and
word the prompt against what it actually returns.
Consequences for a dispatch:
- **Never tell CC it has "no network access"**, and never write that a tracker it has
an MCP for is out of its reach. The claim is false, and CC will faithfully report
back "could not verify — no access" for something it could have checked itself. A
delegated agent's self-report about its own capabilities is not evidence: run
`claude mcp list`, don't believe it.
- **Name the systems to cross-check** in the prompt ("verify the release against
Sentry via MCP", "read the issue's current body via Linear") and require each claim
to be labelled *verified via MCP* or *taken on trust*.
- **Not everything is covered.** A self-hosted GitLab and a Kubernetes cluster are not
in that roster, so those claims stay yours to verify with `glab`/`kubectl`. State
that explicitly rather than letting CC guess which facts it owns.
- **A read-only run needs the restriction spelled out.** MCP tools can write to
external systems — an audit must say "read only, change nothing in Linear/Sentry"
and keep the `--settings` deny list, or a review can end in a mutated issue.
- **Do not pass `--bare` or `--strict-mcp-config`** on a task that needs those
servers; both cut MCP discovery off.
- **"Connected" does not mean "callable".** A server listed as connected can still
refuse an individual tool call for want of a granted permission, and print mode
cannot run an authorization flow — CC comes back "permission not granted" and stops.
Ask it to *name* any refused call rather than work around it, then read that system
with your own connector tools and fold the answer into the deliverable. Deliver the
fact, not the caveat: a review handed over as "could not check the ticket" is worse
than one you closed out yourself before reporting.
- **A refused call and an invented one read the same in prose.** CC reports a tool as
absent — "not available in this environment" — without having attempted any call, and
does it repeatedly. Only the `tool_use` / `tool_result` events of
`--output-format stream-json` are evidence about what it could and could not call.
- **Separate auth from permission when a connector is dark.** `claude mcp list` shows
`✔ Connected` or `! Needs authentication`; a server in the second state needs a
sign-in and no permission rule will help until then. Permission questions are settled
by the probes in `references/permissions-and-mcp-grants.md`.
### MCP tools need an explicit grant in a headless run
Print mode cannot prompt, so an MCP tool with no allow rule is denied — and the denial
comes back as prose ("access not authorized", or worse "tool not available in this
environment" with no call attempted), not as an error you can catch. Grant it one of two
ways:
- **Name the tools in `--allowedTools`** (`--allowedTools "Read,mcp__claude_ai_Linear__get_issue"`).
Verified sufficient with no settings file anywhere on the machine — this is the default
for a one-off review.
- **Rely on an allow rule.** An interactive "Yes, and don't ask again" writes
`mcp__<server>__<tool>` into `.claude/settings.local.json` at the git repository root,
resolved *through worktrees* to the main checkout, so a worktree of that repo inherits
it while a scratch directory does not. A `--settings` file merges with the lower levels
instead of replacing them, so a run-level deny list does not wipe the project's grants.
- **Or write the rule once in the user settings file.** `permissions.allow` in
`~/.claude/settings.json` applies in every project on the machine, scratch directories
included — the way to stop re-granting the same read tools on every dispatch.
- **When the delegated task *is* a tracker write** (create the issue, post the comment), grant the
server-wide glob deliberately — `mcp__claude_ai_Linear__*` — and constrain it in prose to the one
object it may create. Then read that object back with your own connector: a write reported
without an identifier, URL or read-back is not evidence it happened. House shape, language, label
and assignee rules: `references/tracker-writes-via-mcp.md`.
Rule syntax (permissions docs): allow globs are accepted only after a literal
`mcp__<server>__` prefix (`mcp__claude_ai_Linear__get_*`); a bare `mcp__<server>` or
`mcp__<server>__*` matches every tool of that server — which also grants its write tools
in unattended runs, so prefer per-tool read globs. There is **no wildcard for a family of
servers**: the server segment must be literal, so `mcp__claude_ai_*` grants nothing and
"every connector on the account" is one entry per connector. Evaluation order is deny,
ask, allow, and a deny cannot be carved out by a narrower allow.
`references/permissions-and-mcp-grants.md` — where each kind of rule lives, the
precedence order, the mode semantics, and the probes that prove a rule grants.
Never accept a delegated run's word that an MCP tool is out of reach: force the call
("Call the MCP tool `<exact name>` with no arguments; you must attempt it; quote the
failure verbatim") and read the events it produced, then grant and re-run.
### Answering a permission dialog yourself, in a live session
A run that hits a wall can be reproduced **interactively** in tmux and driven: start
`claude` with no `-p`, send the prompt, read the dialog with `tmux capture-pane -p`, move
the selection with `send-keys … Down` (confirm with `capture-pane` that the `❯` marker
moved — do not assume), and commit with `Enter`. Send the text and the `Enter` as separateFrom Clovel/custom-ai-skills, MIT.
More from Clovel/custom-ai-skills
- 0.566score
hermes-code-delegation
Clovel
Routes all codebase work to the Claude Code CLI instead of the agent's own file tools, and picks the model the task warrants.
SkillAFreshness: AClaude Code +9 - 0.529score
git-workflow
Clovel
Git branching, commits, GPG signing, and merge request workflow.
SkillBFreshness: BClaude Code +9 - 0.524score
git-workflow-hermes
Clovel
Hermes variant of git-workflow — branching, commits, and MR/PRs with commit signing OFF.
SkillBFreshness: BClaude Code +9 - 0.474score
review-mr
Clovel
Lightweight local code review for diffs, branches, and GitLab merge requests.
SkillCFreshness: CClaude Code +9 - 0.473score
docker-patterns
Clovel
Dockerfile and docker-compose best practices.
SkillCFreshness: CClaude Code +9 - 0.410score
nestjs-paginated-list-routes
Clovel
Use when adding, reviewing, or fixing paginated GET list endpoints in a NestJS + Prisma + nestjs-zod backend.
SkillDFreshness: DClaude Code +9 - 0.409score
k8s-ops
Clovel
Kubernetes troubleshooting, deployment, and operations.
SkillDFreshness: DClaude Code +9 - 0.409score
ansible-ops
Clovel
Ansible playbook, inventory, and task conventions.
SkillDFreshness: DClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Oct 5, 2026 (23 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/Clovel/custom-ai-skills
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from Clovel
- 0.566score
hermes-code-delegation
Clovel
Routes all codebase work to the Claude Code CLI instead of the agent's own file tools, and picks the model the task warrants.
SkillAFreshness: AClaude Code +9 - 0.529score
git-workflow
Clovel
Git branching, commits, GPG signing, and merge request workflow.
SkillBFreshness: BClaude Code +9 - 0.524score
git-workflow-hermes
Clovel
Hermes variant of git-workflow — branching, commits, and MR/PRs with commit signing OFF.
SkillBFreshness: BClaude Code +9 - 0.474score
review-mr
Clovel
Lightweight local code review for diffs, branches, and GitLab merge requests.
SkillCFreshness: CClaude Code +9 - 0.473score
docker-patterns
Clovel
Dockerfile and docker-compose best practices.
SkillCFreshness: CClaude Code +9 - 0.410score
nestjs-paginated-list-routes
Clovel
Use when adding, reviewing, or fixing paginated GET list endpoints in a NestJS + Prisma + nestjs-zod backend.
SkillDFreshness: DClaude Code +9
Cite this page
hermes-claude-code-tmux skill. Agent Mart. https://agentmart.dev/skills/clovel-hermes-claude-code-tmux (last updated 2026-10-24)