> ## Documentation Index
> Fetch the complete documentation index at: https://smithers.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# 0.29.0

> First-class <Memory>: a declarative memory scope for tasks, backed by Hindsight on Postgres, with recall and primers injected into prompts, remember/recall tools for agents, and async retention of task results.

**Smithers 0.29.0 introduces first-class memory.** Wrap any part of a workflow
in a `<Memory>` provider and every task inside it can recall relevant context
before it runs, expose `remember`/`recall` tools to its agent while it runs,
and retain a digest of what it produced after it finishes: durably, across
runs, in a [Hindsight](https://hindsight.vectorize.io) memory bank stored in
your own Postgres.

## Upgrading

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
bunx smithers-orchestrator update        # upgrade the CLI
bunx smithers-orchestrator upgrade       # agent-assisted: reads the changelogs and applies what your project needs
```

## The Memory component

```tsx theme={"theme":{"light":"github-light","dark":"github-dark"}}
<Memory bank={`project-${ctx.input.repoId}`} tags={["branch:main"]} recall="auto" primers={["project-primer"]} retain="on-complete" tools>
  <Task id="implement" agent={agents.coder} output={outputs.impl}>…</Task>
</Memory>
```

* **Declarative scope.** `bank`/`banks`, `tags`, `recall` (`"auto"`, a fixed
  query, or `false`), `budget`, `maxTokens`, `primers` (mental models injected
  verbatim), `retain`, and `tools`: inherited by descendant tasks through
  context, overridable per task via the existing `memory` prop. Both converge
  on the same descriptor, so graph extraction and the engine see one shape.
* **Frozen recall snapshots.** Recall runs once per node and iteration and is
  reused across retries, so retries stay deterministic and prompt-cache
  friendly. Recall failures and timeouts degrade to no injection with a
  warning: memory never fails a task.
* **Bounded injection.** Every injected block and tool result is capped by
  `maxTokens` (default 2048).
* **Async retention.** With `retain="on-complete"`, a digest of the task's
  output is retained after the result resolves: fire-and-forget, never
  blocking completion. Run and session identity travel as metadata and stable
  document ids, never as tags.
* **Postgres-family feature.** Set `HINDSIGHT_URL` (plus optional
  `HINDSIGHT_API_KEY`) to activate the Hindsight-backed store; without it, the
  existing local SQLite facts store and behavior are unchanged. Reference
  deployment env plumbing (systemd, k8s, docker-compose) ships in
  `deploy/reference/`.

See the [Memory component docs](/components/memory) and the updated
[memory concept guide](/concepts/memory) for the full contract.

## Upgrade notes

* Tasks with an **active** bank-based memory config bypass the durable output
  cache (recalled context is a mutable input that is not part of the cache
  identity). Legacy `namespace`/object-form `recall`/`remember`/`threadId`
  metadata remains inert and keeps its previous cache semantics.
* `HindsightMemoryStore` assumes a single writer per contract store; the
  limitation and its invariant tests are documented in the memory guides.
* `defineTool` moved to a shared `@smithers-orchestrator/tool-context` package
  re-exported from the existing entry points: imports keep working.
