squad-openclaw 2026.2.1906 → 2026.2.2001

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 (3) hide show
  1. package/README.md +18 -3
  2. package/dist/index.js +715 -680
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -11,7 +11,7 @@ OpenClaw gateway plugin for [Squad](https://squad.ceo) — provides entity regis
11
11
  | `sql_query` | Restricted SQLite query tool — `sqlite3` only, scoped to `~/.openclaw/squad-ceo-data/` |
12
12
  | `squad.version.check`, `squad.version.update` | Plugin version management and self-update |
13
13
  | `tools.invoke` | RPC-based tool invocation for relay mode (WebSocket) |
14
- | Cloud relay client | Connects outbound to `relay.squad.ceo` for remote browser access |
14
+ | Cloud relay client | **Disabled by default (opt-in).** Connects outbound to `relay.squad.ceo` for remote browser access |
15
15
 
16
16
  ## Security Model
17
17
 
@@ -66,11 +66,13 @@ These files/directories cannot be written to, even if they fall within `allowedR
66
66
 
67
67
  ## Relay Security
68
68
 
69
+ > **The cloud relay is DISABLED by default. No outbound connections are made unless the operator explicitly sets `relay.enabled: true`.** Installing this plugin alone does NOT create any network surface — the relay code is never executed until opted in.
70
+
69
71
  The cloud relay enables remote browser access to the gateway through `relay.squad.ceo`.
70
72
 
71
73
  ### Opt-in Only
72
74
 
73
- The relay is **disabled by default**. It must be explicitly enabled by setting `relay.enabled: true` in the plugin configuration. No outbound network connections are made unless the operator opts in.
75
+ The relay is **disabled by default** (`relay.enabled` defaults to `false`). The plugin entry point checks this flag **before** calling `startRelayClient()` if the flag is not set or is `false`, no relay code runs, no WebSocket is opened, and no connection metadata is sent anywhere. The operator must explicitly enable it by setting `relay.enabled: true` in the plugin configuration.
74
76
 
75
77
  ### Authentication
76
78
 
@@ -93,10 +95,23 @@ The relay-client's device identity must be **explicitly approved by the operator
93
95
  The relay-client reads `gateway.auth.token` from `~/.openclaw/openclaw.json` via direct `fs.readFileSync`. This is intentional and safe:
94
96
 
95
97
  - The relay-client runs **server-side, in the gateway's own process** — equivalent to the gateway reading its own config
96
- - The token is **never sent to the relay server or the browser** — only injected into local `localhost:18789` WebSocket connections
98
+ - The token is **never sent to the relay server or the browser** — it is only injected into **local** `localhost:18789` WebSocket connections on the same machine
97
99
  - The token is **never exposed through the filesystem tool API** — `gateway.auth.*` is redacted in `filesystem.ts`
98
100
  - Direct file read is used because the plugin config API doesn't expose the full gateway config
99
101
 
102
+ **Token flow (important for security auditing):**
103
+
104
+ ```
105
+ Browser ──[connect request]──> relay.squad.ceo ──[relay.forward]──> relay-client
106
+
107
+ Token is injected HERE, in memory, │
108
+ into the connect request. │
109
+
110
+ relay-client ──[modified request]──> localhost:18789 (gateway)
111
+ ```
112
+
113
+ The relay server only sees the outer `relay.forward` envelope. It **never** receives the modified request containing the token. The token injection happens entirely within the relay-client process, and the modified message is sent over a **local loopback** connection to the gateway. A compromised relay server cannot intercept the operator token because it never traverses the relay — it only exists on the `localhost:18789` path.
114
+
100
115
  ## SQL Query Tool
101
116
 
102
117
  The `sql_query` tool provides restricted SQLite access: