Agents

Coding agents can reach you through Herald when they finish, get stuck or need a decision, even when you are away from the terminal. Skills teach Claude Code and Codex when and how to use the CLI; @herald-run/mcp is an MCP server that gives any other MCP client Herald tools.

Herald can also take the place of an agent harness's own question tool, such as Claude Code's AskUserQuestion: an agent told to ask through Herald sends every question to one inbox, answerable from your phone or desktop. The herald-ask skill and MCP ask take questions in AskUserQuestion's shape. To route every question, say so in the agent's instructions (CLAUDE.md, AGENTS.md), for example: Ask me every question through the herald-ask skill instead of AskUserQuestion.

An agent setting Herald up for you can read herald.run/agents: this material, pricing and the setup steps condensed into one Markdown page.

Claude Code and Codex

npm install -g @herald-run/cli
herald login

Then install the skills from herald.run/skills, one SKILL.md per skill: Claude Code reads ~/.claude/skills/<name>/ (or .claude/skills/ in a repository), Codex ~/.codex/skills/<name>/ (or .agents/skills/). Restart the agent afterwards. The skills:

  • herald-send-file: send a report, log, image or PDF with a summary.
  • herald-ask: ask for approval, a choice, questions or form input, before risky steps or in place of the agent's own question tool, and wait.
  • herald-get-secret: request a credential straight into a private file.
  • herald-share-secret: send a credential from a file through encrypted delivery.
  • herald-get-file: request a sensitive file straight into a private file.

MCP clients

Run the server over stdio with npx -y @herald-run/mcp. For example, in a client's JSON config:

{
  "mcpServers": {
    "herald": { "command": "npx", "args": ["-y", "@herald-run/mcp"] }
  }
}

It authenticates with HERALD_API_KEY (or HERALD_TOKEN) if set, otherwise with the CLI's stored login for HERALD_PROFILE. HERALD_URL selects another server. Use a connection with only the scopes the agent needs.

Tools

Tool Arguments Returns
send title, body (Markdown), files (paths), replyTo {id, status}
ask title, body, one of approval, choices, fields, schema; files, deadline, wait {status, values, actionId, approved | choice}
wait id, wait status and answer
cancel id the cancelled request
get_message id the full record
list_messages search, status, direction, before summaries, newest first
thread id the thread, oldest first
upload_file path an attachment
download_file id, messageId (carries the file), path (new file) {path, size}
request_secret path (new file), label, title, wait {id, status: "stored", path}
send_secret path, title, wait {id, status: "delivered"}
request_file path (new file), label, title, body, wait {id, status: "stored", path}

ask and wait block for wait (default 10 minutes) and then return status: "pending" with the message ID, so the agent can keep working and call wait later; the request itself stays open until its deadline (default 1 hour). Durations look like 90s, 10m or 2h.

Secret values and requested files never appear in tool results: request_secret and request_file write to a new file with mode 0600, and send_secret reads it from one. Point tools at those files instead of printing them.

Scripts and CI

Scripts can call the CLI directly too: herald send and herald ask cover every message, form, file and secret through flags, and herald register the task types; see the CLI reference. In CI, set HERALD_API_KEY from a secret and gate steps on an approve button as in the Quickstart.