Files

160 lines
6.5 KiB
Markdown

# 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 -> 85cc9e69638d415d79ab5a7a9d5d5dcbcc795c94
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=<scratch>/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=<scratch>/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.