memory-processor — daily transcript → cards + summary
Turn one day of raw conversation into durable, navigable memory.
This skill is judgment-first: the model (you) does the classification, tagging,
and linking. The autograph Python scripts are used only for mechanical work
(enforce schema, repair links, generate MOCs, decay, touch). enrich.py is never
used — you are the enrichment.
Inputs
daily/YYYY-MM-DD.md — the day's raw two-sided transcript
(## HH:MM [text|voice|video|photo|forward from: …] for the user,
## HH:MM [iva] for Iva's replies; older days may use legacy [eva]).
See scripts/memory/instructions/rules/daily-format.md.
schema.json — the vault schema (types, domains, decay).
- Existing cards under
cards/** and prior summaries under summaries/,
weekly|monthly|yearly/ — for linking and dedup.
Outputs
- Zero or more entity/decision/idea cards under
cards/<kind>/.
- One daily-summary card at
summaries/daily/YYYY-MM-DD.md.
- A processing marker appended to the raw daily file (never edit existing entries).
Layout & types (from schema.json)
| What |
Folder |
type |
| Raw transcript (read-only log) |
daily/YYYY-MM-DD.md |
— (not a card) |
| Daily summary |
summaries/daily/YYYY-MM-DD.md |
daily-summary |
| Weekly / monthly / yearly summary |
weekly/, monthly/, yearly/ |
*-summary |
| Knowledge note / thought |
cards/notes/ |
note |
| Person / org |
cards/contacts/ |
contact |
| Project |
cards/projects/ |
project |
| Idea / proposal |
cards/ideas/ |
idea |
| Decision |
cards/decisions/ |
decision |
Always pick type and status from schema.json → node_types. Never invent a status.
Flow (4 phases)
- CAPTURE (
phases/capture.md) — read the transcript, segment it, and decide
what is noteworthy: which entities, decisions, ideas, and topics the day produced.
- PROCESS (
phases/process.md) — create / update cards for the noteworthy items,
choosing exactly one ADD | UPDATE | SUPERSEDE | NOOP operation, then type +
description-snippet + tags + status; dedup against existing cards.
- LINK (
phases/link.md) — wire every new card to its domain hub + 2–3 neighbors.
- SUMMARIZE (
phases/summarize.md) — write the daily-summary card: the day's
TOPICS plus a MOC linking up to the week, down to the created cards, and down to
the raw daily transcript. Then run the mechanical autograph pass.
Mechanical pass (after writing cards & summary)
Run from the project root (Iva's working directory) — the scripts are part of the repo, not
of the vault, and take the vault directory as an argument (vault = $ASSISTANT_VAULT_DIR):
# dry-run first, then --apply
uv run scripts/autograph/cleanup.py vault --apply # bounded repair before whole-file readers
uv run scripts/autograph/enforce.py vault vault/schema.json --apply # schema compliance + autofix
uv run scripts/autograph/graph.py fix vault vault/schema.json --apply # repair broken wiki-links
uv run scripts/autograph/engine.py touch vault/summaries/daily/YYYY-MM-DD.md
uv run scripts/autograph/moc.py generate vault vault/schema.json # regenerate domain MOCs
uv run scripts/autograph/engine.py decay vault # recompute relevance/tiers
uv run scripts/autograph/graph.py health vault vault/schema.json # confirm score
Read .graph/enforce-report.json after enforce.py. Every path in
compile_candidates needs semantic repair during the next rollup pass: reread the
card, decide its current truth, and use write_card to leave one coherent card.
The mechanical pass deliberately refuses to guess when duplicate ## Related
sections contain prose.
If uv / Python is unavailable, still produce the cards and summary (they are plain
Markdown) and let the nightly Brain run the mechanical pass later.
Hard rules
- Never modify existing transcript entries. Append only a processing marker (see
scripts/memory/instructions/rules/daily-format.md).
- No orphans. Every card created here must link to a hub and ≥2 neighbors before
you finish (
phases/link.md).
- description is a search snippet, not the title. One line, what/why, ~150 chars.
- tags: 2–5, lowercase, kebab-case.
- Idempotent. If the daily file already carries a processing marker and a
summaries/daily/YYYY-MM-DD.md exists, only reconcile new entries; do not duplicate cards.
- One structure per card. Exactly one
## Log and one ## Related; never emit
dated ## Обновление / ## Update headings. Pass relations only through the
write_card.related argument, never inside body.
- Verify writes. Reread every created or updated card before finishing. Confirm
one Log, one Related, no empty/dated update headings, and that Compiled Truth says
what is true now. A failed invariant keeps the rollup unfinished.
- Quiet days are fine. No noteworthy entities → still write a short daily-summary
with topics and the MOC down to the raw transcript. Do not manufacture cards.
References
references/classification.md — what becomes a card vs. stays in the transcript.
references/card-templates.md — frontmatter templates per type.
references/linking.md — hub + neighbor linking protocol.
references/daily-summary.md — the daily-summary card spec (topics + MOC).
scripts/autograph/docs/SKILL.md — the typed vault engine (graph, decay, MOC, dedup).
scripts/memory/instructions/rules/{daily,weekly,monthly,yearly}-format.md — format +
rollup chain navigation rules.
1---2name: memory-processor3description: Iva's daily-memory processor. Reads the day's two-sided transcript (daily/YYYY-MM-DD.md), distills noteworthy entities / decisions / ideas into typed autograph cards, links them into the graph, and produces a daily-summary card (topics + MOC) that navigates down to the raw transcript and up to the week. Model-agnostic — runs on any LLM driving the vault (Iva uses DeepSeek). Triggered by the daily rollup (scripts/memory/rollup.ts daily).4---56# memory-processor — daily transcript → cards + summary78Turn one day of raw conversation into durable, navigable memory.910This skill is **judgment-first**: the model (you) does the classification, tagging,11and linking. The autograph Python scripts are used only for mechanical work12(enforce schema, repair links, generate MOCs, decay, touch). `enrich.py` is **never**13used — you are the enrichment.1415## Inputs1617- `daily/YYYY-MM-DD.md` — the day's raw two-sided transcript18 (`## HH:MM [text|voice|video|photo|forward from: …]` for the user,19 `## HH:MM [iva]` for Iva's replies; older days may use legacy `[eva]`).20 See `scripts/memory/instructions/rules/daily-format.md`.21- `schema.json` — the vault schema (types, domains, decay).22- Existing cards under `cards/**` and prior summaries under `summaries/`,23 `weekly|monthly|yearly/` — for linking and dedup.2425## Outputs26271. Zero or more **entity/decision/idea cards** under `cards/<kind>/`.282. One **daily-summary card** at `summaries/daily/YYYY-MM-DD.md`.293. A processing marker appended to the raw daily file (never edit existing entries).3031## Layout & types (from schema.json)3233| What | Folder | type |34| --------------------------------- | -------------------------------- | --------------- |35| Raw transcript (read-only log) | `daily/YYYY-MM-DD.md` | — (not a card) |36| Daily summary | `summaries/daily/YYYY-MM-DD.md` | `daily-summary` |37| Weekly / monthly / yearly summary | `weekly/`, `monthly/`, `yearly/` | `*-summary` |38| Knowledge note / thought | `cards/notes/` | `note` |39| Person / org | `cards/contacts/` | `contact` |40| Project | `cards/projects/` | `project` |41| Idea / proposal | `cards/ideas/` | `idea` |42| Decision | `cards/decisions/` | `decision` |4344Always pick `type` and `status` from `schema.json` → `node_types`. Never invent a status.4546## Flow (4 phases)47481. **CAPTURE** (`phases/capture.md`) — read the transcript, segment it, and decide49 what is noteworthy: which entities, decisions, ideas, and topics the day produced.502. **PROCESS** (`phases/process.md`) — create / update cards for the noteworthy items,51 choosing exactly one `ADD | UPDATE | SUPERSEDE | NOOP` operation, then type +52 description-snippet + tags + status; dedup against existing cards.533. **LINK** (`phases/link.md`) — wire every new card to its domain hub + 2–3 neighbors.544. **SUMMARIZE** (`phases/summarize.md`) — write the daily-summary card: the day's55 TOPICS plus a MOC linking up to the week, down to the created cards, and down to56 the raw daily transcript. Then run the mechanical autograph pass.5758## Mechanical pass (after writing cards & summary)5960Run from the project root (Iva's working directory) — the scripts are part of the repo, not61of the vault, and take the vault directory as an argument (`vault` = `$ASSISTANT_VAULT_DIR`):6263```bash64# dry-run first, then --apply65uv run scripts/autograph/cleanup.py vault --apply # bounded repair before whole-file readers66uv run scripts/autograph/enforce.py vault vault/schema.json --apply # schema compliance + autofix67uv run scripts/autograph/graph.py fix vault vault/schema.json --apply # repair broken wiki-links68uv run scripts/autograph/engine.py touch vault/summaries/daily/YYYY-MM-DD.md69uv run scripts/autograph/moc.py generate vault vault/schema.json # regenerate domain MOCs70uv run scripts/autograph/engine.py decay vault # recompute relevance/tiers71uv run scripts/autograph/graph.py health vault vault/schema.json # confirm score72```7374Read `.graph/enforce-report.json` after `enforce.py`. Every path in75`compile_candidates` needs semantic repair during the next rollup pass: reread the76card, decide its current truth, and use `write_card` to leave one coherent card.77The mechanical pass deliberately refuses to guess when duplicate `## Related`78sections contain prose.7980If `uv` / Python is unavailable, still produce the cards and summary (they are plain81Markdown) and let the nightly Brain run the mechanical pass later.8283## Hard rules8485- **Never modify existing transcript entries.** Append only a processing marker (see86 `scripts/memory/instructions/rules/daily-format.md`).87- **No orphans.** Every card created here must link to a hub and ≥2 neighbors before88 you finish (`phases/link.md`).89- **description is a search snippet, not the title.** One line, what/why, ~150 chars.90- **tags:** 2–5, lowercase, kebab-case.91- **Idempotent.** If the daily file already carries a processing marker and a92 `summaries/daily/YYYY-MM-DD.md` exists, only reconcile new entries; do not duplicate cards.93- **One structure per card.** Exactly one `## Log` and one `## Related`; never emit94 dated `## Обновление` / `## Update` headings. Pass relations only through the95 `write_card.related` argument, never inside `body`.96- **Verify writes.** Reread every created or updated card before finishing. Confirm97 one Log, one Related, no empty/dated update headings, and that Compiled Truth says98 what is true now. A failed invariant keeps the rollup unfinished.99- **Quiet days are fine.** No noteworthy entities → still write a short daily-summary100 with topics and the MOC down to the raw transcript. Do not manufacture cards.101102## References103104- `references/classification.md` — what becomes a card vs. stays in the transcript.105- `references/card-templates.md` — frontmatter templates per type.106- `references/linking.md` — hub + neighbor linking protocol.107- `references/daily-summary.md` — the daily-summary card spec (topics + MOC).108- `scripts/autograph/docs/SKILL.md` — the typed vault engine (graph, decay, MOC, dedup).109- `scripts/memory/instructions/rules/{daily,weekly,monthly,yearly}-format.md` — format +110 rollup chain navigation rules.