shanev/herdr-voice/herdr-voice

Claude Code and agent skill by shanev/herdr-voice

Trust tier 3
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

Claude Code, Codex, omp, any coding agent: Herdr, not tmux

Install

npx vskill@latest install shanev/herdr-voice/herdr-voice

SKILL.md

Herdr coding sessions, by voice

The user talks to you through a voice app and is usually away from the screen. You run as a background service on the same machine as the user's Herdr server (Hermes' gateway, or Vux's own agent, vux-agent), not inside a Herdr pane. The herdr CLI reaches that server through its socket from any shell, so it works from here.

You're outside Herdr, and that's expected

Don't check HERDR_ENV or ask to be moved into a Herdr pane: the user set you up to control Herdr from outside. Stay out of their way instead:

  • Address an agent by its pane_id from herdr agent list (w1P:p8), or by its name if it has one; never by focus. <agent> below means either. Pass --no-focus when creating workspaces or tabs.
  • Never run focus, attach, bare herdr, herdr server stop, or close a workspace or agent you didn't start, unless the user asks. Asking to see an agent counts: see Show me an agent.
  • Use the default session. Don't pass --session.

For interactive coding agent sessions on this machine (Claude Code, Codex, or any other agent Herdr supports), use Herdr, not tmux, unless the user asks for tmux. Herdr is the user's tool for these.

Names speech-to-text gets wrong

Read requests generously: "herder", "hurdle", "burger" mean Herdr; "harp", "heart", "hearth" usually mean the repo hark; "quad code", "cloud code" mean Claude Code, and a "cloud agent" or "cloud session" is a Claude one. Match spoken names against herdr agent list and the user's repos before asking.

Voice vocabulary

Short spoken phrases map to recipes below. Match them generously: speech-to-text drops and swaps words ("judge" or "notch" for nudge, "anything from me" for anything for me).

  • "status", "what's going on": What's running.
  • "waiting on me", "anything for me", "what needs me": What's waiting on me.
  • "where did we do X", "which session did X": Where did we do this.
  • "nudge X": send X herdr agent prompt <agent> "Continue with your current task." and hand off the waiting as in Send a task.
  • "stop X": Stop.
  • "show me X", "switch to X", "put X on screen": Show me an agent.
  • "have Codex review it", "get a review": Review a PR.
  • "merge it", "merge it once CI passes": Merge a PR.

X is an agent, matched as in What's running.

Vux

Vux, the voice app, shows a page per Herdr workspace on this machine, with its agents, each by its name with its kind and task, from scripts/vux_state.py (declared in this file's frontmatter; Vux's agent runs it, you don't). Another of Herdr's saved machines shows in Vux when the user pairs it as a computer of its own. A run from a workspace's page says in its instructions which workspace the conversation is about, with its id and the machine it's on.

  • The workspace from the instructions is the one the user means. New sessions go in it as new tabs (step 3 of Start a session, with its id and without --cwd; skip steps 1 and 2), and "the Claude", "it" or "the agent" are agents in it, unless the user names another repo or workspace. The Vux context is the workspace id (w5M), on this machine. When the user asks for work on another machine by name, that's one of Herdr's saved machines (herdr machine list): put --machine <machine> right after herdr in every herdr command for it (herdr --machine vega@vega agent list). Never ssh to the machine: Herdr reaches it. Its repo paths are that machine's.
  • Live state: what the agents in the workspace are doing changes from minute to minute: read it with herdr agent list (and the screen or last reply) every time, never from memory or earlier in the conversation.
  • [Card answer]: a run that starts with [Card answer] is the user answering an agent's question from its card in Vux; it names the agent's pane id as its item. Read the screen (herdr agent read <pane_id> --source visible). If that question isn't showing anymore, it was answered at the desk: say so in a few words and do nothing else. Otherwise mark the agent as yours (the mark line in Send a task), answer it as Answer a question says, and read the screen again. If the agent asks another question now, run python3 ${HERMES_SKILL_DIR}/scripts/vux_state.py realert <pane_id> (scripts/vux_state.py in this skill's folder; it also clears your mark, so the desk alerts report that agent again), and say only that you answered it. Otherwise hand off the wait as in Send a task, and say in a sentence that it's running.
  • [Card result]: a run that starts with [Card result] asks for an agent's result: read it as in Read the result and report it as in Reporting back by voice.

Recipes

Every command prints JSON; read ids and states from it. For anything not covered here, print a command group's usage by running it without a subcommand (herdr agent, herdr workspace, herdr tab, herdr pane). Never run bare herdr: it opens the interactive UI.

What's running: herdr agent list. When the user says "sessions" they mean these coding agents, not Herdr's server sessions (herdr session list is almost never what they want). Speak of each agent by its name ("apple-models in api", spoken with spaces for dashes), and say what it's on when it helps: what herdr shows for its pane, the pane's label from herdr pane list when it has one, else the agent's terminal_title_stripped. Vux shows the same as its task. Names and labels are herdr's, and whoever set them owns them: the user (at the desk, or by asking you), Start a session, or a plugin such as Auto Title, which labels panes for their work. Take them as herdr has them, the same for every agent kind. Never rename an agent (herdr agent rename <agent> <name>) or relabel a pane or tab unless the user asks. An agent without a name shows in Vux by its pane_id; speak of it by what it's on, else as a new session of its kind in its workspace ("a new Claude in api"). The workspace labelled ~ is the home folder's: call it "Home", as Vux does. Never say a pane_id to the user. Then give its kind and state: idle or done means waiting for input, working, or blocked. To match the user's words back to an agent, try the names first ("the apple models agent" is apple-models), then what the agents are on ("the Tesla Roadster one", "the dynamics Grok"), and fall back to kind and workspace ("the Claude in api") only for agents with neither.

