Bridge between OpenClaw (multi-channel hub) and interactive Claude Code, keeping autonomous agent usage on the subscription quota after the 2026-06-15 Agent SDK credit split. Initial scaffolding only — two submodules with skeletons: - SynthesisAgent.ClaudePlugin: stdio MCP server registered as a --channels source. Declares experimental.claude/channel capability (verified 2026-05-14 against the official Anthropic discord plugin) and emits notifications/claude/channel to push OpenClaw inbound messages into the Claude turn loop. - SynthesisAgent.OpenclawPlugin: process manager + session mapping + bridge WebSocket. Currently shaped around a custom ws protocol; will be rewritten as a model-provider HTTP server (contractor-agent pattern) so OpenClaw routes inbound channel messages through it via /v1/chat/completions. See STATUS.md for the open punch list and docs/wire-protocol.md for the (soon-to-change) inter-plugin frame schema.
53 lines
1.7 KiB
JSON
53 lines
1.7 KiB
JSON
{
|
|
"id": "synthesis-agent",
|
|
"name": "SynthesisAgent",
|
|
"description": "Manages long-lived interactive Claude Code processes per OpenClaw session; bridges OpenClaw events <-> SynthesisAgent.ClaudePlugin",
|
|
"activation": {
|
|
"onStartup": true
|
|
},
|
|
"commandAliases": [
|
|
{ "name": "synthesis" }
|
|
],
|
|
"configSchema": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"bridgePort": {
|
|
"type": "number",
|
|
"default": 18801,
|
|
"description": "TCP port the bridge WebSocket server binds on (127.0.0.1)"
|
|
},
|
|
"bridgeToken": {
|
|
"type": "string",
|
|
"default": "synthesis-local",
|
|
"description": "Shared secret each ClaudePlugin instance must present in its hello frame"
|
|
},
|
|
"claudePluginRef": {
|
|
"type": "string",
|
|
"default": "plugin:synthesis-claude@local",
|
|
"description": "The --channels argument passed to claude on spawn"
|
|
},
|
|
"permissionMode": {
|
|
"type": "string",
|
|
"default": "acceptEdits",
|
|
"description": "Claude Code permission mode for spawned sessions"
|
|
},
|
|
"idleKillMs": {
|
|
"type": "number",
|
|
"default": 3600000,
|
|
"description": "Idle time after which a session's claude process is killed; next message resumes it"
|
|
},
|
|
"maxProcesses": {
|
|
"type": "number",
|
|
"default": 16,
|
|
"description": "Hard cap on concurrent claude processes; new sessions beyond this evict the oldest idle one"
|
|
},
|
|
"mappingDbPath": {
|
|
"type": "string",
|
|
"default": "~/.openclaw/synthesis/sessions.json",
|
|
"description": "Where openclaw_session <-> claude_session UUID mapping is persisted"
|
|
}
|
|
}
|
|
}
|
|
}
|