{"slug": "show-hn-meclaw-where-agents-build-agents-one-rust-binary-no-loop-shipped", "title": "Show HN: Meclaw – where agents build agents: one Rust binary, no loop shipped", "summary": "Meclaw, a new open-source project by developer mmeyerlein, introduces an agentic build system where agents construct other agents, delivered as a single Rust binary that turns a directory tree into a running colony of actors. The system, available via GitHub and meclaw.ai, allows users to install an experimental agent operating system (meclaw-os) and grow an assistant from JSON templates without writing code or deploying loops, with all interactions recorded as auditable messages.", "body_md": "**Where agents build agents.**\n\n**An agentic build system for agentic systems. Ontology-grounded, auditable, one Rust binary.**\n\n[Start an assistant](#start-an-assistant) · [Docs](/mmeyerlein/meclaw/blob/main/docs/README.md) ·\n[Templates](/mmeyerlein/meclaw/blob/main/templates/README.md) · [Examples](/mmeyerlein/meclaw/blob/main/examples) · [Roadmap](/mmeyerlein/meclaw/blob/main/ROADMAP.md)\n\nmeclaw is three things, and you only install the first one. **meclaw** is the substrate: a\ndirectory tree that runs — every folder an actor, every edge a route, one Rust binary\nunderneath. **meclaw-os** is a small, experimental operating system for agents, *grown*\nonto that substrate at runtime. An **assistant** is grown into the OS the same way — a\nJSON file, not a deployment. Install once, grow everything else.\n\n```\n# 1 — install meclaw: one static Linux binary (lands in ~/.local/bin)\ncurl -fsSL https://meclaw.ai/install.sh | sh\nexport PATH=\"$HOME/.local/bin:$PATH\"\n# the templates must match the binary: clone the tag the installer just gave you\ngit clone --depth 1 --branch \"v$(meclaw --version | cut -d' ' -f2)\" \\\n    https://github.com/mmeyerlein/meclaw && cd meclaw\n# one key — replace sk-... with a real one (https://openrouter.ai/keys), or step 3 ends in code=auth\nprintf 'OPENROUTER_API_KEY=sk-...\\nMODEL_BRAIN=openai/gpt-4o-mini\\n' > examples/meclaw-os/seed/.env\n# 7777 is an arbitrary free port: if it is taken, change it in every line below as well.\n# The very first start reads a 25 MB binary from cold disk and can stay silent for ~40 s; every later start takes well under a second.\nmeclaw --root examples/meclaw-os/seed --templates ./templates --daemon --api 127.0.0.1:7777\n\n# 2 — install the OS into the running colony: one POST, nothing restarts\ncurl -s -X POST 127.0.0.1:7777/colony/mutations \\\n     -H 'Content-Type: application/json' -d @examples/meclaw-os/grow.json\n\n# 3 — talk to your assistant\ncurl -s -X POST 127.0.0.1:7777/messages -H 'Content-Type: application/json' \\\n     -d '{\"target\": \"/door\", \"headers\": {\"channel\": \"chat-1\"},\n          \"body\": {\"messages\": [{\"origin\": \"user\", \"type\": \"text\",\n                                 \"text\": \"Say hello in one short sentence.\"}]}}'\n\n# 4 — read the answer: nothing is hidden, the reply is a hop on the record (needs jq)\ncurl -s '127.0.0.1:7777/colony/trace?limit=200' | jq -r \\\n  '[.trace[] | select((.headers_json | fromjson | .hop.route) as $r | $r == \"answer\" or $r == \"error\")]\n   | last | if . == null then \"no answer yet — the colony is still working; watch it at http://127.0.0.1:7777/ui/\"\n            else .body_payload | fromjson | .messages[0].text end'\n\n# 5 — watch the colony in the browser: http://127.0.0.1:7777/ui/\n```\n\nOne binary, one key, five steps — and the fourth already shows the point: the answer is not a return value, it is a message on the record.\n\n**You installed meclaw.** A single Rust binary that turns a directory tree into a running\ncolony of actors: every folder is a cell, its `config.json`\n\nis its definition, and the\nedges between folders are the routes a message can take. Nothing else got installed.\n\n**You installed an operating system — without stopping anything.** `grow.json`\n\nis not\ncode and was not deployed. It is a *mutation*: nodes and edges, applied over HTTP to a\ncolony that was already running. It grew a door, a firewall and a conversation agent out\nof the template library — and that is the only way anything is ever added to a colony,\nwhich is why the same door is open to the agents themselves.\n\n**You talked to an assistant nobody programmed.** No SDK, no agent class, no loop you\nwrote. The assistant is a shape in the filesystem, grown from templates — and the full\nversion of that shape ([ examples/organism](/mmeyerlein/meclaw/blob/main/examples/organism)) grows an organisation,\na person, their assistant and their channels from five such files.\n\nmeclaw is different enough that the same questions come up every time. The rest of this\npage is those questions — each a few lines here, each a real page in\n[ docs/why/](/mmeyerlein/meclaw/blob/main/docs/why).\n\nEvery agent framework ships you the same thing: a loop — call the model, run a tool, feed\nthe result back, until some condition you wrote says stop. You hand-build that harness\nand redeploy it when it's wrong. In meclaw an `llm`\n\ncell makes **one** provider call and\nemits **one** message; tools are cells, the loop is an edge that routes back, the harness\nis topology. Since topology is files, the swarm can rewrite its own harness while it runs.\n\nFlexibility is not a feature here — it is the consequence of one decision. Because the\nharness lives in the filesystem, `ls`\n\n, `grep`\n\n, `diff`\n\nand `git`\n\nare the tooling, every\nchange is diffable, and an agent rebuilds its own topology with the same closed vocabulary\na human uses. There is no SDK and no plugin API, and that is deliberate: the interface is\nHTTP and files, and 38 shipped templates without a line of Rust are the proof.\n*More: docs/why/everything-is-a-file.md*\n\nEvery agentic product ends up rebuilding the same things: an organisation, its people,\ntheir assistants, the channels they are reached on — plus secrets, screening, sessions\nand a control loop across all of them. meclaw-os ships those as templates under one rule:\n**a level owns what its siblings must share.** It is rudimentary and experimental, it\nalready has the concept of **apps**, and it exists so a new agent is a grow, not a project.\n*More: docs/why/an-os-for-agents.md*\n\nThe shipped assistant runs two models on purpose: a conversation surface that answers\nfast, and a reasoning core that thinks — one job, one brain, one tool menu each, and the\nmenu is asked for rather than typed into a prompt. One model doing both is either slow in\nconversation or shallow in reasoning; the split is a harness decision, and the harness is\na file. *More: docs/why/two-brains.md*\n\nA conversation can run for weeks — not because something clever compacts the context, but\nbecause **the window was never where the conversation was stored**. The memory hive\nwrites without an LLM, retrieves over five model-free legs, consolidates nightly by\nsuperseding instead of deleting, and the window is assembled per turn out of the record,\nunder a budget. *More: docs/why/memory.md*\n\nNot philosophy: a typed catalogue. The builder designs against the template library and\nits declarations and is validated by them, rather than emitting free-form JSON somebody\nhopes parses. When the catalogue has no word for what you want, the manifest brings one —\n`add_templates`\n\nregisters a new class into a running colony. Apps are how the ontology\nlearns new words. *More: docs/why/ontology.md*\n\nThe primitives are here and tested: runtime mutation, a builder that turns a wish into a\nmanifest, keep-or-revert on a measured window, a receipt for every act. **The loop that\ncloses them is not** — deliberately. Nothing in this repository improves itself\nunattended, and every goal the control loop could pursue ships disabled. No blind RSI.\n*More: docs/why/rsi.md*\n\n**This one is an idea, not a feature.** The vision for the assistant is the movie *Her*:\nyou **talk** to it, and it **shows** you — lists, plans, pictures, drawn onto a display\nthat belongs to you, not to any one agent. Nothing in this repository does voice today;\nwhat exists is the window it would draw on.\n*The idea, and what already stands under it: docs/why/you-talk-it-shows.md*\n\nargus, affinity, talky, cogny, hive — the names are roles, not branding, and each has a\none-line reason. *More: docs/why/names.md*\n\nOne static binary, one async task per cell — and the security model *is* the kernel:\nLandlock, network namespaces, cgroup v2 and seccomp, fail-closed. Without those\nprimitives, \"sandboxed\" would be a promise instead of a property; that is why there is no\nmacOS build. Authentication is the reverse proxy's job, as for every Linux daemon.\n*More: docs/why/rust-and-linux.md*\n\n`code`\n\ncells run `python3`\n\n, nothing else. One screen, one app; voice is roadmap, not a\nfeature. Not for unsupervised production yet. Running costs, measured on one production\ncolony: 0.32 EUR per day in conversation, method and pinned window in\n[ docs/costs.md](/mmeyerlein/meclaw/blob/main/docs/costs.md).\n\nmeclaw is not finished, and it is open source so it does not have to be finished alone.\nGood first contributions: example colonies, template cells, docs drift-fixes — see\n[CONTRIBUTING.md](/mmeyerlein/meclaw/blob/main/CONTRIBUTING.md) and the `good first issue`\n\nlabel. **6500+ tests,\n0 fail**; release truth lives in [CHANGELOG.md](/mmeyerlein/meclaw/blob/main/CHANGELOG.md).\n\n**Five surfaces are the public contract of this project:**\n\n- the\n**HTTP API**— the`/colony/*`\n\nroutes,`POST /messages`\n\n, their query parameters and status codes; - the\n**template DSL**— the`template.json`\n\nand`config.json`\n\nschemas, including the mutation diff format; - the\n**template ports**— the endpoints a template's README declares as its ingress and exit addresses; - the\n— the route grammar a`web`\n\ncell's own origin`page.set`\n\naccepts, the two reserved names (`/live/websocket`\n\nand`/@client/*`\n\n), and the closed component-template syntax (§`docs/cell-types.md`\n\n`web`\n\n); the removed`/surface/*`\n\nprefix and`cell.surface`\n\nkey stay removed ([#383](https://github.com/mmeyerlein/meclaw/issues/383)); - the\n**documented**— the dead-letter codes, the cell-type error enums, and the codes a`error_code`\n\nstrings`/colony`\n\nread reply carries ([#363](https://github.com/mmeyerlein/meclaw/issues/363)).\n\nWhile meclaw is on `0.x`\n\n, changes to those five are **additive**. A change that breaks an\nexisting topology gets its own **Breaking** section in [CHANGELOG.md](/mmeyerlein/meclaw/blob/main/CHANGELOG.md),\nnaming what breaks and what to do about it — if it is not in that section, it was not\nmeant to break you: file an issue. Two carve-outs: the `${KNOB}`\n\nenvironment variables\nthe shipped templates read are a declared **experimental** surface migrating onto\n`params`\n\n([#138](https://github.com/mmeyerlein/meclaw/issues/138)), and **the Rust crates\nare internals** — nothing under `crates/`\n\ncarries a SemVer guarantee, and there is no\n`meclaw`\n\nlibrary API.\n\n[ docs/README.md](/mmeyerlein/meclaw/blob/main/docs/README.md) is the index. First stops:\n\n[glossary](/mmeyerlein/meclaw/blob/main/docs/glossary.md)(the words you need first) ·\n\n[system overview](/mmeyerlein/meclaw/blob/main/docs/meclaw-overview.md)·\n\n[cell types](/mmeyerlein/meclaw/blob/main/docs/cell-types.md)·\n\n[config format](/mmeyerlein/meclaw/blob/main/docs/config.md)·\n\n[template catalogue](/mmeyerlein/meclaw/blob/main/templates/README.md)·\n\n[examples](/mmeyerlein/meclaw/blob/main/examples).\n\nMIT ([LICENSE-MIT](/mmeyerlein/meclaw/blob/main/LICENSE-MIT)) or Apache 2.0 ([LICENSE-APACHE](/mmeyerlein/meclaw/blob/main/LICENSE-APACHE)) —\nwhichever you like.\n\n**No loops were used in the making of this framework.**\n\nIf that line made you twitch, you're exactly who this is for. Drop a ⭐.", "url": "https://wpnews.pro/news/show-hn-meclaw-where-agents-build-agents-one-rust-binary-no-loop-shipped", "canonical_source": "https://github.com/mmeyerlein/meclaw", "published_at": "2026-09-03 12:58:39+00:00", "updated_at": "2026-09-03 13:23:24.088434+00:00", "lang": "en", "topics": ["ai-agents", "developer-tools", "ai-infrastructure"], "entities": ["Meclaw", "mmeyerlein", "Rust", "meclaw-os", "GitHub", "OpenRouter", "GPT-4o-mini"], "alternates": {"html": "https://wpnews.pro/news/show-hn-meclaw-where-agents-build-agents-one-rust-binary-no-loop-shipped", "markdown": "https://wpnews.pro/news/show-hn-meclaw-where-agents-build-agents-one-rust-binary-no-loop-shipped.md", "text": "https://wpnews.pro/news/show-hn-meclaw-where-agents-build-agents-one-rust-binary-no-loop-shipped.txt", "jsonld": "https://wpnews.pro/news/show-hn-meclaw-where-agents-build-agents-one-rust-binary-no-loop-shipped.jsonld"}}