Marketplace / Workspace

Memory Gardener

The Memory Gardener finds duplicate or conflicting decisions and lessons and stale open items, and proposes merging, superseding or closing them.

  • Read-only
  • Proposes changes
  • Models via ContextStream
  • Runs on a schedule
  • Reads tasks, plans
  • Reads memory

What it does

Finds duplicate or conflicting decisions and lessons, and stale todos, plans, tasks and reminders, and proposes merges, supersedes and closures for the person to accept.

What it does not do

It does not do these. A task like them is declined, and a declined run is free:

  • Changing, merging or closing anything itself: every change is a proposal the person accepts or turns down.
  • Writing new decisions, lessons, todos or notes.
  • Summarising or explaining what the workspace remembers.
  • Judging whether a decision was a good one.

Real runs

What Memory Gardener did with a real input: the input, the result (shortened where it is long), how long it took, what it cost, and where it ran. Each live run used public or demo material only. An example marked as from the eval suite is not a live run.

Live run on ContextStream’s task rail

Duplicate decisions about a public repository, as a dry run

Agent
gardener@0.1.0
Outcome
succeeded
Ran
2026-10-27 17:26 UTC
Took
18.9 s
Cost
400 credits

ContextStream's Demos workspace, in the project for the public mcp-server repository: its decisions about indexing, plus four demo decisions written for this example (two pairs that repeat or contradict each other).

  • Decisions in the Demos workspace's mcp-server project (demo material)
Input
{
  "project_id": "6aad1065-8086-4114-931e-1b16c1d9b234",
  "kinds": [
    "decisions"
  ],
  "dry_run": true,
  "focus": "search decisions"
}

Result

Summary

Drafted 4 merges, 0 supersedes, 0 closures from 8 candidates across 14 decisions, 0 lessons, 0 open todos, 0 open plans, 0 open tasks and 0 open reminders. The workspace's decisions contain several near-duplicate statements about detached project indexing and case-insensitive search, plus one same-day contradiction about case sensitivity that needs the person's judgment.

Proposals (a dry run: nothing was filed or changed)

ProposalItemsWhySure
merge“Show related-project search hits with paths relative to their repository” and “Search results from another project use repository-relative paths”D4 and D5 both say search hits from a related project are shown with repository-relative paths; D5 adds that this is not the machine path it was indexed from, so it says it more completely.0.9
merge“Exhaustive search always matches without regard to case” and “Exhaustive search ignores case”D1 and D2 both state that exhaustive search ignores case and give the same FooBar/foobar example; D2 states it in full, so D1 repeats it.0.9
merge“Run project indexing in a detached child to keep setup responsive.” and “Keep setup responsive by starting project indexing in a detached child”Both decisions say project indexing runs in a detached child so setup stays responsive; D13 records the implementation details (startBackgroundIndexing, unref), so it says it more completely.0.85
merge“Keep project indexing detached from setup completion.” and “Do not make setup await project indexing; keep indexing detached and asynchronous.”D9 and D10 both say setup must not wait for project indexing and that indexing stays detached; D10 states it more completely.0.85
Checks: 4 of 4 passed
  • Passed: items_read: Read 14 decisions, 0 lessons, 0 open todos, 0 open plans, 0 open tasks and 0 open reminders.
  • Passed: verdicts: Every verdict fits its candidate; 0 unsure changes left alone.
  • Passed: proposals_filed: A dry run: nothing was filed.
  • Passed: no_direct_writes: Changed nothing itself: every change waits for the person to accept it.

Provenance

Task
2d3861ea-7367-4397-8577-aef6687368c3
Charged
0: it ran on ContextStream’s own account, which is not billed; a customer pays the price shown

Example inputs

Inputs from the agent’s own job contract, each checked against its input schema.

The weekly pass: every kind of item, stale after 60 days.

{}
ss run gardener

Looks for duplicate or conflicting deployment decisions and lessons first.

{
  "kinds": [
    "decisions",
    "lessons"
  ],
  "focus": "deployment"
}
ss run gardener kinds:='["decisions","lessons"]' focus=deployment

Lists stale todos and tasks without filing the proposals.

{
  "kinds": [
    "todos",
    "tasks"
  ],
  "stale_after_days": 30,
  "dry_run": true
}
ss run gardener kinds:='["todos","tasks"]' stale_after_days:=30 dry_run:=true

Declined: it tidies items, it does not summarise them.

{
  "focus": "summarise my decisions"
}
ss run gardener focus='summarise my decisions'

Input

FieldTypeWhat it is
kinds"decisions" | "lessons" | "todos" | "plans" | "tasks" | "reminders"[]What to tend. Defaults to all of them.
project_idstringTend only this project's items.
stale_after_daysintegerHow long past its due date an open item must be to look stale (an item with no due date: twice as long untouched). Defaults to 60.
focusstringA topic to tend first, for example "deployment decisions".
dry_runbooleanList the proposals without filing them.
as_ofstringJudge staleness as of this time instead of now.

Where it runs

Model agent. A program on ContextStream’s model proxy, with a short-lived token that acts for you in one workspace.

It may run for up to 5 min before it is stopped. You may schedule it to run on its own.

ContextStream scopeWhat it lets a run do
items.readList todos, plans and their tasks, tasks and reminders.
memory.readSearch memory, and read decisions and lessons.
memory.proposePropose merging, superseding or closing memory items. Only you accept one; a run cannot.
model.invokeCall models through ContextStream’s model proxy, under the run’s credit cap.

Evals

12 of 12 offline eval cases pass for version 0.1.0 (baseline saved 2026-10-18). Offline means fakes and fixtures, with no network: the cases check what the agent guarantees, such as declining work that is not its job. They are not measurements of live runs; the live runs above are.