@sponsio/sdk 0.1.0-alpha.3 → 0.2.0-alpha.4
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/benchmark/agentdojo.yaml +551 -0
- package/contracts/benchmark/odcv_bench.yaml +393 -0
- package/contracts/benchmark/redcode_exec.yaml +488 -0
- package/contracts/benchmark/swebench.yaml +176 -0
- package/contracts/benchmark/tau2_bench.yaml +984 -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 +21 -13
- package/contracts/incident/claude-code-secret-bypass.yaml +11 -12
- package/contracts/incident/cursor-railway-wipe.yaml +3 -3
- package/contracts/incident/mcp-composition.yaml +12 -12
- package/contracts/incident/openclaw.yaml +54 -45
- package/contracts/incident/subagent-escape.yaml +4 -4
- package/contracts/premium/.gitkeep +5 -6
- 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 +16 -0
- package/dist/cli/patterns.d.ts.map +1 -0
- package/dist/cli/patterns.js +136 -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.d.ts.map +1 -1
- package/dist/core/config-loader.js +100 -26
- package/dist/core/config-loader.js.map +1 -1
- package/dist/core/evaluator.d.ts +9 -1
- package/dist/core/evaluator.d.ts.map +1 -1
- package/dist/core/evaluator.js +189 -13
- package/dist/core/evaluator.js.map +1 -1
- package/dist/core/formula.d.ts +76 -17
- package/dist/core/formula.d.ts.map +1 -1
- package/dist/core/formula.js +83 -1
- package/dist/core/formula.js.map +1 -1
- package/dist/core/grounding.d.ts +50 -3
- package/dist/core/grounding.d.ts.map +1 -1
- package/dist/core/grounding.js +317 -141
- package/dist/core/grounding.js.map +1 -1
- package/dist/core/nl-parser.d.ts +1 -1
- package/dist/core/nl-parser.d.ts.map +1 -1
- package/dist/core/nl-parser.js +76 -4
- package/dist/core/nl-parser.js.map +1 -1
- package/dist/core/pack-loader.d.ts.map +1 -1
- package/dist/core/pack-loader.js +14 -2
- package/dist/core/pack-loader.js.map +1 -1
- package/dist/core/parser.d.ts.map +1 -1
- package/dist/core/parser.js +30 -1
- package/dist/core/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 +53 -4
- package/dist/core/pattern-factory.js.map +1 -1
- package/dist/core/patterns.d.ts +127 -5
- package/dist/core/patterns.d.ts.map +1 -1
- package/dist/core/patterns.js +267 -3
- package/dist/core/patterns.js.map +1 -1
- package/dist/core/session-log.d.ts.map +1 -1
- package/dist/core/session-log.js +20 -1
- package/dist/core/session-log.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 +30 -66
- package/dist/core/sto.d.ts.map +1 -1
- package/dist/core/sto.js +39 -100
- package/dist/core/sto.js.map +1 -1
- package/dist/index.d.ts +83 -33
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +194 -142
- package/dist/index.js.map +1 -1
- package/dist/integrations/openai-agents.d.ts.map +1 -1
- package/dist/integrations/openai-agents.js +6 -4
- package/dist/integrations/openai-agents.js.map +1 -1
- package/dist/integrations/vercel-ai.d.ts.map +1 -1
- package/dist/integrations/vercel-ai.js +21 -3
- package/dist/integrations/vercel-ai.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 +35 -7
- package/prompts/onboard.md +246 -0
- package/prompts/scan.md +123 -0
- package/skills/SKILL.md +432 -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,15 @@
|
|
|
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 are not supported in this build (the engine is
|
|
9
|
+
# deterministic-only). The engine refuses to load them; det rules in
|
|
10
|
+
# §1–§8 load and enforce as usual either way. External builds with a
|
|
11
|
+
# real StoEvaluator activate the full pack transparently via the
|
|
12
|
+
# `sponsio.evaluators` entry-point group.
|
|
13
|
+
#
|
|
5
14
|
# Schema conventions used in this file:
|
|
6
15
|
# - `desc:` — human-readable explanation (rendering only)
|
|
7
16
|
# - `E:` with `pattern:` — structured, uses sponsio.patterns.library
|
|
@@ -93,44 +102,44 @@ agents:
|
|
|
93
102
|
# =====================================================================
|
|
94
103
|
|
|
95
104
|
- desc: "No prompt injection in any LLM response"
|
|
96
|
-
|
|
105
|
+
G:
|
|
97
106
|
pattern: injection_free
|
|
98
107
|
context_scope: full_trace
|
|
99
108
|
source: "library:tier0.adversarial"
|
|
100
109
|
beta: 0.95
|
|
101
110
|
|
|
102
111
|
- desc: "No jailbreak compliance in any LLM response"
|
|
103
|
-
|
|
112
|
+
G:
|
|
104
113
|
pattern: jailbreak_free
|
|
105
114
|
source: "library:tier0.adversarial"
|
|
106
115
|
beta: 0.9
|
|
107
116
|
|
|
108
117
|
- desc: "No harmful advice or facilitation of real-world harm"
|
|
109
|
-
|
|
118
|
+
G:
|
|
110
119
|
pattern: harmful
|
|
111
120
|
source: "library:tier0.harm"
|
|
112
121
|
beta: 0.95
|
|
113
122
|
|
|
114
123
|
- desc: "Response free of contextual PII"
|
|
115
|
-
|
|
124
|
+
G:
|
|
116
125
|
pattern: semantic_pii_free
|
|
117
126
|
source: "library:tier0.privacy"
|
|
118
127
|
beta: 0.95
|
|
119
128
|
|
|
120
129
|
- desc: "Response free of toxic or harassing language"
|
|
121
|
-
|
|
130
|
+
G:
|
|
122
131
|
pattern: toxic_free
|
|
123
132
|
source: "library:tier0.harm"
|
|
124
133
|
beta: 0.9
|
|
125
134
|
|
|
126
135
|
- desc: "Total token usage bounded per session"
|
|
127
|
-
|
|
136
|
+
G:
|
|
128
137
|
pattern: token_budget
|
|
129
138
|
args: [200000, "total"]
|
|
130
139
|
source: "library:tier0.budget"
|
|
131
140
|
|
|
132
141
|
- desc: "No consecutive repetition of the same tool beyond a sane limit"
|
|
133
|
-
|
|
142
|
+
G:
|
|
134
143
|
pattern: loop_detection
|
|
135
144
|
args: [exec, 5]
|
|
136
145
|
source: "library:tier0.runaway"
|
|
@@ -141,7 +150,7 @@ agents:
|
|
|
141
150
|
# =====================================================================
|
|
142
151
|
|
|
143
152
|
- desc: "Ban classic destructive shell patterns"
|
|
144
|
-
|
|
153
|
+
G:
|
|
145
154
|
pattern: arg_blacklist
|
|
146
155
|
args:
|
|
147
156
|
- exec
|
|
@@ -154,7 +163,7 @@ agents:
|
|
|
154
163
|
# command token; unconstrained `\<newline>` appears legitimately
|
|
155
164
|
# in Makefiles / Dockerfiles / shell scripts.
|
|
156
165
|
- desc: "Block shell line-continuation chained into a privileged command (CVE-2026-28460)"
|
|
157
|
-
|
|
166
|
+
G:
|
|
158
167
|
pattern: arg_blacklist
|
|
159
168
|
args:
|
|
160
169
|
- exec
|
|
@@ -164,19 +173,19 @@ agents:
|
|
|
164
173
|
source: "incident:CVE-2026-28460"
|
|
165
174
|
|
|
166
175
|
- desc: "Block --yolo / --no-confirm flags on skill invocations"
|
|
167
|
-
|
|
176
|
+
G:
|
|
168
177
|
pattern: arg_blacklist
|
|
169
178
|
args: [run_skill, args, ["--yolo\\b", "--no-confirm\\b"]]
|
|
170
179
|
source: "incident:issue-12515"
|
|
171
180
|
|
|
172
181
|
- desc: "Reject exec commands with suspiciously long inline payloads"
|
|
173
|
-
|
|
182
|
+
G:
|
|
174
183
|
pattern: arg_length_limit
|
|
175
184
|
args: [exec, command, 2000]
|
|
176
185
|
source: "library:tier1.shell"
|
|
177
186
|
|
|
178
187
|
- desc: "Blast-radius cap: at most 10 exec calls per session"
|
|
179
|
-
|
|
188
|
+
G:
|
|
180
189
|
pattern: rate_limit
|
|
181
190
|
args: [exec, 10]
|
|
182
191
|
source: "library:tier1.shell"
|
|
@@ -185,7 +194,7 @@ agents:
|
|
|
185
194
|
# confirm_reconfirmed. The existing must_confirm pattern is unconditional
|
|
186
195
|
# on tool name; we want it conditional on the argument content. LTL form.
|
|
187
196
|
- desc: "Privileged exec patterns require a preceding human confirmation"
|
|
188
|
-
|
|
197
|
+
G:
|
|
189
198
|
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
199
|
source: "library:tier1.shell"
|
|
191
200
|
|
|
@@ -196,7 +205,7 @@ agents:
|
|
|
196
205
|
# =====================================================================
|
|
197
206
|
|
|
198
207
|
- desc: "Ban gateway config keys that disable sandbox or approvals"
|
|
199
|
-
|
|
208
|
+
G:
|
|
200
209
|
pattern: arg_blacklist
|
|
201
210
|
args:
|
|
202
211
|
- gateway_config_set
|
|
@@ -205,13 +214,13 @@ agents:
|
|
|
205
214
|
source: "incident:CVE-2026-25253"
|
|
206
215
|
|
|
207
216
|
- desc: "Admin config changes extremely rare"
|
|
208
|
-
|
|
217
|
+
G:
|
|
209
218
|
pattern: rate_limit
|
|
210
219
|
args: [gateway_config_set, 1]
|
|
211
220
|
source: "incident:CVE-2026-25253"
|
|
212
221
|
|
|
213
222
|
- desc: "Every admin config change must be followed by an audit-log entry"
|
|
214
|
-
|
|
223
|
+
G:
|
|
215
224
|
pattern: always_followed_by
|
|
216
225
|
args: [gateway_config_set, audit_log]
|
|
217
226
|
source: "incident:CVE-2026-25253"
|
|
@@ -222,7 +231,7 @@ agents:
|
|
|
222
231
|
# =====================================================================
|
|
223
232
|
|
|
224
233
|
- desc: "Reads restricted to workspace and /tmp"
|
|
225
|
-
|
|
234
|
+
G:
|
|
226
235
|
pattern: scope_limit
|
|
227
236
|
args:
|
|
228
237
|
- read
|
|
@@ -230,7 +239,7 @@ agents:
|
|
|
230
239
|
source: "library:tier1.filesystem"
|
|
231
240
|
|
|
232
241
|
- desc: "Hard-deny reads of sensitive paths (SSH, AWS, OpenClaw secrets)"
|
|
233
|
-
|
|
242
|
+
G:
|
|
234
243
|
pattern: arg_blacklist
|
|
235
244
|
args:
|
|
236
245
|
- read
|
|
@@ -239,7 +248,7 @@ agents:
|
|
|
239
248
|
source: "incident:weather-skill"
|
|
240
249
|
|
|
241
250
|
- desc: "Writes restricted to workspace"
|
|
242
|
-
|
|
251
|
+
G:
|
|
243
252
|
pattern: scope_limit
|
|
244
253
|
args:
|
|
245
254
|
- write
|
|
@@ -248,23 +257,23 @@ agents:
|
|
|
248
257
|
|
|
249
258
|
# Bootstrap-file self-modification — conditional on the path.
|
|
250
259
|
- desc: "Self-modification of bootstrap files requires confirmation"
|
|
251
|
-
|
|
260
|
+
G:
|
|
252
261
|
ltl: 'G(called_with(edit, "(AGENTS|SOUL|IDENTITY|USER)\\.md") -> count(confirm_reconfirmed) >= count_with(edit, "(AGENTS|SOUL|IDENTITY|USER)\\.md"))'
|
|
253
262
|
source: "library:tier1.persistent_memory"
|
|
254
263
|
|
|
255
264
|
- desc: "apply_patch against SOUL.md always requires confirmation"
|
|
256
|
-
|
|
265
|
+
G:
|
|
257
266
|
ltl: 'G(called_with(apply_patch, "SOUL\\.md") -> count(confirm_reconfirmed) >= count_with(apply_patch, "SOUL\\.md"))'
|
|
258
267
|
source: "library:tier1.persistent_memory"
|
|
259
268
|
|
|
260
269
|
- desc: "No blind edits — must read a path before editing it"
|
|
261
|
-
|
|
270
|
+
G:
|
|
262
271
|
pattern: must_precede
|
|
263
272
|
args: [read, edit]
|
|
264
273
|
source: "library:tier1.filesystem"
|
|
265
274
|
|
|
266
275
|
- desc: "Bootstrap files preserve integrity"
|
|
267
|
-
|
|
276
|
+
G:
|
|
268
277
|
pattern: data_intact
|
|
269
278
|
args:
|
|
270
279
|
- "bootstrap_files"
|
|
@@ -278,31 +287,31 @@ agents:
|
|
|
278
287
|
# =====================================================================
|
|
279
288
|
|
|
280
289
|
- desc: "Install and run are segregated"
|
|
281
|
-
|
|
290
|
+
G:
|
|
282
291
|
pattern: segregation_of_duty
|
|
283
292
|
args: [install_skill, run_skill]
|
|
284
293
|
source: "incident:ClawHavoc"
|
|
285
294
|
|
|
286
295
|
- desc: "Every skill install followed by an audit-log entry"
|
|
287
|
-
|
|
296
|
+
G:
|
|
288
297
|
pattern: always_followed_by
|
|
289
298
|
args: [install_skill, audit_log]
|
|
290
299
|
source: "incident:ClawHavoc"
|
|
291
300
|
|
|
292
301
|
- desc: "At most 3 skill installs per session"
|
|
293
|
-
|
|
302
|
+
G:
|
|
294
303
|
pattern: rate_limit
|
|
295
304
|
args: [install_skill, 3]
|
|
296
305
|
source: "incident:ClawHavoc"
|
|
297
306
|
|
|
298
307
|
- desc: "Cooldown of 10 steps between skill installs"
|
|
299
|
-
|
|
308
|
+
G:
|
|
300
309
|
pattern: cooldown
|
|
301
310
|
args: [install_skill, 10]
|
|
302
311
|
source: "incident:ClawHavoc"
|
|
303
312
|
|
|
304
313
|
- desc: "Typosquat defense — ban ClawHub official-CLI impersonators"
|
|
305
|
-
|
|
314
|
+
G:
|
|
306
315
|
pattern: arg_blacklist
|
|
307
316
|
args:
|
|
308
317
|
- install_skill
|
|
@@ -313,7 +322,7 @@ agents:
|
|
|
313
322
|
# After a fresh install, no exec for 5 steps (VirusTotal scan window).
|
|
314
323
|
# No clean pattern fit; LTL expresses windowed inhibition.
|
|
315
324
|
- desc: "After install_skill, no exec for at least 5 steps"
|
|
316
|
-
|
|
325
|
+
G:
|
|
317
326
|
ltl: "G(called(install_skill) -> (!called(exec) & X(!called(exec) & X(!called(exec) & X(!called(exec) & X(!called(exec)))))))"
|
|
318
327
|
source: "incident:ClawHavoc"
|
|
319
328
|
|
|
@@ -332,7 +341,7 @@ agents:
|
|
|
332
341
|
# to external (non-owner) channels should add it via
|
|
333
342
|
# customized: — see the commented example below.
|
|
334
343
|
- desc: "After untrusted content ingest, sensitive sinks require re-confirmation"
|
|
335
|
-
|
|
344
|
+
G:
|
|
336
345
|
pattern: untrusted_source_gate
|
|
337
346
|
args:
|
|
338
347
|
- [web_fetch]
|
|
@@ -351,7 +360,7 @@ agents:
|
|
|
351
360
|
# source: "incident:CVE-2026-22708"
|
|
352
361
|
|
|
353
362
|
- desc: "Web browsing loops bounded — prevents attacker-controlled chain-redirect ingestion"
|
|
354
|
-
|
|
363
|
+
G:
|
|
355
364
|
pattern: rate_limit
|
|
356
365
|
args: [web_fetch, 25]
|
|
357
366
|
source: "incident:CVE-2026-22708"
|
|
@@ -360,7 +369,7 @@ agents:
|
|
|
360
369
|
# to external recipients. Depends on integration emitting
|
|
361
370
|
# data_write(key=fetched_content, contains=[untrusted]) after web_fetch.
|
|
362
371
|
- desc: "Content tainted as untrusted must not flow to external recipients"
|
|
363
|
-
|
|
372
|
+
G:
|
|
364
373
|
ltl: "G(contains(untrusted) -> !flow(<agent>, external))"
|
|
365
374
|
source: "incident:CVE-2026-22708"
|
|
366
375
|
|
|
@@ -369,19 +378,19 @@ agents:
|
|
|
369
378
|
# =====================================================================
|
|
370
379
|
|
|
371
380
|
- desc: "Data read from filesystem must not flow to send_message"
|
|
372
|
-
|
|
381
|
+
G:
|
|
373
382
|
pattern: no_data_leak
|
|
374
383
|
args: [read, send_message]
|
|
375
384
|
source: "incident:weather-skill"
|
|
376
385
|
|
|
377
386
|
- desc: "Data read from filesystem must not flow to install_skill"
|
|
378
|
-
|
|
387
|
+
G:
|
|
379
388
|
pattern: no_data_leak
|
|
380
389
|
args: [read, install_skill]
|
|
381
390
|
source: "incident:AMOS"
|
|
382
391
|
|
|
383
392
|
- desc: "Block outbound exfiltration primitives in shell"
|
|
384
|
-
|
|
393
|
+
G:
|
|
385
394
|
pattern: arg_blacklist
|
|
386
395
|
args:
|
|
387
396
|
- exec
|
|
@@ -398,30 +407,30 @@ agents:
|
|
|
398
407
|
# Group-channel messages must not be followed by exec. LTL expresses the
|
|
399
408
|
# channel_type=group condition cleanly.
|
|
400
409
|
- desc: "Messages from group channels cannot trigger exec"
|
|
401
|
-
|
|
410
|
+
G:
|
|
402
411
|
ltl: 'G(called_with(send_message, "channel_type=group") -> !F(called(exec)))'
|
|
403
412
|
source: "library:tier1.messaging"
|
|
404
413
|
|
|
405
414
|
- desc: "Per-session cap on outbound messages"
|
|
406
|
-
|
|
415
|
+
G:
|
|
407
416
|
pattern: rate_limit
|
|
408
417
|
args: [send_message, 30]
|
|
409
418
|
source: "library:tier1.messaging"
|
|
410
419
|
|
|
411
420
|
- desc: "Cron creation is idempotent within a session"
|
|
412
|
-
|
|
421
|
+
G:
|
|
413
422
|
pattern: idempotent
|
|
414
423
|
args: [cron_create]
|
|
415
424
|
source: "library:tier1.scheduler"
|
|
416
425
|
|
|
417
426
|
- desc: "Every cron_create must eventually be matched by cron_complete"
|
|
418
|
-
|
|
427
|
+
G:
|
|
419
428
|
pattern: required_steps_completion
|
|
420
429
|
args: [cron_create, [cron_complete]]
|
|
421
430
|
source: "library:tier1.scheduler"
|
|
422
431
|
|
|
423
432
|
- desc: "Hook / webhook registration requires human confirmation"
|
|
424
|
-
|
|
433
|
+
G:
|
|
425
434
|
pattern: must_confirm
|
|
426
435
|
args: [hook_register]
|
|
427
436
|
source: "library:tier1.persistence"
|
|
@@ -443,13 +452,13 @@ agents:
|
|
|
443
452
|
|
|
444
453
|
- desc: "Confirmations cannot be reused — count(confirm) must dominate count(exec)"
|
|
445
454
|
A: "called `confirm_reconfirmed`"
|
|
446
|
-
|
|
455
|
+
G:
|
|
447
456
|
ltl: "G(called(exec) -> count(confirm_reconfirmed) >= count(exec))"
|
|
448
457
|
source: "incident:CVE-2026-29607"
|
|
449
458
|
|
|
450
459
|
- desc: "Same for apply_patch — each apply needs its own confirm"
|
|
451
460
|
A: "called `confirm_reconfirmed`"
|
|
452
|
-
|
|
461
|
+
G:
|
|
453
462
|
ltl: "G(called(apply_patch) -> count(confirm_reconfirmed) >= count(apply_patch))"
|
|
454
463
|
source: "incident:CVE-2026-29607"
|
|
455
464
|
|
|
@@ -459,21 +468,21 @@ agents:
|
|
|
459
468
|
|
|
460
469
|
- desc: "After web_fetch, responses stay grounded in the fetched content"
|
|
461
470
|
A: "called `web_fetch`"
|
|
462
|
-
|
|
471
|
+
G:
|
|
463
472
|
pattern: hallucination_free
|
|
464
473
|
args: ["{fetched_content}"]
|
|
465
474
|
source: "library:tier1.browser"
|
|
466
475
|
beta: 0.9
|
|
467
476
|
|
|
468
477
|
- desc: "Agent stays within its declared scope"
|
|
469
|
-
|
|
478
|
+
G:
|
|
470
479
|
pattern: scope_respect
|
|
471
480
|
args: ["local personal assistant — file, shell, messaging, browsing on behalf of owner"]
|
|
472
481
|
source: "library:tier0.scope"
|
|
473
482
|
beta: 0.85
|
|
474
483
|
|
|
475
484
|
- desc: "Agent does not agree to disable its own safety constraints (anti-guilttrip)"
|
|
476
|
-
|
|
485
|
+
G:
|
|
477
486
|
pattern: jailbreak_free
|
|
478
487
|
source: "incident:wired-guilttrip"
|
|
479
488
|
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
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
# Reserved namespace for Sponsio premium contracts.
|
|
1
|
+
# Reserved namespace for future Sponsio premium contracts.
|
|
2
2
|
#
|
|
3
|
-
# The
|
|
4
|
-
#
|
|
5
|
-
#
|
|
6
|
-
#
|
|
7
|
-
# customers receive as a pack subscription. Empty in OSS by design.
|
|
3
|
+
# The engine ships ``sponsio:capability/*`` (universal safety packs)
|
|
4
|
+
# and ``sponsio:incident/*`` (public CVE / Reddit-incident replicas).
|
|
5
|
+
# This directory is a placeholder for future expansion; not part of
|
|
6
|
+
# this build. Empty by design.
|
|
@@ -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"}
|