This release adds 3 notable features for engineering teams evaluating rollout.
✓ No known CVEs patched in this version
Topics
Affected surfaces
Summary
AI summaryUpdates Implementation notes, New module, and in-file across a mixed release.
Full changelog
connectors.json loader + credential discipline (config plumbing).
First MCP-scripting-era release. Wires the per-host connector
configuration the ERD §3+§4 spec has called for since T2. Loads
connectors.json at runtime startup, parses + validates, resolves
${VAR} substitutions, and registers each declared instance into the
Registry. Closed-set class registry + two new tier-1 lint rules. Spec
at b3f6c5ed (Perry kickoff) + 58a9d3d3 (credential amendment) +
8f723b6a (final approval).
Split note: RemoteMcpConnector (the stdio-bridge class for remote
MCPs via mcp-remote etc.) deferred to v0.4.1. v0.4.0 ships the
mechanism — loader, validation, lint, discovery, credential discipline
— but the only class in the v0.4.0 closed set (CallbackMcpConnector)
isn't JSON-instantiable (it requires a dispatch function). v0.4.1
adds RemoteMcpConnector as the first real configurable class, plus
the YouTrack end-to-end proving test.
Added
-
connectors.jsonloader. Reads fromBootstrapOpts.connectorsConfigPath
(caller-supplied path; bootstrap stays explicit, doesn't auto-discover).
Missing file → graceful empty result. Malformed JSON / structural
errors / unknown class / unset${VAR}→ clear startup errors via
BootstrapResult.connectorConfigErrors. Permissive on unknown
fields so v0.4.1 schema additions (allowed_tools, etc.) plug in
without breaking compat. -
Credential resolution: two shapes. Matches Claude Desktop's
mcp.jsonconvention:- Literal:
"AUTH_HEADER": "Bearer plnt-..."(in-file) - Env-var substitution:
"AUTH_HEADER": "Bearer ${YOUTRACK_TOKEN}"
(resolved fromprocess.envat load time)
Missing
${VAR}→ clear error (not silent empty-string substitution).
Both shapes work; deployments should prefer${VAR}per the
credential-discipline section. - Literal:
-
Closed-set class registry. v0.4.0 set:
{CallbackMcpConnector}.
Plugin-style runtime-arbitrary class loading deliberately out of
scope (security surface, discoverability, API maturity). Unknown
class inconnectors.json→ clear startup error listing the known
set. The set grows via CHANGELOG-tracked runtime releases. -
unknown-connectortier-1 lint. Fires on$ name.toolops
wherenameisn't a wired connector. Includes the list of wired
names in the diagnostic so cold authors can correct typos quickly.
Silent when the caller doesn't know what's wired (no false positives). -
unknown-connector-classtier-1 lint (Perry's sibling addition,
8f723b6a). Re-surfaces the loader's "unknown connector class"
errors via the lint API for tooling that consumes lint as the
primary diagnostic surface (compile_skill / lint_skill MCP). -
runtime_capabilitiesdiscovery extension. Newinclude
option:mcpConnectorClassesreturns the closed-set class names.
Cold authors introspect "what classes can I configure?" before
writingclass: "..."fields. -
Credential discipline (hard requirement). Perry's amendment
promoted from footnote to ship requirement:connectors.jsonadded to repo root.gitignore(root-anchored
so the scaffold's bundled placeholder stays tracked)connectors.json.exampleshipped at repo root as the version-
controlled template- README "Connector model" section documents both credential
shapes + the gitignore default + the discipline rationale - Loader-time gitignore-detection warning deferred to v0.4.1
New module
src/connectors/config.ts— loader + env substitution + closed-set
class registry. ~190 LOC including docstrings. Public surface:
loadConnectorsConfig({path, env?}),listKnownConnectorClasses(),
resolveEnvSubstitution(value, env),KNOWN_CONNECTOR_CLASSES.
Implementation notes
-
Narrow-core LOC ceiling 5750 → 6000. Net ~190 LOC from the new
connectors/config.tsmodule plus ~50 for the two lint rules and
themcpConnectorNamesLintContext field. Consistent with v0.3.0's
200-LOC nudge for$append. History entry inloc-ceiling.mjs. -
BootstrapOpts.connectorsConfigPathis explicit (no auto-
discovery from CWD). Embedders pass the path; the CLI's
skillfile dashboard/skillfile serve/skillfile execute
surfaces will auto-pass${cwd()}/connectors.jsonin v0.4.1+ once
RemoteMcpConnector makes the file practically useful. Until then,
embedders opt in explicitly. -
Tests: 31 new in
tests/v0.4.0.test.tscovering loader basics
(missing file, malformed JSON, structural errors, unknown class),
env substitution (literal pass-through,${NAME}resolution,
missing var error, multiple substitutions, lowercase-name ignore),
closed-set registry (v0.4.0 set, no RemoteMcpConnector yet),
bootstrap wiring (graceful missing, errors surface, no false adds),
both lint rules (positive + negative + silent-when-undefined),
runtime_capabilities surface, and credential discipline (gitignore +
example + README content). 897/901 passing (3 long-skip browser
dogfood).
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]