- Rust 100%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
Decision 650: Message.finish_requested wakes Open main into its existing
wind-down only after admission. Carry the request through Start and
preparation, retain an explicit host cause, and preserve fences, ACK credit,
reserve limits and Cancel. Finite processes the bit as an ordinary amendment.
Move the one-version channel schema to v5 for the added Message boolean,
including Start messages, and preserve it through host and agent adapters.
Proof: tests::open::admitted_finish_request_wakes_listening_and_next_reply_parks
failed before the change (heavy 554) and passes with the typed request.
Focused serial measure run: 1173 tests passed in 6.370s (heavy 586).
Final run/domain/channel subset after encoder refactor: 308 passed in 0.948s
(heavy 596). Workspace all-target check passed (heavy 591); focused
all-target clippy with -D warnings passed (heavy 600).
Live smoke proof (director 654, hel8 dev arm, source deac3df4):
probes-smoke-tools-deac3df4-20261023T060103Z/01: completed, pass;
13.465 s, USD 0.001115; summary attempts=1, pass.
Binary SHA-256: 2f37e9814a6c2202701d536edde5eb879bf9e812f6cb8ca1309eaf027d9f8019.
Arm: deac3df4801db545ff1b2599efbafbec051a54e3-2f37e9814a6c2202701d536edde5eb879bf9e812f6cb8ca1309eaf027d9f8019.
Heavy build token: 532651b727b84183a0b62ce9bd0a1a4d (46 s).
Heavy gate token: e244999b799e4fc99c946741e013be37 (15 s).
Log: hel8 ~/src/rust/tmp/director/land/smoke-deac3df4.log.
Hetzner2's earlier setup refusal reflects the harness login being on hel8;
the director ran the required smoke there. No source rebase since this proof.
Complete channel-v5 test fixtures: check-format expectation, scripted host
maximum version, and codec fuzz golden seed paths. Focused check-format test
passes (heavy 613), all 93 process-world tests pass (heavy 622), and both codec
fuzzy tests pass (heavy 636). Production is identical to smoked deac3df4.
Gate-Tree:
|
||
| .config | ||
| benchmarks | ||
| crates | ||
| docs | ||
| scripts | ||
| src | ||
| tests | ||
| .gitignore | ||
| AGENTS.md | ||
| Cargo.lock | ||
| Cargo.toml | ||
| clippy.toml | ||
| LICENSE | ||
| README.md | ||
| rustfmt.toml | ||
smith
Protocol-driven agent loop for AI applications.
A Rust kit for LLM agents that a host drives over a protocol, sending each run its instructions, tools, budget and what counts as done.
The idea
- Policy is data. A host shapes a run entirely by its charter and its answers: instructions, a brief, the tools the agent may call and those the host serves, what counts as done, a budget. smith knows no workflow vocabulary: no roles, task kinds, forges or pull requests.
- Not only a coding agent. A chat assistant, a researcher, a reviewer, an operator acting through its host's tools, a coordinator of other agents and a producer of code changes are runs of the same loop, told apart by their charters. A workspace is optional.
- One vocabulary, in a process or inline. An agent runs as a process its host spawns, over one channel, or as smith's domains inside the host's own process. The host speaks the same vocabulary either way.
- Any model, any provider. The conversation is provider-neutral, and a run may give its sub-agents other models than its own.
- Failures are visible. The LLM sees what went wrong, bounded in size, and so does the person running it, in words, never replaced by a fixed message.
- Built on skein, tested whole. Every part is a domain, a protocol layer and io, so a host imports the layer it needs; a world of domains and fakes runs everything an agent does, with no io at all.
Start here
docs/design/domain/README.md: the run, the session, tools and the host's contract.docs/design/protocol/README.md: the channel, the charter, transcripts, LLM calls and hosts, in bytes.docs/design/STATUS.md: how far the code is from the design.- skein's foundation, which smith follows:
programming-model.md,testing-strategy.mdandnotes.md.
Before changing code, read AGENTS.md and
docs/development/workflow.md. main
moves only through skein's land, which runs the gate,
scripts/check.sh.
Live tests
The live profile runs smith's account stories and the Claude Code probes
one at a time, without retries. It stays outside the default and fuzzy
suites. Install claude on PATH and /usr/bin/python3 for the
prompt-shape probe's MCP fixture, then prepare a private directory and
its user layer once per machine:
export SMITH_LIVE=~/.local/state/smith-live
umask 077
mkdir -p "$SMITH_LIVE/config/smith"
cat > "$SMITH_LIVE/config/smith/config.toml" <<EOF
credentials = "$SMITH_LIVE"
[accounts.chatgpt]
provider = "openai"
source = "sign_in"
[accounts.claude]
provider = "anthropic"
source = "program"
[accounts.anthropic-key]
provider = "anthropic"
source = "env"
variable = "ANTHROPIC_API_KEY"
EOF
XDG_CONFIG_HOME=$SMITH_LIVE/config smith login chatgpt # approve in the browser
XDG_CONFIG_HOME=$SMITH_LIVE/config smith login claude # Claude Code's sign-in
cargo nextest run --profile live
Set ANTHROPIC_API_KEY for the key story. A missing setup fails by name;
each story checks only the accounts it uses. To run an account's stories
alone, select them with nextest's test filter. An optional
SMITH_TEST_LIVE_GIT_REMOTE names a writable remote for the push story;
without it that story reports the omission on stderr and passes. The
push story removes its remote branch, including on a failed assertion.
The directory holds host-id, tokens/chatgpt, programs/claude/ and
config/smith/config.toml. Smith refreshes its own records in place under
their locks. Each test keeps its HOME, workspace and chats in scratch;
the suite never rewrites the live user layer or borrows a personal login.
A directory unused past the issuer's refresh-token lifetime needs another
sign-in. See testing.md, section 2.3.
The family
These are the repositories of Fabrig, an agent-driven software factory: write, prove, run.
| Repository | Builds on | |
|---|---|---|
| skein | One thread, one loop, no async | |
| smith | Protocol-driven agent loop for AI applications | skein |
| jig | Engine for agentic applications | skein, smith |
| temper | Agent-driven software development on a forge | skein, smith, jig |
| hearth | Immutable machines, built from a revision | skein |