mesh/merge-gate head 6aa30eae66be merged into trunk a84d0094a0a3 — pass: builds claude-code → ace, g14, novox, shanks; no bus step; every machine composes …
mesh/repo-check head 6aa30eae66be merged into trunk a84d0094a0a3 — pass: its merge-check.sh passed, each part in its toolchain: merge-check.sh (go), merge-…
mesh/delivery superseded: a newer head of the same pull request
A session started on another node began without what the sessions elsewhere had learned, because Claude Code keeps project memory on one node. The module's own process now carries the memory folders through its kept memory state: a change is written elsewhere only over the version it replaced, a file changed on two nodes keeps both (newer first) with a warning, and every replaced or removed version is kept. No tool writes memory.
181 lines
5.7 KiB
JSON
181 lines
5.7 KiB
JSON
{
|
|
"module": "claude-code",
|
|
"version": "1",
|
|
"slug": "agent",
|
|
"capabilities": [
|
|
"package-manager"
|
|
],
|
|
"requires": [
|
|
"mcp-endpoint"
|
|
],
|
|
"binds": {
|
|
"mcp-endpoint": "${dir:state}/mcp-endpoint.json"
|
|
},
|
|
"uses": [
|
|
"operator-channel"
|
|
],
|
|
"state": [
|
|
"servers",
|
|
"holdings",
|
|
"config",
|
|
"proposals",
|
|
"questions",
|
|
"memory"
|
|
],
|
|
"reads": [
|
|
"claude-licence-manager.bindings"
|
|
],
|
|
"tools": [
|
|
"claude_code_status",
|
|
"claude_code_render",
|
|
"claude_code_guard",
|
|
"claude_code_pull",
|
|
"claude_code_grant",
|
|
"claude_code_add_api_key",
|
|
"claude_code_registrations",
|
|
"claude_code_memory",
|
|
"claude_code_mcp_list",
|
|
"claude_code_mcp_register",
|
|
"claude_code_mcp_unregister",
|
|
"claude_code_skill_list",
|
|
"claude_code_skill_register",
|
|
"claude_code_skill_unregister",
|
|
"claude_code_agent_list",
|
|
"claude_code_agent_register",
|
|
"claude_code_agent_unregister",
|
|
"claude_code_command_list",
|
|
"claude_code_command_register",
|
|
"claude_code_command_unregister",
|
|
"claude_code_hook_list",
|
|
"claude_code_hook_register",
|
|
"claude_code_hook_unregister",
|
|
"claude_code_output_style_list",
|
|
"claude_code_output_style_register",
|
|
"claude_code_output_style_unregister",
|
|
"claude_code_instructions_list",
|
|
"claude_code_instructions_register",
|
|
"claude_code_instructions_unregister",
|
|
"claude_code_instructions_propose",
|
|
"claude_code_proposals",
|
|
"claude_code_ask",
|
|
"claude_code_answer",
|
|
"claude_code_settings_get",
|
|
"claude_code_settings_set",
|
|
"claude_code_settings_clear",
|
|
"claude_code_permission_add",
|
|
"claude_code_permission_remove",
|
|
"claude_code_config_list",
|
|
"claude_code_config_show",
|
|
"claude_code_config_status",
|
|
"claude_code_config_import",
|
|
"claude_code_home_show",
|
|
"claude_code_home_remove",
|
|
"claude_code_home_removed",
|
|
"claude_code_home_restore",
|
|
"claude_code_judge",
|
|
"claude_code_judged"
|
|
],
|
|
"data": {
|
|
"own": [
|
|
{
|
|
"id": "agent-home",
|
|
"path": "${dir:agent-home}",
|
|
"class": "valuable",
|
|
"why": "the operator's agent's own files: its memory, history and projects"
|
|
}
|
|
]
|
|
},
|
|
"resources": [
|
|
{
|
|
"id": "package",
|
|
"type": "package",
|
|
"package": "claude-code"
|
|
},
|
|
{
|
|
"id": "managed",
|
|
"type": "directory",
|
|
"path": "/etc/claude-code",
|
|
"mode": "0755"
|
|
},
|
|
{
|
|
"id": "start",
|
|
"type": "file",
|
|
"path": "/usr/local/bin/claude-agent",
|
|
"mode": "0755",
|
|
"content": "#!/bin/sh\n# The mesh's (module claude-code, novox/hq ADR 0266): start the agent as the account agents run as on this\n# machine. Written whole at every push: an edit here is overwritten.\nagent='${machine:agent-account}'\nif [ \"$(id -un)\" = \"$agent\" ]; then\n\texec claude \"$@\"\nfi\n# Another account, the operator's, becomes the agent's through its own sudo: the person is the authority. The\n# operator's override of the guard travels only when it is set in this shell, as it would reach claude.\nif [ -n \"$MESH_GUARD_OVERRIDE\" ]; then\n\texec sudo -iu \"$agent\" env MESH_GUARD_OVERRIDE=\"$MESH_GUARD_OVERRIDE\" claude \"$@\"\nfi\nexec sudo -iu \"$agent\" claude \"$@\"\n"
|
|
},
|
|
{
|
|
"id": "agent-account-name",
|
|
"type": "file",
|
|
"path": "/etc/claude-code/agent-account",
|
|
"mode": "0644",
|
|
"content": "${machine:agent-account}\n"
|
|
},
|
|
{
|
|
"id": "agent-account",
|
|
"type": "user",
|
|
"name": "${machine:agent-account}",
|
|
"home": "${machine:agent-home}",
|
|
"root": "${machine:agent-root}"
|
|
},
|
|
{
|
|
"id": "agent-home",
|
|
"type": "directory",
|
|
"path": "${machine:agent-home}/.claude",
|
|
"mode": "0700",
|
|
"owner": "${machine:agent-account}"
|
|
},
|
|
{
|
|
"id": "state",
|
|
"type": "directory",
|
|
"mode": "0700",
|
|
"owner": "${machine:account}",
|
|
"place": "."
|
|
},
|
|
{
|
|
"id": "facts",
|
|
"type": "file",
|
|
"path": "${dir:state}/facts.json",
|
|
"mode": "0600",
|
|
"owner": "${machine:account}",
|
|
"content": "{\n \"node\": \"${machine:name}\",\n \"console\": \"http://127.0.0.1:${bound:mcp-endpoint:port}/mcp\"\n}\n"
|
|
},
|
|
{
|
|
"id": "settings",
|
|
"type": "file",
|
|
"path": "${dir:state}/settings.json",
|
|
"mode": "0600",
|
|
"owner": "${machine:account}",
|
|
"merge": "json",
|
|
"content": "{\n \"role\": \"\",\n \"mcp_servers\": {},\n \"managed_settings\": {},\n \"instructions\": {},\n \"output_styles\": {},\n \"skills\": {},\n \"commands\": {},\n \"agents\": {}\n}\n"
|
|
}
|
|
],
|
|
"shell": [
|
|
{
|
|
"for": "zsh",
|
|
"slot": "normal",
|
|
"code": "# The agent's session (module claude-code, novox/hq ADR 0266): where this machine names an account of the\n# agents' own, claude in an interactive zsh is claude-agent, which starts the session as that account. Where\n# agents run as the operator's account the file names that account, and nothing is added. claude-agent runs\n# the real claude: exec, sudo and its sh see no alias.\nif [[ -r /etc/claude-code/agent-account ]]; then\n\t() {\n\t\tlocal agent=$(</etc/claude-code/agent-account)\n\t\tif [[ -n $agent && $agent != $USERNAME ]]; then\n\t\t\talias claude=claude-agent\n\t\tfi\n\t}\nfi\n"
|
|
}
|
|
],
|
|
"build": {
|
|
"artifacts": [
|
|
{
|
|
"name": "tools",
|
|
"kind": "bundle",
|
|
"language": "go",
|
|
"system": "arch",
|
|
"from": "cmd/claude-code",
|
|
"binary": "claude-code",
|
|
"loads": [
|
|
"claude-code"
|
|
],
|
|
"env": {
|
|
"MESH_CLAUDE_CODE_STATE": "${dir:state}",
|
|
"MESH_CLAUDE_CODE_FACTS": "${dir:state}/facts.json",
|
|
"MESH_CLAUDE_CODE_SETTINGS": "${dir:state}/settings.json"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|