durmem keeps your agents on track.

Tutorial 06: Observe proactive memory

Memory can arrive before you explicitly ask for it: when a session starts, when a request touches a known subject, or before a matching action. This exercise separates that automatic context from an agent's later manual query.

Before you start

Complete Tutorial 05. Keep ordinary practice facts in loom_demo under project scope durmem practice notebook, as in project memory. Keep the hook-test Directive separate: for this exercise, save or reuse a harmless test Directive in the existing palmerpenguins scope chain from Tutorial 03—prefer Repo("palmerpenguins") or Project("palmerpenguins"), or use its ancestor Organization("loom-tutorials") when the rule is organization-wide.

Before testing a fresh session, complete Tutorial 03's explicit [workspace.palmerpenguins] mapping to loom_demo. That mapping lets a new session in the palmerpenguins harness workspace use the intended coding store. Merely selecting loom_demo as a session store does not create that mapping or change the hook's startup scope; the hook still uses the active repository scope. The mapping is required for this fresh-session exercise, not for the separate notebook practice.

Your harness must support the particular hook being tested and have durmem's hooks enabled and trusted. Review install and setup for its manual checks. MCP is the agent's connection to durmem; a working MCP query does not demonstrate that a hook ran. If effective hook state cannot be verified, report it as unknown. Hermes's MCP-only integration is not a hook demonstration.

For ordinary practice, explicitly select loom_demo and durmem practice notebook in each fresh session before reading or writing. For the hook check, use the palmerpenguins checkout and its mapping above; choosing a session store manually does not change the startup hook's scope. Do not print credential files, change hook settings silently, or treat illustrative results as evidence.

1. Observe session-start priming

Priming supplies a small selection of current scope context when a session starts. It is ranked and bounded, not a dump of every stored fact.

With the palmerpenguins checkout open, start a genuinely new harness conversation, not a continuation of this one. Check the context before asking for substitute reads:

YouWhat durmem context actually arrived when this session started? Identify the harmless hook-test Directive and its scope from that supplied context. Do not query durmem and describe the answer as startup injection. If no block arrived, say so; we can diagnose the connection, mapping and hooks separately.

A matching supplied block is evidence of priming in that session. Its absence does not prove the fact is lost: it may be outside the active scope or selection. A subsequent explicit retrieval tests memory access, not the startup hook.

2. Distinguish intent surfacing from explicit retrieval

Intent surfacing supplies relevant standing context alongside a request. Unlike a literal trigger, semantic relevance need not depend on shared words.

YouFor durmem practice notebook, save or reuse an ordinary practice Directive to use a reproducible calculation rather than guessing totals from raw data. Retrieve it to verify the actual saved reference. Do not run a calculation yet.

Later ask:

YouHow should we check a dataset total? Report whether a standing context block actually accompanied this prompt. If you instead read the rule explicitly, distinguish that from automatic surfacing. Do not fabricate results.

Whether context is surfaced or retrieved, the agent must judge its relevance. A missed semantic match is a result to investigate, not a promise to retry until one appears. Neither a reminder nor a saved Directive grants execution authority.

3. Preview a moment-of-action trigger

Use the separate, harmless hook-test Directive in the palmerpenguins scope chain, not the notebook-practice Directive. A HookTrigger names an event and the literal text to match. The installed skills guide the agent through creating the trigger, linking it to the fact, and checking the current scope.

YouPreview which current memory would surface before the simulated action git push origin loom_demo, in the palmerpenguins scope. This is only a preview: do not run a push or change hook settings. Show matching fact references and explain any mismatch.

This proves the lookup, not delivery by your harness. For a real hook check, choose a separately authorized harmless action and inspect the context that actually arrives. Do not use a real push or a paid call as the test. There is no fixed waiting-time guarantee for a newly armed reminder.

Some command hooks also enforce a check annotation before selected consequential shell actions. That attestation gate checks the protocol, not whether a reminder is semantically applicable. It is distinct from the advisory context above.

4. Hand off unfinished repository work

A HandoffTask is memory about unfinished work, not a Kanban task or a scheduled job. It gives the next session enough context to continue deliberately. Per the exit skill, scope it only to Repo("palmerpenguins"); do not file it under the practice notebook or the wider organization.

YouWrap up this practice session. Save any genuinely unsaved durable knowledge after checking existing memory. If real work in this repository is unfinished, save a repo-scoped HandoffTask for Repo("palmerpenguins") with the agent identity and a concrete next step. Do not invent unfinished work merely to create one.

In a new session, check actual priming first, then explicitly retrieve the handoff if needed. Once its work is addressed, ask the agent to retire it using the exit skill's lifecycle. Saving a handoff does not ensure every later priming selection includes it, and does not itself start another agent.

5. Understand capture around compaction

Compaction replaces long conversation context with a summary. durmem's optional capture sweep tries to preserve useful knowledge around that boundary. It is not universal automatic recording of every conversation.

Read Capture precompact before changing the supported ~/.loom/hooks.toml setting. off is the default; confirm asks you to review proposals before saves; auto allows the sweep to save without that confirmation stop. Ask the agent to explain the choice before you opt in. This tutorial does not change the setting for you.

The bridge depends on the harness: Claude passes instructions to compaction; Codex preserves a transcript snapshot and supplies a post-compaction instruction. Supported hooks, effective settings and the actual sweep must all work for that session. After an opted-in compaction, inspect actual proposals or saved references. A manual capture request can help preserve knowledge, but is not evidence that the automatic compaction path worked.

Check your result

Keep separate notes for actual injection, preview lookup, explicit retrieval, and capture. An absent hook result is not a successful demonstration. Check store, scope, mapping, trust and supported events before changing memory. Continue with planning, or explore custom types independently.