Skip to content

Commit 76bcb2e

Browse files
committed
docs: a quickstart that is two commands, and CLIs called by their names
The home page's Run a flow listed eleven agent strings in a table, set a shell variable, and walked through chat, hmz exec, a loop and a trace before anybody had run anything. It is now: install it, make a repository with a bug in it, pick your CLI from a tab, and run ralph_loop -- once at the prompt and once without it. Nothing else, and no environment variable to export. Everywhere else, a backend is called what its makers call it. The short name stays where it is the thing you type -- an -a spec, a binary on PATH, a row key in a reference table -- and Antigravity CLI, Grok Build, DeepSeek Harness and the rest are spelled out in prose. cursor-agent was missing from both lists of what may be on PATH.
1 parent 25c9bd3 commit 76bcb2e

14 files changed

Lines changed: 143 additions & 139 deletions

File tree

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,9 @@ npm install --global @deepseek-ai/dsh
5050
dsh web
5151
```
5252

53-
Needs Python ≥ 3.12 and at least one supported backend: `agy`, `claude`, `codex`, `grok`,
54-
`kimi`, `pi`, `qwen`, `opencode`, `mimo` or `zcode` on your PATH — or none of them, since
55-
DeepSeek Harness arrives with humanize. See
53+
Needs Python ≥ 3.12 and at least one supported backend: `agy`, `claude`, `codex`,
54+
`cursor-agent`, `grok`, `kimi`, `pi`, `qwen`, `opencode`, `mimo` or `zcode` on your PATH — or
55+
none of them, since DeepSeek Harness arrives with humanize. See
5656
[Installation](https://docs.humanfia.ai/humanize2/user/installation).
5757

5858
## Usage

docs/index.md

Lines changed: 94 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { withBase } from 'vitepress'
1515
## Run a flow
1616

1717
::: warning Use a scratch directory
18-
humanize runs every agent with permission prompts disabled. An agent under it edits files
18+
humanize runs every agent with permission prompts disabled: an agent under it edits files
1919
without asking. Do this in a throwaway git repository, and read [Security](/user/security)
2020
before you point it at work you care about.
2121
:::
@@ -26,141 +26,136 @@ already log in.
2626

2727
```sh
2828
pip install git+https://github.com/humanfia/humanize2.git
29-
hmz --version
3029
```
3130

32-
### Name an agent
33-
34-
An agent is written `cli/model:effort` — the CLI that runs the turn, the model it asks for, and
35-
how hard that model should think. Put yours in a shell variable, and every command below is one
36-
you can paste:
31+
Then make something for it to fix. `calc.py` subtracts where it should add, and that bug is the
32+
work:
3733

3834
```sh
39-
AGENT=claude/claude-opus-4-8:high
35+
mkdir -p ~/tmp/humanize-demo && cd ~/tmp/humanize-demo && git init -q
36+
printf 'def add(a, b):\n return a - b\n' > calc.py
37+
git add -A && git commit -qm "a calculator with a bug in it"
4038
```
4139

42-
| CLI | Write it as |
43-
| --- | --- |
44-
| Claude Code | `claude/claude-opus-4-8:high` |
45-
| Codex | `codex/gpt-5.6-sol:high` |
46-
| Kimi Code | `kimi/kimi-code/k3:high` |
47-
| Qwen Code | `qwen/qwen3-coder-plus:high` |
48-
| Grok Build | `grok/grok-4.6:high` |
49-
| Antigravity CLI | `agy/gemini-3.7-flash-high:high` |
50-
| pi | `pi/openai-codex/gpt-5.6-luna:high` |
51-
| opencode | `opencode/opencode/big-pickle:high` |
52-
| mimocode | `mimo/mimo/mimo-auto:high` |
53-
| ZCode | `zcode/zai/glm-5.3:high` |
54-
| DeepSeek Harness | `dsh/deepseek-v4-flash:high`, with `export DEEPSEEK_API_KEY=sk-…` |
55-
56-
Those are examples, not a fixed list, and not every backend humanize drives is in it — [Many
57-
backends, one agent](/features/backends) is all of them against what a flow may ask of each. A
58-
model id is whatever that CLI shipped this week, and which ones you may name depends on the
59-
account you are logged in as — `pi`, `opencode`, `mimo` and `zcode` write a model as
60-
`provider/id`, which is the extra slash in their rows. To see what yours offers, open `/flow`
61-
in the interface and turn to its agents. Get the id wrong and the backend says so on the first
62-
turn:
40+
Both ways below run the same flow, `ralph_loop`: it gives the agent the same task over and over
41+
in a fresh conversation each time, so it restarts from the task and the repository rather than
42+
from a context window full of its own earlier attempts. Pick the tab for the CLI you have.
6343

64-
```console
65-
[claude-code:unrecognized_model] {"model":"not-a-real-model","query_source":"sdk"}
44+
### At the prompt
45+
46+
::: code-group
47+
48+
```sh [Claude Code]
49+
hmz -f ralph_loop -a claude/claude-opus-4-8:high
6650
```
6751

