Files
msd-core/commands/gsd/mempalace-recall.md
Tom Boucher a375c4b354 feat(#956): add MemPalace memory capability (ADR-857 feature plug-in) (#1201)
* feat(#956): add MemPalace memory capability (ADR-857 feature plug-in)

Adds an opt-in, default-resilient ADR-857 feature capability that wires
MemPalace (local-first memory: MCP server + CLI) into the GSD loop:
deliberate recall before discuss/plan and verbatim + temporal-KG capture
at phase boundaries. Three memory modes (augment default; kg_backend and
replace forward-declared). Master gate mempalace.enabled (default off);
every hook onError:skip, zero gates; absent/disabled MemPalace => loop
unchanged. Transport is rendered-markdown only — MemPalace runs
out-of-process, no third-party code in gsd-core (ADR-857 §7).

Capability: capabilities/mempalace/ (manifest + 2 fragments), skills
commands/gsd/mempalace-{recall,capture}.md, agent
agents/gsd-mempalace-curator.md. Registration: ns-context router,
utility cluster, KNOWN_SKILLS, help full.md, model-catalog, copilot
install list, size baselines; regenerated capability-registry +
inventory manifest. ship:post wired into ship.md (wire-on-demand).

HELD on #1196: this capability also declares hooks at discuss:pre and
discuss:post, which are structurally un-wireable until the host-loop
conformance model covers the discuss phase (discuss-phase.md is not in
HOST_LOOP_FILES). The phase6-capstone-conformance gate therefore fails
on exactly those two orphaned points by design — see #1196. Once #1196
lands, rebase onto next and the gate goes green with no further change.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* docs(#956): backfill changeset PR number (#1201)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-14 02:09:10 -04:00

4.4 KiB

name, description, argument-hint, allowed-tools, requires
name description argument-hint allowed-tools requires
gsd:mempalace-recall Recall decisions, patterns, and surprises from MemPalace before planning [phase-slug]
Read
Write
Bash
config

STOP -- DO NOT READ THIS FILE. You are already reading it. This prompt was injected into your context by the command system. Using the Read tool on this file wastes tokens. Begin executing Step 0 immediately.

Step 0 -- Banner

Before ANY tool calls, display this banner:

GSD > MEMPALACE RECALL

Then proceed to Step 1.

Step 1 -- Config Gate

Check whether the MemPalace capability is enabled by reading .planning/config.json directly with the Read tool.

DO NOT use gsd-tools config get-value -- it hard-exits on missing keys.

  1. Read .planning/config.json with the Read tool.
  2. If the file does not exist: write the "unavailable" stub (Step 4) and STOP.
  3. Parse the JSON. Proceed to Step 2 only if config.mempalace && config.mempalace.enabled === true and config.mempalace.recall_on_plan !== false. Otherwise display the disabled message and STOP (recall_on_plan: false turns plan-time recall off while leaving the rest of the capability enabled).

Disabled message:

GSD > MEMPALACE RECALL

MemPalace memory is disabled. To activate:

  node <runtime-home>/gsd-core/bin/gsd-tools.cjs config-set mempalace.enabled true

Recall is opt-in; the loop proceeds normally without it.

This step is onError: skip at plan:pre -- recall never blocks planning.

Step 2 -- Resolve wing, mode, and transport

  1. Wing. Use config.mempalace.wing if non-empty; otherwise derive from config.project_code; otherwise fall back to the repository directory name.
  2. Mode. Read config.mempalace.memory_mode (augment | kg_backend | replace, default augment). Only augment is wired today, so recall always treats the palace as additive; kg_backend/replace are forward-declared and behave as augment.
  3. Transport. Prefer the MCP tools (mempalace_*) in interactive runs when your MemPalace MCP server is registered and your runtime permits those tools. Otherwise — headless/cron/autonomous runs, or runtimes that don't grant the MemPalace MCP tools — use the CLI (mempalace wake-up, mempalace search), which this skill's Bash allow-tool always covers. If neither is reachable, go to Step 4.
  4. Topic. Read the phase CONTEXT.md (the consumed artifact). Derive a short search query from its title, goal, and key decisions.

Step 3 -- Retrieve (read-only)

All calls in this step are side-effect-free. On any error or timeout, stop retrieving and write whatever was gathered (or the stub) -- never raise.

  1. Wake up (cheap, ~600--900 tokens):
    • Interactive: read the wing identity/summary, then mempalace_search.
    • Headless: mempalace wake-up --wing <wing>.
  2. Targeted search:
    • Interactive: mempalace_search(query=<topic>, wing=<wing>).
    • Headless: mempalace search "<topic>" --wing <wing>.
  3. Knowledge-graph facts (when config.mempalace.mirror_kg is true): mempalace_kg_query / mempalace_kg_timeline for decisions relevant to the topic and their validity windows. Only augment is currently wired, so the palace KG supplements GSD's native .planning/graphs/ — do not treat it as the sole source. (kg_backend/replace are forward-declared and behave as augment today.)
  4. Dedup the returned drawers/facts; keep the top results.

Step 4 -- Write MEMORY-RECALL.md

Write MEMORY-RECALL.md in the current phase directory. The planner consumes it.

When recall succeeded, structure it as:

# Memory Recall (MemPalace)

_Wing: <wing> · Mode: <mode> · Transport: <mcp|cli>_

## Prior decisions
- <decision> — <provenance: drawer id / kg fact, valid_from>

## Patterns
- <pattern> — <provenance>

## Surprises / gotchas
- <surprise> — <provenance>

When MemPalace is unreachable, write the stub and continue:

# Memory Recall (MemPalace)

_MemPalace unavailable at recall time — proceeding without recalled memory._

Anti-Patterns

  1. DO NOT let any MemPalace error fail the step -- recall is onError: skip.
  2. DO NOT write to the palace from this skill -- recall is read-only; capture is a separate skill.
  3. DO NOT paste raw search output into the file -- distil to decisions/patterns/surprises with provenance.
  4. DO NOT skip the config gate.