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