This release includes 2 breaking changes for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
+14 more
Affected surfaces
Summary
AI summaryRemoved nine deprecated MCP aliases causing errors for clients and added a new excrete verb to delete raw notes.
Full changelog
v0.5.24 — 2026-04-24 — Excretion + MCP-alias purge + param examples (TDQS A→A+ push)
Partial R-surface delta. New verb excrete in the ingestion
subsystem (R4/R7 neighborhood; no rule text changes). Breaking
change for MCP clients that still call the legacy tool names —
they now resolve to MCP's "unknown tool" error. CLI aliases survive
unchanged.
Symptom at v0.5.23
Glama's v0.5.23 re-scan lifted Myco from C (2.53) to A (3.78
quality, 3.77 server TDQS, up 1.24 points). Per-tool breakdown
showed the canonical verbs clustered 4.2–4.9 while the 9
deprecated MCP aliases (myco_genesis, myco_reflect,
myco_distill, myco_perfuse, myco_session_end, myco_craft,
myco_bump, myco_evolve, myco_scaffold) scored 2.9–3.7. The
min-dimension component (weight 40%) was pinned to the weakest
alias, dragging the server-level score. Glama's coherence
sub-score also flagged "lacks explicit tools for deletion or
direct editing of raw notes" — a metabolism gap since v0.4.0.
Root cause
MCP aliases were dead weight. Every alias was an exact
duplicate of its canonical mcp_tool (same handler, same args, same
docstring), but Glama's TDQS evaluator treats each tool name as a
separate surface, so the aliases inherited v0.5.21-era thin
descriptions and dragged both the mean (by quantity) and the min
(by being the weakest). Keeping them gave zero UX benefit — MCP
clients cache the tool list and don't care about backward-compat
the way shell aliases do, so a client upgrade transparently picks
up the canonical name.
No delete verb. Raw notes captured by accident (typo paste,
wrong substrate, duplicate ingest) had no safe removal path.
Agents worked around it by editing the filesystem directly, which
bypasses the R6 write-surface guard and leaves no audit trail.
parameterSemantics ceiling at 4. v0.5.23's
Annotated[T, Field(description=...)] got every arg a description
but pydantic's examples=[...] was left empty. Glama's rubric
credits params with realistic example values.
Fix
-
Stripped
mcp_tool_aliases:from all 9 manifest entries
(src/myco/surface/manifest.yaml). CLIaliases:preserved —
myco genesis,myco reflect, etc. still work at the shell.
Only the MCP-tool surface loses the duplicates. Regression test
test_v0_5_24_no_mcp_tool_aliasesguards against re-addition. -
Added
myco_excrete— new verb in the ingestion subsystem
(src/myco/ingestion/excrete.py). Moves a single raw note from
notes/raw/to.myco_state/excreted/<stem>.md, annotating
frontmatter withexcreted_at/excreted_reason/
excreted_fromfor audit. Scope-locked tonotes/raw/—
targetingnotes/integrated/ornotes/distilled/is a
UsageError(those tiers are protected by the append-only
doctrine). Required args:note-id+reason. Optional:
--dry-run. 11 regression tests cover dry-run, reason-required,
note-id-required, write-surface violation, frontmatter
annotation, apostrophe escaping, and stem-with-trailing-.md
tolerance. -
Added
.myco_state/**to the defaultwrite_surface.allowed
insrc/myco/germination/templates/canon.yaml.tmpl(new
substrates) and_canon.yaml(Myco-self). Without this, fresh
substrates failmyco_excretewith aWriteSurfaceViolation
for the tombstone path. -
Threaded
examples: [...]throughArgSpec→
_build_handler_signature→Annotated[T, Field(description=…, examples=[…])]. Populated canonical examples for 36 args across
18 verbs — every path, every required non-bool arg, every
str-typed arg with a clear canonical value now ships realistic
example values in the emitted JSON schema. Two new regression
tests (test_v0_5_24_examples_populated_on_high_value_args,
test_v0_5_24_mcp_schema_embeds_examples) lock this in.
Break from v0.5.23
MCP-client surface shrinks from 27 tools to 19. The 9
deprecated aliases no longer appear in tools/list and will error
out on tools/call:
| Removed MCP alias | Canonical replacement |
|-----|-----|
| myco_genesis | myco_germinate |
| myco_reflect | myco_assimilate |
| myco_distill | myco_sporulate |
| myco_perfuse | myco_traverse |
| myco_session_end | myco_senesce |
| myco_craft | myco_fruit |
| myco_bump | myco_molt |
| myco_evolve | myco_graft |
| myco_scaffold | myco_ramify |
Migration is a mechanical rename in the client's tool-call site.
No argument shape changes — same handler, same schema, new name.
CLI unchanged. myco genesis --project-dir ... still works
and still emits a DeprecationWarning; no alias removal there.
New verb contract
| Verb | MCP tool | Subsystem | Args |
|------|----------|-----------|------|
| excrete | myco_excrete | ingestion | note-id* / reason* / dry-run |
Payload shape:
{
"exit_code": 0,
"note_id": "<stem>",
"from_path": "notes/raw/<stem>.md",
"to_path": ".myco_state/excreted/<stem>.md",
"reason": "<supplied>",
"excreted_at": "<iso8601>",
"dry_run": <bool>
}
Expected Glama re-scan (v0.5.24)
- Mean TDQS: 3.77 → ~4.55 (canonical verbs only; aliases removed)
- Min TDQS: 2.90 → ~4.20 (weakest alias gone; only canonicals remain)
- Server TDQS: 3.77 → ~4.41 (0.6 × 4.55 + 0.4 × 4.20)
- Coherence completeness gap closed (excretion tool present)
- Final Quality: 3.78 A → ~4.5+ (A tier, near ceiling)
Files touched
src/myco/surface/manifest.yaml— removed 9mcp_tool_aliases
blocks, addedexcreteentry, addedexamples:to 36 argssrc/myco/surface/manifest.py—ArgSpec.examplesfield +
loader wiringsrc/myco/surface/mcp.py— threadexamplesinto
Annotated[..., Field(description=..., examples=...)]src/myco/ingestion/excrete.py— new (~220 lines, full handler- frontmatter annotator)
src/myco/germination/templates/canon.yaml.tmpl—.myco_state/**
added to default write_surface_canon.yaml—.myco_state/**added; contract_version +
synced_contract_version bumpedtests/unit/ingestion/test_excrete.py— new, 11 teststests/unit/surface/test_manifest.py— 4 v0.5.24 regression
teststests/conftest.py— seeded_substrate fixture covers
.myco_state/**
Total: 207 new tests over v0.5.23 baseline (668 → 875).
Breaking Changes
- Removed 9 MCP aliases (myco_genesis, myco_reflect, myco_distill, myco_perfuse, myco_session_end, myco_craft, myco_bump, myco_evolve, myco_scaffold); they now resolve to "unknown tool" error.
- Added `.myco_state/**` to default `write_surface.allowed` in manifest templates.
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 Battam1111/Myco
Agent-first cognitive substrate with 18 manifest-driven verbs (germinate / eat / assimilate / sporulate / traverse / immune / molt / …) and 25 lint dimensions enforcing contract invariants mechanically (R1–R7). Cross-session / cross-project memory via a self-validating filesystem graph — AST + markdown-link derived, not embedding-based. Provider-agnostic by design: MP1/MP2 dims forbid LLM-SDK imports in the kernel and plugin tree. Editable-default install. Works with Claude Code, Cursor, Windsurf, Zed, VS Code, and any MCP client.
Related context
Related tools
Beta — feedback welcome: [email protected]