160 lines
6.5 KiB
Markdown
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.
|