session-end
Run the session-end ritual — `myco senesce` composes `assimilate` (promote raw notes to integrated) with `immune --fix` (auto-correct drift). Two modes at v0.5.7+ — full (reflect + immune, PreCompact hook) and quick (reflect only, SessionEnd hook, ~1.5 s kill budget). Skill directory name kept as `session-end` for v0.5.x backward compatibility; the canonical verb is `senesce`.
/myco:session-end
Myco's close-of-session ritual, per L1 rule R2. Every session ends here so nothing the agent learned is lost to compaction or eviction.
Directory name note: this skill lives under skills/session-end/
because the v0.5.2 → v0.5.3 rename kept session-end as a
backward-compatible CLI alias (and the skill directory name is what
shows up as the slash-command). The canonical verb is myco senesce;
invoking /myco:session-end calls senesce under the hood via the
alias resolver.
When to invoke
- Closing a working session without a compact — wrap up explicitly.
- Before a long-running operation that will evict context.
- Any time
assimilate+immune --fixshould run as a single atomic act.
Commands
# Full mode — assimilate + immune --fix. Bound to PreCompact.
python -m myco --json --project-dir "$CLAUDE_PROJECT_DIR" senesce
# Quick mode (v0.5.7+) — assimilate only. Bound to SessionEnd.
python -m myco --json --project-dir "$CLAUDE_PROJECT_DIR" senesce --quick
The v0.5.2 alias session-end still resolves — both
python -m myco session-end and python -m myco senesce invoke the
same handler.
What it does
senesce is a meta-verb. In full mode it composes two calls:
assimilate(wasreflectin v0.5.2) — promote raw notes tointegrated/where they belong.immune --fix— auto-correct the lint dimensions that support safe automatic repair.
Both run in full mode; the payload aggregates both results and
carries mode: "full". The exit code is the worse of the two —
non-zero does not abort compaction but surfaces as a signal at the
next session's hunger call.
In quick mode (--quick) only step 1 runs; step 2 is reported
as immune: {skipped: true, reason: <str>} in the payload and
mode: "quick". The SessionEnd hook uses quick mode because Claude
Code kills the hook at ~1.5 s; full mode's immune scan can exceed
that budget. The next SessionStart hunger or PreCompact senesce
picks up any findings quick mode would have surfaced.
How the agent should act on the output
- Scan
payload["mode"]. If"quick", note thatimmunedid not run; mention it to the user so they know a deferred lint pass is pending at the next boot. - Scan both sub-results (
payload["reflect"]always present;payload["immune"]is either the full lint payload or theskipped: truemarker). - If
reflectpromoted notes, the agent should summarize what went into integrated tier in one sentence. - Anything that did NOT auto-fix (full mode) or was deferred (quick mode) is a flag for the next session — mention it to the user so they know state was externalized but not fully cleaned.
- Do not retry on failure — the next
hungerwill see the residual state and surface it again.
Related verbs
/myco:hunger— the matched ritual at session start.assimilate,immune— the underlying verbs, also available individually as MCP tools or CLI commands.