The agent module consumes the manager's binding.changed, acting only on the one naming its node's consumer, and each time it hears those events anew asks the seat's bindings for its own consumer as its first view; its read of the manager's bindings state goes. Builds: design 39 bus-and-switch §22, B9, B10, B22 Claude-Session: https://claude.ai/code/session_01NcbgfHb9d4T9nq5Q6WqdiJ
275 lines
7.7 KiB
JSON
275 lines
7.7 KiB
JSON
{
|
|
"module": "claude-code",
|
|
"version": "1",
|
|
"moved": true,
|
|
"slug": "agent",
|
|
"capabilities": [
|
|
"package-manager"
|
|
],
|
|
"requires": [
|
|
"mcp-endpoint",
|
|
{
|
|
"name": "gitea-read",
|
|
"optional": true
|
|
}
|
|
],
|
|
"binds": {
|
|
"mcp-endpoint": "${dir:state}/mcp-endpoint.json"
|
|
},
|
|
"secrets": {
|
|
"gitea-read": "${dir:state}/gitea-read.secret"
|
|
},
|
|
"uses": [
|
|
"operator-channel"
|
|
],
|
|
"invokes": [
|
|
"seat:mesh-hand-acts.warranted",
|
|
"seat:mesh-hand-acts.hand-act",
|
|
"seat:mesh-catalog.seat-definitions",
|
|
"mesh-delivery-indexer.indexer_read_modules",
|
|
"mesh-delivery-indexer.indexer_read_manifests",
|
|
"mesh-delivery-assigner.assigner_read_assignments",
|
|
"seat:anthropic-licence-manager.bindings"
|
|
],
|
|
"consumes": [
|
|
"mesh-delivery-indexer.views.modules",
|
|
"mesh-delivery-indexer.views.manifests",
|
|
"mesh-delivery-assigner.views.assignments",
|
|
"mesh-catalog.seat-definition-changed",
|
|
"mesh-catalog.seat-definition-removed",
|
|
"claude-licence-manager.holdings.asked",
|
|
"claude-licence-manager.binding.changed"
|
|
],
|
|
"state": [
|
|
"servers",
|
|
"holdings",
|
|
"config",
|
|
"proposals",
|
|
"questions",
|
|
"memory",
|
|
"waits",
|
|
"findings"
|
|
],
|
|
"emits": [
|
|
"judged",
|
|
"holdings-changed"
|
|
],
|
|
"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_wait",
|
|
"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",
|
|
"claude_code_first_views",
|
|
"claude_code_first_view_again",
|
|
"claude_code_seat_list",
|
|
"claude_code_seat_list_again"
|
|
],
|
|
"data": {
|
|
"own": [
|
|
{
|
|
"id": "agent-home",
|
|
"path": "${dir:agent-home}",
|
|
"class": "valuable",
|
|
"why": "the operator's agent's own files: its memory, history and projects"
|
|
}
|
|
]
|
|
},
|
|
"config": {
|
|
"role": {
|
|
"type": "string",
|
|
"description": "What this machine is for, in a sentence, written into the instructions every Claude Code session on it reads; empty says nothing.",
|
|
"trusted": true,
|
|
"default": ""
|
|
},
|
|
"mcp_servers": {
|
|
"type": "object",
|
|
"description": "The tool servers every session on this machine is given beside the mesh's own, by name, each as Claude Code's managed MCP configuration takes it; empty adds none.",
|
|
"trusted": true,
|
|
"default": {}
|
|
},
|
|
"managed_settings": {
|
|
"type": "object",
|
|
"description": "Keys of Claude Code's managed settings every session on this machine obeys, such as spinnerTipsEnabled, laid over the mesh's own; empty adds none. Falls back to agent-managed-settings, the mesh's or this node's.",
|
|
"trusted": true,
|
|
"predefined": "agent-managed-settings",
|
|
"default": {}
|
|
},
|
|
"instructions": {
|
|
"type": "object",
|
|
"description": "The instructions every session on this machine reads, by name, each a text as one line or a list of its lines; empty adds none.",
|
|
"trusted": true,
|
|
"default": {}
|
|
},
|
|
"output_styles": {
|
|
"type": "object",
|
|
"description": "The output styles offered to every session on this machine, by name, each a text as one line or a list of its lines; empty adds none.",
|
|
"trusted": true,
|
|
"default": {}
|
|
},
|
|
"skills": {
|
|
"type": "object",
|
|
"description": "The skills offered to every session on this machine, by name, each its files by path, a text as one line or a list of its lines; a skill without its SKILL.md is left out; empty adds none.",
|
|
"trusted": true,
|
|
"default": {}
|
|
},
|
|
"commands": {
|
|
"type": "object",
|
|
"description": "The slash commands offered to every session on this machine, by name, each a text as one line or a list of its lines; empty adds none.",
|
|
"trusted": true,
|
|
"default": {}
|
|
},
|
|
"agents": {
|
|
"type": "object",
|
|
"description": "The agents offered to every session on this machine, by name, each a text as one line or a list of its lines; empty adds none.",
|
|
"trusted": true,
|
|
"default": {}
|
|
}
|
|
},
|
|
"resources": [
|
|
{
|
|
"id": "package",
|
|
"type": "package",
|
|
"package": "claude-code"
|
|
},
|
|
{
|
|
"id": "managed",
|
|
"type": "directory",
|
|
"path": "/etc/claude-code",
|
|
"mode": "0755",
|
|
"unknown": "program"
|
|
},
|
|
{
|
|
"id": "start",
|
|
"type": "file",
|
|
"path": "/usr/local/bin/claude-agent",
|
|
"mode": "0755",
|
|
"template": "files/claude-agent"
|
|
},
|
|
{
|
|
"id": "agent-account-name",
|
|
"type": "file",
|
|
"path": "/etc/claude-code/agent-account",
|
|
"mode": "0644",
|
|
"template": "files/agent-account"
|
|
},
|
|
{
|
|
"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}",
|
|
"unknown": "module"
|
|
},
|
|
{
|
|
"id": "state",
|
|
"type": "directory",
|
|
"mode": "0700",
|
|
"owner": "${machine:account}",
|
|
"place": ".",
|
|
"unknown": "program"
|
|
},
|
|
{
|
|
"id": "facts",
|
|
"type": "file",
|
|
"path": "${dir:state}/facts.json",
|
|
"mode": "0600",
|
|
"owner": "${machine:account}",
|
|
"template": "files/facts.json"
|
|
},
|
|
{
|
|
"id": "settings",
|
|
"type": "file",
|
|
"path": "${dir:state}/settings.json",
|
|
"mode": "0600",
|
|
"owner": "${machine:account}",
|
|
"takes-config": ["role", "mcp_servers", "managed_settings", "instructions", "output_styles", "skills", "commands", "agents"],
|
|
"merge": "json",
|
|
"template": "files/settings.json"
|
|
}
|
|
],
|
|
"items": [
|
|
{
|
|
"collection": "shell:zsh:normal",
|
|
"template": "files/zsh-normal"
|
|
}
|
|
],
|
|
"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",
|
|
"MESH_CLAUDE_CODE_FORGE": "${dir:state}/gitea-read.secret"
|
|
}
|
|
},
|
|
{
|
|
"name": "files",
|
|
"kind": "archive",
|
|
"from": "files"
|
|
}
|
|
]
|
|
}
|
|
}
|