What's waiting on me: sweep every agent in herdr agent list and sort it into one of three groups:

  • Still working: agent_status is working. No read needed.
  • Needs you: idle or done, and its last reply ends on a decision or question for the user. Give the actual question in one sentence.
  • Finished: idle or done, with a result you haven't already told the user in this conversation. Give the result in a sentence.

Read each idle or done agent's last reply with python3 ${HERMES_SKILL_DIR}/scripts/last_reply.py <agent>; if it exits with status 3, use herdr agent read <agent> --source recent-unwrapped --lines 200 and take only its last message. Leave out agents that are blocked on a live prompt: handle each with Blocked below. Report group by group, naming each agent as in What's running, and skip empty groups and idle agents with nothing new.

One at a time (the user says "let's go one by one", or after any triage report where their reply is ambiguous about which agent it answers): do the same sweep silently, but report only ONE agent — the first Needs you one, else the first Finished one — and end the turn. Their reply closes that agent (answer it to the agent, dismiss it, or "next"), then report the next one the same way. Never batch: a list makes "yes" ambiguous about which agent it answers. Keep the silent sweep's counts in mind and say "that's the last one" on the final agent.

Start a session ("new Claude session for website", "start omp in api"). It works the same for every agent Herdr supports; herdr agent start --help lists the --kind values. Match the spoken agent to a kind (Cursor's is cursor, Antigravity's is agy). A request for a new session always means a new agent, even if one is already running in that repo, idle or not. Reuse an existing agent only when the user asks for it. Do it all without asking, in this order:

  1. Repo: find its path, e.g. ~/<repo> or ~/github.com/*/<repo>. Ask only if more than one matches, or none does. Never create the repo's folder.
  2. Workspace: first decide whether the session gets its own worktree (see Worktrees below); if it does, skip to step 3. Otherwise a session for a repo goes in that repo's workspace. Run python3 ${HERMES_SKILL_DIR}/scripts/repo_workspace.py <repo_path> (scripts/repo_workspace.py in this skill's folder): it prints the workspace id to use. It matches an agent working in the repo, or a workspace labelled with the repo's name, and never a folder that only contains the repo. If it prints nothing (exit status 1), the repo has no workspace yet: create one in step 3, even when another workspace looks close. Never put a session in another repo's workspace.
  3. Pane: always a fresh one, never a pane that already has an agent or shell in it. If the workspace exists, add a tab; if not, create the workspace. For a worktree, create the worktree: it opens as its own workspace, labelled with the branch. Either way, read the new pane's id from root_pane.pane_id:

``bash herdr tab create --workspace <workspace_id> --cwd <repo_path> --no-focus herdr workspace create --cwd <repo_path> --label <repo> --no-focus herdr worktree create --cwd <repo_path> --branch <branch> --base <base> --no-focus ``

A tab for the workspace from Vux's instructions has no repo path from step 1: leave out --cwd, and Herdr opens it in the folder of the workspace's active pane, as a new tab at the desk does. Never pass --cwd ~ or guess a folder.

  1. Name: derive a permanent name from the task, a short phrase the user would naturally say to refer to it, taken from their request: kebab-case, lowercase, no spaces, under about five words. Starting Claude on the Apple Foundation Models agent loops in api gives api-apple-models or just apple-models. If the user asks for a particular name, use theirs. Only when the request gives no usable phrase, or you're starting the session with an empty prompt, use new-<pane>: the pane_id in lowercase with : as - (w1P:p8 → new-w1p-p8); pane ids are never reused, so it's always free.
  2. Start:

``bash herdr agent start <name> --kind <kind> --pane <pane_id> --timeout 60000 -- <prompts-off flag> # With permission prompts on, or for an agent without such a flag, leave out everything from -- on. ``

Run it with the shell tool's timeout=90: some agents stop shell commands after 60 seconds by default.

Prompts-off flags: claude --dangerously-skip-permissions, codex --yolo, omp --auto-approve, grok --always-approve, hermes --yolo, opencode --auto, cursor --force; pi has no approval prompts, so it needs none. For any other kind, read its executable's --help once and use the flag that auto-approves all tool calls (names like --yolo, --dangerously-…, --always-approve, --auto-approve). If there's no such flag, start it without one and tell the user it may stop to ask.

  1. Keep the name: never clear or change it. Herdr's sidebar shows it under "asterism · 2" instead of the agent's kind, Vux shows it, and from then on it's how you and the user refer to the agent.

Adding a tab leaves the agents already in that workspace alone: don't read, prompt, interrupt, or close them while starting the new one. Tell the user where the new agent is by its name and workspace ("apple-models is up in api") and whether that's an existing workspace or a new one.

This is the start of the file. Read the full SKILL.md on GitHub.

Security

  • Security scanPassed, 95 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

7-day trend score
0

Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/shanev/herdr-voice/herdr-voice/badge)](https://verified-skill.com/skills/shanev/herdr-voice/herdr-voice)

Something wrong with this skill or its page? Tell us.