The controller is not placed (ADR 0590), so its tools, modules, nodes and node verbs answer nothing. claude-code now reads the seats' verbs from the seats' contract, the placed modules' replaces from the indexer's manifests, and the machines and where modules run from mesh-placement's placement; the rendered instructions name the seats that own each job (issue 1126 B13). Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
14 lines
2.8 KiB
Go
14 lines
2.8 KiB
Go
package main
|
|
|
|
// instructionsText is the managed instruction file, generated from the TypeScript renderer it replaced so
|
|
// the file under the agent's managed directory did not change by a byte when the module moved to Go;
|
|
// a test holds it to that renderer's output (testdata/rendered-by-typescript.json), changed since only
|
|
// where the controller's verbs were named (issue 1126 B13: the controller is not placed, ADR 0590).
|
|
func instructionsText(node, role string) string {
|
|
return "# This machine is a node of a Novox mesh\n\nWritten by the mesh's `claude-code` module. Edit the module's settings or the catalog, never this file:\nit is rewritten whenever the module renders.\n\n## Who this node is\n\n- **Node:** `" +
|
|
node +
|
|
"`\n- **Role:** " +
|
|
role +
|
|
"\n- The other nodes, their roles and what runs where: ask the placement seat (`mesh-placement.placement`),\n or `mesh_overview` and `mesh_machine`. Nothing here lists them, because a copy drifts.\n\n## How a session on this mesh works\n\nThe console is the only way to the mesh: the MCP server named `mesh`. It offers five tools, and\neverything else is an address you find and call through them:\n\n- `mesh_search` — words in, matching addresses out. `mesh_describe` — one address's arguments.\n- `mesh_call` — call an address. A seat the mesh holds once is `<seat>.<verb>` (the mesh's own seats\n include `mesh-placement`, `mesh-delivery`, `mesh-config` and `mesh-conditions`);\n a module on a machine is `<node>/<module>.<tool>`.\n- `mesh_overview` and `mesh_machine` — the mesh's seats and machines, and what one machine runs.\n\n- **Symptom first.** For an error, a failing service or anything unexpected, search the record with the\n literal text before forming a hypothesis: the records module's `records_search`, then\n `records_read`.\n- **Ask the mesh before changing it**, and change it through the seats' verbs or the catalog.\n- **A licence** through the `anthropic-licence-manager` seat's verbs. Never edit the agent's credentials\n file by hand, never print or ask for a token.\n\n## Hard rules\n\n- A file the mesh manages is changed through the verb or the catalog that owns it, never on disk. If\n unsure, `<node>/node-engine.composition` for the module says what the mesh writes there.\n- Never write to a store's database by hand; schema changes are numbered migrations.\n- Never push to a main branch: a branch, a pull request, and a human approval for every merge.\n- The mesh creates no symlinks, and nobody else does either.\n- A package is declared in a module, never installed by hand.\n\n## Conventions\n\n- Commit messages are concise, in the imperative, about why.\n- Test before pushing: nodes update unattended.\n- The playbooks in the record say how research, decisions, designs, issues and hand-offs are done.\n"
|
|
}
|