@axonflow/openclaw 1.3.1 → 1.3.2

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.3.2] - 2026-04-22
4
+
5
+ ### Deprecated
6
+
7
+ - `DO_NOT_TRACK=1` as an AxonFlow telemetry opt-out — scheduled for removal after 2026-05-05 in the next major release. Use `AXONFLOW_TELEMETRY=off` instead. The plugin emits a one-time `console.warn` when `DO_NOT_TRACK=1` is the active control and `AXONFLOW_TELEMETRY=off` is not also set.
8
+
3
9
  ## [1.3.1] - 2026-04-19
4
10
 
5
11
  Patch release. Fixes a v1.3.0 gap surfaced by install-and-use E2E
package/README.md CHANGED
@@ -1,81 +1,121 @@
1
1
  # @axonflow/openclaw
2
2
 
3
- **Policy enforcement, approval gates, and audit trails for [OpenClaw](https://github.com/openclaw/openclaw).**
3
+ **Governance for OpenClaw agents: block dangerous tool calls, require human approval on high-risk actions, redact PII from outbound messages, and keep a compliance-grade audit trail without changing a single line of your agent code.**
4
4
 
5
- ## Why
5
+ [![npm](https://img.shields.io/npm/v/%40axonflow%2Fopenclaw?color=%2300A36C)](https://www.npmjs.com/package/@axonflow/openclaw)
6
+ [![ClawHub](https://img.shields.io/badge/ClawHub-listed-00A36C)](https://clawhub.ai/plugins/%40axonflow%2Fopenclaw)
7
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](./LICENSE)
6
8
 
7
- OpenClaw is widely deployed with [13+ CVEs disclosed in 2026](https://github.com/jgamblin/OpenClawCVEs/) (multiple CVSS 9.8+), [135,000+ publicly exposed instances](https://www.bitsight.com/blog/openclaw-ai-security-risks-exposed-instances), and [1,184 malicious skills](https://cyberpress.org/clawhavoc-poisons-openclaws-clawhub-with-1184-malicious-skills/) poisoned in ClawHub via the ClawHavoc supply chain attack. OpenClaw provides agent runtime and tool execution but no centralized policy enforcement, no PII scanning, and no compliance-grade audit trails.
9
+ > **→ Full integration walkthrough:** **[docs.getaxonflow.com/docs/integration/openclaw](https://docs.getaxonflow.com/docs/integration/openclaw/)** architecture, hook coverage, policy examples, and troubleshooting.
8
10
 
9
- This plugin adds the governance layer. AxonFlow governs, OpenClaw orchestrates. No LLM provider keys needed — OpenClaw handles all LLM calls, AxonFlow only enforces policies and records audit trails. Your data stays on your infrastructure.
11
+ ---
10
12
 
11
- This plugin is useful when you want to:
12
- - block dangerous tool calls (reverse shells, SSRF, destructive commands) before they run
13
- - detect and redact PII and secrets in outbound messages before delivery
14
- - require human approval for high-risk tools (exec, web_fetch, message)
15
- - keep a compliance-grade audit trail of every tool call and LLM interaction
16
- - gain visibility into token usage and LLM activity across agents via audit trails
13
+ ## Why this plugin exists
17
14
 
18
- ## What It Does
15
+ OpenClaw is a strong agent runtime. It is also a serious production security problem the moment you take it past a prototype:
19
16
 
20
- | Hook | Purpose |
21
- |------|---------|
22
- | `before_tool_call` | Evaluate tool inputs against AxonFlow policies before execution |
23
- | `after_tool_call` | Record tool execution in AxonFlow audit trail |
24
- | `message_sending` | Scan outbound messages for PII/secrets before delivery |
25
- | `llm_input` | Record prompt, model, and provider for audit |
26
- | `llm_output` | Record response summary, token usage, and latency for audit |
17
+ - **[135,000+ publicly exposed instances](https://www.bitsight.com/blog/openclaw-ai-security-risks-exposed-instances)** deployed without central policy enforcement
18
+ - **[13+ CVEs disclosed in 2026](https://github.com/jgamblin/OpenClawCVEs/)**, several at CVSS 9.8+
19
+ - **[1,184 malicious skills](https://cyberpress.org/clawhavoc-poisons-openclaws-clawhub-with-1184-malicious-skills/)** poisoned in ClawHub via the ClawHavoc supply-chain attack
20
+ - **No native PII/secrets scanning**, no SQL-injection defense, no compliance-grade audit trail, no org-wide tool policy, no approval workflow
27
21
 
28
- The plugin also:
29
- - **Verifies AxonFlow connectivity** on startup and logs a warning if unreachable
30
- - **Tracks governance metrics** in-process (tool calls blocked/allowed, messages redacted, etc.) accessible via `getMetrics()`
22
+ OpenClaw handles agent runtime, MCP connectivity, channels, and tool execution. It was never intended to be the place you enforce governance. This plugin adds the governance layer on top, so OpenClaw keeps doing what it does well and AxonFlow takes over the "is this allowed, should this redact, who approved, where is the audit record" questions.
31
23
 
32
- ## Current Limitation
24
+ **AxonFlow governs. OpenClaw orchestrates. Your data stays on your infrastructure.** No LLM provider keys leave your machine — OpenClaw still makes every LLM call; AxonFlow only evaluates policies and records audit trails.
33
25
 
34
- Tool results written into the OpenClaw session transcript are not yet scanned by this plugin. OpenClaw's `tool_result_persist` hook is synchronous today, so it cannot call AxonFlow's HTTP policy APIs.
26
+ ---
35
27
 
36
- What is protected today:
37
- - tool inputs before execution
38
- - outbound messages before delivery
39
- - tool and LLM audit trails
28
+ ## What you get
40
29
 
41
- What is not protected yet:
42
- - tool results entering the LLM context through the session transcript
30
+ | Capability | What it means in practice |
31
+ |---|---|
32
+ | **Pre-execution policy check** | Every tool call is scored against 80+ built-in policies (reverse shells, SSRF, credential access, SQLi, prompt injection, path traversal, PII in arguments) before it runs |
33
+ | **Approval gates** | Any tool in `highRiskTools` pauses execution and posts a native OpenClaw approval request with policy severity surfaced as approval priority |
34
+ | **Outbound message scanning** | Every message to Telegram/Discord/Slack/webhook is scanned for PII and secrets before delivery — redacted, blocked, or passed through per policy |
35
+ | **Compliance-grade audit trail** | Every tool call and LLM interaction records the input, output summary, matched policies, decision, and duration |
36
+ | **Decision explainability** | Blocked calls return a `decision_id` the agent can pass to `explainDecision()` to see exactly which policy family triggered and why |
37
+ | **Session overrides** | Operators can request a time-bounded, audit-logged exception when policy allows it — without leaving the agent |
38
+ | **Per-user identity** | `config.userEmail` threads the actual human operator through to every explain/override call, so shared chat agents still produce attributable audits |
43
39
 
44
- If OpenClaw adds async support for `tool_result_persist`, AxonFlow can add transcript/result scanning immediately. Upstream issue: [openclaw/openclaw#58558](https://github.com/openclaw/openclaw/issues/58558).
40
+ ---
45
41
 
46
- ## Prerequisites
42
+ ## How it plugs in
47
43
 
48
- This plugin connects to [AxonFlow](https://github.com/getaxonflow/axonflow), a self-hosted governance platform, for policy evaluation and audit logging. AxonFlow must be running before you use the plugin. Your data stays on your infrastructure.
49
-
50
- ```bash
51
- # Start AxonFlow (Docker — runs entirely on your machine)
52
- git clone https://github.com/getaxonflow/axonflow.git
53
- cd axonflow
54
- docker compose up -d
44
+ ```
45
+ ┌──────────────────────────────────────────────────────────────┐
46
+ │ OpenClaw Agent │
47
+ │ │
48
+ │ User Message → LLM Call → Tool Execution → Response → User │
49
+ │ │ │ │ │ │
50
+ │ ▼ ▼ ▼ ▼ │
51
+ │ ┌────────────────────────────────────────────────────────┐ │
52
+ │ │ @axonflow/openclaw │ │
53
+ │ │ │ │
54
+ │ │ GOVERNANCE (can block / modify): │ │
55
+ │ │ before_tool_call (priority 10) → check_input │ │
56
+ │ │ message_sending (priority 10) → check_output │ │
57
+ │ │ │ │
58
+ │ │ AUDIT (observe-only, non-blocking): │ │
59
+ │ │ after_tool_call (priority 90) → audit_tool_call │ │
60
+ │ │ llm_input (priority 90) → record prompt │ │
61
+ │ │ llm_output (priority 90) → record response │ │
62
+ │ └────────────────────────┬───────────────────────────────┘ │
63
+ └───────────────────────────┼──────────────────────────────────┘
64
+
65
+
66
+ ┌───────────────────┐
67
+ │ AxonFlow │
68
+ │ ┌─────┐ ┌─────┐ │
69
+ │ │Policy│ │Audit│ │
70
+ │ │Engine│ │Trail│ │
71
+ │ └─────┘ └─────┘ │
72
+ │ ┌─────┐ │
73
+ │ │ PII │ │
74
+ │ │Scan │ │
75
+ │ └─────┘ │
76
+ └───────────────────┘
55
77
  ```
56
78
 
57
- See [Getting Started](https://docs.getaxonflow.com/docs/getting-started/) for full setup options.
79
+ **What stays the same:** your OpenClaw agent config, ClawHub skills, MCP connectors, and channel integrations are unchanged. The plugin only adds lifecycle hooks.
58
80
 
59
- ## Install
81
+ ---
60
82
 
61
- Available on [ClawHub](https://clawhub.ai/plugins/%40axonflow%2Fopenclaw) and [npm](https://www.npmjs.com/package/@axonflow/openclaw).
83
+ ## The production problems this solves
62
84
 
63
- **Recommended:**
85
+ These are the three questions that reliably surface the moment an OpenClaw agent hits real users or regulators.
64
86
 
65
- ```bash
66
- openclaw plugins install @axonflow/openclaw
67
- ```
87
+ ### 1. "The tool that phones home"
88
+
89
+ A `web_fetch` skill is installed from ClawHub. An agent uses it to look up product docs. Then a user asks, *"Summarize my customer list"* — the agent calls `web_fetch` with customer emails in the URL. The data leaves your infrastructure. OpenClaw executed the tool correctly; nobody checked what it was sending.
90
+
91
+ **What the plugin does:** `check_input` fires before `web_fetch` runs, scans the URL arguments against PII and exfiltration policies, and blocks the call with a decision ID.
92
+
93
+ ### 2. "The MCP response full of PII"
94
+
95
+ An MCP connector queries your CRM for "recent support tickets." The MCP server returns 50 rows with names, emails, phone numbers. All of it flows into the LLM context. OpenClaw managed the connection; SecretRef protected the credentials; the *data itself* was never inspected.
96
+
97
+ **What the plugin does:** `check_output` fires on `message_sending` before anything reaches the user channel, and scans every outbound message for SSN, credit card, API key, and other 80+ policy matches — redacting or blocking per policy.
98
+
99
+ ### 3. "The compliance question nobody can answer"
100
+
101
+ Six months later, a regulator asks: *"For this interaction on March 14, which tools were called, what data did they access, which policies were in effect, and why was the response allowed?"* OpenClaw's execution logs show a tool was called and succeeded. The *decision context* does not exist.
102
+
103
+ **What the plugin does:** every governed call emits a structured audit record with tool, input, output summary, matched policies, decision, and duration. Search via `searchAuditEvents()` or the Customer Portal.
104
+
105
+ ---
106
+
107
+ ## Install
68
108
 
69
- The `clawhub:@axonflow/openclaw` form also works if you prefer to be explicit about the source:
109
+ Requires OpenClaw **2026.4.14 or later**. Upgrade with `npm install -g openclaw@latest` if needed.
70
110
 
71
111
  ```bash
72
- openclaw plugins install clawhub:@axonflow/openclaw
112
+ openclaw plugins install @axonflow/openclaw
73
113
  ```
74
114
 
75
- Requires OpenClaw **2026.4.14 or later**. If you are not on the latest, upgrade with `npm install -g openclaw@latest`.
115
+ Available on [ClawHub](https://clawhub.ai/plugins/%40axonflow%2Fopenclaw) and [npm](https://www.npmjs.com/package/@axonflow/openclaw). The `clawhub:@axonflow/openclaw` form works if you prefer to be explicit about the source.
76
116
 
77
117
  <details>
78
- <summary>On an older OpenClaw CLI? The old workaround is still needed.</summary>
118
+ <summary>On an older OpenClaw CLI? The ENOENT workaround still applies.</summary>
79
119
 
80
120
  OpenClaw versions before 2026.4.14 had a bug ([openclaw/openclaw#66618](https://github.com/openclaw/openclaw/issues/66618)) that made scoped packages fail with `ENOENT .../openclaw-clawhub-package-XXXXXX/@axonflow/openclaw.zip` — both forms of the install command hit it. The fix shipped in 2026.4.14. If you cannot upgrade, install from npm directly:
81
121
 
@@ -86,111 +126,157 @@ openclaw plugins install "./$TGZ"
86
126
  ```
87
127
  </details>
88
128
 
89
- For the full integration walkthrough (architecture, hook coverage, policy examples, troubleshooting), see the [OpenClaw Integration Guide](https://docs.getaxonflow.com/docs/integration/openclaw/).
129
+ ### Start AxonFlow
130
+
131
+ The plugin connects to AxonFlow, a self-hosted governance platform. AxonFlow must be running before the plugin loads. Everything stays on your infrastructure.
132
+
133
+ ```bash
134
+ git clone https://github.com/getaxonflow/axonflow.git
135
+ cd axonflow && docker compose up -d
136
+ ```
137
+
138
+ See [Getting Started](https://docs.getaxonflow.com/docs/getting-started/) for production deployment options.
139
+
140
+ ---
90
141
 
91
142
  ## Configure
92
143
 
93
- In your OpenClaw config:
144
+ Minimal configuration community mode needs nothing beyond `endpoint`:
94
145
 
95
146
  ```yaml
147
+ # openclaw.config.yaml
96
148
  plugins:
97
149
  @axonflow/openclaw:
98
150
  endpoint: http://localhost:8080
99
- # In community mode, clientId defaults to "community"
100
- # and clientSecret can be left unset.
101
- # Set both only for evaluation/enterprise credentials.
102
- # clientId: your-client-id
103
- # clientSecret: your-client-secret
104
- # requestTimeoutMs: 8000
105
151
  highRiskTools:
106
152
  - web_fetch
107
153
  - message
108
154
  ```
109
155
 
110
- ### Configuration Options
156
+ That's it. Every governed tool call now flows through AxonFlow policy enforcement. `clientId` defaults to `"community"` and `clientSecret` can be left unset — add them only for evaluation or enterprise credentials.
157
+
158
+ ### Full configuration reference
111
159
 
112
160
  | Option | Required | Default | Description |
113
161
  |--------|----------|---------|-------------|
114
162
  | `endpoint` | Yes | — | AxonFlow agent gateway URL |
115
163
  | `clientId` | No | `"community"` | Tenant identity for data isolation. Override for evaluation/enterprise. |
116
- | `clientSecret` | No | `""` | License key for evaluation/enterprise features. Requires `clientId` to be set. |
164
+ | `clientSecret` | No | `""` | Basic-auth secret paired with `clientId`. Required for evaluation/enterprise tenants; leave unset in community mode. |
165
+ | `userEmail` | No | — | Per-user identity forwarded on explain/override calls. Shared agents should set this from session context. |
117
166
  | `highRiskTools` | No | `[]` | Tools that require human approval even when policy allows |
118
167
  | `governedTools` | No | `[]` (all) | Tools to govern. Empty = all tools. |
119
- | `excludedTools` | No | `[]` | Tools to exclude from governance |
120
- | `defaultOperation` | No | `"execute"` | Operation type for mcp_check_input (`"execute"` or `"query"`) |
121
- | `onError` | No | `"block"` | Behavior when AxonFlow is unreachable: `"block"` (fail-closed) or `"allow"` (fail-open) |
122
- | `requestTimeoutMs` | No | `8000` | Timeout for policy checks, output scans, audit writes, and health checks. Increase for remote AxonFlow deployments. |
168
+ | `excludedTools` | No | `[]` | Tools to exclude from governance. Takes precedence over `governedTools`. |
169
+ | `defaultOperation` | No | `"execute"` | Operation type for `check_input` (`"execute"` or `"query"`) |
170
+ | `onError` | No | `"block"` | Governs behavior on **auth/config errors only** (401/403). `"block"` denies the tool call with a message telling the operator to fix configuration; `"allow"` lets the call through ungoverned. Does not apply to network/transient errors — see Fail behavior below. |
171
+ | `requestTimeoutMs` | No | `8000` | Timeout for policy checks, output scans, audit writes, and health checks |
172
+
173
+ ### Fail behavior
174
+
175
+ The plugin classifies errors from the AxonFlow client into two buckets and applies different rules per hook.
176
+
177
+ | Hook | Transient network error (timeout, DNS, connection refused, 5xx) | Auth/config error (401 / 403) |
178
+ |---|---|---|
179
+ | `before_tool_call` | **Always fail-open** — tool call proceeds regardless of `onError`. Transient infrastructure issues should not block legitimate dev workflows. | Respects `onError`. With the default `"block"`, the tool call is denied with a message pointing at the misconfiguration. With `"allow"`, the call proceeds ungoverned. |
180
+ | `message_sending` | Respects `onError`. With `"block"` (default), the outbound message is cancelled. With `"allow"`, it is delivered ungoverned. | Same as network error — respects `onError`. |
181
+ | `after_tool_call`, `llm_input`, `llm_output` (audit) | Always silently caught. Governance was already enforced on the pre-execution hook. | Always silently caught. |
182
+
183
+ If you need tool-execution itself to fail-closed during an AxonFlow outage (for example on a production infrastructure agent), pair the plugin with an OpenClaw-side health check or a front-door liveness gate — the plugin alone will not achieve that for `before_tool_call`.
123
184
 
124
- **Valid configurations:**
125
- - Both omitted → community mode (`clientId` defaults to `"community"`)
126
- - `clientId` only → community mode with custom tenant identity
127
- - Both set → licensed mode (evaluation/enterprise)
128
- - `clientSecret` only **error** (licensed mode requires explicit tenant identity to prevent data going to the wrong tenant)
185
+ ---
186
+
187
+ ## Use-case recipes
188
+
189
+ ### DevOps / coding agent heavy exec usage
190
+
191
+ ```yaml
192
+ plugins:
193
+ @axonflow/openclaw:
194
+ endpoint: http://localhost:8080
195
+ highRiskTools: [exec, process]
196
+ excludedTools: [get_current_time, list_models]
197
+ onError: block
198
+ ```
129
199
 
130
- ## How It Works
200
+ ### Customer support agent — Slack/Discord/Telegram
131
201
 
202
+ ```yaml
203
+ plugins:
204
+ @axonflow/openclaw:
205
+ endpoint: http://localhost:8080
206
+ highRiskTools: [message, execute_sql, send_email]
207
+ onError: block
132
208
  ```
133
- User sends message → OpenClaw receives
134
-
135
-
136
- ┌─────────────────────────────────────────────┐
137
- │ llm_input (audit) │
138
- │ → Record prompt, model, provider │
139
- └─────────────────────────────────────────────┘
140
-
141
-
142
- LLM generates response (may include tool calls)
143
-
144
-
145
- ┌─────────────────────────────────────────────┐
146
- │ llm_output (audit) │
147
- │ → Record response, tokens, latency │
148
- └─────────────────────────────────────────────┘
149
-
150
- ▼ (if tool calls in response)
151
- ┌─────────────────────────────────────────────┐
152
- │ before_tool_call (governance) │
153
- │ → mcp_check_input(openclaw.{tool}, args) │
154
- │ → BLOCK / REQUIRE APPROVAL / ALLOW │
155
- └─────────────────────────────────────────────┘
156
-
157
-
158
- Tool executes (web_fetch, message, MCP, etc.)
159
-
160
-
161
- Tool result persisted to session transcript
162
- (not scanned — pending async hook support)
163
-
164
-
165
- ┌─────────────────────────────────────────────┐
166
- │ after_tool_call (audit) │
167
- │ → audit_tool_call(tool, params, result) │
168
- └─────────────────────────────────────────────┘
169
-
170
-
171
- ┌─────────────────────────────────────────────┐
172
- │ message_sending (governance) │
173
- │ → mcp_check_output(openclaw.message_sending) │
174
- │ → CANCEL / REDACT / ALLOW │
175
- └─────────────────────────────────────────────┘
176
-
177
-
178
- Message delivered to user channel
209
+
210
+ ### Self-healing infrastructure agent — highest risk
211
+
212
+ ```yaml
213
+ plugins:
214
+ @axonflow/openclaw:
215
+ endpoint: http://localhost:8080
216
+ highRiskTools: [exec, process, web_fetch]
217
+ onError: block # auth-error path and message_sending fail-closed; see Fail behavior above
179
218
  ```
180
219
 
181
- ## Telemetry
220
+ More examples — content/social agents, data analysts, RAG pipelines — in the [integration guide](https://docs.getaxonflow.com/docs/integration/openclaw/#use-case-configuration-examples).
221
+
222
+ ---
223
+
224
+ ## MCP tools available to your agent
225
+
226
+ Beyond the lifecycle hooks, OpenClaw agents can call **10 MCP tools** via the agent's MCP server at `/api/v1/mcp-server`. These are served by the platform (not the plugin), so new tools become available to every plugin without a code change.
182
227
 
183
- This plugin sends an anonymous telemetry ping on initialization to help us understand usage patterns, including local and self-hosted evaluations. The ping includes: plugin version, platform info (OS, architecture, Node.js version), AxonFlow platform version, and hook configuration (count, onError mode). No PII, no tool arguments, no policy data.
228
+ **Governance (6):** `check_policy`, `check_output`, `audit_tool_call`, `list_policies`, `get_policy_stats`, `search_audit_events`
184
229
 
185
- Opt out:
186
- - `DO_NOT_TRACK=1` (standard)
187
- - `AXONFLOW_TELEMETRY=off`
230
+ **Explainability & overrides (4):** `explain_decision`, `create_override`, `delete_override`, `list_overrides`
188
231
 
189
- The startup ping is enabled by default for local, self-hosted, and remote deployments. Opt-out controls always win.
232
+ When a tool call is blocked, the agent can surface the `decision_id` to the operator, call `explain_decision` to reveal the triggering policy family, and if the decision is overridable — call `create_override` with mandatory justification for a short-lived, audit-logged exception. Operators never leave the OpenClaw session.
190
233
 
191
- ## Starter Policies
234
+ See [Decision Explainability](https://docs.getaxonflow.com/docs/governance/explainability/) and [Session Overrides](https://docs.getaxonflow.com/docs/governance/overrides/).
192
235
 
193
- See [policies/README.md](./policies/README.md) for recommended policy setup for OpenClaw deployments, including protections against reverse shells, credential exfiltration, SSRF, path traversal, and agent config file poisoning.
236
+ ---
237
+
238
+ ## What's covered today, and what's not
239
+
240
+ **Protected today:**
241
+ - Tool inputs before execution
242
+ - Outbound messages before delivery
243
+ - Tool and LLM audit trails (including search & explainability)
244
+ - Decision-level overrides with per-user attribution
245
+
246
+ **Not protected yet:**
247
+ - Tool results written into the session transcript (OpenClaw's `tool_result_persist` hook is synchronous and cannot call AxonFlow's HTTP APIs)
248
+
249
+ PII in tool results is still caught by `message_sending` before it reaches the end user, but it is visible to the LLM. When OpenClaw adds async support for `tool_result_persist`, this plugin will add transcript scanning immediately. Upstream issue: [openclaw/openclaw#58558](https://github.com/openclaw/openclaw/issues/58558).
250
+
251
+ ---
252
+
253
+ ## Latency
254
+
255
+ | Operation | Typical overhead |
256
+ |-----------|-----------------|
257
+ | Policy pre-check | 2–5 ms |
258
+ | PII / secrets detection | 1–3 ms |
259
+ | SQL-injection scan | 1–2 ms |
260
+ | Audit write (async) | 0 ms (non-blocking) |
261
+ | **Total per-tool overhead** | **3–10 ms** |
262
+
263
+ Imperceptible for interactive agents.
264
+
265
+ ---
266
+
267
+ ## Starter policies
268
+
269
+ The [policies directory](./policies) ships research-backed starter policies addressing the top 10 OpenClaw security risks — reverse shells, SSRF, credential exfiltration, path traversal, agent config poisoning, prompt injection, and more. Ready-to-use SQL INSERT statements and setup instructions included.
270
+
271
+ ---
272
+
273
+ ## Telemetry
274
+
275
+ The plugin sends a one-time anonymous ping on initialization so AxonFlow can understand adoption and environment shape. Includes plugin version, OS/arch, Node.js version, AxonFlow platform version, hook configuration summary. **Never** includes message contents, tool arguments, or policy data.
276
+
277
+ Opt out with `AXONFLOW_TELEMETRY=off` (canonical). `DO_NOT_TRACK=1` is still honored for backward compatibility but is **deprecated** and scheduled for removal after 2026-05-05 in the next major release — the plugin emits a one-time warning when `DO_NOT_TRACK=1` is the active control and `AXONFLOW_TELEMETRY=off` is not also set.
278
+
279
+ ---
194
280
 
195
281
  ## Testing
196
282
 
@@ -204,25 +290,27 @@ Smoke E2E (requires a live AxonFlow stack at `localhost:8080`):
204
290
 
205
291
  ```bash
206
292
  npm ci && npm run build
207
- # Start a stack via axonflow-enterprise (see its setup-e2e-testing.sh)
293
+ # Start a local AxonFlow stack first `docker compose up -d` in
294
+ # the axonflow repo, or point AXONFLOW_ENDPOINT at an existing one.
208
295
  node tests/e2e/smoke-block-context.mjs
209
296
  ```
210
297
 
211
- The smoke scenario uses `AxonFlowClient.mcpCheckInput` to fire a
212
- SQLi-bearing statement against a running platform and asserts the
213
- response carries Plugin Batch 1 richer-context fields (`decision_id`,
214
- `risk_level`, `policy_matches`). Exits 0 with a `SKIP:` message if no
215
- stack is reachable. In CI, run manually via `workflow_dispatch` with a
216
- reachable endpoint (GitHub-hosted runners have no local stack).
298
+ The smoke scenario uses `AxonFlowClient.mcpCheckInput` to fire a SQLi-bearing statement against a running platform and asserts the response carries richer-context fields (`decision_id`, `risk_level`, `policy_matches`). Exits 0 with a `SKIP:` message if no stack is reachable.
299
+
300
+ For the broader validation story — explain-decision, override lifecycle, audit-filter parity, cache invalidation — see the [OpenClaw integration guide](https://docs.getaxonflow.com/docs/integration/openclaw/).
217
301
 
218
- Full install-and-use matrix (explain, override lifecycle, audit filter
219
- parity, cache invalidation) lives in `axonflow-enterprise/tests/e2e/plugin-batch-1/openclaw-install/`.
302
+ ---
220
303
 
221
304
  ## Links
222
305
 
306
+ - **[OpenClaw Integration Guide](https://docs.getaxonflow.com/docs/integration/openclaw/)** — the full walkthrough (recommended starting point)
223
307
  - [AxonFlow Documentation](https://docs.getaxonflow.com)
224
- - [OpenClaw Integration Guide](https://docs.getaxonflow.com/docs/integration/openclaw/)
225
308
  - [Policy Enforcement](https://docs.getaxonflow.com/docs/mcp/policy-enforcement/)
309
+ - [Decision Explainability](https://docs.getaxonflow.com/docs/governance/explainability/)
310
+ - [Session Overrides](https://docs.getaxonflow.com/docs/governance/overrides/)
311
+ - [PII Detection](https://docs.getaxonflow.com/docs/security/pii-detection/)
312
+ - [Audit Logging](https://docs.getaxonflow.com/docs/governance/audit-logging/)
313
+ - Sister plugins: [Claude Code](https://github.com/getaxonflow/axonflow-claude-plugin) · [Cursor](https://github.com/getaxonflow/axonflow-cursor-plugin) · [Codex](https://github.com/getaxonflow/axonflow-codex-plugin)
226
314
 
227
315
  ## License
228
316
 
package/dist/index.d.ts CHANGED
@@ -31,7 +31,7 @@
31
31
  * for async hook support.
32
32
  */
33
33
  /** Plugin version — update before each release. */
34
- export declare const VERSION = "1.3.1";
34
+ export declare const VERSION = "1.3.2";
35
35
  export { AxonFlowClient } from "./axonflow-client.js";
36
36
  export type { AxonFlowPluginConfig } from "./config.js";
37
37
  export { resolveConfig, shouldGovernTool } from "./config.js";
package/dist/index.js CHANGED
@@ -39,7 +39,7 @@ import { createLlmInputHandler, createLlmOutputHandler } from "./llm-audit.js";
39
39
  import { sendTelemetryPing } from "./telemetry.js";
40
40
  import { resetMetrics } from "./metrics.js";
41
41
  /** Plugin version — update before each release. */
42
- export const VERSION = "1.3.1";
42
+ export const VERSION = "1.3.2";
43
43
  // Re-export for external consumers
44
44
  export { AxonFlowClient } from "./axonflow-client.js";
45
45
  export { resolveConfig, shouldGovernTool } from "./config.js";
@@ -6,7 +6,11 @@
6
6
  * does not co-locate environment reads and outbound HTTP in the same file.
7
7
  */
8
8
  export interface TelemetryConfig {
9
- /** True if the user has opted out via DO_NOT_TRACK or AXONFLOW_TELEMETRY=off. */
9
+ /**
10
+ * True if the user has opted out via AXONFLOW_TELEMETRY=off (canonical) or
11
+ * DO_NOT_TRACK=1 (deprecated — scheduled for removal after 2026-05-05 in the
12
+ * next major release).
13
+ */
10
14
  optedOut: boolean;
11
15
  /** Endpoint that receives the anonymous ping. Configurable for self-hosted checkpoint deployments. */
12
16
  checkpointUrl: string;
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry-config.d.ts","sourceRoot":"","sources":["../src/telemetry-config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,WAAW,eAAe;IAC9B,iFAAiF;IACjF,QAAQ,EAAE,OAAO,CAAC;IAClB,sGAAsG;IACtG,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,mBAAmB,IAAI,eAAe,CAcrD"}
1
+ {"version":3,"file":"telemetry-config.d.ts","sourceRoot":"","sources":["../src/telemetry-config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB,sGAAsG;IACtG,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,mBAAmB,IAAI,eAAe,CA0BrD"}
@@ -11,9 +11,22 @@ export function loadTelemetryConfig() {
11
11
  return { optedOut: false, checkpointUrl: DEFAULT_CHECKPOINT_URL };
12
12
  }
13
13
  const env = process.env;
14
- const optedOut = env.DO_NOT_TRACK?.trim() === "1" ||
15
- env.AXONFLOW_TELEMETRY?.trim().toLowerCase() === "off";
14
+ const dntActive = env.DO_NOT_TRACK?.trim() === "1";
15
+ const axonflowTelemetryOff = env.AXONFLOW_TELEMETRY?.trim().toLowerCase() === "off";
16
+ const optedOut = dntActive || axonflowTelemetryOff;
17
+ // Deprecation warning — fires only when DO_NOT_TRACK is the active control
18
+ // and AXONFLOW_TELEMETRY=off is NOT set. If both are set, the operator has
19
+ // already migrated to the canonical switch; no warning. Guarded to run at
20
+ // most once per plugin process via a module-level sentinel.
21
+ if (dntActive && !axonflowTelemetryOff && !doNotTrackDeprecationWarningShown) {
22
+ doNotTrackDeprecationWarningShown = true;
23
+ // eslint-disable-next-line no-console
24
+ console.warn("[AxonFlow] DO_NOT_TRACK=1 is deprecated as an AxonFlow telemetry opt-out and will be removed after 2026-05-05 in the next major release. Set AXONFLOW_TELEMETRY=off to opt out going forward. See https://docs.getaxonflow.com/docs/telemetry for details.");
25
+ }
16
26
  const checkpointUrl = env.AXONFLOW_CHECKPOINT_URL || DEFAULT_CHECKPOINT_URL;
17
27
  return { optedOut, checkpointUrl };
18
28
  }
29
+ // Module-level sentinel keeps the deprecation warning to one emission per
30
+ // process even if loadTelemetryConfig is called from multiple code paths.
31
+ let doNotTrackDeprecationWarningShown = false;
19
32
  //# sourceMappingURL=telemetry-config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry-config.js","sourceRoot":"","sources":["../src/telemetry-config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,sBAAsB,GAAG,4CAA4C,CAAC;AAS5E,MAAM,UAAU,mBAAmB;IACjC,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACnD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,sBAAsB,EAAE,CAAC;IACpE,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAExB,MAAM,QAAQ,GACZ,GAAG,CAAC,YAAY,EAAE,IAAI,EAAE,KAAK,GAAG;QAChC,GAAG,CAAC,kBAAkB,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC;IAEzD,MAAM,aAAa,GAAG,GAAG,CAAC,uBAAuB,IAAI,sBAAsB,CAAC;IAE5E,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;AACrC,CAAC"}
1
+ {"version":3,"file":"telemetry-config.js","sourceRoot":"","sources":["../src/telemetry-config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,sBAAsB,GAAG,4CAA4C,CAAC;AAa5E,MAAM,UAAU,mBAAmB;IACjC,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACnD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,sBAAsB,EAAE,CAAC;IACpE,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAExB,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC;IACnD,MAAM,oBAAoB,GAAG,GAAG,CAAC,kBAAkB,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC;IACpF,MAAM,QAAQ,GAAG,SAAS,IAAI,oBAAoB,CAAC;IAEnD,2EAA2E;IAC3E,2EAA2E;IAC3E,0EAA0E;IAC1E,4DAA4D;IAC5D,IAAI,SAAS,IAAI,CAAC,oBAAoB,IAAI,CAAC,iCAAiC,EAAE,CAAC;QAC7E,iCAAiC,GAAG,IAAI,CAAC;QACzC,sCAAsC;QACtC,OAAO,CAAC,IAAI,CACV,4PAA4P,CAC7P,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAG,GAAG,CAAC,uBAAuB,IAAI,sBAAsB,CAAC;IAE5E,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;AACrC,CAAC;AAED,0EAA0E;AAC1E,0EAA0E;AAC1E,IAAI,iCAAiC,GAAG,KAAK,CAAC"}
@@ -5,7 +5,10 @@
5
5
  * checkpoint.getaxonflow.com. Collects SDK version, platform info,
6
6
  * and OpenClaw version. No PII, no tool arguments, no policy data.
7
7
  *
8
- * Opt out: DO_NOT_TRACK=1 or AXONFLOW_TELEMETRY=off
8
+ * Opt out: AXONFLOW_TELEMETRY=off (canonical)
9
+ * Also honored for backward compatibility: DO_NOT_TRACK=1 (deprecated — removed
10
+ * after 2026-05-05 in the next major release; a one-time warning emits when
11
+ * it's the active opt-out so operators can migrate).
9
12
  *
10
13
  * Configuration resolution (opt-out flags and checkpoint URL) lives in
11
14
  * telemetry-config.ts so this file only handles the network-sending side.
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAwBH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AA2BD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,IAAI,CA4DP"}
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAwBH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AA2BD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,IAAI,CA4DP"}
package/dist/telemetry.js CHANGED
@@ -5,7 +5,10 @@
5
5
  * checkpoint.getaxonflow.com. Collects SDK version, platform info,
6
6
  * and OpenClaw version. No PII, no tool arguments, no policy data.
7
7
  *
8
- * Opt out: DO_NOT_TRACK=1 or AXONFLOW_TELEMETRY=off
8
+ * Opt out: AXONFLOW_TELEMETRY=off (canonical)
9
+ * Also honored for backward compatibility: DO_NOT_TRACK=1 (deprecated — removed
10
+ * after 2026-05-05 in the next major release; a one-time warning emits when
11
+ * it's the active opt-out so operators can migrate).
9
12
  *
10
13
  * Configuration resolution (opt-out flags and checkpoint URL) lives in
11
14
  * telemetry-config.ts so this file only handles the network-sending side.
@@ -64,7 +67,7 @@ export function sendTelemetryPing(options) {
64
67
  return;
65
68
  }
66
69
  if (typeof console !== "undefined") {
67
- console.log("[AxonFlow] Anonymous telemetry enabled for local and self-hosted use. Opt out: DO_NOT_TRACK=1 or AXONFLOW_TELEMETRY=off | https://docs.getaxonflow.com/docs/telemetry");
70
+ console.log("[AxonFlow] Anonymous telemetry enabled for local and self-hosted use. Opt out: AXONFLOW_TELEMETRY=off | https://docs.getaxonflow.com/docs/telemetry");
68
71
  }
69
72
  // Runtime metadata (platform, arch, runtime version) for the payload.
70
73
  const proc = typeof process !== "undefined" ? process : null;
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@axonflow/openclaw",
3
- "version": "1.3.1",
3
+ "version": "1.3.2",
4
4
  "description": "Policy enforcement, approval gates, and audit trails for OpenClaw — govern tool inputs before execution, scan outbound messages for PII/secrets, and record agent activity for review and compliance",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",