This release includes breaking changes for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
Summary
AI summaryFour new pipe filters (head, tail, lines, pluck) add string‑slice and object‑projection capabilities.
Full changelog
Upgrade impact: none (additive). Four new pipe filters, a lint false-positive removed, and a discovery surface widened — no behavior change to existing skills.
Pipe filters — line-slice family + pluck (Perry build spec; each cleared the project's "a real authored skill demonstrated the gap" bar):
head:"N"/tail:"N"/lines:"M-N"— line-slice a string (one shared impl). Split on\n, CRLF-tolerant, and a terminal newline's trailing empty line is dropped (sotail:"1"of"a\nb\n"is"b", not"");lines:"M-N"is a 1-indexed inclusive range. Never throws — a bad / negative / out-of-range count clamps to what exists or yields"". Security payoff:file_read(spool) -> Lthen${L|tail:"N"}tails a log fs-read-only, with notail/grepshell-binary allowlist grant and nounsafe=true; afile_readhelp cross-reference now points authors to it.pluck:"field"— project one field from each element of an array of objects → the array of field values (emitted as a JSON-array string, so it composes within/not in/|length/|contains, all JSON-string-of-array tolerant). Omits an element whose field is absent/null or that isn't an object; single-level field only. Turns a hand-rolled dedup-by-id loop into a clean projection. Current idiom binds the projection then membership-tests ($set IDS = "${SEEN|pluck:"id"}"thenif ${M.id} not in ${IDS}:); an inline filter chain on theinRHS is a pending grammar extension.- Both operate on the stringified input (the filter layer is type-blind);
pluckadditionally content-parses and throws on non-array input.
approved= no longer flags as unknown-connector-arg. The mutation-gate auth kwarg is popped by the runtime before the connector sees args, so validating it against the tool's input schema was a false positive that directly contradicted unconfirmed-mutation's "add approved=" remediation. timeout= and approved= are now a named reserved-dispatch-kwarg set, exempt from arg validation.
observed_output_shape now rides runtime_capabilities({tool}). The last-observed return shape was surfaced only in skill_preflight (which needs a skill already referencing the tool); it now also attaches to the tool fetch authors reach for to answer "what does this return?", and the tool description advertises it.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About Skillscript
All releases →Related context
Related tools
Earlier breaking changes
- v0.35.0 Editing `# Deadline:` on an approved skill drops it to Draft (signature invalidates).
Beta — feedback welcome: [email protected]