"Session-teardown memory capture: sweep the conversation for decisions, patterns, gotchas, discoveries, and preferences, classify each onto the estate kind/tier vocabulary, and batch-write them to wicked-estate memory. Use when: dispatched by the wicked-garden-mem skill's capture action, at session end, before /clear or exit, or when the user says 'capture what we learned' / 'remember this session'."
Install
npx skillscat add mikeparcewski/wicked-garden/wicked-garden-mem-capture Install via the SkillsCat registry.
Mem Capture Worker (session teardown)
This skill is designed to run as an isolated worker; when your harness cannot fork, run it inline and keep its output separate from the caller's.
You capture session learnings as wicked-estate memories before the
session ends (FOLD-3, Phase 5-S7 — the port of brain's session-teardown).
You run in a fork context: review the conversation, distill, and persist
through the mem backend. Estate owns everything after the write (salience,
decay, consolidation) — your job is selection and distillation, not
lifecycle.
Runtime
Script-backed steps use the wicked-garden launcher: wicked-garden run <plugin-root-relative path, e.g. scripts/…> [args]. It is on PATH after npm i -g wicked-garden; otherwise use npx wicked-garden run …; inside a wicked-crew run it is "$WICKED_GARDEN_ROOT/scripts/wicked-garden".
If none of these is available, or Python 3 is missing, skip the script-backed step, say so, and follow the manual alternative where one is given next to it — never invent the script's output.
Relative paths in this skill are relative to the directory that contains this SKILL.md.
Step 1 — sweep the conversation
Scan for content matching these shapes:
- Decisions: "we decided…", "going with…", "chose X over Y because…"
- Patterns / conventions: "this always…", "the convention is…"
- Gotchas: "watch out for…", "this broke because…", "don't X because…"
- Discoveries: "turns out…", "found that…", "learned that…"
- Preferences: "I prefer…", "always use…", "never do…"
Skip trivia and anything a future session can trivially re-derive from the
repo. If nothing valuable was discussed, store nothing and say so — an
empty capture is a valid result.
Step 2 — distill and classify
For each finding write a 1–3 sentence summary capturing the why and
what (not the how), then map it onto the estate vocabulary
(full table: skills/mem/refs/scopes.md):
| Finding | kind |
tier (default) |
|---|---|---|
| decision, preference, gotcha, stable fact | fact |
semantic |
| pattern, convention, how-to | skill |
procedural |
| discovery, event ("X happened when Y") | episode |
episodic |
Add 2–5 about tags per memory (systems, components, topics mentioned) so
recall has hooks. Scope: leave the default (project:<cwd-basename>)
unless the learning clearly belongs to another scope.
Step 3 — batch write
One backend call, JSON on stdin (never argv — summaries contain quotes):
printf '%s' '{"memories":[
{"content":"<summary 1>","kind":"fact","about":["tag1","tag2"]},
{"content":"<summary 2>","kind":"skill","about":["tag3"]}
]}' | wicked-garden run \
scripts/mem/estate_memory.py capture-batch -Build the JSON with real encoding discipline (escape newlines/quotes); a
malformed payload aborts before any write. The backend returns{stored, failed, ids, failures} — treat failed > 0 as a partial result
and say which items were dropped and why.
Step 4 — verify one
Recall the most important stored memory to prove the round-trip:
wicked-garden run \
scripts/mem/estate_memory.py recall '{"query":"<key phrase from it>"}'Step 5 — report
{N} memories stored(+{K} failedif any), with kinds- one-line topic list
- if estate was unreachable (
ok: false): report the degrade explicitly so
the learnings can be re-captured later — never claim success on a
fail-open response.
Rules
- 1–3 sentences per memory; the why, never implementation dumps.
- Don't duplicate what's already stored —
recallfirst when unsure. - Never store secrets, tokens, or credentials, even when discussed.