chore: initial scaffolding for SynthesisAgent.OpenclawPlugin

OpenClaw plugin that manages long-lived interactive Claude Code processes
per OpenClaw session. Process manager + session-mapping persistence +
bridge WebSocket server skeleton.

Will be rewritten to follow the contractor-agent HTTP model-provider pattern
(register as `synthesis-claude-bridge` provider, receive /v1/chat/completions,
dispatch to channel notification on the bound Claude process). See parent
repo's STATUS.md for the punch list.
This commit is contained in:
zhi
2026-05-14 09:41:18 +00:00
commit 38ac6d20b7
11 changed files with 698 additions and 0 deletions

52
openclaw.plugin.json Normal file
View File

@@ -0,0 +1,52 @@
{
"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"
}
}
}
}