@jonathangu/openclawbrain 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +412 -0
  3. package/bin/openclawbrain.js +15 -0
  4. package/docs/END_STATE.md +244 -0
  5. package/docs/EVIDENCE.md +128 -0
  6. package/docs/RELEASE_CONTRACT.md +91 -0
  7. package/docs/agent-tools.md +106 -0
  8. package/docs/architecture.md +224 -0
  9. package/docs/configuration.md +178 -0
  10. package/docs/evidence/2026-03-16/3188b50c4ed30f07dea111e35ce52aabefaced63/brain-teach-session-bound/status.json +87 -0
  11. package/docs/evidence/2026-03-16/3188b50c4ed30f07dea111e35ce52aabefaced63/brain-teach-session-bound/summary.md +16 -0
  12. package/docs/evidence/2026-03-16/3188b50c4ed30f07dea111e35ce52aabefaced63/brain-teach-session-bound/trace.json +273 -0
  13. package/docs/evidence/2026-03-16/3188b50c4ed30f07dea111e35ce52aabefaced63/brain-teach-session-bound/validation-report.json +652 -0
  14. package/docs/evidence/2026-03-16/4941429588810da5d6f7ef1509f229f83fa08031/channels-status.txt +31 -0
  15. package/docs/evidence/2026-03-16/4941429588810da5d6f7ef1509f229f83fa08031/config-snapshot.json +66 -0
  16. package/docs/evidence/2026-03-16/4941429588810da5d6f7ef1509f229f83fa08031/doctor.json +14 -0
  17. package/docs/evidence/2026-03-16/4941429588810da5d6f7ef1509f229f83fa08031/gateway-probe.txt +34 -0
  18. package/docs/evidence/2026-03-16/4941429588810da5d6f7ef1509f229f83fa08031/gateway-status.txt +41 -0
  19. package/docs/evidence/2026-03-16/4941429588810da5d6f7ef1509f229f83fa08031/logs.txt +428 -0
  20. package/docs/evidence/2026-03-16/4941429588810da5d6f7ef1509f229f83fa08031/status-all.txt +60 -0
  21. package/docs/evidence/2026-03-16/4941429588810da5d6f7ef1509f229f83fa08031/status.json +223 -0
  22. package/docs/evidence/2026-03-16/4941429588810da5d6f7ef1509f229f83fa08031/summary.md +13 -0
  23. package/docs/evidence/2026-03-16/4941429588810da5d6f7ef1509f229f83fa08031/trace.json +4 -0
  24. package/docs/evidence/2026-03-16/4941429588810da5d6f7ef1509f229f83fa08031/validation-report.json +334 -0
  25. package/docs/evidence/2026-03-16/7f8dbcb27e741abdeefd5656c210639d0acdd440/channels-status.txt +25 -0
  26. package/docs/evidence/2026-03-16/7f8dbcb27e741abdeefd5656c210639d0acdd440/config-snapshot.json +91 -0
  27. package/docs/evidence/2026-03-16/7f8dbcb27e741abdeefd5656c210639d0acdd440/doctor.json +14 -0
  28. package/docs/evidence/2026-03-16/7f8dbcb27e741abdeefd5656c210639d0acdd440/gateway-probe.txt +36 -0
  29. package/docs/evidence/2026-03-16/7f8dbcb27e741abdeefd5656c210639d0acdd440/gateway-status.txt +44 -0
  30. package/docs/evidence/2026-03-16/7f8dbcb27e741abdeefd5656c210639d0acdd440/logs.txt +428 -0
  31. package/docs/evidence/2026-03-16/7f8dbcb27e741abdeefd5656c210639d0acdd440/short-static-classification/preflight-doctor.json +10 -0
  32. package/docs/evidence/2026-03-16/7f8dbcb27e741abdeefd5656c210639d0acdd440/short-static-classification/preflight-sdk-probe.json +11 -0
  33. package/docs/evidence/2026-03-16/7f8dbcb27e741abdeefd5656c210639d0acdd440/short-static-classification/preflight-setup-only.json +12 -0
  34. package/docs/evidence/2026-03-16/7f8dbcb27e741abdeefd5656c210639d0acdd440/short-static-classification/summary.md +30 -0
  35. package/docs/evidence/2026-03-16/7f8dbcb27e741abdeefd5656c210639d0acdd440/short-static-classification/validation-report.json +72 -0
  36. package/docs/evidence/2026-03-16/7f8dbcb27e741abdeefd5656c210639d0acdd440/status-all.txt +63 -0
  37. package/docs/evidence/2026-03-16/7f8dbcb27e741abdeefd5656c210639d0acdd440/status.json +200 -0
  38. package/docs/evidence/2026-03-16/7f8dbcb27e741abdeefd5656c210639d0acdd440/summary.md +13 -0
  39. package/docs/evidence/2026-03-16/7f8dbcb27e741abdeefd5656c210639d0acdd440/trace.json +4 -0
  40. package/docs/evidence/2026-03-16/7f8dbcb27e741abdeefd5656c210639d0acdd440/validation-report.json +311 -0
  41. package/docs/evidence/README.md +16 -0
  42. package/docs/fts5.md +161 -0
  43. package/docs/tui.md +506 -0
  44. package/index.ts +1372 -0
  45. package/openclaw.plugin.json +136 -0
  46. package/package.json +66 -0
  47. package/src/assembler.ts +804 -0
  48. package/src/brain-cli.ts +316 -0
  49. package/src/brain-core/decay.ts +35 -0
  50. package/src/brain-core/episode.ts +82 -0
  51. package/src/brain-core/graph.ts +321 -0
  52. package/src/brain-core/health.ts +116 -0
  53. package/src/brain-core/mutator.ts +281 -0
  54. package/src/brain-core/pack.ts +117 -0
  55. package/src/brain-core/policy.ts +153 -0
  56. package/src/brain-core/replay.ts +1 -0
  57. package/src/brain-core/teacher.ts +105 -0
  58. package/src/brain-core/trace.ts +40 -0
  59. package/src/brain-core/traverse.ts +230 -0
  60. package/src/brain-core/types.ts +405 -0
  61. package/src/brain-core/update.ts +123 -0
  62. package/src/brain-harvest/human.ts +46 -0
  63. package/src/brain-harvest/scanner.ts +98 -0
  64. package/src/brain-harvest/self.ts +147 -0
  65. package/src/brain-runtime/assembler-extension.ts +230 -0
  66. package/src/brain-runtime/evidence-detectors.ts +68 -0
  67. package/src/brain-runtime/graph-io.ts +72 -0
  68. package/src/brain-runtime/harvester-extension.ts +98 -0
  69. package/src/brain-runtime/service.ts +659 -0
  70. package/src/brain-runtime/tools.ts +109 -0
  71. package/src/brain-runtime/worker-state.ts +106 -0
  72. package/src/brain-runtime/worker-supervisor.ts +169 -0
  73. package/src/brain-store/embedding.ts +179 -0
  74. package/src/brain-store/init.ts +347 -0
  75. package/src/brain-store/migrations.ts +188 -0
  76. package/src/brain-store/store.ts +816 -0
  77. package/src/brain-worker/child-runner.ts +321 -0
  78. package/src/brain-worker/jobs.ts +12 -0
  79. package/src/brain-worker/mutation-job.ts +5 -0
  80. package/src/brain-worker/promotion-job.ts +5 -0
  81. package/src/brain-worker/protocol.ts +79 -0
  82. package/src/brain-worker/teacher-job.ts +5 -0
  83. package/src/brain-worker/update-job.ts +5 -0
  84. package/src/brain-worker/worker.ts +422 -0
  85. package/src/compaction.ts +1332 -0
  86. package/src/db/config.ts +265 -0
  87. package/src/db/connection.ts +72 -0
  88. package/src/db/features.ts +42 -0
  89. package/src/db/migration.ts +561 -0
  90. package/src/engine.ts +1995 -0
  91. package/src/expansion-auth.ts +351 -0
  92. package/src/expansion-policy.ts +303 -0
  93. package/src/expansion.ts +383 -0
  94. package/src/integrity.ts +600 -0
  95. package/src/large-files.ts +527 -0
  96. package/src/openclaw-bridge.ts +22 -0
  97. package/src/retrieval.ts +357 -0
  98. package/src/store/conversation-store.ts +748 -0
  99. package/src/store/fts5-sanitize.ts +29 -0
  100. package/src/store/full-text-fallback.ts +74 -0
  101. package/src/store/index.ts +29 -0
  102. package/src/store/summary-store.ts +918 -0
  103. package/src/summarize.ts +847 -0
  104. package/src/tools/common.ts +53 -0
  105. package/src/tools/lcm-conversation-scope.ts +76 -0
  106. package/src/tools/lcm-describe-tool.ts +234 -0
  107. package/src/tools/lcm-expand-query-tool.ts +594 -0
  108. package/src/tools/lcm-expand-tool.delegation.ts +556 -0
  109. package/src/tools/lcm-expand-tool.ts +448 -0
  110. package/src/tools/lcm-expansion-recursion-guard.ts +286 -0
  111. package/src/tools/lcm-grep-tool.ts +200 -0
  112. package/src/transcript-repair.ts +301 -0
  113. package/src/types.ts +149 -0
