Skip to content

Skillscript

v0.34.0 Security

This release includes 1 security fix for security teams reviewing exposed deployments.

✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →
This release patches 1 known CVE

Topics

agents dsl llm mcp skills workflow

Affected surfaces

auth

ReleasePort's take

Light signal
editorial:auto 10d

`shell(...)` children no longer leak `SKILLSCRIPT_SECRET_*` environment variables; secrets must now be declared explicitly.

Why it matters: Security: prevents accidental exposure of secret vars to subprocesses in all v0.34.0 deployments.

Summary

AI summary

shell(...) children no longer leak SKILLSCRIPT_SECRET_* environment variables, requiring explicit secret declaration.

Changes in this release

Security High

`shell(...)` no longer leaks `SKILLSCRIPT_SECRET_*` vars to child processes.

`shell(...)` no longer leaks `SKILLSCRIPT_SECRET_*` vars to child processes.

Source: llm_adapter@2026-07-17

Confidence: high

Feature Medium

Adds runnable `RestConnector` example implementing `McpConnector` for plain REST APIs.

Adds runnable `RestConnector` example implementing `McpConnector` for plain REST APIs.

Source: llm_adapter@2026-07-17

Confidence: high

Feature Low

Updates `connector-contract-reference.md` to include McpConnector contract details.

Updates `connector-contract-reference.md` to include McpConnector contract details.

Source: llm_adapter@2026-07-17

Confidence: high

Feature Low

Re‑exports `McpToolDescriptor` from `skillscript-runtime/connectors` for easier use.

Re‑exports `McpToolDescriptor` from `skillscript-runtime/connectors` for easier use.

Source: llm_adapter@2026-07-17

Confidence: high

Feature Low

Adds credential‑free egress subsection in `adopter-playbook.md` documenting outbound‑proxy pattern.

Adds credential‑free egress subsection in `adopter-playbook.md` documenting outbound‑proxy pattern.

Source: llm_adapter@2026-07-17

Confidence: high

Refactor Low

Re‑renders `language-reference.md` with updated execution paths and connector guidance.

Re‑renders `language-reference.md` with updated execution paths and connector guidance.

Source: llm_adapter@2026-07-17

Confidence: high

Full changelog

Upgrade impact: none (additive) — with one security tightening noted below. A shell(...) op no longer leaks SKILLSCRIPT_SECRET_* vars into its child process. No supported usage relied on that (a secret reaches a sink via the {{secret.NAME}} marker, never ambient env); the only thing affected is a skill that read an undeclared secret straight out of a shell child's environment — which must now declare it (# Requires:) and place a {{secret.NAME}} marker.

Two threads land together: making it obvious that a plain REST/HTTP backend is a first-class connector (no MCP server required), and closing an ambient-secret exposure on the shell path.

  • RestConnector worked example (examples/connectors/RestConnector/). A complete, runnable class RestConnector implements McpConnector — not a throws-TODO skeleton — fronting a plain REST API: an ENDPOINTS table maps each tool to method + path, call() does path-templating + query-vs-body routing + auth-header injection + timeout, staticTools() gives lint a closed tool set, describeTools() surfaces the endpoints. Proves the McpConnector contract is wire-protocol-agnostic — "MCP" names the $ connector.tool dispatch verb, not a wire requirement (MCP JSON-RPC framing is HttpMcpConnector's impl detail). MCP and REST connectors coexist in one registry; a skill body can mix $ gmail.send (MCP) and $ tickets.create (REST).
  • connector-contract-reference.md: new McpConnector section. The doc previously fully specced only AgentConnector; now covers the two-method McpConnector contract, the wire-agnostic point, heterogeneous coexistence, and identity-propagation opt-in. Points at the example.
  • McpToolDescriptor re-exported from skillscript-runtime/connectors — an adopter writing describeTools() needs the named type; was deep-src/-import-only.
  • Security: shell(...) children spawn with SKILLSCRIPT_SECRET_* scrubbed (both structured command=/argv= and the unsafe=true bash path). The runtime resolves {{secret.NAME}} and splices the value into the spawn argv at the sink, so a shell child never needs the raw secret in ambient env — scrubbing it makes # Requires: least-privilege authoritative rather than advisory. Egress vars (HTTPS_PROXY, NODE_EXTRA_CA_CERTS, CURL_CA_BUNDLE, SSL_CERT_FILE) are preserved, so the outbound-proxy egress pattern is unaffected.
  • adopter-playbook.md: credential-free egress subsection — the outbound-proxy deployment pattern (gateway injects auth; no token in the runtime), documenting the selective scrub.
  • language-reference.md re-rendered from atoms — the "Two execution paths" section reframed onto who executes the ops (runtime vs agent) not who invokes, with a which-call-gets-which-path table; the Connectors section gains the wire-agnostic "non-MCP connector" guidance; the # Tags: frontmatter section folded in.

Security Fixes

  • shell(...) operation now scrubs `SKILLSCRIPT_SECRET_*` environment variables, closing ambient secret exposure (no CVE ID provided)

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

Track Skillscript

Get notified when new releases ship.

Sign up free

About Skillscript

All releases →

Related context

Earlier breaking changes

  • v0.35.0 Editing `# Deadline:` on an approved skill drops it to Draft (signature invalidates).

Beta — feedback welcome: [email protected]