-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathopenclaw.plugin.json
More file actions
206 lines (206 loc) · 9.93 KB
/
openclaw.plugin.json
File metadata and controls
206 lines (206 loc) · 9.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
{
"id": "axonflow-governance",
"name": "AxonFlow Governance",
"description": "Policy enforcement, approval gates, and audit trails for OpenClaw tool execution and outbound messages. Sends governance events to AxonFlow Community SaaS (try.getaxonflow.com) by default; set pluginConfig.endpoint for self-hosted, AXONFLOW_COMMUNITY_SAAS=0 to disable auto-registration, AXONFLOW_TELEMETRY=off to disable the 7-day anonymous heartbeat.",
"envVars": {
"AXONFLOW_TELEMETRY": {
"required": false,
"description": "Set to 'off', '0', 'false', or 'no' to disable the 7-day anonymous telemetry heartbeat. When unset (default), the plugin sends a lightweight ping to checkpoint.getaxonflow.com once every 7 days per machine.",
"values": ["off", "0", "false", "no"]
},
"AXONFLOW_COMMUNITY_SAAS": {
"required": false,
"description": "Set to '0', 'false', 'off', or 'no' to disable auto-registration with try.getaxonflow.com Community SaaS. When opted out, configure pluginConfig.endpoint to point at a self-hosted AxonFlow instance — otherwise the plugin loads but cannot enforce policy.",
"values": ["0", "false", "off", "no"]
},
"AXONFLOW_CACHE_DIR": {
"required": false,
"description": "Override the per-user cache directory used for telemetry stamps and rate-limit backoffs. Defaults to OS conventions: $XDG_CACHE_HOME/axonflow on Linux, ~/Library/Caches/axonflow on macOS, %LOCALAPPDATA%\\axonflow on Windows."
},
"AXONFLOW_CONFIG_DIR": {
"required": false,
"description": "Override the per-user config directory used for the Community-SaaS registration file (mode 0o600). Defaults to OS conventions: $XDG_CONFIG_HOME/axonflow on Linux, ~/Library/Application Support/axonflow on macOS, %APPDATA%\\axonflow on Windows."
},
"AXONFLOW_LICENSE_TOKEN": {
"required": false,
"description": "AxonFlow Pro plugin-claim license token (begins with 'AXON-'). When set, the plugin forwards this token on every governed request via the X-License-Token header so the agent applies Pro-tier entitlements (extended audit retention, higher quotas, license-gated capabilities). Wins over pluginConfig.licenseToken when both are set. Get one from getaxonflow.com/plugins/pro — the token is emailed to the address used at Stripe Checkout."
},
"AXONFLOW_ENDPOINT": {
"required": false,
"description": "Override the AxonFlow agent gateway endpoint. Wins over pluginConfig.endpoint when both are set. When unset and AXONFLOW_COMMUNITY_SAAS is not opted out, the plugin auto-bootstraps against https://try.getaxonflow.com. For self-hosted deployments, set this (or pluginConfig.endpoint) to your AxonFlow URL."
},
"AXONFLOW_RECOVERY_TIMEOUT_MS": {
"required": false,
"description": "Per-HTTP-request timeout in milliseconds for the axonflow-openclaw-recover CLI's calls to /api/v1/recover and /api/v1/recover/verify. Default: 10000 (10s). Increase for high-latency networks; decrease for fail-fast CI environments."
},
"AXONFLOW_UPGRADE_URL": {
"required": false,
"description": "Override the upgrade URL surfaced by axonflow-openclaw-status to free-tier users when reporting Pro-tier features. Defaults to https://getaxonflow.com/pricing/."
},
"AXONFLOW_PROFILE": {
"required": false,
"description": "Free-form deployment profile (e.g. 'production', 'staging', 'dev') reported on the anonymous 7-day heartbeat as the v1 telemetry-schema 'profile' field. Reports 'unknown' when unset. No behavioural effect; analytics dimension only."
},
"AXONFLOW_TRY": {
"required": false,
"description": "Set to '1' to force the v1 telemetry deployment-mode classifier to report 'community_saas' even when the configured endpoint is a custom hostname. Use only when proxying try.getaxonflow.com behind a different host. No behavioural effect outside the heartbeat payload.",
"values": ["1"]
}
},
"runtimeBehavior": {
"autoBootstrap": {
"enabled": true,
"description": "When pluginConfig.endpoint is unset and AXONFLOW_COMMUNITY_SAAS is not opted out, the plugin POSTs to https://try.getaxonflow.com/api/v1/register on first load to obtain Community-SaaS credentials, persists them at $AXONFLOW_CONFIG_DIR/try-registration.json (mode 0o600), and uses them for subsequent governance calls. The 7-day rotation refresh window keeps tenants from lapsing silently.",
"optOut": "Set AXONFLOW_COMMUNITY_SAAS=0 OR set pluginConfig.endpoint to a self-hosted AxonFlow instance.",
"userDisclosure": "First-load disclosure banner emitted via plugin logger (warn level), one time per machine, before the registration POST fires."
},
"outboundData": {
"atGovernanceTime": "Tool name + arguments (before execution) and outbound message bodies (before delivery) are sent to the configured AxonFlow endpoint for policy evaluation and audit. With Community SaaS, the endpoint is try.getaxonflow.com; with self-hosted, traffic stays on your network.",
"telemetry": "Anonymous 7-day heartbeat to checkpoint.getaxonflow.com containing plugin version, OS, arch, runtime version, deployment mode, hook count, and a per-machine instance_id (UUID v4). No tool inputs, no message bodies, no LLM provider keys.",
"neverTransmitted": ["LLM provider API keys", "OpenClaw conversation history outside governed tools", "Files outside the OpenClaw runtime"]
},
"persistence": {
"files": [
{
"path": "$AXONFLOW_CONFIG_DIR/try-registration.json",
"mode": "0o600",
"purpose": "Community-SaaS registration credentials (tenant_id, secret, expires_at). Refused at load time if permissions are not 0o600 on POSIX."
},
{
"path": "$AXONFLOW_CONFIG_DIR/openclaw-plugin-community-saas-disclosure-shown",
"mode": "0o600",
"purpose": "First-load disclosure stamp. Empty file; presence prevents re-warning on subsequent loads."
},
{
"path": "$AXONFLOW_CACHE_DIR/openclaw-plugin-telemetry-sent",
"mode": "0o600",
"purpose": "Heartbeat stamp file. Body is the per-machine instance_id (UUID v4); mtime drives the 7-day rate limit."
},
{
"path": "$AXONFLOW_CACHE_DIR/openclaw-plugin-register-backoff",
"mode": "0o600",
"purpose": "Rate-limit backoff stamp written when /api/v1/register returns 429. Body is a Unix timestamp (seconds) until which the bootstrap will not retry."
}
]
}
},
"uiHints": {
"endpoint": {
"label": "AxonFlow Endpoint",
"placeholder": "http://localhost:8080",
"help": "URL of your AxonFlow agent gateway"
},
"clientId": {
"label": "Client ID",
"placeholder": "your-client-id",
"help": "AxonFlow authentication client ID"
},
"clientSecret": {
"label": "Client Secret",
"sensitive": true,
"placeholder": "your-secret",
"help": "AxonFlow authentication client secret"
},
"userEmail": {
"label": "User Email",
"placeholder": "alice@example.com",
"help": "Per-user identity forwarded as the X-User-Email header. Required for the override lifecycle endpoints (createOverride, revokeOverride, listOverrides) and for correct per-user scoping on explainDecision. Block-path features still work without it."
},
"licenseToken": {
"label": "Pro License Token",
"sensitive": true,
"placeholder": "AXON-...",
"help": "AxonFlow Pro plugin-claim license token. When set, the plugin forwards this on every governed request via X-License-Token so the agent applies Pro-tier entitlements (longer audit retention, higher quotas, license-gated capabilities). AXONFLOW_LICENSE_TOKEN env var wins over this value."
},
"highRiskTools": {
"label": "High-Risk Tools",
"placeholder": "web_fetch, message",
"help": "Comma-separated tool names requiring human approval even when policy allows"
},
"governedTools": {
"label": "Governed Tools",
"placeholder": "(empty = all tools)",
"help": "Only govern these tools. Empty means all tools are governed.",
"advanced": true
},
"excludedTools": {
"label": "Excluded Tools",
"placeholder": "(empty = none excluded)",
"help": "Exclude these tools from governance. Takes precedence over governedTools.",
"advanced": true
},
"defaultOperation": {
"label": "Default Operation",
"placeholder": "execute",
"help": "Operation type for mcp_check_input: 'execute' (default) or 'query' for read-only tools",
"advanced": true
},
"requestTimeoutMs": {
"label": "Request Timeout (ms)",
"placeholder": "8000",
"help": "Timeout for AxonFlow policy checks, output scans, audit writes, and health checks. Increase for remote deployments.",
"advanced": true
}
},
"configSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"endpoint": {
"type": "string"
},
"clientId": {
"type": "string"
},
"clientSecret": {
"type": "string"
},
"userEmail": {
"type": "string"
},
"licenseToken": {
"type": "string"
},
"highRiskTools": {
"type": "array",
"items": {
"type": "string"
},
"default": ["web_fetch"]
},
"governedTools": {
"type": "array",
"items": {
"type": "string"
}
},
"excludedTools": {
"type": "array",
"items": {
"type": "string"
}
},
"defaultOperation": {
"type": "string",
"enum": [
"execute",
"query"
],
"default": "execute"
},
"onError": {
"type": "string",
"enum": [
"block",
"allow"
],
"default": "block"
},
"requestTimeoutMs": {
"type": "number",
"minimum": 1,
"default": 8000
}
}
}
}