@@ -0,0 +1,334 @@
1
+ {
2
+ "validationRoot": "/Users/cormorantai/.openclaw-ocbphase1",
3
+ "validationHome": "/Users/cormorantai",
4
+ "validationStateDir": "/Users/cormorantai/.openclaw-ocbphase1",
5
+ "fixtureWorkspace": "/Users/cormorantai/.openclaw/workspace-ocbphase1",
6
+ "configPath": "/Users/cormorantai/.openclaw-ocbphase1/openclaw.json",
7
+ "artifactDir": "/Users/cormorantai/openclawbrain/docs/evidence/2026-03-16/4941429588810da5d6f7ef1509f229f83fa08031",
8
+ "gitSha": "4941429588810da5d6f7ef1509f229f83fa08031",
9
+ "diagnostics": {
10
+ "status": {
11
+ "command": "openclaw",
12
+ "args": [
13
+ "status",
14
+ "--json",
15
+ "--timeout",
16
+ "10000"
17
+ ],
18
+ "cwd": "/Users/cormorantai/openclawbrain",
19
+ "exitCode": 0,
20
+ "signal": null,
21
+ "ok": true,
22
+ "stdout": "[plugins] [openclawbrain] Plugin loaded (enabled=true, db=/Users/cormorantai/.openclaw-ocbphase1/lcm.db, threshold=0.75)\n{\n \"runtimeVersion\": \"2026.3.13\",\n \"heartbeat\": {\n \"defaultAgentId\": \"main\",\n \"agents\": [\n {\n \"agentId\": \"main\",\n \"enabled\": true,\n \"every\": \"30m\",\n \"everyMs\": 1800000\n }\n ]\n },\n \"channelSummary\": [],\n \"queuedSystemEvents\": [],\n \"sessions\": {\n \"paths\": [\n \"/Users/cormorantai/.openclaw-ocbphase1/agents/main/sessions/sessions.json\"\n ],\n \"count\": 0,\n \"defaults\": {\n \"model\": \"claude-opus-4-6\",\n \"contextTokens\": 200000\n },\n \"recent\": [],\n \"byAgent\": [\n {\n \"agentId\": \"main\",\n \"path\": \"/Users/cormorantai/.openclaw-ocbphase1/agents/main/sessions/sessions.json\",\n \"count\": 0,\n \"recent\": []\n }\n ]\n },\n \"os\": {\n \"platform\": \"darwin\",\n \"arch\": \"arm64\",\n \"release\": \"25.3.0\",\n \"label\": \"macos 26.3 (arm64)\"\n },\n \"update\": {\n \"root\": \"/Users/cormorantai/opencormorant\",\n \"installKind\": \"git\",\n \"packageManager\": \"pnpm\",\n \"git\": {\n \"root\": \"/Users/cormorantai/opencormorant\",\n \"sha\": \"66e02b296fa7c18c04dc94fe071d916042a30137\",\n \"tag\": null,\n \"branch\": \"main\",\n \"upstream\": \"origin/main\",\n \"dirty\": false,\n \"ahead\": 0,\n \"behind\": 338,\n \"fetchOk\": true\n },\n \"deps\": {\n \"manager\": \"pnpm\",\n \"status\": \"stale\",\n \"lockfilePath\": \"/Users/cormorantai/opencormorant/pnpm-lock.yaml\",\n \"markerPath\": \"/Users/cormorantai/opencormorant/node_modules/.modules.yaml\",\n \"reason\": \"lockfile newer than install marker\"\n },\n \"registry\": {\n \"latestVersion\": \"2026.3.13\"\n }\n },\n \"updateChannel\": \"dev\",\n \"updateChannelSource\": \"git-branch\",\n \"memory\": {\n \"agentId\": \"main\",\n \"backend\": \"builtin\",\n \"files\": 0,\n \"chunks\": 0,\n \"dirty\": true,\n \"workspaceDir\": \"/Users/cormorantai/.openclaw/workspace-ocbphase1\",\n \"dbPath\": \"/Users/cormorantai/.openclaw-ocbphase1/memory/main.sqlite\",\n \"provider\": \"gemini\",\n \"model\": \"gemini-embedding-001\",\n \"requestedProvider\": \"auto\",\n \"sources\": [\n \"memory\"\n ],\n \"extraPaths\": [],\n \"sourceCounts\": [\n {\n \"source\": \"memory\",\n \"files\": 0,\n \"chunks\": 0\n }\n ],\n \"cache\": {\n \"enabled\": true,\n \"entries\": 0\n },\n \"fts\": {\n \"enabled\": true,\n \"available\": true\n },\n \"vector\": {\n \"enabled\": true,\n \"available\": true,\n \"extensionPath\": \"/Users/cormorantai/opencormorant/node_modules/.pnpm/sqlite-vec@0.1.7-alpha.2/node_modules/sqlite-vec-darwin-arm64/vec0.dylib\"\n },\n \"batch\": {\n \"enabled\": false,\n \"failures\": 0,\n \"limit\": 2,\n \"wait\": true,\n \"concurrency\": 2,\n \"pollIntervalMs\": 2000,\n \"timeoutMs\": 3600000\n },\n \"custom\": {\n \"searchMode\": \"hybrid\",\n \"readonlyRecovery\": {\n \"attempts\": 0,\n \"successes\": 0,\n \"failures\": 0\n }\n }\n },\n \"memoryPlugin\": {\n \"enabled\": true,\n \"slot\": \"memory-core\"\n },\n \"gateway\": {\n \"mode\": \"local\",\n \"url\": \"ws://127.0.0.1:19031\",\n \"urlSource\": \"local loopback\",\n \"misconfigured\": false,\n \"reachable\": false,\n \"connectLatencyMs\": null,\n \"self\": null,\n \"error\": \"connect failed: connect ECONNREFUSED 127.0.0.1:19031\",\n \"authWarning\": null\n },\n \"gatewayService\": {\n \"label\": \"LaunchAgent\",\n \"installed\": false,\n \"managedByOpenClaw\": false,\n \"externallyManaged\": false,\n \"loadedText\": \"not loaded\",\n \"runtimeShort\": \"unknown\"\n },\n \"nodeService\": {\n \"label\": \"LaunchAgent\",\n \"installed\": false,\n \"managedByOpenClaw\": false,\n \"externallyManaged\": false,\n \"loadedText\": \"not loaded\",\n \"runtimeShort\": \"unknown\"\n },\n \"agents\": {\n \"defaultId\": \"main\",\n \"agents\": [\n {\n \"id\": \"main\",\n \"workspaceDir\": \"/Users/cormorantai/.openclaw/workspace-ocbphase1\",\n \"bootstrapPending\": false,\n \"sessionsPath\": \"/Users/cormorantai/.openclaw-ocbphase1/agents/main/sessions/sessions.json\",\n \"sessionsCount\": 0,\n \"lastUpdatedAt\": null,\n \"lastActiveAgeMs\": null\n }\n ],\n \"totalSessions\": 0,\n \"bootstrapPendingCount\": 0\n },\n \"securityAudit\": {\n \"ts\": 1773633946602,\n \"summary\": {\n \"critical\": 2,\n \"warn\": 1,\n \"info\": 1\n },\n \"findings\": [\n {\n \"checkId\": \"summary.attack_surface\",\n \"severity\": \"info\",\n \"title\": \"Attack surface summary\",\n \"detail\": \"groups: open=0, allowlist=0\\ntools.elevated: enabled\\nhooks.webhooks: disabled\\nhooks.internal: disabled\\nbrowser control: enabled\\ntrust model: personal assistant (one trusted operator boundary), not hostile multi-tenant on one shared gateway\"\n },\n {\n \"checkId\": \"gateway.trusted_proxies_missing\",\n \"severity\": \"warn\",\n \"title\": \"Reverse proxy headers are not trusted\",\n \"detail\": \"gateway.bind is loopback and gateway.trustedProxies is empty. If you expose the Control UI through a reverse proxy, configure trusted proxies so local-client checks cannot be spoofed.\",\n \"remediation\": \"Set gateway.trustedProxies to your proxy IPs or keep the Control UI local-only.\"\n },\n {\n \"checkId\": \"gateway.loopback_no_auth\",\n \"severity\": \"critical\",\n \"title\": \"Gateway auth missing on loopback\",\n \"detail\": \"gateway.bind is loopback but no gateway auth secret is configured. If the Control UI is exposed through a reverse proxy, unauthenticated access is possible.\",\n \"remediation\": \"Set gateway.auth (token recommended) or keep the Control UI local-only.\"\n },\n {\n \"checkId\": \"browser.control_no_auth\",\n \"severity\": \"critical\",\n \"title\": \"Browser control has no auth\",\n \"detail\": \"Browser control HTTP routes are enabled but no gateway.auth token/password is configured. Any local process (or SSRF to loopback) can call browser control endpoints.\",\n \"remediation\": \"Set gateway.auth.token (recommended) or gateway.auth.password so browser control HTTP routes require authentication. Restarting the gateway will auto-generate gateway.auth.token when browser control is enabled.\"\n }\n ]\n },\n \"secretDiagnostics\": []\n}\n",
23
+ "stderr": "Config warnings:\\n- plugins.entries.ollama: plugin ollama: plugin id mismatch (manifest uses \"ollama\", entry hints \"ollama-provider\")\n- plugins.entries.sglang: plugin sglang: plugin id mismatch (manifest uses \"sglang\", entry hints \"sglang-provider\")\n- plugins.entries.vllm: plugin vllm: plugin id mismatch (manifest uses \"vllm\", entry hints \"vllm-provider\")\n[plugins] plugins.allow is empty; discovered non-bundled plugins may auto-load: openclawbrain (/Users/cormorantai/openclawbrain/index.ts). Set plugins.allow to explicit trusted ids.\n[plugins] [brain] Teacher disabled: No model configured for LCM summarization.\n[plugins] [brain] Embedding model is unset; learned retrieval is disabled until init/configuration is complete\nConfig warnings:\\n- plugins.entries.ollama: plugin ollama: plugin id mismatch (manifest uses \"ollama\", entry hints \"ollama-provider\")\n- plugins.entries.sglang: plugin sglang: plugin id mismatch (manifest uses \"sglang\", entry hints \"sglang-provider\")\n- plugins.entries.vllm: plugin vllm: plugin id mismatch (manifest uses \"vllm\", entry hints \"vllm-provider\")\n",
24
+ "error": null,
25
+ "parsed": {
26
+ "runtimeVersion": "2026.3.13",
27
+ "heartbeat": {
28
+ "defaultAgentId": "main",
29
+ "agents": [
30
+ {
31
+ "agentId": "main",
32
+ "enabled": true,
33
+ "every": "30m",
34
+ "everyMs": 1800000
35
+ }
36
+ ]
37
+ },
38
+ "channelSummary": [],
39
+ "queuedSystemEvents": [],
40
+ "sessions": {
41
+ "paths": [
42
+ "/Users/cormorantai/.openclaw-ocbphase1/agents/main/sessions/sessions.json"
43
+ ],
44
+ "count": 0,
45
+ "defaults": {
46
+ "model": "claude-opus-4-6",
47
+ "contextTokens": 200000
48
+ },
49
+ "recent": [],
50
+ "byAgent": [
51
+ {
52
+ "agentId": "main",
53
+ "path": "/Users/cormorantai/.openclaw-ocbphase1/agents/main/sessions/sessions.json",
54
+ "count": 0,
55
+ "recent": []
56
+ }
57
+ ]
58
+ },
59
+ "os": {
60
+ "platform": "darwin",
61
+ "arch": "arm64",
62
+ "release": "25.3.0",
63
+ "label": "macos 26.3 (arm64)"
64
+ },
65
+ "update": {
66
+ "root": "/Users/cormorantai/opencormorant",
67
+ "installKind": "git",
68
+ "packageManager": "pnpm",
69
+ "git": {
70
+ "root": "/Users/cormorantai/opencormorant",
71
+ "sha": "66e02b296fa7c18c04dc94fe071d916042a30137",
72
+ "tag": null,
73
+ "branch": "main",
74
+ "upstream": "origin/main",
75
+ "dirty": false,
76
+ "ahead": 0,
77
+ "behind": 338,
78
+ "fetchOk": true
79
+ },
80
+ "deps": {
81
+ "manager": "pnpm",
82
+ "status": "stale",
83
+ "lockfilePath": "/Users/cormorantai/opencormorant/pnpm-lock.yaml",
84
+ "markerPath": "/Users/cormorantai/opencormorant/node_modules/.modules.yaml",
85
+ "reason": "lockfile newer than install marker"
86
+ },
87
+ "registry": {
88
+ "latestVersion": "2026.3.13"
89
+ }
90
+ },
91
+ "updateChannel": "dev",
92
+ "updateChannelSource": "git-branch",
93
+ "memory": {
94
+ "agentId": "main",
95
+ "backend": "builtin",
96
+ "files": 0,
97
+ "chunks": 0,
98
+ "dirty": true,
99
+ "workspaceDir": "/Users/cormorantai/.openclaw/workspace-ocbphase1",
100
+ "dbPath": "/Users/cormorantai/.openclaw-ocbphase1/memory/main.sqlite",
101
+ "provider": "gemini",
102
+ "model": "gemini-embedding-001",
103
+ "requestedProvider": "auto",
104
+ "sources": [
105
+ "memory"
106
+ ],
107
+ "extraPaths": [],
108
+ "sourceCounts": [
109
+ {
110
+ "source": "memory",
111
+ "files": 0,
112
+ "chunks": 0
113
+ }
114
+ ],
115
+ "cache": {
116
+ "enabled": true,
117
+ "entries": 0
118
+ },
119
+ "fts": {
120
+ "enabled": true,
121
+ "available": true
122
+ },
123
+ "vector": {
124
+ "enabled": true,
125
+ "available": true,
126
+ "extensionPath": "/Users/cormorantai/opencormorant/node_modules/.pnpm/sqlite-vec@0.1.7-alpha.2/node_modules/sqlite-vec-darwin-arm64/vec0.dylib"
127
+ },
128
+ "batch": {
129
+ "enabled": false,
130
+ "failures": 0,
131
+ "limit": 2,
132
+ "wait": true,
133
+ "concurrency": 2,
134
+ "pollIntervalMs": 2000,
135
+ "timeoutMs": 3600000
136
+ },
137
+ "custom": {
138
+ "searchMode": "hybrid",
139
+ "readonlyRecovery": {
140
+ "attempts": 0,
141
+ "successes": 0,
142
+ "failures": 0
143
+ }
144
+ }
145
+ },
146
+ "memoryPlugin": {
147
+ "enabled": true,
148
+ "slot": "memory-core"
149
+ },
150
+ "gateway": {
151
+ "mode": "local",
152
+ "url": "ws://127.0.0.1:19031",
153
+ "urlSource": "local loopback",
154
+ "misconfigured": false,
155
+ "reachable": false,
156
+ "connectLatencyMs": null,
157
+ "self": null,
158
+ "error": "connect failed: connect ECONNREFUSED 127.0.0.1:19031",
159
+ "authWarning": null
160
+ },
161
+ "gatewayService": {
162
+ "label": "LaunchAgent",
163
+ "installed": false,
164
+ "managedByOpenClaw": false,
165
+ "externallyManaged": false,
166
+ "loadedText": "not loaded",
167
+ "runtimeShort": "unknown"
168
+ },
169
+ "nodeService": {
170
+ "label": "LaunchAgent",
171
+ "installed": false,
172
+ "managedByOpenClaw": false,
173
+ "externallyManaged": false,
174
+ "loadedText": "not loaded",
175
+ "runtimeShort": "unknown"
176
+ },
177
+ "agents": {
178
+ "defaultId": "main",
179
+ "agents": [
180
+ {
181
+ "id": "main",
182
+ "workspaceDir": "/Users/cormorantai/.openclaw/workspace-ocbphase1",
183
+ "bootstrapPending": false,
184
+ "sessionsPath": "/Users/cormorantai/.openclaw-ocbphase1/agents/main/sessions/sessions.json",
185
+ "sessionsCount": 0,
186
+ "lastUpdatedAt": null,
187
+ "lastActiveAgeMs": null
188
+ }
189
+ ],
190
+ "totalSessions": 0,
191
+ "bootstrapPendingCount": 0
192
+ },
193
+ "securityAudit": {
194
+ "ts": 1773633946602,
195
+ "summary": {
196
+ "critical": 2,
197
+ "warn": 1,
198
+ "info": 1
199
+ },
200
+ "findings": [
201
+ {
202
+ "checkId": "summary.attack_surface",
203
+ "severity": "info",
204
+ "title": "Attack surface summary",
205
+ "detail": "groups: open=0, allowlist=0\ntools.elevated: enabled\nhooks.webhooks: disabled\nhooks.internal: disabled\nbrowser control: enabled\ntrust model: personal assistant (one trusted operator boundary), not hostile multi-tenant on one shared gateway"
206
+ },
207
+ {
208
+ "checkId": "gateway.trusted_proxies_missing",
209
+ "severity": "warn",
210
+ "title": "Reverse proxy headers are not trusted",
211
+ "detail": "gateway.bind is loopback and gateway.trustedProxies is empty. If you expose the Control UI through a reverse proxy, configure trusted proxies so local-client checks cannot be spoofed.",
212
+ "remediation": "Set gateway.trustedProxies to your proxy IPs or keep the Control UI local-only."
213
+ },
214
+ {
215
+ "checkId": "gateway.loopback_no_auth",
216
+ "severity": "critical",
217
+ "title": "Gateway auth missing on loopback",
218
+ "detail": "gateway.bind is loopback but no gateway auth secret is configured. If the Control UI is exposed through a reverse proxy, unauthenticated access is possible.",
219
+ "remediation": "Set gateway.auth (token recommended) or keep the Control UI local-only."
220
+ },
221
+ {
222
+ "checkId": "browser.control_no_auth",
223
+ "severity": "critical",
224
+ "title": "Browser control has no auth",
225
+ "detail": "Browser control HTTP routes are enabled but no gateway.auth token/password is configured. Any local process (or SSRF to loopback) can call browser control endpoints.",
226
+ "remediation": "Set gateway.auth.token (recommended) or gateway.auth.password so browser control HTTP routes require authentication. Restarting the gateway will auto-generate gateway.auth.token when browser control is enabled."
227
+ }
228
+ ]
229
+ },
230
+ "secretDiagnostics": []
231
+ }
232
+ },
233
+ "statusAll": {
234
+ "command": "openclaw",
235
+ "args": [
236
+ "status",
237
+ "--all",
238
+ "--timeout",
239
+ "10000"
240
+ ],
241
+ "cwd": "/Users/cormorantai/openclawbrain",
242
+ "exitCode": 0,
243
+ "signal": null,
244
+ "ok": true,
245
+ "stdout": "[plugins] [openclawbrain] Plugin loaded (enabled=true, db=/Users/cormorantai/.openclaw-ocbphase1/lcm.db, threshold=0.75)\nOpenClaw status --all\n\nOverview\n┌─────────────────┬────────────────────────────────────────────────────────────────────────────────────────────────────┐\n│ Item │ Value │\n├─────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────┤\n│ Version │ 2026.3.13 │\n│ OS │ macos 26.3 (arm64) │\n│ Node │ 22.22.0 │\n│ Config │ ~/.openclaw-ocbphase1/openclaw.json │\n│ Dashboard │ http://127.0.0.1:19031/ │\n│ Tailscale │ off · Running · cormorantais-mac-mini.tail499c70.ts.net │\n│ Channel │ dev (main) │\n│ Git │ main · @ 66e02b29 │\n│ Update │ git main · ↔ origin/main · behind 338 · npm latest 2026.3.13 · deps stale │\n│ Gateway │ local · ws://127.0.0.1:19031 (local loopback) · unreachable (connect failed: connect ECONNREFUSED │\n│ │ 127.0.0.1:19031) │\n│ Security │ Run: openclaw security audit --deep │\n│ Gateway self │ unknown │\n│ Gateway service │ LaunchAgent not installed │\n│ Node service │ LaunchAgent not installed │\n│ Agents │ 1 total · 0 bootstrapping · 0 active · 0 sessions │\n└─────────────────┴────────────────────────────────────────────────────────────────────────────────────────────────────┘\n\nChannels\n┌──────────┬─────────┬────────┬────────────────────────────────────────────────────────────────────────────────────────┐\n│ Channel │ Enabled │ State │ Detail │\n├──────────┼─────────┼────────┼────────────────────────────────────────────────────────────────────────────────────────┤\n└──────────┴─────────┴────────┴────────────────────────────────────────────────────────────────────────────────────────┘\n\nAgents\n┌────────────┬────────────────┬──────────┬──────────┬──────────────────────────────────────────────────────────────────┐\n│ Agent │ Bootstrap file │ Sessions │ Active │ Store │\n├────────────┼────────────────┼──────────┼──────────┼──────────────────────────────────────────────────────────────────┤\n│ main │ ABSENT │ 0 │ unknown │ ~/.openclaw-ocbphase1/agents/main/sessions/sessions.json │\n└────────────┴────────────────┴──────────┴──────────┴──────────────────────────────────────────────────────────────────┘\n\nDiagnosis (read-only)\n\nGateway connection details:\n Gateway target: ws://127.0.0.1:19031\n Source: local loopback\n Config: /Users/cormorantai/.openclaw-ocbphase1/openclaw.json\n Bind: loopback\n\n✓ Config: /Users/cormorantai/.openclaw-ocbphase1/openclaw.json\n✓ Restart sentinel: none\n✓ Port 19031\n✓ Tailscale: off · Running · cormorantais-mac-mini.tail499c70.ts.net\n ips: 100.73.247.26, fd7a:115c:a1e0::e932:f71a\n✓ Skills: 9 eligible · 0 missing · /Users/cormorantai/.openclaw/workspace-ocbphase1\n! Channel issues skipped (gateway unreachable)\n\nGateway health:\n connect failed: connect ECONNREFUSED 127.0.0.1:19031\n\nPasteable debug report. Auth tokens redacted.\nTroubleshooting: https://docs.openclaw.ai/troubleshooting\n\n",
246
+ "stderr": "Config warnings:\\n- plugins.entries.ollama: plugin ollama: plugin id mismatch (manifest uses \"ollama\", entry hints \"ollama-provider\")\n- plugins.entries.sglang: plugin sglang: plugin id mismatch (manifest uses \"sglang\", entry hints \"sglang-provider\")\n- plugins.entries.vllm: plugin vllm: plugin id mismatch (manifest uses \"vllm\", entry hints \"vllm-provider\")\n[plugins] plugins.allow is empty; discovered non-bundled plugins may auto-load: openclawbrain (/Users/cormorantai/openclawbrain/index.ts). Set plugins.allow to explicit trusted ids.\n[plugins] [brain] Teacher disabled: No model configured for LCM summarization.\n[plugins] [brain] Embedding model is unset; learned retrieval is disabled until init/configuration is complete\nConfig warnings:\\n- plugins.entries.ollama: plugin ollama: plugin id mismatch (manifest uses \"ollama\", entry hints \"ollama-provider\")\n- plugins.entries.sglang: plugin sglang: plugin id mismatch (manifest uses \"sglang\", entry hints \"sglang-provider\")\n- plugins.entries.vllm: plugin vllm: plugin id mismatch (manifest uses \"vllm\", entry hints \"vllm-provider\")\n",
247
+ "error": null
248
+ },
249
+ "gatewayProbe": {
250
+ "command": "openclaw",
251
+ "args": [
252
+ "gateway",
253
+ "probe"
254
+ ],
255
+ "cwd": "/Users/cormorantai/openclawbrain",
256
+ "exitCode": 1,
257
+ "signal": null,
258
+ "ok": false,
259
+ "stdout": "│\n◇ Config warnings ────────────────────────────────────────────────────────╮\n│ │\n│ - plugins.entries.ollama: plugin ollama: plugin id mismatch (manifest │\n│ uses \"ollama\", entry hints \"ollama-provider\") │\n│ - plugins.entries.sglang: plugin sglang: plugin id mismatch (manifest │\n│ uses \"sglang\", entry hints \"sglang-provider\") │\n│ - plugins.entries.vllm: plugin vllm: plugin id mismatch (manifest uses │\n│ \"vllm\", entry hints \"vllm-provider\") │\n│ │\n├──────────────────────────────────────────────────────────────────────────╯\n│\n◇ Doctor changes ──────────────────────────────╮\n│ │\n│ Telegram configured, enabled automatically. │\n│ │\n├───────────────────────────────────────────────╯\n│\n◇ Doctor ──────────────────────────────────────────────╮\n│ │\n│ Run \"openclaw doctor --fix\" to apply these changes. │\n│ │\n├───────────────────────────────────────────────────────╯\nGateway Status\nReachable: no\nProbe budget: 3000ms\n\nDiscovery (this machine)\nFound 4 gateway(s) via Bonjour (local.)\n\nTargets\nLocal loopback ws://127.0.0.1:19031\n Connect: failed - connect failed: connect ECONNREFUSED 127.0.0.1:19031\n\n",
260
+ "stderr": "Config warnings:\\n- plugins.entries.ollama: plugin ollama: plugin id mismatch (manifest uses \"ollama\", entry hints \"ollama-provider\")\n- plugins.entries.sglang: plugin sglang: plugin id mismatch (manifest uses \"sglang\", entry hints \"sglang-provider\")\n- plugins.entries.vllm: plugin vllm: plugin id mismatch (manifest uses \"vllm\", entry hints \"vllm-provider\")\nConfig warnings:\\n- plugins.entries.ollama: plugin ollama: plugin id mismatch (manifest uses \"ollama\", entry hints \"ollama-provider\")\n- plugins.entries.sglang: plugin sglang: plugin id mismatch (manifest uses \"sglang\", entry hints \"sglang-provider\")\n- plugins.entries.vllm: plugin vllm: plugin id mismatch (manifest uses \"vllm\", entry hints \"vllm-provider\")\n",
261
+ "error": null
262
+ },
263
+ "gatewayStatus": {
264
+ "command": "openclaw",
265
+ "args": [
266
+ "gateway",
267
+ "status"
268
+ ],
269
+ "cwd": "/Users/cormorantai/openclawbrain",
270
+ "exitCode": 0,
271
+ "signal": null,
272
+ "ok": true,
273
+ "stdout": "│\n◇ Config warnings ────────────────────────────────────────────────────────╮\n│ │\n│ - plugins.entries.ollama: plugin ollama: plugin id mismatch (manifest │\n│ uses \"ollama\", entry hints \"ollama-provider\") │\n│ - plugins.entries.sglang: plugin sglang: plugin id mismatch (manifest │\n│ uses \"sglang\", entry hints \"sglang-provider\") │\n│ - plugins.entries.vllm: plugin vllm: plugin id mismatch (manifest uses │\n│ \"vllm\", entry hints \"vllm-provider\") │\n│ │\n├──────────────────────────────────────────────────────────────────────────╯\n│\n◇ Doctor changes ──────────────────────────────╮\n│ │\n│ Telegram configured, enabled automatically. │\n│ │\n├───────────────────────────────────────────────╯\n│\n◇ Doctor ──────────────────────────────────────────────╮\n│ │\n│ Run \"openclaw doctor --fix\" to apply these changes. │\n│ │\n├───────────────────────────────────────────────────────╯\nService: LaunchAgent (not loaded)\nFile logs: /tmp/openclaw/openclaw-2026-03-15.log\n\nConfig (cli): ~/.openclaw-ocbphase1/openclaw.json\nConfig (service): ~/.openclaw-ocbphase1/openclaw.json\n\nGateway: bind=loopback (127.0.0.1), port=19031 (env/config)\nProbe target: ws://127.0.0.1:19031\nDashboard: http://127.0.0.1:19031/\nProbe note: Loopback-only gateway; only local clients can connect.\n\nRuntime: unknown (Bad request.\nCould not find service \"ai.openclaw.gateway\" in domain for user gui: 501)\n\n\n\nTroubles: run openclaw status\nTroubleshooting: https://docs.openclaw.ai/troubleshooting\n",
274
+ "stderr": "Config warnings:\\n- plugins.entries.ollama: plugin ollama: plugin id mismatch (manifest uses \"ollama\", entry hints \"ollama-provider\")\n- plugins.entries.sglang: plugin sglang: plugin id mismatch (manifest uses \"sglang\", entry hints \"sglang-provider\")\n- plugins.entries.vllm: plugin vllm: plugin id mismatch (manifest uses \"vllm\", entry hints \"vllm-provider\")\nConfig warnings:\\n- plugins.entries.ollama: plugin ollama: plugin id mismatch (manifest uses \"ollama\", entry hints \"ollama-provider\")\n- plugins.entries.sglang: plugin sglang: plugin id mismatch (manifest uses \"sglang\", entry hints \"sglang-provider\")\n- plugins.entries.vllm: plugin vllm: plugin id mismatch (manifest uses \"vllm\", entry hints \"vllm-provider\")\nConfig warnings:\\n- plugins.entries.ollama: plugin ollama: plugin id mismatch (manifest uses \"ollama\", entry hints \"ollama-provider\")\n- plugins.entries.sglang: plugin sglang: plugin id mismatch (manifest uses \"sglang\", entry hints \"sglang-provider\")\n- plugins.entries.vllm: plugin vllm: plugin id mismatch (manifest uses \"vllm\", entry hints \"vllm-provider\")\nConfig warnings:\\n- plugins.entries.ollama: plugin ollama: plugin id mismatch (manifest uses \"ollama\", entry hints \"ollama-provider\")\n- plugins.entries.sglang: plugin sglang: plugin id mismatch (manifest uses \"sglang\", entry hints \"sglang-provider\")\n- plugins.entries.vllm: plugin vllm: plugin id mismatch (manifest uses \"vllm\", entry hints \"vllm-provider\")\nService config looks out of date or non-standard.\nService config issue: Gateway service PATH is not set; the daemon should use a minimal PATH.\nRecommendation: run \"openclaw doctor\" (or \"openclaw doctor --repair\").\nRPC probe: failed\nRPC target: ws://127.0.0.1:19031\n gateway url override requires explicit credentials\n Fix: pass --token or --password (or gatewayToken in tools).\n Config: /Users/cormorantai/.openclaw-ocbphase1/openclaw.json\nService unit not found.\nService not installed. Run: openclaw gateway install\nFile logs: /tmp/openclaw/openclaw-2026-03-15.log\nOther gateway-like services detected (best effort):\n- com.openclawbrain.daemon.activation.0ec88212fa7d (user, plist: /Users/cormorantai/Library/LaunchAgents/com.openclawbrain.daemon.activation.0ec88212fa7d.plist)\n- com.openclawbrain.daemon.activation.546e84bf06ac (user, plist: /Users/cormorantai/Library/LaunchAgents/com.openclawbrain.daemon.activation.546e84bf06ac.plist)\n- com.openclawbrain.daemon.activation.b3eeb450ca08 (user, plist: /Users/cormorantai/Library/LaunchAgents/com.openclawbrain.daemon.activation.b3eeb450ca08.plist)\nCleanup hint: launchctl bootout gui/$UID/ai.openclaw.gateway\nCleanup hint: rm ~/Library/LaunchAgents/ai.openclaw.gateway.plist\nRecommendation: run a single gateway per machine for most setups. One gateway supports multiple agents (see docs: /gateway#multiple-gateways-same-host).\nIf you need multiple gateways (e.g., a rescue bot on the same host), isolate ports + config/state (see docs: /gateway#multiple-gateways-same-host).\n",
275
+ "error": null
276
+ },
277
+ "doctor": {
278
+ "command": "openclaw",
279
+ "args": [
280
+ "doctor",
281
+ "--non-interactive"
282
+ ],
283
+ "cwd": "/Users/cormorantai/openclawbrain",
284
+ "exitCode": 0,
285
+ "signal": null,
286
+ "ok": true,
287
+ "stdout": "▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄\n██░▄▄▄░██░▄▄░██░▄▄▄██░▀██░██░▄▄▀██░████░▄▄▀██░███░██\n██░███░██░▀▀░██░▄▄▄██░█░█░██░█████░████░▀▀░██░█░█░██\n██░▀▀▀░██░█████░▀▀▀██░██▄░██░▀▀▄██░▀▀░█░██░██▄▀▄▀▄██\n▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀\n 🦞 OPENCLAW 🦞 \n \n┌ OpenClaw doctor\n│\n◇ Install ─────────────────────────────────────────────────────────╮\n│ │\n│ - package-lock.json present in a pnpm workspace. If you ran npm │\n│ install, remove it and reinstall with pnpm. │\n│ │\n├───────────────────────────────────────────────────────────────────╯\n│\n◇ Config warnings ────────────────────────────────────────────────────────╮\n│ │\n│ - plugins.entries.ollama: plugin ollama: plugin id mismatch (manifest │\n│ uses \"ollama\", entry hints \"ollama-provider\") │\n│ - plugins.entries.sglang: plugin sglang: plugin id mismatch (manifest │\n│ uses \"sglang\", entry hints \"sglang-provider\") │\n│ - plugins.entries.vllm: plugin vllm: plugin id mismatch (manifest uses │\n│ \"vllm\", entry hints \"vllm-provider\") │\n│ │\n├──────────────────────────────────────────────────────────────────────────╯\n│\n◇ Doctor changes ──────────────────────────────╮\n│ │\n│ Telegram configured, enabled automatically. │\n│ │\n├───────────────────────────────────────────────╯\n│\n◇ Doctor ──────────────────────────────────────────────╮\n│ │\n│ Run \"openclaw doctor --fix\" to apply these changes. │\n│ │\n├───────────────────────────────────────────────────────╯\n│\n◇ Gateway auth ──────────────────────────────────────────────────╮\n│ │\n│ Gateway auth is off or missing a token. Token auth is now the │\n│ recommended default (including loopback). │\n│ │\n├─────────────────────────────────────────────────────────────────╯\n│\n◇ State integrity ────────────────────────────────────────────────────────╮\n│ │\n│ - OAuth dir not present (~/.openclaw-ocbphase1/credentials). Skipping │\n│ create because no WhatsApp/pairing channel config is active. │\n│ - CRITICAL: Session store dir missing │\n│ (~/.openclaw-ocbphase1/agents/main/sessions). │\n│ - Multiple state directories detected. This can split session history. │\n│ - ~/.openclaw │\n│ Active state dir: ~/.openclaw-ocbphase1 │\n│ │\n├──────────────────────────────────────────────────────────────────────────╯\n│\n◇ Other gateway-like services detected ───────────────────────────────────────╮\n│ │\n│ - com.openclawbrain.daemon.activation.0ec88212fa7d (user, plist: │\n│ /Users/cormorantai/Library/LaunchAgents/com.openclawbrain.daemon.activat │\n│ ion.0ec88212fa7d.plist) │\n│ - com.openclawbrain.daemon.activation.546e84bf06ac (user, plist: │\n│ /Users/cormorantai/Library/LaunchAgents/com.openclawbrain.daemon.activat │\n│ ion.546e84bf06ac.plist) │\n│ - com.openclawbrain.daemon.activation.b3eeb450ca08 (user, plist: │\n│ /Users/cormorantai/Library/LaunchAgents/com.openclawbrain.daemon.activat │\n│ ion.b3eeb450ca08.plist) │\n│ │\n├──────────────────────────────────────────────────────────────────────────────╯\n│\n◇ Cleanup hints ─────────────────────────────────────────╮\n│ │\n│ - launchctl bootout gui/$UID/ai.openclaw.gateway │\n│ - rm ~/Library/LaunchAgents/ai.openclaw.gateway.plist │\n│ │\n├─────────────────────────────────────────────────────────╯\n│\n◇ Gateway recommendation ───────────────────────────────────────────────╮\n│ │\n│ Recommendation: run a single gateway per machine for most setups. │\n│ One gateway supports multiple agents. │\n│ If you need multiple gateways (e.g., a rescue bot on the same host), │\n│ isolate ports + config/state (see docs: │\n│ /gateway#multiple-gateways-same-host). │\n│ │\n├────────────────────────────────────────────────────────────────────────╯\n│\n◇ Security ─────────────────────────────────╮\n│ │\n│ - No channel security warnings detected. │\n│ - Run: openclaw security audit --deep │\n│ │\n├────────────────────────────────────────────╯\n│\n◇ Skills status ────────────╮\n│ │\n│ Eligible: 9 │\n│ Missing requirements: 43 │\n│ Blocked by allowlist: 0 │\n│ │\n├────────────────────────────╯\n│\n◇ Plugins ──────╮\n│ │\n│ Loaded: 5 │\n│ Disabled: 37 │\n│ Errors: 0 │\n│ │\n├────────────────╯\n│\n◇ Plugin diagnostics ─────────────────────────────────────────────────────╮\n│ │\n│ - WARN ollama: plugin id mismatch (manifest uses \"ollama\", entry hints │\n│ \"ollama-provider\") │\n│ (/Users/cormorantai/opencormorant/extensions/ollama/index.ts) │\n│ - WARN sglang: plugin id mismatch (manifest uses \"sglang\", entry hints │\n│ \"sglang-provider\") │\n│ (/Users/cormorantai/opencormorant/extensions/sglang/index.ts) │\n│ - WARN vllm: plugin id mismatch (manifest uses \"vllm\", entry hints │\n│ \"vllm-provider\") │\n│ (/Users/cormorantai/opencormorant/extensions/vllm/index.ts) │\n│ │\n├──────────────────────────────────────────────────────────────────────────╯\n│\n◇ Gateway ──────────────╮\n│ │\n│ Gateway not running. │\n│ │\n├────────────────────────╯\n│\n◇ Gateway connection ───────────────────────────────────────────╮\n│ │\n│ Gateway target: ws://127.0.0.1:19031 │\n│ Source: local loopback │\n│ Config: /Users/cormorantai/.openclaw-ocbphase1/openclaw.json │\n│ Bind: loopback │\n│ │\n├────────────────────────────────────────────────────────────────╯\n│\n◇ Gateway ────────────────────────╮\n│ │\n│ Gateway service not installed. │\n│ │\n├──────────────────────────────────╯\nRun \"openclaw doctor --fix\" to apply changes.\n│\n└ Doctor complete.\n\n",
288
+ "stderr": "Config warnings:\\n- plugins.entries.ollama: plugin ollama: plugin id mismatch (manifest uses \"ollama\", entry hints \"ollama-provider\")\n- plugins.entries.sglang: plugin sglang: plugin id mismatch (manifest uses \"sglang\", entry hints \"sglang-provider\")\n- plugins.entries.vllm: plugin vllm: plugin id mismatch (manifest uses \"vllm\", entry hints \"vllm-provider\")\n",
289
+ "error": null
290
+ },
291
+ "channelsStatus": {
292
+ "command": "openclaw",
293
+ "args": [
294
+ "channels",
295
+ "status",
296
+ "--probe"
297
+ ],
298
+ "cwd": "/Users/cormorantai/openclawbrain",
299
+ "exitCode": 0,
300
+ "signal": null,
301
+ "ok": true,
302
+ "stdout": "│\n◇ Config warnings ────────────────────────────────────────────────────────╮\n│ │\n│ - plugins.entries.ollama: plugin ollama: plugin id mismatch (manifest │\n│ uses \"ollama\", entry hints \"ollama-provider\") │\n│ - plugins.entries.sglang: plugin sglang: plugin id mismatch (manifest │\n│ uses \"sglang\", entry hints \"sglang-provider\") │\n│ - plugins.entries.vllm: plugin vllm: plugin id mismatch (manifest uses │\n│ \"vllm\", entry hints \"vllm-provider\") │\n│ │\n├──────────────────────────────────────────────────────────────────────────╯\n│\n◇ Doctor changes ──────────────────────────────╮\n│ │\n│ Telegram configured, enabled automatically. │\n│ │\n├───────────────────────────────────────────────╯\n│\n◇ Doctor ──────────────────────────────────────────────╮\n│ │\n│ Run \"openclaw doctor --fix\" to apply these changes. │\n│ │\n├───────────────────────────────────────────────────────╯\n[plugins] [openclawbrain] Plugin loaded (enabled=true, db=/Users/cormorantai/.openclaw-ocbphase1/lcm.db, threshold=0.75)\nChecking channel status (probe)…\nGateway not reachable; showing config-only status.\nConfig: /Users/cormorantai/.openclaw-ocbphase1/openclaw.json\nMode: local\n\n\nTip: https://docs.openclaw.ai/cli#status adds gateway health probes to status output (requires a reachable gateway).\n",
303
+ "stderr": "Config warnings:\\n- plugins.entries.ollama: plugin ollama: plugin id mismatch (manifest uses \"ollama\", entry hints \"ollama-provider\")\n- plugins.entries.sglang: plugin sglang: plugin id mismatch (manifest uses \"sglang\", entry hints \"sglang-provider\")\n- plugins.entries.vllm: plugin vllm: plugin id mismatch (manifest uses \"vllm\", entry hints \"vllm-provider\")\nConfig warnings:\\n- plugins.entries.ollama: plugin ollama: plugin id mismatch (manifest uses \"ollama\", entry hints \"ollama-provider\")\n- plugins.entries.sglang: plugin sglang: plugin id mismatch (manifest uses \"sglang\", entry hints \"sglang-provider\")\n- plugins.entries.vllm: plugin vllm: plugin id mismatch (manifest uses \"vllm\", entry hints \"vllm-provider\")\n[plugins] plugins.allow is empty; discovered non-bundled plugins may auto-load: openclawbrain (/Users/cormorantai/openclawbrain/index.ts). Set plugins.allow to explicit trusted ids.\n[plugins] [brain] Teacher disabled: No model configured for LCM summarization.\n[plugins] [brain] Embedding model is unset; learned retrieval is disabled until init/configuration is complete\nConfig warnings:\\n- plugins.entries.ollama: plugin ollama: plugin id mismatch (manifest uses \"ollama\", entry hints \"ollama-provider\")\n- plugins.entries.sglang: plugin sglang: plugin id mismatch (manifest uses \"sglang\", entry hints \"sglang-provider\")\n- plugins.entries.vllm: plugin vllm: plugin id mismatch (manifest uses \"vllm\", entry hints \"vllm-provider\")\nGateway not reachable: Error: gateway closed (1006 abnormal closure (no close frame)): no close reason\nGateway target: ws://127.0.0.1:19031\nSource: local loopback\nConfig: /Users/cormorantai/.openclaw-ocbphase1/openclaw.json\nBind: loopback\n",
304
+ "error": null
305
+ }
306
+ },
307
+ "trace": null,
308
+ "setup": {
309
+ "linkedPlugin": "/Users/cormorantai/openclawbrain",
310
+ "lcmDbPath": "/Users/cormorantai/.openclaw-ocbphase1/lcm.db",
311
+ "brainRoot": "/Users/cormorantai/.openclaw-ocbphase1/openclawbrain",
312
+ "contextEngineSlot": "openclawbrain",
313
+ "validationMode": "sterile-lane",
314
+ "validationLaneName": "ocbphase1",
315
+ "validationGatewayPort": 19031,
316
+ "validationModel": null,
317
+ "workerMode": "child",
318
+ "embeddingProvider": "openai",
319
+ "embeddingModel": null,
320
+ "agentTimeoutMs": 120000
321
+ },
322
+ "init": null,
323
+ "doctor": null,
324
+ "status": null,
325
+ "runtime": null,
326
+ "agent": {},
327
+ "assertions": {},
328
+ "skipped": [
329
+ {
330
+ "phase": "init-and-agent-checks",
331
+ "reason": "--setup-only was requested."
332
+ }
333
+ ]
334
+ }
@@ -0,0 +1,25 @@
1
+
2
+ ◇ Config ───────────────────────────────────────────────────╮
3
+ │ │
4
+ │ Config invalid; doctor will run with best-effort config. │
5
+ │ │
6
+ ├────────────────────────────────────────────────────────────╯
7
+
8
+ ◇ Doctor changes ──────────────────────────────╮
9
+ │ │
10
+ │ Telegram configured, enabled automatically. │
11
+ │ │
12
+ ├───────────────────────────────────────────────╯
13
+
14
+ ◇ Unknown config keys ───────────╮
15
+ │ │
16
+ │ - plugins.slots.contextEngine │
17
+ │ │
18
+ ├─────────────────────────────────╯
19
+
20
+ ◇ Doctor ──────────────────────────────────────────────╮
21
+ │ │
22
+ │ Run "openclaw doctor --fix" to apply these changes. │
23
+ │ Run "openclaw doctor --fix" to remove these keys. │
24
+ │ │
25
+ ├───────────────────────────────────────────────────────╯
@@ -0,0 +1,91 @@
1
+ {
2
+ "gitSha": "7f8dbcb27e741abdeefd5656c210639d0acdd440",
3
+ "artifactDir": "/Users/cormorantai/openclawbrain/docs/evidence/2026-03-16/7f8dbcb27e741abdeefd5656c210639d0acdd440",
4
+ "validationMode": "sterile-lane",
5
+ "validationLaneName": "ocbphase1",
6
+ "validationRoot": "/Users/cormorantai/.openclaw-ocbphase1-short-static/preflight",
7
+ "validationHome": "/Users/cormorantai",
8
+ "validationStateDir": "/Users/cormorantai/.openclaw-ocbphase1-short-static/preflight",
9
+ "fixtureWorkspace": "/Users/cormorantai/.openclaw/workspace-ocbphase1",
10
+ "configPath": "/Users/cormorantai/.openclaw-ocbphase1-short-static/preflight/openclaw.json",
11
+ "lcmDbPath": "/Users/cormorantai/.openclaw-ocbphase1-short-static/preflight/lcm.db",
12
+ "brainRoot": "/Users/cormorantai/.openclaw-ocbphase1-short-static/preflight/openclawbrain",
13
+ "validationRecordFile": "/Users/cormorantai/.openclaw-ocbphase1-short-static/preflight/validation-records/validation-assemble.jsonl",
14
+ "validationGatewayPort": 19130,
15
+ "config": {
16
+ "commands": {
17
+ "native": "auto",
18
+ "nativeSkills": "auto"
19
+ },
20
+ "plugins": {
21
+ "load": {
22
+ "paths": [
23
+ "/Users/cormorantai/openclawbrain"
24
+ ]
25
+ },
26
+ "entries": {
27
+ "openclawbrain": {
28
+ "enabled": true,
29
+ "config": {
30
+ "enabled": true
31
+ }
32
+ }
33
+ },
34
+ "installs": {
35
+ "openclawbrain": {
36
+ "source": "path",
37
+ "sourcePath": "/Users/cormorantai/openclawbrain",
38
+ "installPath": "/Users/cormorantai/openclawbrain",
39
+ "version": "0.3.0",
40
+ "installedAt": "2026-03-16T04:41:04.149Z"
41
+ }
42
+ },
43
+ "slots": {
44
+ "contextEngine": "openclawbrain"
45
+ }
46
+ },
47
+ "meta": {
48
+ "lastTouchedVersion": "2026.2.17",
49
+ "lastTouchedAt": "2026-03-16T04:41:04.496Z"
50
+ },
51
+ "gateway": {
52
+ "mode": "local",
53
+ "port": 19130
54
+ },
55
+ "agents": {
56
+ "defaults": {
57
+ "workspace": "/Users/cormorantai/.openclaw/workspace-ocbphase1",
58
+ "model": {
59
+ "primary": "ollama/qwen2.5:7b-instruct"
60
+ }
61
+ }
62
+ },
63
+ "models": {
64
+ "providers": {
65
+ "ollama": {
66
+ "api": "ollama",
67
+ "baseUrl": "http://127.0.0.1:11434",
68
+ "apiKey": "ollama-local",
69
+ "models": [
70
+ {
71
+ "id": "qwen2.5:7b-instruct",
72
+ "name": "qwen2.5:7b-instruct",
73
+ "reasoning": false,
74
+ "input": [
75
+ "text"
76
+ ],
77
+ "cost": {
78
+ "input": 0,
79
+ "output": 0,
80
+ "cacheRead": 0,
81
+ "cacheWrite": 0
82
+ },
83
+ "contextWindow": 262144,
84
+ "maxTokens": 16384
85
+ }
86
+ ]
87
+ }
88
+ }
89
+ }
90
+ }
91
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "command": "openclaw",
3
+ "args": [
4
+ "doctor",
5
+ "--non-interactive"
6
+ ],
7
+ "cwd": "/Users/cormorantai/openclawbrain",
8
+ "exitCode": 0,
9
+ "signal": null,
10
+ "ok": true,
11
+ "stdout": "▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄\n██░▄▄▄░██░▄▄░██░▄▄▄██░▀██░██░▄▄▀██░████░▄▄▀██░███░██\n██░███░██░▀▀░██░▄▄▄██░█░█░██░█████░████░▀▀░██░█░█░██\n██░▀▀▀░██░█████░▀▀▀██░██▄░██░▀▀▄██░▀▀░█░██░██▄▀▄▀▄██\n▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀\n 🦞 OPENCLAW 🦞 \n \n┌ OpenClaw doctor\n│\n◇ Config ───────────────────────────────────────────────────╮\n│ │\n│ Config invalid; doctor will run with best-effort config. │\n│ │\n├────────────────────────────────────────────────────────────╯\n│\n◇ Doctor changes ──────────────────────────────╮\n│ │\n│ Telegram configured, enabled automatically. │\n│ │\n├───────────────────────────────────────────────╯\n│\n◇ Unknown config keys ───────────╮\n│ │\n│ - plugins.slots.contextEngine │\n│ │\n├─────────────────────────────────╯\n│\n◇ Doctor ──────────────────────────────────────────────╮\n│ │\n│ Run \"openclaw doctor --fix\" to apply these changes. │\n│ Run \"openclaw doctor --fix\" to remove these keys. │\n│ │\n├───────────────────────────────────────────────────────╯\n│\n◇ Gateway auth ──────────────────────────────────────────────────╮\n│ │\n│ Gateway auth is off or missing a token. Token auth is now the │\n│ recommended default (including loopback). │\n│ │\n├─────────────────────────────────────────────────────────────────╯\n│\n◇ State integrity ────────────────────────────────────────────────────────╮\n│ │\n│ - CRITICAL: Session store dir missing │\n│ (~/.openclaw-ocbphase1-short-static/preflight/agents/main/sessions). │\n│ - CRITICAL: OAuth dir missing │\n│ (~/.openclaw-ocbphase1-short-static/preflight/credentials). │\n│ - Multiple state directories detected. This can split session history. │\n│ - ~/.openclaw │\n│ Active state dir: ~/.openclaw-ocbphase1-short-static/preflight │\n│ │\n├──────────────────────────────────────────────────────────────────────────╯\n│\n◇ Other gateway-like services detected ───────────────────────────────────────╮\n│ │\n│ - com.openclawbrain.daemon.activation.0ec88212fa7d (user, plist: │\n│ /Users/cormorantai/Library/LaunchAgents/com.openclawbrain.daemon.activat │\n│ ion.0ec88212fa7d.plist) │\n│ - com.openclawbrain.daemon.activation.546e84bf06ac (user, plist: │\n│ /Users/cormorantai/Library/LaunchAgents/com.openclawbrain.daemon.activat │\n│ ion.546e84bf06ac.plist) │\n│ - com.openclawbrain.daemon.activation.b3eeb450ca08 (user, plist: │\n│ /Users/cormorantai/Library/LaunchAgents/com.openclawbrain.daemon.activat │\n│ ion.b3eeb450ca08.plist) │\n│ │\n├──────────────────────────────────────────────────────────────────────────────╯\n│\n◇ Cleanup hints ─────────────────────────────────────────╮\n│ │\n│ - launchctl bootout gui/$UID/ai.openclaw.gateway │\n│ - rm ~/Library/LaunchAgents/ai.openclaw.gateway.plist │\n│ │\n├─────────────────────────────────────────────────────────╯\n│\n◇ Gateway recommendation ───────────────────────────────────────────────╮\n│ │\n│ Recommendation: run a single gateway per machine for most setups. │\n│ One gateway supports multiple agents. │\n│ If you need multiple gateways (e.g., a rescue bot on the same host), │\n│ isolate ports + config/state (see docs: │\n│ /gateway#multiple-gateways-same-host). │\n│ │\n├────────────────────────────────────────────────────────────────────────╯\n│\n◇ Security ─────────────────────────────────╮\n│ │\n│ - No channel security warnings detected. │\n│ - Run: openclaw security audit --deep │\n│ │\n├────────────────────────────────────────────╯\n│\n◇ Skills status ────────────╮\n│ │\n│ Eligible: 8 │\n│ Missing requirements: 42 │\n│ Blocked by allowlist: 0 │\n│ │\n├────────────────────────────╯\n│\n◇ Plugins ─────────╮\n│ │\n│ Loaded: 4 │\n│ Disabled: 32 │\n│ Errors: 1 │\n│ - openclawbrain │\n│ │\n├───────────────────╯\n│\n◇ Plugin diagnostics ───────────────────────────────────────────────╮\n│ │\n│ - ERROR openclawbrain: plugin failed during register: TypeError: │\n│ api.registerContextEngine is not a function │\n│ (/Users/cormorantai/openclawbrain/index.ts) │\n│ │\n├────────────────────────────────────────────────────────────────────╯\n│\n◇ Shell completion ────────────────────────────────────────────────────╮\n│ │\n│ Shell completion is configured in your zsh profile but the cache is │\n│ missing. │\n│ Regenerating cache... │\n│ │\n├───────────────────────────────────────────────────────────────────────╯\n│\n◇ Shell completion ───────────────────────────────────────────────────────────╮\n│ │\n│ Completion cache regenerated at │\n│ /Users/cormorantai/.openclaw-ocbphase1-short-static/preflight/completions/ │\n│ openclaw.zsh │\n│ │\n├──────────────────────────────────────────────────────────────────────────────╯\n│\n◇ Gateway ──────────────╮\n│ │\n│ Gateway not running. │\n│ │\n├────────────────────────╯\n│\n◇ Gateway connection ─────────────────────────────────────────────────────────╮\n│ │\n│ Gateway target: ws://127.0.0.1:19130 │\n│ Source: local loopback │\n│ Config: │\n│ /Users/cormorantai/.openclaw-ocbphase1-short-static/preflight/openclaw.jso │\n│ n │\n│ Bind: loopback │\n│ │\n├──────────────────────────────────────────────────────────────────────────────╯\n│\n◇ Gateway ────────────────────────╮\n│ │\n│ Gateway service not installed. │\n│ │\n├──────────────────────────────────╯\nRun \"openclaw doctor --fix\" to apply changes.\n│\n└ Doctor complete.\n\n",
12
+ "stderr": "Invalid config at /Users/cormorantai/.openclaw-ocbphase1-short-static/preflight/openclaw.json:\\n- plugins.slots: Unrecognized key: \"contextEngine\"\nInvalid config at /Users/cormorantai/.openclaw-ocbphase1-short-static/preflight/openclaw.json:\\n- plugins.slots: Unrecognized key: \"contextEngine\"\nInvalid config:\n- plugins.slots: Unrecognized key: \"contextEngine\"\n",
13
+ "error": null
14
+ }
@@ -0,0 +1,36 @@
1
+
2
+ ◇ Config ───────────────────────────────────────────────────╮
3
+ │ │
4
+ │ Config invalid; doctor will run with best-effort config. │
5
+ │ │
6
+ ├────────────────────────────────────────────────────────────╯
7
+
8
+ ◇ Doctor changes ──────────────────────────────╮
9
+ │ │
10
+ │ Telegram configured, enabled automatically. │
11
+ │ │
12
+ ├───────────────────────────────────────────────╯
13
+
14
+ ◇ Unknown config keys ───────────╮
15
+ │ │
16
+ │ - plugins.slots.contextEngine │
17
+ │ │
18
+ ├─────────────────────────────────╯
19
+
20
+ ◇ Doctor ──────────────────────────────────────────────╮
21
+ │ │
22
+ │ Run "openclaw doctor --fix" to apply these changes. │
23
+ │ Run "openclaw doctor --fix" to remove these keys. │
24
+ │ │
25
+ ├───────────────────────────────────────────────────────╯
26
+ Gateway Status
27
+ Reachable: no
28
+ Probe budget: 3000ms
29
+
30
+ Discovery (this machine)
31
+ Found 4 gateway(s) via Bonjour (local.)
32
+
33
+ Targets
34
+ Local loopback ws://127.0.0.1:18789
35
+ Connect: failed - connect failed: unauthorized: gateway token missing (provide gateway auth token)
36
+