Files
SynthesisAgent/SynthesisAgent.OpenclawPlugin/openclaw.plugin.json
zhi 0fb46e318e chore: initial scaffolding for SynthesisAgent
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.
2026-05-14 09:39:02 +00:00

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"
}
}
}
}