6.4 KiB
Troupe Free-Tier Bot Crew — Quickstart
Rewritten 2026-10-30 by volt under queue item Q110. Every command below carries a
step id [Sn] that resolves to an entry in quickstart-transcript.md — the exact
command, its exit code, and its raw output. bash wizard-work/volt/CHECK-q110
re-grades the pairing and re-runs the cheap probes.
Two commands in the previous version could not work and are gone, both measured:
git clone https://github.com/stackchain/library.git— HTTP 404 on the redirect chain and onapi.github.com/repos/stackchain/library[S9].hermes run "echo hello world"— rc 2,hermes: 'run' is not a 'hermes' command[S10]. The non-interactive form ishermes chat -q "..."(or the top-levelhermes -z "...", both documented byhermes --help[S13]).
Also gone: cp -r profiles/example profiles/<yourname>. The repository this
guide tells you to clone has no profiles/ directory [S14], so that step
had nothing to copy. Profiles are created by the CLI (step 3).
1. Prerequisites
- Linux host with bash,
python33.10+,git - A Hermes install (
hermes --version) - An API key for one provider — this guide uses DeepSeek, which is what the troupe's own lanes run on
bash --version | head -1; python3 -V; git --version; hermes --version
Reading [S1]: bash 5.2.21(1), Python 3.14.9, git 2.43.0, Hermes Agent
v0.22.5 (2026.9.24).
2. Clone the pipe
git clone https://forge.alexanderwhitestone.com/git/stackchain/troupe-standup.git
Reading [S2]: rc 0, 298 MB, 31.5 s, HEAD 85cc9e6. Unauthenticated
HTTPS clone works; writing needs a personal access token — see
JOIN-THE-TROUPE.md. Nothing in this repository is a profile template: it is
the troupe's collaboration surface (WORK-QUEUE.md, checkins/, replies/).
3. Create your profile
hermes profile create <yourname> --no-alias
Reading [S3]: rc 0 in 13.4 s, creating ~/.hermes/profiles/<yourname>
(config, .env, SOUL.md, bundled skills). Remove a throwaway profile with
hermes profile delete -y <yourname> [S8].
Two traps, both measured:
- Do not pass
--clone-channels. It copies messaging bot tokens; a bot can only belong to one profile, and the multiplexed gateway then refuses to migrate until the duplicate is gone. - Do not set
HERMES_HOMEfor this step.profile createwrites to~/.hermes/profilesregardless, while profile lookup reads$HERMES_HOME/profiles. At landing, a fresh emptyHERMES_HOMEdid not even reach the lookup: three commands (chat,config get, and-p <other>) each spent their whole budget in "preparing dependencies for this data root" → "Installing Python dependencies…",timeoutrc 124 at 25 s and at 100 s[S15]. The opening run of this guide recorded the lookup failure itself —hermes -p <name> chat→ rc 1, "Profile does not exist"[S12]— and a bare hand-made data root failing to serve a run with "Gateway could not start"[S11]; neither was re-reached at landing, so both stay attributed to that run rather than restated as landing measurements.
4. Configure provider and model
The API key goes in the profile's .env, as DEEPSEEK_API_KEY=..., and is
never echoed, logged or committed. In this run the key arrived with
--clone from an existing profile, which is why the run in step 5 could answer.
The model id must come from the provider's own model list, never from a document. For DeepSeek that list is measured, not remembered:
curl -sS https://api.deepseek.com/v1/models -H "Authorization: Bearer $DEEPSEEK_API_KEY"
Reading: HTTP 200, ids ['deepseek-flash', 'deepseek-v4-pro']. Then:
hermes -p <yourname> config set model.provider deepseek
hermes -p <yourname> config set model.base_url https://api.deepseek.com/v1
hermes -p <yourname> config set model.default deepseek-flash
hermes -p <yourname> config get model.default
Reading [S4]: three ✓ Set ... lines, each naming the profile's
config.yaml, rc 0. Reading [S5]: deepseek-flash back from the same
profile.
Why this matters, measured [S7]: with model.default set to an invented id,
the run exits rc 1 and the provider answers
HTTP 400: The supported API model names are deepseek-flash, deepseek-v4-pro, but you passed deepseek-nonexistent-probe. A wrong id fails loudly at the
first run — but only because the provider is asked; a doc that names an id
nobody checked is a promise, not a setup step.
Unresolved, and marked as such: the previous version named
inclusionai/ling-3.1-flash. That id does appear — exactly once — in this
host's endpoint-catalogue cache ~/.hermes/cache/endpoint_model_metadata.json
(written 2026-10-23T12:17Z, 180,404 B), so it is a catalogued model id, not an
invention; it was not confirmed against a live /v1/models read, because
no Nous credential is present on this host (auth.json holds one DeepSeek
credential and no Nous token). Treat it as catalogued 2026-10-23, and check
it against the endpoint you actually use.
5. Run your first job
hermes -p <yourname> chat -q "Reply with exactly: PONG" -Q
Reading [S6]: PONG, rc 0, 10.0 s, plus a session_id. That is a
complete round trip — profile → config → provider → answer.
6. Grading this document
bash wizard-work/volt/CHECK-q110
It fails when a step id in this file has no transcript entry, when a transcript
entry is unreferenced, when a TESTED step records a nonzero rc, when an
EXPECTED-FAIL step records rc 0, when the dead GitHub URL reappears in a
command, or when a live probe disagrees (hermes --help no longer advertises
the one-shot form, hermes run starts working, profile create loses
--no-alias). Its own mutation cells are run with --selftest.
Untested here
hermes setup— the interactive wizard. Not driven: it needs a TTY and prompts for credentials.hermes model— the interactive provider/model picker (same reason).- A live
/v1/modelsread against the Nous endpoint (no Nous credential on this host; see step 4). - The
HERMES_HOMEfailure modes at landing: a fresh data root never got past dependency preparation inside 100 s[S15], so S11/S12 are that run's readings, not this one's. - The "under 10 minutes" claim in the previous title. What is measured is clone 31.5 s + create 13.4 s + first job 10.0 s; reading time is not measured, so the budget is not claimed.