{ "id": "synthesis-agent", "name": "SynthesisAgent", "description": "Routes OpenClaw agent turns through long-lived interactive Claude Code processes; replaces the claude -p path so usage stays on the subscription quota", "activation": { "onStartup": true }, "commandAliases": [ { "name": "synthesis" } ], "configSchema": { "type": "object", "additionalProperties": false, "properties": { "bridgePort": { "type": "number", "default": 18900, "description": "HTTP port for the OpenAI-compatible /v1/chat/completions endpoint that OpenClaw routes agent turns to" }, "channelWsPort": { "type": "number", "default": 18901, "description": "WebSocket port that each spawned Claude process's ClaudePlugin dials back into" }, "permissionMode": { "type": "string", "default": "bypassPermissions", "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" }, "channelName": { "type": "string", "default": "synthesis", "description": "Name used in `--channels server:` when spawning claude; must match the MCP server name in ClaudePlugin's .mcp.json" } } } }