Records the operator's direction of 2026-10-02, which no record held until now: the SDK must not limit who writes a module; tools and services may be written in any language (Rust, C, Go, Python, JavaScript); one module may ship several bundles — its tools, a seat's implementation, a daemon; skeleton first, a full implementation when the work requires it.
ADR 0187 (extends 0175):
A module's own code is bundles, never an image; images are for third-party software a module installs.
A bundle the runtime serves is a process that speaks MCP over stdio to the node's runtime (tools/list, tools/call; a tool named <seat>.<verb> is the seat's implementation). Importing a TypeScript bundle stays as the shortcut, not the contract. Any language with an MCP library can write a tools bundle today.
A service bundle is a process in whatever language it compiles from — already possible, now the rule.
One thin SDK per language under ADR 0039's test: the stdio loop, the tool type, a few primitives; no transport. First set: TypeScript, Go, Python, Rust, C.
Skeleton first; a skeleton is proven by one bundle in that language answering one tool on the live mesh.
Rejected: one language as now; a full bus client per language (the cascade multiplied, 0039's refusal); a protocol of our own.
Also: dated mechanism-changed notes in 0175, 0039 and 0150; design 38 records WP1 as built (mesh-tools #29) and adds WP1b — the launcher beside the loader and the skeleton SDKs, with its proof; the glossary's bundle widens. records.py, index.py (regenerated), cycle.py all pass.
Records the operator's direction of 2026-10-02, which no record held until now: the SDK must not limit who writes a module; tools **and** services may be written in any language (Rust, C, Go, Python, JavaScript); one module may ship several bundles — its tools, a seat's implementation, a daemon; skeleton first, a full implementation when the work requires it.
**ADR 0187** (extends 0175):
1. A module's own code is bundles, never an image; images are for third-party software a module installs.
2. A bundle the runtime serves is a process that speaks **MCP over stdio** to the node's runtime (`tools/list`, `tools/call`; a tool named `<seat>.<verb>` is the seat's implementation). Importing a TypeScript bundle stays as the shortcut, not the contract. Any language with an MCP library can write a tools bundle today.
3. A service bundle is a `process` in whatever language it compiles from — already possible, now the rule.
4. One thin SDK per language under ADR 0039's test: the stdio loop, the tool type, a few primitives; no transport. First set: TypeScript, Go, Python, Rust, C.
5. Skeleton first; a skeleton is proven by one bundle in that language answering one tool on the live mesh.
Rejected: one language as now; a full bus client per language (the cascade multiplied, 0039's refusal); a protocol of our own.
**Also:** dated mechanism-changed notes in 0175, 0039 and 0150; design 38 records WP1 as built (mesh-tools #29) and adds **WP1b** — the launcher beside the loader and the skeleton SDKs, with its proof; the glossary's *bundle* widens. `records.py`, `index.py` (regenerated), `cycle.py` all pass.
The operator's direction, absent from every record until now: the SDK must not limit who writes a
module; tools and services may be written in any language; one module may ship several bundles
(tools, a seat's implementation, a daemon); skeleton first, a full implementation when the work
requires it. ADR 0175 had the runtime import a bundle, which only JavaScript can be.
0187 makes a tools bundle a process the node's runtime launches and speaks MCP over stdio to —
the vocabulary the runtime already speaks outward — so any language with an MCP library can write
one today and the mesh's SDK per language is thin; the transport stays in the runtime (0039's
refusal, kept). Importing a TypeScript bundle is the shortcut, not the contract. Notes in 0175,
0039 and 0150 say where their mechanism moved; design 38 records WP1 as built and adds WP1b (the
launcher and the skeleton SDKs); the glossary's bundle widens.
mesh-admin
changed title from ADR 0187: a module's own code is bundles in any language, and a tools bundle speaks MCP to the runtime; design 38 gains WP1b to ADR 0188: a module's own code is bundles in any language, and a tools bundle speaks MCP to the runtime; design 38 gains WP1b2026-10-02 19:01:03 +00:00
Renumbered to ADR 0188. 0187 landed on main first, as "A dead tracker is not the machine's failure", and cycle.py refuses two records with one number; the branch that lands last renumbers (playbook 03, issue 155).
What changed, in two commits on top of yours (no rewrite, so a pull fast-forwards):
a merge of main into this branch, clean;
the record renamed to 0188, its heading, and every reference to it: the glossary, ADRs 0039, 0150 and 0175, the README index and design 38. Only the number changes, 9 lines.
records/index/cycle pass. The branch name still says 0187; that is only a name. Pull before pushing again.
Renumbered to **ADR 0188**. 0187 landed on main first, as "A dead tracker is not the machine's failure", and cycle.py refuses two records with one number; the branch that lands last renumbers (playbook 03, issue 155).
What changed, in two commits on top of yours (no rewrite, so a pull fast-forwards):
- a merge of main into this branch, clean;
- the record renamed to 0188, its heading, and every reference to it: the glossary, ADRs 0039, 0150 and 0175, the README index and design 38. Only the number changes, 9 lines.
records/index/cycle pass. The branch name still says 0187; that is only a name. **Pull before pushing again.**
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Records the operator's direction of 2026-10-02, which no record held until now: the SDK must not limit who writes a module; tools and services may be written in any language (Rust, C, Go, Python, JavaScript); one module may ship several bundles — its tools, a seat's implementation, a daemon; skeleton first, a full implementation when the work requires it.
ADR 0187 (extends 0175):
tools/list,tools/call; a tool named<seat>.<verb>is the seat's implementation). Importing a TypeScript bundle stays as the shortcut, not the contract. Any language with an MCP library can write a tools bundle today.processin whatever language it compiles from — already possible, now the rule.Rejected: one language as now; a full bus client per language (the cascade multiplied, 0039's refusal); a protocol of our own.
Also: dated mechanism-changed notes in 0175, 0039 and 0150; design 38 records WP1 as built (mesh-tools #29) and adds WP1b — the launcher beside the loader and the skeleton SDKs, with its proof; the glossary's bundle widens.
records.py,index.py(regenerated),cycle.pyall pass.ADR 0187: a module's own code is bundles in any language, and a tools bundle speaks MCP to the runtime; design 38 gains WP1bto ADR 0188: a module's own code is bundles in any language, and a tools bundle speaks MCP to the runtime; design 38 gains WP1bRenumbered to ADR 0188. 0187 landed on main first, as "A dead tracker is not the machine's failure", and cycle.py refuses two records with one number; the branch that lands last renumbers (playbook 03, issue 155).
What changed, in two commits on top of yours (no rewrite, so a pull fast-forwards):
records/index/cycle pass. The branch name still says 0187; that is only a name. Pull before pushing again.