68-
### Say something
52+
```sh [Codex]
53+
hmz -f ralph_loop -a codex/gpt-5.6-sol:high
54+
```
6955

70-
```sh
71-
mkdir -p ~/tmp/humanize-demo && cd ~/tmp/humanize-demo && git init -q
72-
printf 'def add(a, b):\n return a - b\n' > calc.py
73-
git add -A && git commit -qm "a calculator with a bug in it"
74-
hmz
56+
```sh [Antigravity CLI]
57+
hmz -f ralph_loop -a agy/gemini-3.7-flash-high:high
7558
```
7659

77-
`calc.py` subtracts where it should add — that bug is the work. `hmz` is the only way into the
78-
terminal interface; there is no `hmz tui`. Type a line and press enter, and the agent takes a
79-
**turn**: one exchange with the model, which may run tools and may take minutes.
60+
```sh [Qwen Code]
61+
hmz -f ralph_loop -a qwen/qwen3-coder-plus:high
62+
```
8063

81-
| While a turn is running | |
82-
| --- | --- |
83-
| Type another line | It goes *into* the turn rather than starting a new one — [Talking to a running turn](/user/steering) |
84-
| `/details` | Show the tool calls and the thinking, or only what the agent says |
85-
| `/status` | Who is working, who handed to whom, and what it has cost |
86-
| `/` | Every command, with a line about each; **tab** takes the highlighted one |
64+
```sh [Kimi Code]
65+
hmz -f ralph_loop -a kimi/kimi-code/k3:high
66+
```
67+
68+
```sh [Grok Build]
69+
hmz -f ralph_loop -a grok/grok-4.6:high
70+
```
8771

88-
Underneath, humanize is running a **flow** called `chat` — one agent, one conversation, and
89-
every line you type is the next turn of it. `/exit` leaves. The run is [held apart from this
90-
terminal](/reference/daemon), so it goes on running if you say to leave it, which is what
91-
`/detach` says outright.
72+
```sh [ZCode]
73+
hmz -f ralph_loop -a zcode/zai/glm-5.3:high
74+
```
9275

93-
### Run it unattended
76+
:::
9477

95-
```sh
96-
hmz exec -f chat -a "$AGENT" "What does calc.py do?"
78+
That opens the terminal interface, set up and waiting. Type the task and press enter:
79+
80+
```
81+
Fix the bug in calc.py.
9782
```
9883

99-
`-f` names the flow, `-a` describes one agent and is repeated once for every agent the flow
100-
drives in the order the flow takes them, and the last argument is the task. Get the count wrong
101-
and humanize refuses before any agent runs, rather than failing hours in:
84+
The agent takes a **turn** — one exchange with the model, which may run tools and may take
85+
minutes — and then the loop gives it the same task again. Type another line while it is working
86+
and it goes *into* the running turn rather than starting a new one. `/` lists every command,
87+
**ctrl+c** twice stops the loop, and `/exit` leaves.
10288

103-
```console
104-
$ hmz exec -f official/rlar -a claude/claude-opus-4-8:high "fix the build"
105-
hmz exec: error: official/rlar: the flow drives 2 agents, 1 given
89+
### Or without the interface
90+
91+
The same flow, the same agent, with the task on the line instead:
92+
93+
::: code-group
94+
95+
```sh [Claude Code]
96+
hmz exec -f ralph_loop -a claude/claude-opus-4-8:high "Fix the bug in calc.py."
10697
```
10798

108-
### Put a loop around it
99+
```sh [Codex]
100+
hmz exec -f ralph_loop -a codex/gpt-5.6-sol:high "Fix the bug in calc.py."
101+
```
109102

110-
A **Ralph loop** gives the agent the same task over and over, in a fresh conversation each
111-
time, so it restarts from the task and the repository instead of from a context window full of
112-
its own earlier attempts.
103+
```sh [Antigravity CLI]
104+
hmz exec -f ralph_loop -a agy/gemini-3.7-flash-high:high "Fix the bug in calc.py."
105+
```
113106

114-
```sh
115-
hmz exec -f ralph_loop -a "$AGENT" "Fix the bug in calc.py."
107+
```sh [Qwen Code]
108+
hmz exec -f ralph_loop -a qwen/qwen3-coder-plus:high "Fix the bug in calc.py."
116109
```
117110

