@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 +6 -0
- package/README.md +221 -133
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/telemetry-config.d.ts +5 -1
- package/dist/telemetry-config.d.ts.map +1 -1
- package/dist/telemetry-config.js +15 -2
- package/dist/telemetry-config.js.map +1 -1
- package/dist/telemetry.d.ts +4 -1
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +5 -2
- package/dist/telemetry.js.map +1 -1
- package/package.json +1 -1
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
|
-
**
|
|
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
|
-
|
|
5
|
+
[](https://www.npmjs.com/package/@axonflow/openclaw)
|
|
6
|
+
[](https://clawhub.ai/plugins/%40axonflow%2Fopenclaw)
|
|
7
|
+
[](./LICENSE)
|
|
6
8
|
|
|
7
|
-
|
|
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
|
-
|
|
11
|
+
---
|
|
10
12
|
|
|
11
|
-
|
|
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
|
-
|
|
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
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
26
|
+
---
|
|
35
27
|
|
|
36
|
-
What
|
|
37
|
-
- tool inputs before execution
|
|
38
|
-
- outbound messages before delivery
|
|
39
|
-
- tool and LLM audit trails
|
|
28
|
+
## What you get
|
|
40
29
|
|
|
41
|
-
What
|
|
42
|
-
|
|
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
|
-
|
|
40
|
+
---
|
|
45
41
|
|
|
46
|
-
##
|
|
42
|
+
## How it plugs in
|
|
47
43
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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
|
-
|
|
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
|
-
|
|
81
|
+
---
|
|
60
82
|
|
|
61
|
-
|
|
83
|
+
## The production problems this solves
|
|
62
84
|
|
|
63
|
-
|
|
85
|
+
These are the three questions that reliably surface the moment an OpenClaw agent hits real users or regulators.
|
|
64
86
|
|
|
65
|
-
|
|
66
|
-
|
|
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
|
-
|
|
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
|
|
112
|
+
openclaw plugins install @axonflow/openclaw
|
|
73
113
|
```
|
|
74
114
|
|
|
75
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 | `""` |
|
|
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
|
|
121
|
-
| `onError` | No | `"block"` |
|
|
122
|
-
| `requestTimeoutMs` | No | `8000` | Timeout for policy checks, output scans, audit writes, and health checks
|
|
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
|
-
|
|
125
|
-
|
|
126
|
-
-
|
|
127
|
-
|
|
128
|
-
|
|
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
|
-
|
|
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
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
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
|
-
|
|
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
|
-
|
|
228
|
+
**Governance (6):** `check_policy`, `check_output`, `audit_tool_call`, `list_policies`, `get_policy_stats`, `search_audit_events`
|
|
184
229
|
|
|
185
|
-
|
|
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
|
-
|
|
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
|
-
|
|
234
|
+
See [Decision Explainability](https://docs.getaxonflow.com/docs/governance/explainability/) and [Session Overrides](https://docs.getaxonflow.com/docs/governance/overrides/).
|
|
192
235
|
|
|
193
|
-
|
|
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
|
|
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
|
-
|
|
213
|
-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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
|
-
/**
|
|
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
|
|
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"}
|
package/dist/telemetry-config.js
CHANGED
|
@@ -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
|
|
15
|
-
|
|
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;
|
|
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"}
|
package/dist/telemetry.d.ts
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:
|
|
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.
|
package/dist/telemetry.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA
|
|
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:
|
|
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:
|
|
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;
|
package/dist/telemetry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA
|
|
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.
|
|
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",
|