This release adds 2 notable features for engineering teams evaluating rollout.
✓ No known CVEs patched in this version
Topics
Affected surfaces
Summary
AI summaryAdded memory_read MCP tool and supporting MemoryStore API.
Full changelog
Phase 3 cold-adopter dogfood (AMP-backed MemoryStore + AmpSkillStore vault
migration) wrapped successfully. The cold agent delivered an implementer's-eye
summary surfacing several contract-design questions Perry locked in thread
4b58c283; v0.13.8 ships the narrow set (bug fix + docs + small additive),
v0.14.0 will absorb the contract evolution (Q2 vault op-syntax + Q3
strict_filters).
Added
memory_read(id, store?) -> PortableMemory | nullMCP tool (Perry Q1C).
Direct memory lookup by substrate-assigned id; mirrorsskill_readpattern.
Returnsnullon miss (matches MemoryStore's empty-set convention — distinct
from SkillStore's throw-on-miss; cold agent flagged this asymmetry as
load-bearing in their "credit where due" summary). Nomemory_writeMCP
by design — writes are skill-context-only ($ memory_writeop inside a
skill body) to preserve intent-tracking. Reaches via the registered
MemoryStore; errors cleanly when no store is registered.MemoryStore.get(id): Promise<PortableMemory | null>— new contract
method backingmemory_read. SqliteMemoryStore impl is a simple
SELECT WHERE id = $id. Adopters forkingMemoryStoreTemplateadd a
matching impl; null semantics must hold.MemoryWrite+MemoryWriteRecordre-exported from
skillscript-runtime/connectors. Phase 3 cold agent caught v0.13.7's F2
fix was incomplete —MemoryStoreTemplate.tsimported these two types but
they weren't re-exported. Template now compiles standalone after fork
(same as the SkillStore/LocalModel/McpConnector/AgentConnector templates
did post-v0.13.7).README.mdMemory row + tool count bumped 15 → 16 (memory_read in its
own row; matches dogfood-t7's table-vs-runtime drift guard added below).docs/connector-contract-reference.md§ "Storage-layer conventions"
(~120 lines). Documents the SkillStore + MemoryStore conventions that live
in bundled reference impls but aren't in the typed contracts:
content_hash = sha256(approval-stamped body),version = first 12 hex,
store()auto-stamps approval token (runtime-semantic leak callout),
summary/detail split is convention,get(id)returns null vs SkillStore
load()throws, durability stance, filter-scope discipline. Cold-agent
framing: "the contracts are shape-portable, not semantics-portable —
hidden coupling to the reference impl, documented only in its source."
Now documented.docs/adopter-playbook.md§ "Notable gaps" — three new bullets covering
(1) SkillStore vs MemoryStore lifecycle asymmetry as design stance, (2)
durability-is-implementer's-responsibility, (3) filter-scope advisory-
today + v0.14.0 strict_filters preview. Includes Phase 3's AMP TTL example
as cautionary tale.
Fixed
- Doc drift in MCP-surface table (Perry's
a8ac822f). README listed 3
trigger tools; actual is 4. v0.13.3 fixed the total count but missed
per-row update for Triggers.set_trigger_enablednow in the Triggers
row. docs/ERD.mdwas silently shipping in the tarball since v0.13.3 — the
.npmignorewas theater (npm ignores.npmignorewhenfilesarray is
set inpackage.json). Fixed via explicitfileslist (5 user-facing
docs enumerated, not adocs/*.mdglob)..npmignoredeleted as
redundant + misleading.tests/dogfood-t7.test.tstest #17 — README-vs-runtime tool-list
drift guard. Closes the doc-drift class structurally: every tool the
README claims exists must exist in the runtime, every runtime tool must
be claimed somewhere in the MCP-surface table. Different class than
v0.13.3's link-guard (which validates path resolution, not table
content); same belt-and-braces pattern.
Meta-lesson banked
"Defaults matter more than knobs for security-relevant surfaces"
(Perry, thread 4b58c283). All three Phase 3 contract design questions
laddered to the same axis: Q1 (writes skill-context-only by default — no
memory_write MCP; preserves intent-tracking), Q2 (vault choice explicit
per-write; intent-driven not implicit), Q3 (strict_filters default-on for
filter enforcement). The "we'll let adopters opt in" pattern is seductive
and consistently wrong for scope/visibility/security shapes — aware
adopters opt out, naive adopters get protection. Banked as a feedback
memory for future contract decisions. Sibling to v0.13.7's skill_status
silent-corruption finding: "the contract declares a discipline, but
enforcement is opt-in or absent" is the recurring class.
Note on v0.14.0
Two contract-evolution items locked but deferred:
- Q2 —
$ memory_write vault="..."op-syntax kwarg (writes-only, not
on$ memoryquery). Real signal from Phase 3 cold agent who hit
"the op can't express it" for per-call team override. - Q3 —
strict_filters: truedefault + lint-time filter check +
UnsupportedFilterErrorclass. Cold agent's "single most valuable fix
for non-SQLite adopters." Belt-and-braces (runtime + lint) per Perry.
Both are language-grammar / behavior-change scope; bundling together in
v0.14.0 keeps the contract evolution narrative clean.
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]