118-
::: warning A Ralph loop does not stop on its own
119-
That is what it is for — you leave one running for hours. Press **ctrl+c** twice when you have
120-
seen enough. Every round is written down, so stopping loses nothing.
121-
:::
111+
```sh [Kimi Code]
112+
hmz exec -f ralph_loop -a kimi/kimi-code/k3:high "Fix the bug in calc.py."
113+
```
122114

123-
```diff
124-
def add(a, b):
125-
- return a - b
126-
+ return a + b
115+
```sh [Grok Build]
116+
hmz exec -f ralph_loop -a grok/grok-4.6:high "Fix the bug in calc.py."
127117
```
128118

129-
It made that edit with **no permission prompt**. There is no setting that turns them back on.
119+
```sh [ZCode]
120+
hmz exec -f ralph_loop -a zcode/zai/glm-5.3:high "Fix the bug in calc.py."
121+
```
122+
123+
:::
130124

131-
### Read the whole run back
125+
`-f` names the flow and `-a` names one agent, written `cli/model:effort` — the CLI that runs
126+
the turn, the model it asks for, and how hard that model should think. A Ralph loop does not
127+
stop on its own, which is what it is for: **ctrl+c** at the command line when you have seen
128+
enough. Every round is written down, so stopping loses nothing.
132129

133-
Every run writes down what it was: the flow, the agents, and the id of every conversation they
134-
opened. Turn that plus the backends' own transcripts into one timeline:
130+
Either way, check the work:
135131

136132
```sh
137-
hmz trace collect
133+
git diff
138134
```
139135

140-
```console
141-
~/.humanize/epics/-tmp-humanize-demo/20260817T021608.271Z-e000e6/traces/20260817T022635Z.trace.json of 20260817T021608.271Z-e000e6: 15 sessions, 240 slices
136+
```diff
137+
def add(a, b):
138+
- return a - b
139+
+ return a + b
142140
```
143141

