Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
HC_SESSIONNoThe hc session to reach, as for `hc` itself
HERDR_MCP_HCNoThe `hc` binary (default: `hc` on `PATH`)hc
HERDR_MCP_APPNoThe `herdr-app` binary (default: `herdr-app` on `PATH`)herdr-app
HC_TERMINAL_IDNoSet automatically inside a Herdr terminal. Passed as the caller, so terminals you start are your children and `herdr_wait` with `children` works.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
herdr_listA

Live terminals on this machine and every connected machine, with their status, cwd, labels and parent. Includes the user's other work, not just yours.

herdr_getB

One terminal's facts, live or finished: argv, cwd, state, status, exit code, labels, foreground process.

herdr_runA

Start a program in a new terminal that stays alive. argv runs as given; line runs in the shell; neither opens that machine's shell. If argv[0] names a template (see herdr_templates), its command starts and its body plus task are sent as the first message once the agent is ready. For a plain agent, task is typed as its first message once it is ready. Agents: always background=true, a name, and the whole task up front. Programs: background=false waits for exit (up to timeout) and returns its output in output and how it ended in wait. Returns the terminal (address is what you use afterwards) and, with a task, first_message.sent.

herdr_sendA

Paste text into a terminal and press Enter (once nobody has typed for ~3 s). Refuses a blocked program unless force. With wait=true, also waits for the turn it starts and returns how it ended. Do not resend after an unclear result: read first.

herdr_waitA

Wait until a program is not working (an agent reports idle/done/blocked/error, or a program exits), or with output, until it prints that text. Use it instead of sleeping or polling. A timeout is a check-in (ended=false), not a failure: wait again. children=all waits until none of the caller's children is working; children=any returns on the next child's news.

herdr_readB

The terminal's screen plus lines of history, as plain text, live or finished.

herdr_keysB

Press named keys in a terminal: enter, esc, tab, up, down, ctrl+c, alt+x, f5, a, ... (e.g. to answer a dialog with down, enter).

herdr_interruptA

Press the stop key (esc for agents, ctrl+c for programs) and report what happened. Stops the current turn, not the process.

herdr_killA

End the program: hangup, then terminate, then kill. Only clean up terminals you started.

herdr_rmC

Remove a finished terminal from the list.

herdr_labelB

Set or remove labels (free-form key=value). An empty string removes a label.

herdr_putA

Write a file beside a live terminal, on its machine, for its program to read (an image to paste, a patch). Returns where it landed.

herdr_templatesA

Ready-made agent roles (reviewer, implementer, ...) by name and description. Run one with herdr_run argv=[name] and a task.

herdr_execA

Run one command here or on another machine without a terminal and return its exit code and exactly what it wrote. For short commands (git diff, ls, cat). Everything it started ends with it at exit or timeout. Use herdr_run for anything long or interactive.

herdr_file_readA

Read a text file here or on another machine: lines from offset, at most limit. Returns the text and how many lines the file has.

herdr_file_writeA

Write a whole file here or on another machine, making missing folders. Atomic: a reader sees old or new, never half.

herdr_file_editA

Replace exact text in a file here or on another machine. Each old must occur exactly once; edits must not overlap; all are made or none. On edit_failed, add context to make old unique.

herdr_machinesA

The other machines this core has added (over ssh or a command), with their connection state. Use their names in on and machine/t7.

herdr_statusB

herdr-core's identity, version, pid, uptime and terminal counts, plus this server's connection details.

herdr_rpcA

Call any herdr-core JSON-RPC method directly (rpc.discover lists them all with their schemas). For methods without a dedicated tool: doc.get, doc.set, machine.add, machine.connect, machine.rename, machine.rm, terminal.keep. server.stop and server.restart are refused: they affect every terminal the user has.

herdr_app_lsA

Spaces, their tabs and terminals (with pane IDs) in the open Herdr window. Inspect before acting; use these IDs rather than guessing.

herdr_app_statusB

What the window shows: layout, selected space and tab, focused pane, overlays, zoom, and any file or mod errors.

herdr_app_commandsA

Every window command herdr_app_do can run, with its arguments and what it does.

herdr_app_doA

Run a window command: space.new {name, folder, machine, argv, task}, tab.new {name, space, folder, argv, task}, pane.split {direction, pane}, agent.focus {terminal}, tab.select {id}, space.rename {id, name}, ... (herdr_app_commands lists them all). Returns the created IDs. Supply every required argument: commands from an agent never open a dialog. New spaces and tabs are shown immediately: only create them when the user asks, and give them explicit names.

herdr_app_shotA

Save the window's last rendered frame as a PNG (its own rendering, even when covered) and return its absolute path. Needs a running window.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.5/5.0

Scored across 25 tools

Disambiguation4/5

Tools are well-differentiated: exec vs run (short vs long/interactive), read (screen) vs get (facts) vs file_read, and send (text) vs keys (named keys) have clear boundaries. The only mild overlaps are put vs file_write (file beside terminal vs atomic whole-file write) and app_do vs rpc, but descriptions draw the line.

Naming Consistency4/5

Consistent herdr_ prefix with predictable verb_noun (herdr_file_read, herdr_app_do, herdr_kill). A few are nouns (herdr_templates, herdr_machines) for list-like resources, but the herdr_app_* family is grouped cleanly and no style mixing (camelCase) appears.

Tool Count3/5

25 tools is at the heavy edge and spans several sub-domains (terminal control, file ops, app/window, machines, templates). Each earns its place, but some could consolidate (exec/run, app_ls/app_status), landing it borderline rather than well-scoped.

Completeness4/5

Strong lifecycle coverage: run/send/keys/interrupt/kill/rm/wait/read for terminals, full read/write/edit for files, plus window and machine introspection. A few operations (machine add/connect) are only reachable via herdr_rpc, but that escape hatch plus rpc.discover prevents dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues