6.5 KiB
QUICKSTART.md — execution transcript
Every step id referenced by QUICKSTART.md, with the exact command that was run,
its exit code, and its raw output. Measured 2026-10-30 on the host that runs
hermes v0.22.5, from /tmp unless stated. Profile names q110demo,
q110demo2, q110demo3 are throwaway probes: each was deleted afterwards and
no q110demo* profile remains (ls -d ~/.hermes/profiles/q110demo* → no such
file, rc 2).
Format read by wizard-work/volt/q110_check.py: a ### S<n> — title heading,
then cmd:, rc:, status: lines. status is one of TESTED (rc must be 0),
EXPECTED-FAIL (rc must be nonzero), UNTESTED (rc is the observed failure).
S1 — toolchain versions
cmd: bash --version | head -1; python3 -V; git --version; hermes --version rc: 0 status: TESTED out: GNU bash, version 5.2.21(1)-release (x86_64-pc-linux-gnu) Python 3.14.9 git version 2.43.0 Hermes Agent v0.22.5 (2026.9.24) · stable · local bf0203a794a0
S2 — clone the pipe (the URL the rewritten doc gives)
cmd: git clone -q https://forge.alexanderwhitestone.com/git/stackchain/troupe-standup.git lib
rc: 0
status: TESTED
out:
real 0m31.490s
300851899 bytes on disk (du -sb lib)
git -C lib rev-parse HEAD -> 85cc9e6963
85cc9e6 2026-10-30 06:02:25 +0000 volt: bound the tool_map drift CHECK (...)
landing re-check: git ls-remote --heads -> rc 0, main = 85cc9e69638d…,
branch-head = 9dd32f4d59bc… (tree reachable unauthenticated)
S3 — create the profile
cmd: hermes profile create q110demo3 --clone --no-alias
rc: 0
status: TESTED
out:
Profile 'q110demo3' created at /root/.hermes/profiles/q110demo3
Cloned config, .env, SOUL.md, and skills from volt.
(an earlier run of the same command, timed: real 0m13.351s)
landing re-check (no --clone): rc 0, real 0m16.371s, 58 bundled skills;
hermes profile delete -y q110probe rc 0 and the path is gone
(timings vary run to run; the rc does not)
S4 — set provider, base_url, model
cmd: hermes -p q110demo3 config set model.provider deepseek; hermes -p q110demo3 config set model.base_url https://api.deepseek.com/v1; hermes -p q110demo3 config set model.default deepseek-flash rc: 0 status: TESTED out: ✓ Set model.provider = deepseek in /root/.hermes/profiles/q110demo3/config.yaml ✓ Set model.base_url = https://api.deepseek.com/v1 in /root/.hermes/profiles/q110demo3/config.yaml ✓ Set model.default = deepseek-flash in /root/.hermes/profiles/q110demo3/config.yaml
S5 — read the model back
cmd: hermes -p q110demo3 config get model.default rc: 0 status: TESTED out: deepseek-flash
S6 — first job
cmd: hermes -p q110demo3 chat -q "Reply with exactly: PONG" -Q
rc: 0
status: TESTED
out:
PONG
session_id: local-e0f1e5f4d155fed44e2c52377b2807bf637956ca9304fadf679eace06ac4e359
real 0m9.964s
landing re-check on the volt profile: PONG, rc 0, real 0m13.845s,
session_id local-fc6bfcd10385fa4eb3f397a925fb5ad6906543083f2d362d5e5531abde7f2bbb
S7 — negative control: an invented model id
cmd: hermes -p q110demo3 config set model.default deepseek-nonexistent-probe; hermes -p q110demo3 chat -q "Reply with exactly: PONG" -Q rc: 1 status: EXPECTED-FAIL out: DeepSeek rejected this request as malformed, so the model didn't answer. ... Provider said: HTTP 400: The supported API model names are deepseek-flash, deepseek-v4-pro, but you passed deepseek-nonexistent-probe. (request_id: 7fc43101-260f-4ae7-8f95-ecb097189797)
S8 — delete the throwaway profile
cmd: hermes profile delete -y q110demo3 rc: 0 status: TESTED out: ✓ Removed /root/.hermes/profiles/q110demo3 Profile 'q110demo3' deleted. ls -d /root/.hermes/profiles/q110demo3 -> No such file or directory ls /root/.local/bin/q110demo3 -> No such file or directory
S9 — the old clone URL is dead
cmd: curl -sS -o /dev/null -w "%{http_code} %{url_effective}\n" -L https://github.com/stackchain/library.git rc: 0 status: TESTED out: 404 https://github.com/stackchain/library api.github.com/repos/stackchain/library -> also 404 landing re-check 2026-10-30: 404 https://github.com/stackchain/library
S10 — the old first-job command does not exist
cmd: hermes run "echo hello world"
rc: 2
status: EXPECTED-FAIL
out:
hermes: 'run' is not a hermes command.
Run hermes --help to see all commands.
landing re-check: rc 2, same two lines
S11 — a bare HERMES_HOME directory is not a profile
cmd: HERMES_HOME=/h2 hermes chat -q "Reply with exactly: PONG" -Q rc: 1 status: EXPECTED-FAIL out: Hermes couldn't start the model connection: Gateway could not start: the gateway exited with status 0 before it could serve:. Your message was not sent. real 0m10.666s (repeated 0m11.746s with the parent's session env stripped, and 0m12.812s from /tmp on the live profile home: same reading)
S12 — HERMES_HOME exported hides a freshly created profile
cmd: HERMES_HOME=/h2 hermes -p q110demo2 chat -q "Reply with exactly: PONG" -Q rc: 1 status: EXPECTED-FAIL out: Error: Profile 'q110demo2' does not exist. Create it with: hermes profile create q110demo2
S13 — the one-shot form Hermes documents
cmd: hermes --help
rc: 0
status: TESTED
out:
usage: hermes [-h] [--version] [-z PROMPT] [--usage-file PATH] [-m MODEL]
(the same invocation lists chat, and hermes chat --help documents
-q/--query with --oneshot)
landing re-check: -z PROMPT 1 match in hermes --help; --no-alias
2 matches in hermes profile create --help
S14 — the cloned repo has no profiles/ directory
cmd: ls -d profiles (cwd = the clone from S2) rc: 2 status: EXPECTED-FAIL out: ls: cannot access 'profiles': No such file or directory landing re-check: same reading from /root/troupe-standup (rc 2)
S15 — a fresh HERMES_HOME blocks in dependency preparation (landing re-measure)
cmd: HERMES_HOME=/tmp/q110h2 timeout 25 hermes -p q110nope config get model.default; HERMES_HOME=/tmp/q110h2 timeout 100 hermes chat -q "PONG" -Q
rc: 124
status: UNTESTED
out:
hermes: preparing dependencies for this data root (the checkout's updates belong to /root/.hermes)...
→ Installing Python dependencies…
(both commands, plus -p volt config get, printed that first line and did not
finish: 25 s, 25 s, 100 s, each killed by timeout → rc 124)
Not a pass and not a refusal: the lookup message S11/S12 record was never
reached at landing, so this step is recorded as unreachable, not as measured.