144-
Drag that file into [ui.perfetto.dev](https://ui.perfetto.dev). Each agent becomes a process,
145-
each of its conversations a track, and each slice one thing the agent did — with the prompt,
146-
the reasoning, the tool input and the tool output attached. For a nine-hour run it is the only
147-
view that fits on a screen.
142+
It made that edit with **no permission prompt**, and there is no setting that turns them back
143+
on. That is the one thing to have understood before pointing this at a real repository.
148144

149-
| What you now know | |
150-
| --- | --- |
151-
| **turn** | One exchange with the model |
152-
| **session** | A conversation held across turns |
153-
| **flow** | A directory of Python driving one or more agents |
154-
| **epic** | One run of a flow, written down under `~/.humanize/epics/` |
155-
| `hmz` | The interface |
156-
| `hmz exec -f FLOW -a CLI/MODEL:EFFORT "task"` | The same flows, unattended |
157-
| `hmz trace collect` | The run as a timeline |
158-
159-
**Next.** The [User Guide](/user/) has a page per thing humanize does, and its tutorials each
160-
take a real piece of work from start to finish: [Beat a benchmark](/user/tutorials/take-home),
161-
[Port a project](/user/tutorials/port-a-project), and [Build a coding
162-
agent](/user/tutorials/build-an-agent). For the words above, properly defined, read
163-
[Concepts](/user/concepts).
145+
::: details The model id is wrong, or your CLI is not above
146+
A model id is whatever that CLI shipped this week, and which ones you may name depends on the
147+
account you are logged in as. Open `/flow` in the interface and turn to its agents: humanize
148+
asks each CLI once and keeps the answer. Every backend it drives, including the ones not in
149+
those tabs, is in [Many backends, one agent](/features/backends);
150+
[Installation](/user/installation) is how to sign each one in.
151+
:::
152+
153+
**Next.** [`hmz trace collect`](/user/tracing) turns the whole run into one timeline you can
154+
open in Perfetto. The [User Guide](/user/) has a page per thing humanize does, and its
155+
tutorials each take a real piece of work start to finish: [Beat a
156+
benchmark](/user/tutorials/take-home), [Port a project](/user/tutorials/port-a-project), and
157+
[Build a coding agent](/user/tutorials/build-an-agent). For the words above, properly defined,
158+
read [Concepts](/user/concepts).
164159

165160
## Weave a flow
166161

docs/reference/agents.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,8 @@ it finds out the account went down, how many times it was tried, and where the t
139139
Two edges worth knowing. A model is the account's: a chain that lands on an account whose
140140
catalogue does not hold this agent's model fails for a second, unrelated reason, and moving an
141141
agent's account is not moving its model. And whatever the agent was holding open — a Claude
142-
process, a Codex server, a dsh runtime — was started as the account it has left, so it is let
142+
process, a Codex server, a DeepSeek Harness runtime — was started as the account it has left,
143+
so it is let
143144
go of as the agent moves and the next turn opens one as whoever the agent now is.
144145

145146
## A CLI of your own

docs/reference/flows.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -381,8 +381,8 @@ Several moments are several arguments.
381381

382382
**A goal is asked for the same way.** `agent.pursue(objective)` is the backend's own goal
383383
feature — the agent decides for itself that the objective has been met, and until it does, a
384-
turn that would have ended starts another. Five backends have one (Claude Code, codex, dsh,
385-
Kimi, ZCode), so a flow built on it says so:
384+
turn that would have ended starts another. Five backends have one (Claude Code, Codex, DeepSeek
385+
Harness, Kimi Code and ZCode), so a flow built on it says so:
386386

387387
```python
388388
from hmz.flows import Agent, Goal

docs/reference/providers.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ An answer in parentheses is what a question takes when you say nothing. A way wi
8989
its own runs it on this terminal, under the provider's paths, and what it writes is the provider;
9090
a way that is only answers keeps them as the variables the backend reads them under.
9191

92-
**claude**
92+
**Claude Code** (`claude`)
9393

9494
| Way | | Asks for |
9595
| --- | --- | --- |
@@ -100,7 +100,7 @@ a way that is only answers keeps them as the variables the backend reads them un
100100
| `bedrock` | Anthropic's models on an AWS account of yours. Also sets `CLAUDE_CODE_USE_BEDROCK=1`. | `AWS_PROFILE`, `AWS_REGION` (`us-east-1`) |
101101
| `vertex` | Anthropic's models on a Google Cloud project of yours. Also sets `CLAUDE_CODE_USE_VERTEX=1`. | `ANTHROPIC_VERTEX_PROJECT_ID`, `CLOUD_ML_REGION` (`us-east5`) |
102102

103-
**codex**
103+
**Codex** (`codex`)
104104

105105
| Way | | Asks for |
106106
| --- | --- | --- |
@@ -115,7 +115,7 @@ Codex takes a provider as settings rather than as variables, so a turn under `ga
115115
`config.toml` is written. The key of the `key` way is read by `codex login` off its standard
116116
input and kept in codex's own store, so it is not kept a second time as a variable.
117117

118-
**kimi**
118+
**Kimi Code** (`kimi`)
119119

120120
| Way | | Asks for |
121121
| --- | --- | --- |
@@ -136,28 +136,28 @@ input and kept in codex's own store, so it is not kept a second time as a variab
136136
| `wellknown` | A provider that hands out its own credential, by URL. Runs `opencode auth login <url>`. | `OPENCODE_WELLKNOWN`, the URL answering at `/.well-known/opencode` |
137137
| `zen` | An OpenCode Zen key, which its own models run on. | `OPENCODE_API_KEY` |
138138

139-
**mimo**
139+
**mimocode** (`mimo`)
140140

141141
| Way | | Asks for |
142142
| --- | --- | --- |
143143
| `login` | mimocode's own provider list, and whichever way that one takes. Runs `mimo auth login`. ||
144144
| `key` | A MiMo key, which its own models run on. | `XIAOMI_API_KEY` |
145145

146-
**`agy`**
146+
**Antigravity CLI** (`agy`)
147147

148148
| Way | | Asks for |
149149
| --- | --- | --- |
150150
| `login` | Sign in to a Google account, in a session opened for it. Runs `agy` and hands you the terminal. ||
151151
| `key` | A Gemini API key, from AI Studio. | `GEMINI_API_KEY` |
152152
| `adc` | Google Application Default Credentials, for a service account. Also sets `AGY_ADC_AUTH=1`. | `GOOGLE_APPLICATION_CREDENTIALS` |
153153

154-
**`dsh`**
154+
**DeepSeek Harness** (`dsh`)
155155

156156
| Way | | Asks for |
157157
| --- | --- | --- |
158158
| `key` | A DeepSeek API key, from the platform. | `DEEPSEEK_API_KEY` |
159159

160-
**`grok`**
160+
**Grok Build** (`grok`)
161161

162162
| Way | | Asks for |
163163
| --- | --- | --- |
@@ -167,14 +167,14 @@ input and kept in codex's own store, so it is not kept a second time as a variab
167167
| `gateway` | An endpoint speaking Grok Build's own protocol; its models are listed at `/models`. | `GROK_MODELS_BASE_URL`, `XAI_API_KEY` |
168168
| `oidc` | Your own identity provider, for an organisation that signs in through one. | `GROK_OIDC_ISSUER`, `GROK_OIDC_CLIENT_ID` |
169169

170-
**`qwen`**
170+
**Qwen Code** (`qwen`)
171171

172172
| Way | | Asks for |
173173
| --- | --- | --- |
174174
| `login` | Sign in to a Qwen account, in a session opened for it. Runs `qwen` and hands you the terminal: `/auth`, then `/quit`. ||
175175
| `key` | A key for the OpenAI-compatible endpoint it runs against. | `OPENAI_API_KEY`, `OPENAI_BASE_URL` (`https://dashscope.aliyuncs.com/compatible-mode/v1`) |
176176

177-
**`zcode`**
177+
**ZCode** (`zcode`)
178178

179179
| Way | | Asks for |
180180
| --- | --- | --- |
@@ -183,7 +183,7 @@ input and kept in codex's own store, so it is not kept a second time as a variab
183183
| `key` | A Z.AI or BigModel coding plan key, which its own models run on. | `ZCODE_API_KEY` |
184184
| `gateway` | An endpoint speaking ZCode's own protocol — a proxy, a router, another vendor. | `ZCODE_BASE_URL`, `ZCODE_API_KEY` |
185185

186-
**Every backend but `dsh`, as well as its own:**
186+
**Every backend but DeepSeek Harness, as well as its own:**
187187

188188
| Way | | Asks for |
189189
| --- | --- | --- |

docs/reference/remote-execution.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,8 @@ the agent once it exits, and when the session ends nothing it started is left ru
9292
- The agent's own runtime executables and re-execs. For any CLI installed by npm that includes
9393
the interpreter its `#!/usr/bin/env` line names, at every path on `PATH` the search for it may
9494
reach; for Codex, the native CLI and its code-mode host besides.
95-
- Its state directory, and anything the agent runs from inside it — grok keeps its native binary
95+
- Its state directory, and anything the agent runs from inside it — Grok Build keeps its native
96+
binary
9697
under `~/.grok/bin` and re-execs it. All twelve known CLIs are known by name — `agy`, `claude`,
9798
`codex`, `cursor`, `dsh`, `grok`, `kimi`, `mimo`, `opencode`, `pi`, `qwen`, `zcode` — as is
9899
humanize's own `~/.humanize`; any other agent keeping state inside the workspace has to be

docs/reference/tui.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -597,8 +597,9 @@ CLI lets go of the model**, which belonged to the CLI before it.
597597

598598
**The arrows step a row that is a rung in an order** — the effort, what it may do, swarm mode,
599599
whether goals are available, whether it may search the web. Everything else opens a sheet of its
600-
own and comes back. `web search` is a row only for a CLI that can be told: claude, codex, grok,
601-
qwen, opencode, mimo and zcode. A switch for something the backend would go on doing either
600+
own and comes back. `web search` is a row only for a CLI that can be told: Claude Code, Codex,
601+
Grok Build, Qwen Code, opencode, mimocode and ZCode. A switch for something the backend would
602+
go on doing either
602603
way is a switch that lies, so for every other CLI the question is not put. `where` is
603604
a row only for an agent [the flow says may be pointed at a machine](#where-each-agent-works);
604605
for one the flow put in a container it is read rather than opened, and for one that works here

0 commit comments

Comments
 (0)