dora harness
Grill a routine, freeze a Fixed step, then apply it. Dora prints Runtime watch.
dora harness is the front desk for an internal teammate. The Runtime runs the Loop. Today that Runtime is Hermes. A routine is the saved folder at ~/.dora/harness/<slug>/. Dora does not install Hermes and does not run the MCP login.
Before you start
Install Hermes Agent. Reload the shell so hermes is on PATH. Bring your own LLM credits. Paste a Scalekit Agent Gateway MCP URL when the grill asks.
Missing Hermes prints official install steps and stops. Dora does not fake a test run.
Create a routine
Type this in the agent:
/ask-dora turn this loop-able check into a routine
The same door from the CLI is dora harness new. Bare new starts ask-dora, which loads grilling-for-routine.
dora harness new
That grill loads writing-for-routine for the night prompt. Collect skills to run, skills to refer to, and the MCP URL. Then print or run one live pass.
Write the folder only after that pass, or after you accept the printed command:
dora harness new --accept --yes --slug <slug> --prompt-file <prompt.md> --mcp-url <url>
Most jobs need a Scalekit Agent Gateway MCP URL. Pass --mcp-url none when the job is a Skill script plus local creds only. After save, put secrets in ~/.dora/harness/<slug>/.env. Dora does not copy .env from the original skill.
The printed one-pass command looks like this:
hermes chat --toolsets mcp-scalekit --oneshot --run-budget 600 -q "…"
--run-budget is the one-pass time limit (default 10 minutes). Skills to run are passed as --skills. Dora refuses to overwrite an existing slug.
Dora appends a pocket-agent footer to the prompt Hermes runs. Human-visible messages end with Sent by pocket agent <slug>. prompt.md does not contain that line.
A Run has no last chat. The grill tells the night prompt to search the destination before a create, or to use a run handoff: read handoff.md at the start, overwrite it at the end. Missing file means first Run. Dora does not write that file.
Fixed step
A Fixed step is optional. Loop-able stays first. A small loop-able job can ship with prompt.md only.
After one good one-pass, the grill may freeze a deterministic step into a Skill. The grill drafts. You accept. A Run never writes files. The one-pass does not author files.
prompt.md names that Skill. It keeps the steps that need a new decision. It does not repeat the frozen steps.
A Skill script is optional. If one exists, it lives inside that Skill. The routine has no top-level scripts directory. Do not use Hermes --script or --no-agent. Those flags cannot call Scalekit MCP tools.
Apply the night job
apply pushes the folder onto the Runtime job. First apply creates the job. Later apply edits that job. dora harness boot <slug> is the same command.
dora harness apply <slug>
Then Dora exits. You can close that terminal.
Hermes keeps a background service on this Mac. That service starts the job again when the interval is due. You do not leave a chat window open.
After apply, log in once in a real terminal. Dora does not open the browser:
hermes mcp login scalekit
If a later run cannot reach Scalekit, run that login again. If the Scalekit account itself is dead, open the provider link again.
Runtime watch
After apply, boot, list, pause, and resume, Dora prints Runtime watch commands. Today those are Hermes commands. Folder-only new and open do not print them. On token or MCP fail, login is the required next command. Dora still prints the watch list.
hermes cron list
hermes cron runs
hermes logs
hermes dashboard
See a routine
show prints one card. logs prints that job’s run history. It is not the global Runtime agent log.
dora harness show <slug>
dora harness logs <slug>
Pause, resume, remove, open
pause skips later runs of that routine only. Other routines keep going. A run that already started may finish. resume starts later runs again. list shows each slug as running, paused, or none. rm stops the Runtime job, then deletes the folder. Pass --yes or --dry-run to skip the confirm. open opens the routine folder.
dora harness list
dora harness pause <slug>
dora harness resume <slug>
dora harness rm <slug>
dora harness open <slug>
Close the laptop and the Mac sleeps. Jobs do not run while the Mac sleeps. That is not pause. Due jobs can fire on wake if the job is not paused.
Defaults
| Field | Default |
|---|---|
| How often it runs | every 1 hour |
| One-pass time limit | 10 minutes |
| Night stop if the job sits idle | 10 minutes (Hermes default) |
You can change the interval and the one-pass limit per routine. A busy night job can keep going past 10 minutes if it is still working.
Common mistakes
- Treating laptop close as
dora harness pause. Sleep stops the clock. It does not pause the job. - Expecting Dora to finish
hermes mcp login scalekit. You run that in a real terminal. - Re-running
--accepton the same slug. Dora refuses to overwrite the folder. - Using
hermes logsfor one routine. Usedora harness logs <slug>for that job. - Using Hermes
--scriptas the freeze path. A Skill script is local work inside the Skill. - Putting a
scripts/folder next toprompt.md. - Expecting a chat app in the harness. Connectors live on a use case, not in this group.