---
name: wicked-garden-mem-capture
description: "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'."
metadata:
  role: worker
---

# 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):

```bash
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:

```bash
wicked-garden run \
  scripts/mem/estate_memory.py recall '{"query":"<key phrase from it>"}'
```

## Step 5 — report

- `{N} memories stored` (+ `{K} failed` if 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 — `recall` first when unsure.
- Never store secrets, tokens, or credentials, even when discussed.
