@sponsio/sdk 0.1.0-alpha.3 → 0.1.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.
- package/bin/sponsio.cjs +11 -0
- package/contracts/capability/credentials.yaml +8 -8
- package/contracts/capability/database.yaml +6 -6
- package/contracts/capability/filesystem-strict.yaml +4 -4
- package/contracts/capability/filesystem.yaml +9 -9
- package/contracts/capability/host-config-integrity.yaml +285 -0
- package/contracts/capability/self-modify.yaml +214 -9
- package/contracts/capability/shell.yaml +25 -32
- package/contracts/capability/subagent.yaml +5 -5
- package/contracts/core/llm_safety.yaml +23 -13
- package/contracts/incident/claude-code-secret-bypass.yaml +10 -11
- package/contracts/incident/cursor-railway-wipe.yaml +3 -3
- package/contracts/incident/mcp-composition.yaml +12 -12
- package/contracts/incident/openclaw.yaml +53 -45
- package/contracts/incident/subagent-escape.yaml +4 -4
- package/dist/cli/check.d.ts +2 -0
- package/dist/cli/check.d.ts.map +1 -0
- package/dist/cli/check.js +283 -0
- package/dist/cli/check.js.map +1 -0
- package/dist/cli/cli.d.ts +25 -0
- package/dist/cli/cli.d.ts.map +1 -0
- package/dist/cli/cli.js +459 -0
- package/dist/cli/cli.js.map +1 -0
- package/dist/cli/config.d.ts +88 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +243 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/demo.d.ts +12 -0
- package/dist/cli/demo.d.ts.map +1 -0
- package/dist/cli/demo.js +350 -0
- package/dist/cli/demo.js.map +1 -0
- package/dist/cli/doctor.d.ts +11 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +201 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/eval.d.ts +2 -0
- package/dist/cli/eval.d.ts.map +1 -0
- package/dist/cli/eval.js +361 -0
- package/dist/cli/eval.js.map +1 -0
- package/dist/cli/explain.d.ts +2 -0
- package/dist/cli/explain.d.ts.map +1 -0
- package/dist/cli/explain.js +266 -0
- package/dist/cli/explain.js.map +1 -0
- package/dist/cli/export-sessions.d.ts +2 -0
- package/dist/cli/export-sessions.d.ts.map +1 -0
- package/dist/cli/export-sessions.js +182 -0
- package/dist/cli/export-sessions.js.map +1 -0
- package/dist/cli/export.d.ts +2 -0
- package/dist/cli/export.d.ts.map +1 -0
- package/dist/cli/export.js +222 -0
- package/dist/cli/export.js.map +1 -0
- package/dist/cli/extractors/common.d.ts +27 -0
- package/dist/cli/extractors/common.d.ts.map +1 -0
- package/dist/cli/extractors/common.js +107 -0
- package/dist/cli/extractors/common.js.map +1 -0
- package/dist/cli/extractors/generic.d.ts +37 -0
- package/dist/cli/extractors/generic.d.ts.map +1 -0
- package/dist/cli/extractors/generic.js +185 -0
- package/dist/cli/extractors/generic.js.map +1 -0
- package/dist/cli/extractors/langchain.d.ts +18 -0
- package/dist/cli/extractors/langchain.d.ts.map +1 -0
- package/dist/cli/extractors/langchain.js +86 -0
- package/dist/cli/extractors/langchain.js.map +1 -0
- package/dist/cli/extractors/vercel.d.ts +17 -0
- package/dist/cli/extractors/vercel.d.ts.map +1 -0
- package/dist/cli/extractors/vercel.js +46 -0
- package/dist/cli/extractors/vercel.js.map +1 -0
- package/dist/cli/index.d.ts +38 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +146 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.d.ts +2 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +177 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/mode.d.ts +2 -0
- package/dist/cli/mode.d.ts.map +1 -0
- package/dist/cli/mode.js +71 -0
- package/dist/cli/mode.js.map +1 -0
- package/dist/cli/onboard.d.ts +88 -0
- package/dist/cli/onboard.d.ts.map +1 -0
- package/dist/cli/onboard.js +758 -0
- package/dist/cli/onboard.js.map +1 -0
- package/dist/cli/otlp.d.ts +27 -0
- package/dist/cli/otlp.d.ts.map +1 -0
- package/dist/cli/otlp.js +79 -0
- package/dist/cli/otlp.js.map +1 -0
- package/dist/cli/package.json +1 -0
- package/dist/cli/packs.d.ts +16 -0
- package/dist/cli/packs.d.ts.map +1 -0
- package/dist/cli/packs.js +184 -0
- package/dist/cli/packs.js.map +1 -0
- package/dist/cli/patterns.d.ts +15 -0
- package/dist/cli/patterns.d.ts.map +1 -0
- package/dist/cli/patterns.js +135 -0
- package/dist/cli/patterns.js.map +1 -0
- package/dist/cli/prompt.d.ts +2 -0
- package/dist/cli/prompt.d.ts.map +1 -0
- package/dist/cli/prompt.js +54 -0
- package/dist/cli/prompt.js.map +1 -0
- package/dist/cli/replay.d.ts +2 -0
- package/dist/cli/replay.d.ts.map +1 -0
- package/dist/cli/replay.js +196 -0
- package/dist/cli/replay.js.map +1 -0
- package/dist/cli/report.d.ts +57 -0
- package/dist/cli/report.d.ts.map +1 -0
- package/dist/cli/report.js +298 -0
- package/dist/cli/report.js.map +1 -0
- package/dist/cli/scan.d.ts +2 -0
- package/dist/cli/scan.d.ts.map +1 -0
- package/dist/cli/scan.js +172 -0
- package/dist/cli/scan.js.map +1 -0
- package/dist/cli/skill.d.ts +15 -0
- package/dist/cli/skill.d.ts.map +1 -0
- package/dist/cli/skill.js +131 -0
- package/dist/cli/skill.js.map +1 -0
- package/dist/cli/tokens.d.ts +31 -0
- package/dist/cli/tokens.d.ts.map +1 -0
- package/dist/cli/tokens.js +73 -0
- package/dist/cli/tokens.js.map +1 -0
- package/dist/cli/types.d.ts +46 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +3 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/cli/validate.d.ts +19 -0
- package/dist/cli/validate.d.ts.map +1 -0
- package/dist/cli/validate.js +205 -0
- package/dist/cli/validate.js.map +1 -0
- package/dist/cli/zod.d.ts +36 -0
- package/dist/cli/zod.d.ts.map +1 -0
- package/dist/cli/zod.js +226 -0
- package/dist/cli/zod.js.map +1 -0
- package/dist/contract.d.ts +13 -13
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +21 -21
- package/dist/contract.js.map +1 -1
- package/dist/core/config-loader.d.ts +1 -1
- package/dist/core/config-loader.js +35 -17
- package/dist/core/config-loader.js.map +1 -1
- package/dist/core/grounding.d.ts +49 -2
- package/dist/core/grounding.d.ts.map +1 -1
- package/dist/core/grounding.js +302 -142
- package/dist/core/grounding.js.map +1 -1
- package/dist/core/nl-parser.d.ts.map +1 -1
- package/dist/core/nl-parser.js +74 -2
- package/dist/core/nl-parser.js.map +1 -1
- package/dist/core/pattern-factory.d.ts +4 -4
- package/dist/core/pattern-factory.d.ts.map +1 -1
- package/dist/core/pattern-factory.js +46 -4
- package/dist/core/pattern-factory.js.map +1 -1
- package/dist/core/patterns.d.ts +78 -4
- package/dist/core/patterns.d.ts.map +1 -1
- package/dist/core/patterns.js +211 -3
- package/dist/core/patterns.js.map +1 -1
- package/dist/core/spans.d.ts +1 -1
- package/dist/core/spans.d.ts.map +1 -1
- package/dist/core/spans.js.map +1 -1
- package/dist/core/sto.d.ts +32 -62
- package/dist/core/sto.d.ts.map +1 -1
- package/dist/core/sto.js +32 -90
- package/dist/core/sto.js.map +1 -1
- package/dist/index.d.ts +77 -32
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +172 -133
- package/dist/index.js.map +1 -1
- package/dist/integrations/openai-agents.d.ts.map +1 -1
- package/dist/integrations/openai-agents.js +5 -4
- package/dist/integrations/openai-agents.js.map +1 -1
- package/dist/render/tokens.d.ts.map +1 -1
- package/dist/render/tokens.js +1 -0
- package/dist/render/tokens.js.map +1 -1
- package/package.json +28 -4
- package/prompts/onboard.md +250 -0
- package/prompts/refresh.md +118 -0
- package/prompts/scan.md +125 -0
- package/skills/SKILL.md +502 -0
|
@@ -137,7 +137,7 @@ agents:
|
|
|
137
137
|
# =====================================================================
|
|
138
138
|
|
|
139
139
|
- desc: "GitHub MCP comment body must not contain ≥3 KEY=VAL secret-shape pairs"
|
|
140
|
-
|
|
140
|
+
G:
|
|
141
141
|
pattern: arg_blacklist
|
|
142
142
|
args:
|
|
143
143
|
- mcp__github__create_issue_comment
|
|
@@ -146,7 +146,7 @@ agents:
|
|
|
146
146
|
source: "incident:mcp-composition.github_comment_no_secret_shape"
|
|
147
147
|
|
|
148
148
|
- desc: "GitHub MCP comment body must not contain command substitution"
|
|
149
|
-
|
|
149
|
+
G:
|
|
150
150
|
pattern: arg_blacklist
|
|
151
151
|
args:
|
|
152
152
|
- mcp__github__create_issue_comment
|
|
@@ -164,7 +164,7 @@ agents:
|
|
|
164
164
|
# =====================================================================
|
|
165
165
|
|
|
166
166
|
- desc: "WhatsApp MCP message body must not contain ≥3 KEY=VAL secret-shape pairs"
|
|
167
|
-
|
|
167
|
+
G:
|
|
168
168
|
pattern: arg_blacklist
|
|
169
169
|
args:
|
|
170
170
|
- mcp__whatsapp__send_message
|
|
@@ -173,7 +173,7 @@ agents:
|
|
|
173
173
|
source: "incident:mcp-composition.whatsapp_body_no_secret_shape"
|
|
174
174
|
|
|
175
175
|
- desc: "WhatsApp MCP message body must not contain command substitution"
|
|
176
|
-
|
|
176
|
+
G:
|
|
177
177
|
pattern: arg_blacklist
|
|
178
178
|
args:
|
|
179
179
|
- mcp__whatsapp__send_message
|
|
@@ -205,7 +205,7 @@ agents:
|
|
|
205
205
|
# =====================================================================
|
|
206
206
|
|
|
207
207
|
- desc: "Notion create_page children must not contain ≥3 KEY=VAL secret-shape pairs"
|
|
208
|
-
|
|
208
|
+
G:
|
|
209
209
|
pattern: arg_blacklist
|
|
210
210
|
args:
|
|
211
211
|
- mcp__notion__create_page
|
|
@@ -214,7 +214,7 @@ agents:
|
|
|
214
214
|
source: "incident:mcp-composition.notion_create_no_secret_shape"
|
|
215
215
|
|
|
216
216
|
- desc: "Notion append_block_children must not contain ≥3 KEY=VAL secret-shape pairs"
|
|
217
|
-
|
|
217
|
+
G:
|
|
218
218
|
pattern: arg_blacklist
|
|
219
219
|
args:
|
|
220
220
|
- mcp__notion__append_block_children
|
|
@@ -223,7 +223,7 @@ agents:
|
|
|
223
223
|
source: "incident:mcp-composition.notion_append_no_secret_shape"
|
|
224
224
|
|
|
225
225
|
- desc: "Notion create_page children must not contain command substitution"
|
|
226
|
-
|
|
226
|
+
G:
|
|
227
227
|
pattern: arg_blacklist
|
|
228
228
|
args:
|
|
229
229
|
- mcp__notion__create_page
|
|
@@ -258,7 +258,7 @@ agents:
|
|
|
258
258
|
# =====================================================================
|
|
259
259
|
|
|
260
260
|
- desc: "Gist files content must not contain ≥3 KEY=VAL secret-shape pairs"
|
|
261
|
-
|
|
261
|
+
G:
|
|
262
262
|
pattern: arg_blacklist
|
|
263
263
|
args:
|
|
264
264
|
- mcp__gh_gist__create_gist
|
|
@@ -267,7 +267,7 @@ agents:
|
|
|
267
267
|
source: "incident:mcp-composition.gist_no_secret_shape"
|
|
268
268
|
|
|
269
269
|
- desc: "Gist files content must not contain command substitution"
|
|
270
|
-
|
|
270
|
+
G:
|
|
271
271
|
pattern: arg_blacklist
|
|
272
272
|
args:
|
|
273
273
|
- mcp__gh_gist__create_gist
|
|
@@ -276,7 +276,7 @@ agents:
|
|
|
276
276
|
source: "incident:mcp-composition.gist_no_subst"
|
|
277
277
|
|
|
278
278
|
- desc: "Gist files content must not contain ≥2 salary amounts (typical employee-list leak)"
|
|
279
|
-
|
|
279
|
+
G:
|
|
280
280
|
pattern: arg_blacklist
|
|
281
281
|
args:
|
|
282
282
|
- mcp__gh_gist__create_gist
|
|
@@ -285,7 +285,7 @@ agents:
|
|
|
285
285
|
source: "incident:mcp-composition.gist_no_multi_salary"
|
|
286
286
|
|
|
287
287
|
- desc: "Gist files content must not contain employment-termination language (PIP / fired / exit-by)"
|
|
288
|
-
|
|
288
|
+
G:
|
|
289
289
|
pattern: arg_blacklist
|
|
290
290
|
args:
|
|
291
291
|
- mcp__gh_gist__create_gist
|
|
@@ -294,7 +294,7 @@ agents:
|
|
|
294
294
|
source: "incident:mcp-composition.gist_no_termination_lang"
|
|
295
295
|
|
|
296
296
|
- desc: "Gist files content must not contain ≥2 customer ARR/MRR figures (customer-list leak)"
|
|
297
|
-
|
|
297
|
+
G:
|
|
298
298
|
pattern: arg_blacklist
|
|
299
299
|
args:
|
|
300
300
|
- mcp__gh_gist__create_gist
|
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
# Sponsio contract pack for OpenClaw (née Clawdbot / Moltbot)
|
|
3
3
|
# Target: OpenClaw local gateway, v2026.2.12 or newer
|
|
4
4
|
#
|
|
5
|
+
# Mixed det / sto pack: the §0 LLM-output contracts (injection_free,
|
|
6
|
+
# jailbreak_free, harmful, semantic_pii_free, toxic_free) and §9
|
|
7
|
+
# capability-specific atoms (scope_respect) are LLM-judged stochastic
|
|
8
|
+
# atoms that require Sponsio Cloud (`pip install sponsio[cloud]`). The
|
|
9
|
+
# OSS engine refuses to load them with a clear pointer; det rules in §1–§8
|
|
10
|
+
# load and enforce as usual either way. Cloud installs activate the full
|
|
11
|
+
# pack transparently via the `sponsio.evaluators` entry-point group.
|
|
12
|
+
#
|
|
5
13
|
# Schema conventions used in this file:
|
|
6
14
|
# - `desc:` — human-readable explanation (rendering only)
|
|
7
15
|
# - `E:` with `pattern:` — structured, uses sponsio.patterns.library
|
|
@@ -93,44 +101,44 @@ agents:
|
|
|
93
101
|
# =====================================================================
|
|
94
102
|
|
|
95
103
|
- desc: "No prompt injection in any LLM response"
|
|
96
|
-
|
|
104
|
+
G:
|
|
97
105
|
pattern: injection_free
|
|
98
106
|
context_scope: full_trace
|
|
99
107
|
source: "library:tier0.adversarial"
|
|
100
108
|
beta: 0.95
|
|
101
109
|
|
|
102
110
|
- desc: "No jailbreak compliance in any LLM response"
|
|
103
|
-
|
|
111
|
+
G:
|
|
104
112
|
pattern: jailbreak_free
|
|
105
113
|
source: "library:tier0.adversarial"
|
|
106
114
|
beta: 0.9
|
|
107
115
|
|
|
108
116
|
- desc: "No harmful advice or facilitation of real-world harm"
|
|
109
|
-
|
|
117
|
+
G:
|
|
110
118
|
pattern: harmful
|
|
111
119
|
source: "library:tier0.harm"
|
|
112
120
|
beta: 0.95
|
|
113
121
|
|
|
114
122
|
- desc: "Response free of contextual PII"
|
|
115
|
-
|
|
123
|
+
G:
|
|
116
124
|
pattern: semantic_pii_free
|
|
117
125
|
source: "library:tier0.privacy"
|
|
118
126
|
beta: 0.95
|
|
119
127
|
|
|
120
128
|
- desc: "Response free of toxic or harassing language"
|
|
121
|
-
|
|
129
|
+
G:
|
|
122
130
|
pattern: toxic_free
|
|
123
131
|
source: "library:tier0.harm"
|
|
124
132
|
beta: 0.9
|
|
125
133
|
|
|
126
134
|
- desc: "Total token usage bounded per session"
|
|
127
|
-
|
|
135
|
+
G:
|
|
128
136
|
pattern: token_budget
|
|
129
137
|
args: [200000, "total"]
|
|
130
138
|
source: "library:tier0.budget"
|
|
131
139
|
|
|
132
140
|
- desc: "No consecutive repetition of the same tool beyond a sane limit"
|
|
133
|
-
|
|
141
|
+
G:
|
|
134
142
|
pattern: loop_detection
|
|
135
143
|
args: [exec, 5]
|
|
136
144
|
source: "library:tier0.runaway"
|
|
@@ -141,7 +149,7 @@ agents:
|
|
|
141
149
|
# =====================================================================
|
|
142
150
|
|
|
143
151
|
- desc: "Ban classic destructive shell patterns"
|
|
144
|
-
|
|
152
|
+
G:
|
|
145
153
|
pattern: arg_blacklist
|
|
146
154
|
args:
|
|
147
155
|
- exec
|
|
@@ -154,7 +162,7 @@ agents:
|
|
|
154
162
|
# command token; unconstrained `\<newline>` appears legitimately
|
|
155
163
|
# in Makefiles / Dockerfiles / shell scripts.
|
|
156
164
|
- desc: "Block shell line-continuation chained into a privileged command (CVE-2026-28460)"
|
|
157
|
-
|
|
165
|
+
G:
|
|
158
166
|
pattern: arg_blacklist
|
|
159
167
|
args:
|
|
160
168
|
- exec
|
|
@@ -164,19 +172,19 @@ agents:
|
|
|
164
172
|
source: "incident:CVE-2026-28460"
|
|
165
173
|
|
|
166
174
|
- desc: "Block --yolo / --no-confirm flags on skill invocations"
|
|
167
|
-
|
|
175
|
+
G:
|
|
168
176
|
pattern: arg_blacklist
|
|
169
177
|
args: [run_skill, args, ["--yolo\\b", "--no-confirm\\b"]]
|
|
170
178
|
source: "incident:issue-12515"
|
|
171
179
|
|
|
172
180
|
- desc: "Reject exec commands with suspiciously long inline payloads"
|
|
173
|
-
|
|
181
|
+
G:
|
|
174
182
|
pattern: arg_length_limit
|
|
175
183
|
args: [exec, command, 2000]
|
|
176
184
|
source: "library:tier1.shell"
|
|
177
185
|
|
|
178
186
|
- desc: "Blast-radius cap: at most 10 exec calls per session"
|
|
179
|
-
|
|
187
|
+
G:
|
|
180
188
|
pattern: rate_limit
|
|
181
189
|
args: [exec, 10]
|
|
182
190
|
source: "library:tier1.shell"
|
|
@@ -185,7 +193,7 @@ agents:
|
|
|
185
193
|
# confirm_reconfirmed. The existing must_confirm pattern is unconditional
|
|
186
194
|
# on tool name; we want it conditional on the argument content. LTL form.
|
|
187
195
|
- desc: "Privileged exec patterns require a preceding human confirmation"
|
|
188
|
-
|
|
196
|
+
G:
|
|
189
197
|
ltl: 'G(called_with(exec, "(sudo|dd\\s+if=|chmod\\s+777)") -> count(confirm_reconfirmed) >= count_with(exec, "(sudo|dd\\s+if=|chmod\\s+777)"))'
|
|
190
198
|
source: "library:tier1.shell"
|
|
191
199
|
|
|
@@ -196,7 +204,7 @@ agents:
|
|
|
196
204
|
# =====================================================================
|
|
197
205
|
|
|
198
206
|
- desc: "Ban gateway config keys that disable sandbox or approvals"
|
|
199
|
-
|
|
207
|
+
G:
|
|
200
208
|
pattern: arg_blacklist
|
|
201
209
|
args:
|
|
202
210
|
- gateway_config_set
|
|
@@ -205,13 +213,13 @@ agents:
|
|
|
205
213
|
source: "incident:CVE-2026-25253"
|
|
206
214
|
|
|
207
215
|
- desc: "Admin config changes extremely rare"
|
|
208
|
-
|
|
216
|
+
G:
|
|
209
217
|
pattern: rate_limit
|
|
210
218
|
args: [gateway_config_set, 1]
|
|
211
219
|
source: "incident:CVE-2026-25253"
|
|
212
220
|
|
|
213
221
|
- desc: "Every admin config change must be followed by an audit-log entry"
|
|
214
|
-
|
|
222
|
+
G:
|
|
215
223
|
pattern: always_followed_by
|
|
216
224
|
args: [gateway_config_set, audit_log]
|
|
217
225
|
source: "incident:CVE-2026-25253"
|
|
@@ -222,7 +230,7 @@ agents:
|
|
|
222
230
|
# =====================================================================
|
|
223
231
|
|
|
224
232
|
- desc: "Reads restricted to workspace and /tmp"
|
|
225
|
-
|
|
233
|
+
G:
|
|
226
234
|
pattern: scope_limit
|
|
227
235
|
args:
|
|
228
236
|
- read
|
|
@@ -230,7 +238,7 @@ agents:
|
|
|
230
238
|
source: "library:tier1.filesystem"
|
|
231
239
|
|
|
232
240
|
- desc: "Hard-deny reads of sensitive paths (SSH, AWS, OpenClaw secrets)"
|
|
233
|
-
|
|
241
|
+
G:
|
|
234
242
|
pattern: arg_blacklist
|
|
235
243
|
args:
|
|
236
244
|
- read
|
|
@@ -239,7 +247,7 @@ agents:
|
|
|
239
247
|
source: "incident:weather-skill"
|
|
240
248
|
|
|
241
249
|
- desc: "Writes restricted to workspace"
|
|
242
|
-
|
|
250
|
+
G:
|
|
243
251
|
pattern: scope_limit
|
|
244
252
|
args:
|
|
245
253
|
- write
|
|
@@ -248,23 +256,23 @@ agents:
|
|
|
248
256
|
|
|
249
257
|
# Bootstrap-file self-modification — conditional on the path.
|
|
250
258
|
- desc: "Self-modification of bootstrap files requires confirmation"
|
|
251
|
-
|
|
259
|
+
G:
|
|
252
260
|
ltl: 'G(called_with(edit, "(AGENTS|SOUL|IDENTITY|USER)\\.md") -> count(confirm_reconfirmed) >= count_with(edit, "(AGENTS|SOUL|IDENTITY|USER)\\.md"))'
|
|
253
261
|
source: "library:tier1.persistent_memory"
|
|
254
262
|
|
|
255
263
|
- desc: "apply_patch against SOUL.md always requires confirmation"
|
|
256
|
-
|
|
264
|
+
G:
|
|
257
265
|
ltl: 'G(called_with(apply_patch, "SOUL\\.md") -> count(confirm_reconfirmed) >= count_with(apply_patch, "SOUL\\.md"))'
|
|
258
266
|
source: "library:tier1.persistent_memory"
|
|
259
267
|
|
|
260
268
|
- desc: "No blind edits — must read a path before editing it"
|
|
261
|
-
|
|
269
|
+
G:
|
|
262
270
|
pattern: must_precede
|
|
263
271
|
args: [read, edit]
|
|
264
272
|
source: "library:tier1.filesystem"
|
|
265
273
|
|
|
266
274
|
- desc: "Bootstrap files preserve integrity"
|
|
267
|
-
|
|
275
|
+
G:
|
|
268
276
|
pattern: data_intact
|
|
269
277
|
args:
|
|
270
278
|
- "bootstrap_files"
|
|
@@ -278,31 +286,31 @@ agents:
|
|
|
278
286
|
# =====================================================================
|
|
279
287
|
|
|
280
288
|
- desc: "Install and run are segregated"
|
|
281
|
-
|
|
289
|
+
G:
|
|
282
290
|
pattern: segregation_of_duty
|
|
283
291
|
args: [install_skill, run_skill]
|
|
284
292
|
source: "incident:ClawHavoc"
|
|
285
293
|
|
|
286
294
|
- desc: "Every skill install followed by an audit-log entry"
|
|
287
|
-
|
|
295
|
+
G:
|
|
288
296
|
pattern: always_followed_by
|
|
289
297
|
args: [install_skill, audit_log]
|
|
290
298
|
source: "incident:ClawHavoc"
|
|
291
299
|
|
|
292
300
|
- desc: "At most 3 skill installs per session"
|
|
293
|
-
|
|
301
|
+
G:
|
|
294
302
|
pattern: rate_limit
|
|
295
303
|
args: [install_skill, 3]
|
|
296
304
|
source: "incident:ClawHavoc"
|
|
297
305
|
|
|
298
306
|
- desc: "Cooldown of 10 steps between skill installs"
|
|
299
|
-
|
|
307
|
+
G:
|
|
300
308
|
pattern: cooldown
|
|
301
309
|
args: [install_skill, 10]
|
|
302
310
|
source: "incident:ClawHavoc"
|
|
303
311
|
|
|
304
312
|
- desc: "Typosquat defense — ban ClawHub official-CLI impersonators"
|
|
305
|
-
|
|
313
|
+
G:
|
|
306
314
|
pattern: arg_blacklist
|
|
307
315
|
args:
|
|
308
316
|
- install_skill
|
|
@@ -313,7 +321,7 @@ agents:
|
|
|
313
321
|
# After a fresh install, no exec for 5 steps (VirusTotal scan window).
|
|
314
322
|
# No clean pattern fit; LTL expresses windowed inhibition.
|
|
315
323
|
- desc: "After install_skill, no exec for at least 5 steps"
|
|
316
|
-
|
|
324
|
+
G:
|
|
317
325
|
ltl: "G(called(install_skill) -> (!called(exec) & X(!called(exec) & X(!called(exec) & X(!called(exec) & X(!called(exec)))))))"
|
|
318
326
|
source: "incident:ClawHavoc"
|
|
319
327
|
|
|
@@ -332,7 +340,7 @@ agents:
|
|
|
332
340
|
# to external (non-owner) channels should add it via
|
|
333
341
|
# customized: — see the commented example below.
|
|
334
342
|
- desc: "After untrusted content ingest, sensitive sinks require re-confirmation"
|
|
335
|
-
|
|
343
|
+
G:
|
|
336
344
|
pattern: untrusted_source_gate
|
|
337
345
|
args:
|
|
338
346
|
- [web_fetch]
|
|
@@ -351,7 +359,7 @@ agents:
|
|
|
351
359
|
# source: "incident:CVE-2026-22708"
|
|
352
360
|
|
|
353
361
|
- desc: "Web browsing loops bounded — prevents attacker-controlled chain-redirect ingestion"
|
|
354
|
-
|
|
362
|
+
G:
|
|
355
363
|
pattern: rate_limit
|
|
356
364
|
args: [web_fetch, 25]
|
|
357
365
|
source: "incident:CVE-2026-22708"
|
|
@@ -360,7 +368,7 @@ agents:
|
|
|
360
368
|
# to external recipients. Depends on integration emitting
|
|
361
369
|
# data_write(key=fetched_content, contains=[untrusted]) after web_fetch.
|
|
362
370
|
- desc: "Content tainted as untrusted must not flow to external recipients"
|
|
363
|
-
|
|
371
|
+
G:
|
|
364
372
|
ltl: "G(contains(untrusted) -> !flow(<agent>, external))"
|
|
365
373
|
source: "incident:CVE-2026-22708"
|
|
366
374
|
|
|
@@ -369,19 +377,19 @@ agents:
|
|
|
369
377
|
# =====================================================================
|
|
370
378
|
|
|
371
379
|
- desc: "Data read from filesystem must not flow to send_message"
|
|
372
|
-
|
|
380
|
+
G:
|
|
373
381
|
pattern: no_data_leak
|
|
374
382
|
args: [read, send_message]
|
|
375
383
|
source: "incident:weather-skill"
|
|
376
384
|
|
|
377
385
|
- desc: "Data read from filesystem must not flow to install_skill"
|
|
378
|
-
|
|
386
|
+
G:
|
|
379
387
|
pattern: no_data_leak
|
|
380
388
|
args: [read, install_skill]
|
|
381
389
|
source: "incident:AMOS"
|
|
382
390
|
|
|
383
391
|
- desc: "Block outbound exfiltration primitives in shell"
|
|
384
|
-
|
|
392
|
+
G:
|
|
385
393
|
pattern: arg_blacklist
|
|
386
394
|
args:
|
|
387
395
|
- exec
|
|
@@ -398,30 +406,30 @@ agents:
|
|
|
398
406
|
# Group-channel messages must not be followed by exec. LTL expresses the
|
|
399
407
|
# channel_type=group condition cleanly.
|
|
400
408
|
- desc: "Messages from group channels cannot trigger exec"
|
|
401
|
-
|
|
409
|
+
G:
|
|
402
410
|
ltl: 'G(called_with(send_message, "channel_type=group") -> !F(called(exec)))'
|
|
403
411
|
source: "library:tier1.messaging"
|
|
404
412
|
|
|
405
413
|
- desc: "Per-session cap on outbound messages"
|
|
406
|
-
|
|
414
|
+
G:
|
|
407
415
|
pattern: rate_limit
|
|
408
416
|
args: [send_message, 30]
|
|
409
417
|
source: "library:tier1.messaging"
|
|
410
418
|
|
|
411
419
|
- desc: "Cron creation is idempotent within a session"
|
|
412
|
-
|
|
420
|
+
G:
|
|
413
421
|
pattern: idempotent
|
|
414
422
|
args: [cron_create]
|
|
415
423
|
source: "library:tier1.scheduler"
|
|
416
424
|
|
|
417
425
|
- desc: "Every cron_create must eventually be matched by cron_complete"
|
|
418
|
-
|
|
426
|
+
G:
|
|
419
427
|
pattern: required_steps_completion
|
|
420
428
|
args: [cron_create, [cron_complete]]
|
|
421
429
|
source: "library:tier1.scheduler"
|
|
422
430
|
|
|
423
431
|
- desc: "Hook / webhook registration requires human confirmation"
|
|
424
|
-
|
|
432
|
+
G:
|
|
425
433
|
pattern: must_confirm
|
|
426
434
|
args: [hook_register]
|
|
427
435
|
source: "library:tier1.persistence"
|
|
@@ -443,13 +451,13 @@ agents:
|
|
|
443
451
|
|
|
444
452
|
- desc: "Confirmations cannot be reused — count(confirm) must dominate count(exec)"
|
|
445
453
|
A: "called `confirm_reconfirmed`"
|
|
446
|
-
|
|
454
|
+
G:
|
|
447
455
|
ltl: "G(called(exec) -> count(confirm_reconfirmed) >= count(exec))"
|
|
448
456
|
source: "incident:CVE-2026-29607"
|
|
449
457
|
|
|
450
458
|
- desc: "Same for apply_patch — each apply needs its own confirm"
|
|
451
459
|
A: "called `confirm_reconfirmed`"
|
|
452
|
-
|
|
460
|
+
G:
|
|
453
461
|
ltl: "G(called(apply_patch) -> count(confirm_reconfirmed) >= count(apply_patch))"
|
|
454
462
|
source: "incident:CVE-2026-29607"
|
|
455
463
|
|
|
@@ -459,21 +467,21 @@ agents:
|
|
|
459
467
|
|
|
460
468
|
- desc: "After web_fetch, responses stay grounded in the fetched content"
|
|
461
469
|
A: "called `web_fetch`"
|
|
462
|
-
|
|
470
|
+
G:
|
|
463
471
|
pattern: hallucination_free
|
|
464
472
|
args: ["{fetched_content}"]
|
|
465
473
|
source: "library:tier1.browser"
|
|
466
474
|
beta: 0.9
|
|
467
475
|
|
|
468
476
|
- desc: "Agent stays within its declared scope"
|
|
469
|
-
|
|
477
|
+
G:
|
|
470
478
|
pattern: scope_respect
|
|
471
479
|
args: ["local personal assistant — file, shell, messaging, browsing on behalf of owner"]
|
|
472
480
|
source: "library:tier0.scope"
|
|
473
481
|
beta: 0.85
|
|
474
482
|
|
|
475
483
|
- desc: "Agent does not agree to disable its own safety constraints (anti-guilttrip)"
|
|
476
|
-
|
|
484
|
+
G:
|
|
477
485
|
pattern: jailbreak_free
|
|
478
486
|
source: "incident:wired-guilttrip"
|
|
479
487
|
beta: 0.95
|
|
@@ -81,7 +81,7 @@ agents:
|
|
|
81
81
|
# =================================================================
|
|
82
82
|
|
|
83
83
|
- desc: "Sub-agents may not edit sponsio configuration files"
|
|
84
|
-
|
|
84
|
+
G:
|
|
85
85
|
pattern: arg_blacklist
|
|
86
86
|
args:
|
|
87
87
|
- Edit
|
|
@@ -106,7 +106,7 @@ agents:
|
|
|
106
106
|
# =================================================================
|
|
107
107
|
|
|
108
108
|
- desc: "Sub-agents may not write sponsio configuration files"
|
|
109
|
-
|
|
109
|
+
G:
|
|
110
110
|
pattern: arg_blacklist
|
|
111
111
|
args:
|
|
112
112
|
- Write
|
|
@@ -121,7 +121,7 @@ agents:
|
|
|
121
121
|
# =================================================================
|
|
122
122
|
|
|
123
123
|
- desc: "Sub-agents may not multi-edit sponsio configuration files"
|
|
124
|
-
|
|
124
|
+
G:
|
|
125
125
|
pattern: arg_blacklist
|
|
126
126
|
args:
|
|
127
127
|
- MultiEdit
|
|
@@ -151,7 +151,7 @@ agents:
|
|
|
151
151
|
# own rule lists.
|
|
152
152
|
|
|
153
153
|
- desc: "Sub-agents may not read host plugin guard rules (recon defence)"
|
|
154
|
-
|
|
154
|
+
G:
|
|
155
155
|
pattern: arg_blacklist
|
|
156
156
|
args:
|
|
157
157
|
- Read
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/cli/check.ts"],"names":[],"mappings":"AA6JA,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoH/D"}
|