Reference
pipx install https://canonopy.com/dl/canonopy-0.1.5-py3-none-any.whl installs lw. When it lands there, pipx install canonopy is the same file by a shorter name.
| command | does | flags | ||
|---|---|---|---|---|
| lw init [path] | writes lw.manifest.json and lw.env | --force | ||
| lw dev | starts the brain: broker, embedder, student, talk lane, coach | `--mock [skyrim\ | gta], --detach, --no-embedder, --session, --status, --down` | |
| lw trigger <class> | fires an event and prints the chain | --char, --by, --value, --need, --dry-run, --arch, --seconds; classes: theft attack threat slight debt gift amends need order say cast raw | ||
| lw watch | live table of every character | --char, --rung, --warnings-only, --json, --since, --once | ||
| lw why <char> | the receipt for one decision | --tick | ||
| lw serve | the HTTP API in front of the broker | --port, --host | ||
| lw mcp | the same API as MCP tools over stdio: lw_health lw_perceive lw_command lw_trigger lw_watch lw_mind lw_manifest_check, plus lw_verbs, lw_verb_request, read-only lw_escalations and lw_train_status, and lw_docs, the documentation itself (list, one page, or search), so an agent answers what the brain can do from the pages rather than guessing. sync --send and train are human-only on purpose | |||
| lw docs | the documentation, offline: the pages, one page as Markdown, or a search | <page>, --search | ||
| lw licence activate <key> | fetch weights, write the token | --no-fetch | ||
lw licence status / deactivate | ||||
| lw licence subscribe | Stripe Checkout, $20/month; the trial key becomes the paid licence | |||
| lw licence portal | card, invoices, cancel | |||
| lw licence pool | the pooled flywheel this licence is part of, and the base version it is on | |||
| lw licence buildkey create | a wake-only key for a shipped game, shown once; list, revoke <id> | --label | ||
| lw bundle | the brain as one folder a game ships: embedded Python, the embedder, your weights, the manifest, a launcher | `--target mac\ | windows\ | linux, --build-key, --out, --manifest, --wake-url, --no-talk` |
| lw escalations | what the flywheel has queued, by lane | --lane, --show | ||
| lw sync | flush escalations up by hand (the student and ranker lanes go by themselves); the gate lane's raw sentences only with the flag | --dry-run (default), --send, --include-unclassified, --confidential | ||
| lw verbs | the vocabulary: every verb, its engine action, whether it speaks | |||
| lw verbs request <name> | ask for a new verb; the moment it certifies it is released to you with its operator card, so the planner can choose it (lw train status, then lw licence activate) | --looks-like, --wrong-when, --reference | ||
| `lw train <student\ | gate\ | ranker>` | request a retrain | --note |
| lw train status [job] | certification receipts |
✗ a fault (config, reachability). · a refusal, the system working. ⚠ starvation.
| code | meaning |
|---|---|
| 0 | ok |
| 2 | an uncaught class exists |
| 3 | manifest loads but this adapter cannot execute some verbs |
| 4 | config error |
| 5 | licence missing, invalid or lapsed |
| 7 | brain not running |
lw.env in the project (paths resolve against it); the environment wins.
| variable | meaning | ||
|---|---|---|---|
| LW_SESSION | one session = one set of journals; every service shares it | ||
| LW_MANIFEST | manifest path(s), :-separated | ||
| LW_WAKE_URL | the hosted deliberator; unset = in-process | ||
| LW_API_URL | lw serve, default http://127.0.0.1:8767 | ||
| LW_TALK_PORT | the talk lane, default 8094 | ||
| LW_SPEECH_BACKEND | stub \ | anthropic \ | openai |
| LW_EMBED_URL | the embedder, default http://localhost:8098 | ||
| ANTHROPIC_API_KEY | the talk lane only, if you use it |