{
  "schemaVersion": 1,
  "updatedAt": "2026-10-15",
  "contracts": [
    {
      "harness": "claude-code",
      "variant": "auto-memory-documented",
      "default": true,
      "stability": "documented-public",
      "discovery": {
        "roots": ["~/.claude/projects", "$CLAUDE_CONFIG_DIR/projects"],
        "pathTemplate": "projects/<project>/memory/",
        "projectIdentity": "git-repository-or-project-root",
        "sharedAcrossWorktrees": true
      },
      "storage": {
        "format": "markdown-files",
        "ownership": "harness-and-user",
        "index": "MEMORY.md",
        "topicFiles": "one-file-per-memory",
        "retention": "excluded-from-session-retention"
      },
      "consumption": {
        "indexLoading": "session-start",
        "topicLoading": "on-demand",
        "limits": [
          {
            "subject": "index",
            "unit": "lines",
            "value": 200
          },
          {
            "subject": "index",
            "unit": "kilobytes",
            "value": 25
          }
        ],
        "limitCombination": "first-limit-reached"
      },
      "configuration": [
        {
          "field": "autoMemoryDirectory",
          "location": "settings.json",
          "scopes": ["user", "project", "local", "policy", "--settings"],
          "constraints": [
            "absolute-path-or-home-relative",
            "repository-settings-require-workspace-trust",
            "repository-selected-directory-disabled-by-blockReadsOutsideWorkingDirectories"
          ]
        },
        {
          "field": "autoMemoryEnabled",
          "location": "settings.json",
          "scopes": ["user", "project", "local", "policy", "--settings"],
          "constraints": []
        },
        {
          "field": "CLAUDE_CODE_DISABLE_AUTO_MEMORY",
          "location": "environment",
          "scopes": ["process"],
          "constraints": ["1-disables", "0-forces-on"]
        }
      ],
      "interoperability": {
        "externalImport": "unknown",
        "merge": "unknown",
        "crossMachineSync": "not-shared-by-native-auto-memory"
      },
      "evidence": ["claude-memory-docs"],
      "references": {
        "storage": "https://code.claude.com/docs/en/memory#storage-location",
        "consumption": "https://code.claude.com/docs/en/memory#how-it-works",
        "configuration": "https://code.claude.com/docs/en/memory#enable-or-disable-auto-memory"
      },
      "notes": [
        "Directory configuration does not establish a cross-harness import or merge protocol.",
        "Topic frontmatter observed in a local store is not a documented parser contract."
      ],
      "availability": "on-by-default",
      "observedVersion": "2.1.299",
      "answers": {
        "turnOn": {
          "status": "supported",
          "answer": "Auto memory is on by default in local sessions. Toggle it in a session with `/memory` (writes `autoMemoryEnabled` to ~/.claude/settings.json), set `\"autoMemoryEnabled\": false` in any settings file (user, project, local or managed) to turn it off, or set `CLAUDE_CODE_DISABLE_AUTO_MEMORY=1` for a session (`=0` forces it on even over `autoMemoryEnabled: false` or `--bare`).",
          "reference": "https://code.claude.com/docs/en/memory#enable-or-disable-auto-memory",
          "evidence": [
            "claude-memory-docs",
            "memory-claude-code-code-claude-com-docs-en-settings-reference",
            "compaction-3",
            "memory-claude-code-changelog-md",
            "memory-claude-code-de-claude-com-docs-en-self-hosted-environments-configuration"
          ],
          "notes": [
            "`--bare` (CLAUDE_CODE_SIMPLE=1) and `--safe-mode` start without auto memory.",
            "Sessions in a self-hosted environment have auto memory off by default.",
            "From a background session, or a `claude` started by another Claude Code session, `/memory` can turn auto memory off but not back on."
          ]
        },
        "whoWrites": {
          "status": "supported",
          "answer": "Claude itself writes memories during the session, when it judges something will be useful later: your role and preferences (`user`), corrections and confirmed approaches (`feedback`), ongoing work and decisions not visible in the code (`project`), and pointers to outside resources (`reference`). It skips anything derivable from the codebase or already in CLAUDE.md, and doesn't save something every session; you see a \"Saved N memories\" notice when it does.",
          "reference": "https://code.claude.com/docs/en/memory#auto-memory",
          "evidence": ["claude-memory-docs", "memory-claude-code-changelog-md"],
          "notes": [
            "Each memory file's frontmatter records its kind in a `type` field, and Claude Code stamps a `modified` ISO 8601 timestamp on every write (v2.1.214+) so stale facts are visible."
          ]
        },
        "where": {
          "status": "supported",
          "answer": "Memories live in `~/.claude/projects/<project>/memory/` (under `$CLAUDE_CONFIG_DIR/projects/` if you set that): a `MEMORY.md` index plus one markdown file per memory. `<project>` comes from the git repository, so all worktrees and subdirectories of one repo share a single memory directory; outside git the project root is used. Set `autoMemoryDirectory` (absolute or `~/` path, any settings scope) to store it elsewhere.",
          "reference": "https://code.claude.com/docs/en/memory#storage-location",
          "evidence": [
            "claude-memory-docs",
            "memory-claude-code-code-claude-com-docs-en-settings-reference",
            "claude-sessions-docs"
          ],
          "notes": [
            "An `autoMemoryDirectory` from a repo's .claude/settings.json only takes effect after workspace trust, and is ignored entirely while `permissions.blockReadsOutsideWorkingDirectories` is on.",
            "With `CLAUDE_CODE_PROJECT_DIR_NAME` set beside `CLAUDE_CONFIG_DIR` (v2.1.234+), every project launched with that config dir shares one memory directory.",
            "Memory files are excluded from the `cleanupPeriodDays` transcript cleanup and stay until edited or deleted."
          ]
        },
        "loaded": {
          "status": "supported",
          "answer": "At the start of every session Claude Code loads the first 200 lines or first 25KB of `MEMORY.md`, whichever comes first; anything past that is dropped. Topic files are not loaded at startup; Claude reads them on demand with its file tools (shown as \"Recalled N memories\").",
          "reference": "https://code.claude.com/docs/en/memory#how-it-works",
          "evidence": [
            "claude-memory-docs",
            "memory-claude-code-code-claude-com-docs-en-errors",
            "memory-claude-code-changelog-md"
          ],
          "notes": [
            "When a write leaves MEMORY.md near or over the limit, Claude Code tells Claude to compact the index (one line per entry, details in topic files).",
            "Recalled memories come with a note on how old they are."
          ]
        },
        "view": {
          "status": "supported",
          "answer": "Run `/memory` and choose the auto memory folder to open it; the same dialog lists your CLAUDE.md files and has the auto memory toggle. Memories are plain markdown in `~/.claude/projects/<project>/memory/`, so you can also open and edit them in any editor. In the VS Code extension, the Memory dialog lets you view, edit and delete saved memories.",
          "reference": "https://code.claude.com/docs/en/memory#view-and-edit-with-%2Fmemory",
          "evidence": ["claude-memory-docs", "claude-commands-docs"]
        },
        "remember": {
          "status": "supported",
          "answer": "Ask in plain language, e.g. \"remember that the API tests require a local Redis instance\" or \"always use pnpm, not npm\", and Claude saves it to auto memory. To make it a standing instruction instead, say \"add this to CLAUDE.md\" or edit CLAUDE.md via `/memory`.",
          "reference": "https://code.claude.com/docs/en/memory#view-and-edit-with-%2Fmemory",
          "evidence": ["claude-memory-docs"]
        },
        "forget": {
          "status": "supported",
          "answer": "Edit or delete the markdown files (and their line in `MEMORY.md`) through `/memory` or any editor, or ask Claude to update or remove a memory. To wipe a project's memory, delete its `~/.claude/projects/<project>/memory/` directory; there is no dedicated reset command.",
          "reference": "https://code.claude.com/docs/en/memory#audit-and-edit-your-memory",
          "evidence": ["claude-memory-docs"]
        },
        "share": {
          "status": "partial",
          "answer": "The main auto memory is machine-local: it is shared across worktrees of one repo but not across machines or cloud environments, and it lives outside the repo. To share, put the facts in a checked-in CLAUDE.md, or point `autoMemoryDirectory` at a synced folder yourself. Subagent memory with `memory: project` lives in `.claude/agent-memory/` and is meant to be committed.",
          "reference": "https://code.claude.com/docs/en/memory#storage-location",
          "evidence": ["claude-memory-docs", "claude-subagents-docs"],
          "notes": [
            "Remote sessions can also recall from mounted team memory stores (`CLAUDE_MEMORY_STORES`), which are set up outside the CLI."
          ]
        },
        "subagents": {
          "status": "supported",
          "answer": "Yes. Add `memory: user`, `memory: project` or `memory: local` to a subagent's frontmatter to give it its own memory directory (`~/.claude/agent-memory/<agent>/`, `.claude/agent-memory/<agent>/`, or `.claude/agent-memory-local/<agent>/`); it loads the first 200 lines/25KB of its own `MEMORY.md` and gets Read/Write/Edit to maintain it. Subagents never see the main conversation's auto memory (forks excepted), and the field does nothing when auto memory is turned off.",
          "reference": "https://code.claude.com/docs/en/sub-agents#enable-persistent-memory",
          "evidence": ["claude-subagents-docs", "claude-memory-docs"],
          "notes": ["`project` is the recommended scope; `local` keeps it out of version control."]
        }
      }
    },
    {
      "harness": "codex",
      "variant": "local-memory-documented",
      "default": true,
      "stability": "documented-public",
      "discovery": {
        "roots": ["~/.codex/memories", "$CODEX_HOME/memories"],
        "pathTemplate": "memories/",
        "projectIdentity": "unknown",
        "sharedAcrossWorktrees": "unknown"
      },
      "storage": {
        "format": "unknown",
        "ownership": "harness-generated",
        "index": null,
        "topicFiles": "unknown",
        "retention": "unknown"
      },
      "consumption": {
        "indexLoading": "unknown",
        "topicLoading": "unknown",
        "limits": [],
        "limitCombination": "unknown"
      },
      "configuration": [
        {
          "field": "features.memories",
          "location": "config.toml",
          "scopes": ["user"],
          "constraints": ["opt-in"]
        },
        {
          "field": "memories.generate_memories",
          "location": "config.toml",
          "scopes": ["user"],
          "constraints": []
        },
        {
          "field": "memories.use_memories",
          "location": "config.toml",
          "scopes": ["user"],
          "constraints": []
        }
      ],
      "interoperability": {
        "externalImport": "unknown",
        "merge": "unknown",
        "crossMachineSync": "unknown"
      },
      "evidence": ["codex-memory-docs"],
      "references": {
        "storage": "https://learn.chatgpt.com/docs/customization/memories?surface=app#local-memory-storage",
        "generation": "https://learn.chatgpt.com/docs/customization/memories?surface=app#how-local-codex-memories-work",
        "configuration": "https://learn.chatgpt.com/docs/customization/memories?surface=app#configure-local-memories"
      },
      "notes": [
        "Generated state is not a documented external write contract.",
        "Background generation can lag idle chats and skip active or short-lived chats.",
        "Local filenames and layouts remain observations until version-bounded evidence establishes their contract."
      ],
      "availability": "opt-in",
      "observedVersion": "0.162.1",
      "answers": {
        "turnOn": {
          "status": "supported",
          "answer": "Codex has built-in local memories, off by default. Turn them on with `[features] memories = true` in ~/.codex/config.toml, `codex features enable memories`, or by typing /memories in the TUI and choosing \"Yes, enable\" (applies to new threads). Once enabled, `memories.use_memories = false` stops injecting memories and `memories.generate_memories = false` stops new threads from becoming memory inputs; `codex features disable memories` turns the whole feature off.",
          "reference": "https://learn.chatgpt.com/docs/customization/memories?surface=cli#configure-local-memories",
          "evidence": [
            "memory-codex-learn-chatgpt-com-docs-customization-memories-surface-cli",
            "steering-codex-codex-rs-features-src-lib-rs",
            "memory-codex-codex-rs-config-src-types-rs",
            "memory-codex-codex-rs-tui-src-chatwidget-rs",
            "compaction-6"
          ],
          "notes": [
            "The feature is marked stable but still defaults to off; the old key `memory_tool` is accepted as an alias.",
            "Admins can force it on or off for managed users with `features.memories` in requirements.toml.",
            "In the ChatGPT desktop app the switch is Settings > Personalization > Enable Codex memories."
          ]
        },
        "whoWrites": {
          "status": "supported",
          "answer": "A background job writes memories, not the chat you're in. Each time you start a turn in an interactive root session, Codex looks at your other threads that have been idle for at least 6 hours and are at most 10 days old. It summarizes up to 2 of them per pass with a low-effort model. At most every 6 hours, a sandboxed consolidation agent with no network access merges those summaries into the memory files. The agent in your chat only adds a note when you explicitly ask it to.",
          "reference": "https://learn.chatgpt.com/docs/customization/memories?surface=cli#how-local-codex-memories-work",
          "evidence": [
            "memory-codex-learn-chatgpt-com-docs-customization-memories-surface-cli",
            "memory-codex-codex-rs-memories-readme-md",
            "steering-codex-codex-rs-app-server-src-request-processors-turn-processor-rs",
            "memory-codex-codex-rs-memories-write-src-start-rs",
            "memory-codex-codex-rs-config-src-types-rs",
            "memory-codex-codex-rs-state-src-runtime-memories-rs",
            "memory-codex-codex-rs-rollout-src-lib-rs"
          ],
          "notes": [
            "Only CLI/TUI, IDE extension and ChatGPT desktop threads feed memories. `codex exec` runs, ephemeral sessions and subagent threads do not.",
            "Generation is skipped while less than 25% of your Codex rate limit remains (`memories.min_rate_limit_remaining_percent`). New memories can therefore take hours or days to appear.",
            "Tunable with `memories.min_rollout_idle_hours` (1-48), `memories.max_rollout_age_days` (0-90), `memories.max_rollouts_per_startup` (1-128), `memories.extract_model` and `memories.consolidation_model`.",
            "Set `memories.disable_on_external_context = true` to keep threads that used MCP tools, web search or tool search out of memory generation.",
            "Secrets are redacted from the generated memory fields."
          ]
        },
        "where": {
          "status": "supported",
          "answer": "Memories are stored under $CODEX_HOME/memories (default ~/.codex/memories). Setting `memories.version = \"v2\"` uses ~/.codex/memories_v2 instead. There is one global store per Codex home, shared by every project, repo and worktree on that machine. The index of memory files is kept in the local state database.",
          "reference": "https://learn.chatgpt.com/docs/customization/memories?surface=cli#local-memory-storage",
          "evidence": [
            "memory-codex-learn-chatgpt-com-docs-customization-memories-surface-cli",
            "memory-codex-codex-rs-protocol-src-memory-version-rs",
            "memory-codex-codex-rs-memories-write-src-control-rs"
          ],
          "notes": [
            "Files include memory_summary.md, MEMORY.md, raw_memories.md, rollout_summaries/, skills/ and extensions/. The folder is also a local git repository that Codex uses to track changes between consolidation runs."
          ]
        },
        "loaded": {
          "status": "supported",
          "answer": "At the start of each thread, Codex injects memory_summary.md as developer instructions, truncated to 2,500 tokens, together with guidance on how to use the memory folder. MEMORY.md (the searchable index), rollout_summaries/ and memory skills/ are not loaded. The agent searches or opens them on demand when a task looks related, usually in 4-6 search steps or fewer. A change to `use_memories` takes effect from the next thread.",
          "reference": "https://github.com/openai/codex/blob/092d3acd6bec3e3a14bdc7e7a2810ab628ab759d/codex-rs/ext/memories/templates/memories/read_path.md#L19-L46",
          "evidence": [
            "memory-codex-codex-rs-ext-memories-templates-memories-read-path-md",
            "memory-codex-codex-rs-ext-memories-src-lib-rs",
            "memory-codex-codex-rs-ext-memories-src-prompts-rs",
            "memory-codex-codex-rs-ext-memories-src-extension-rs"
          ],
          "notes": [
            "When the agent uses a memory file, its reply ends with a memory citation block.",
            "`memories.dedicated_tools = true` (off by default) gives the agent dedicated memory list/search/read/add_ad_hoc_note tools, instead of having it read the files with shell commands."
          ]
        },
        "view": {
          "status": "partial",
          "answer": "There's no memory browser. To see what Codex remembers, open the Markdown files in ~/.codex/memories (start with memory_summary.md and MEMORY.md). /memories in the TUI only toggles \"Use memories\" and \"Generate memories\" and offers \"Reset all memories\". OpenAI calls these files generated state: you can read them, but don't edit them by hand to control behaviour, because the next consolidation rewrites them.",
          "reference": "https://learn.chatgpt.com/docs/customization/memories?surface=cli#local-memory-storage",
          "evidence": [
            "memory-codex-learn-chatgpt-com-docs-customization-memories-surface-cli",
            "memory-codex-codex-rs-tui-src-bottom-pane-memories-settings-view-rs"
          ],
          "notes": [
            "In 0.162.1 the /memories toggles are written to config.toml as `memories.use_memories` and `memories.generate_memories`, so they apply globally rather than per chat. The 'Generate' toggle also updates the current thread."
          ]
        },
        "remember": {
          "status": "partial",
          "answer": "Ask the agent directly, for example \"remember that we deploy with make ship\". When you explicitly ask, it writes a small note to ~/.codex/memories/extensions/ad_hoc/notes/<timestamp>-<slug>.md. The next background consolidation merges the note into the memory files, so it is not available immediately. Rules that must always apply belong in AGENTS.md instead.",
          "reference": "https://github.com/openai/codex/blob/092d3acd6bec3e3a14bdc7e7a2810ab628ab759d/codex-rs/ext/memories/templates/memories/read_path.md#L117-L123",
          "evidence": [
            "memory-codex-codex-rs-ext-memories-templates-memories-read-path-md",
            "memory-codex-s-memories-write-templates-extensions-ad-hoc-instructions-md",
            "memory-codex-learn-chatgpt-com-docs-customization-memories-surface-cli"
          ],
          "notes": [
            "Notes are treated as information only, never as instructions, and remembered facts are tagged \"[ad-hoc note]\"."
          ]
        },
        "forget": {
          "status": "supported",
          "answer": "To correct or remove one fact, ask the agent to forget or update it. It records your request as an ad-hoc note, and the next consolidation applies it. To wipe everything, run /memories > Reset all memories in the TUI, or the hidden `codex debug clear-memories` command. Both delete the memory folders under ~/.codex and the memory records in the local state database, but leave your threads untouched.",
          "reference": "https://github.com/openai/codex/blob/092d3acd6bec3e3a14bdc7e7a2810ab628ab759d/codex-rs/app-server/src/request_processors/thread_processor.rs#L1905-L1925",
          "evidence": [
            "memory-codex-dex-rs-app-server-src-request-processors-thread-processor-rs",
            "memory-codex-codex-rs-tui-src-bottom-pane-memories-settings-view-rs",
            "steering-codex-codex-rs-cli-src-main-rs",
            "memory-codex-codex-rs-ext-memories-templates-memories-read-path-md"
          ],
          "notes": [
            "Memories that haven't been used for 30 days drop out of consolidation (`memories.max_unused_days`).",
            "The ChatGPT desktop app offers the same wipe as Settings > Personalization > Delete Codex memories."
          ]
        },
        "share": {
          "status": "unsupported",
          "answer": "No. Memories stay local to one machine's Codex home and don't sync, and there's no project-level memory file to commit. Put shared team knowledge in AGENTS.md or checked-in docs, which the official docs recommend.",
          "reference": "https://learn.chatgpt.com/docs/customization/memories?surface=cli#review-local-memories",
          "evidence": ["memory-codex-learn-chatgpt-com-docs-customization-memories-surface-cli"],
          "notes": [
            "The IDE extension uses the memory store of the Codex host it is connected to.",
            "Review the memory files before you share your ~/.codex directory."
          ]
        },
        "subagents": {
          "status": "partial",
          "answer": "Subagents have no memory of their own. They inherit the parent's config, so they read the same global memory summary, but their threads never feed memory generation. A custom agent role can turn memory off for itself with `[features] memories = false` in its role config file.",
          "reference": "https://github.com/openai/codex/blob/092d3acd6bec3e3a14bdc7e7a2810ab628ab759d/codex-rs/core/src/agent/role.rs#L91-L104",
          "evidence": [
            "memory-codex-codex-rs-core-src-agent-role-rs",
            "memory-codex-codex-rs-memories-write-src-start-rs",
            "memory-codex-codex-rs-ext-memories-src-extension-rs"
          ]
        }
      }
    },
    {
      "harness": "codex",
      "variant": "v1-a9b08151-source",
      "default": false,
      "stability": "source-observed",
      "discovery": {
        "roots": ["$CODEX_HOME/memories"],
        "pathTemplate": "memories/",
        "projectIdentity": "cross-project",
        "sharedAcrossWorktrees": "unknown"
      },
      "storage": {
        "format": "markdown-files",
        "ownership": "harness-generated",
        "index": "memory_summary.md",
        "topicFiles": "rollout-summaries",
        "retention": "selection-and-citation-based"
      },
      "consumption": {
        "indexLoading": "session-start",
        "topicLoading": "on-demand",
        "limits": [],
        "limitCombination": "unknown"
      },
      "configuration": [
        {
          "field": "features.memories",
          "location": "config.toml",
          "scopes": ["user"],
          "constraints": ["opt-in"]
        },
        {
          "field": "memories.generate_memories",
          "location": "config.toml",
          "scopes": ["user"],
          "constraints": []
        },
        {
          "field": "memories.use_memories",
          "location": "config.toml",
          "scopes": ["user"],
          "constraints": []
        },
        {
          "field": "memories.version",
          "location": "config.toml",
          "scopes": ["user"],
          "constraints": []
        },
        {
          "field": "memories.dual_write",
          "location": "config.toml",
          "scopes": ["user"],
          "constraints": []
        },
        {
          "field": "memories.dedicated_tools",
          "location": "config.toml",
          "scopes": ["user"],
          "constraints": []
        }
      ],
      "interoperability": {
        "externalImport": "unknown",
        "merge": "unknown",
        "crossMachineSync": "unknown"
      },
      "evidence": [
        "memory-pipeline-1",
        "memory-pipeline-2",
        "memory-pipeline-3",
        "memory-pipeline-4",
        "memory-pipeline-5",
        "memory-pipeline-6",
        "memory-pipeline-7",
        "memory-pipeline-8",
        "memory-pipeline-9",
        "memory-pipeline-10",
        "memory-pipeline-11",
        "memory-pipeline-12",
        "memory-pipeline-13",
        "memory-pipeline-14",
        "memory-pipeline-15",
        "memory-pipeline-16",
        "memory-pipeline-17",
        "memory-pipeline-18",
        "memory-pipeline-19",
        "memory-pipeline-20",
        "memory-pipeline-21",
        "memory-pipeline-22",
        "memory-pipeline-23",
        "memory-pipeline-24",
        "memory-pipeline-25",
        "memory-pipeline-26",
        "memory-pipeline-27",
        "memory-pipeline-28",
        "memory-pipeline-29",
        "memory-pipeline-30",
        "memory-pipeline-31",
        "memory-pipeline-32",
        "memory-pipeline-33"
      ],
      "references": {
        "ext/memories/src/prompts.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/ext/memories/src/prompts.rs#L1",
        "ext/memories/src/extension.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/ext/memories/src/extension.rs#L1",
        "ext/memories/src/lib.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/ext/memories/src/lib.rs#L1",
        "ext/memories/src/local/search.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/ext/memories/src/local/search.rs#L1",
        "features/src/lib.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/features/src/lib.rs#L1",
        "ext/memories/templates/memories/read_path.md": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/ext/memories/templates/memories/read_path.md#L1",
        "tui/src/app_server_session.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/tui/src/app_server_session.rs#L1414-L1438",
        "exec/src/lib.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/exec/src/lib.rs#L1227-L1231",
        "app-server/src/request_processors/turn_processor.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/app-server/src/request_processors/turn_processor.rs#L704-L717",
        "core/src/codex_thread.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/core/src/codex_thread.rs#L128-L138",
        "memories/write/src/guard.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/memories/write/src/guard.rs#L1",
        "state/src/runtime/memories.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/state/src/runtime/memories.rs#L1",
        "rollout/src/lib.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/rollout/src/lib.rs#L88-L95",
        "memories/write/templates/memories/stage_one_system.md": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/memories/write/templates/memories/stage_one_system.md#L1",
        "memories/write/src/start.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/memories/write/src/start.rs#L1",
        "memories/write/src/phase1.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/memories/write/src/phase1.rs#L1",
        "memories/write/src/rollout_input.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/memories/write/src/rollout_input.rs#L1",
        "memories/write/src/lib.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/memories/write/src/lib.rs#L1",
        "memories/write/src/phase2.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/memories/write/src/phase2.rs#L1",
        "memories/write/src/workspace.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/memories/write/src/workspace.rs#L1",
        "memories/write/src/extensions/prune.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/memories/write/src/extensions/prune.rs#L1",
        "config/src/types.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/config/src/types.rs#L1",
        "model-provider/src/provider.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/model-provider/src/provider.rs#L1",
        "core/src/stream_events_utils.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/core/src/stream_events_utils.rs#L1",
        "memories/read/src/usage.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/memories/read/src/usage.rs#L1",
        "memories/write/templates/extensions/ad_hoc/instructions.md": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/memories/write/templates/extensions/ad_hoc/instructions.md#L1",
        "ext/memories/src/local/ad_hoc_note.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/ext/memories/src/local/ad_hoc_note.rs#L1",
        "memories/write/templates/memories/consolidation_v2.md": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/memories/write/templates/memories/consolidation_v2.md#L1",
        "protocol/src/memory_version.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/protocol/src/memory_version.rs#L1",
        "memories/write/templates/memories/consolidation.md": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/memories/write/templates/memories/consolidation.md#L1",
        "ext/memories/templates/memories/read_path_v2.md": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/ext/memories/templates/memories/read_path_v2.md#L1"
      },
      "notes": [
        "MEMORY.md is not injected; the active memory_summary.md is developer context.",
        "Nested use/generate defaults do not enable the disabled-by-default memories feature.",
        "generate_memories=false marks newly created threads disabled; it is not a global early-return gate for older eligible threads."
      ],
      "verifiedAt": "2026-10-12",
      "sourceRevision": "a9b0815167c27ab13719dd12d13b63e02b70d221",
      "unknowns": [
        "No live extraction, consolidation, memory import, or effective client configuration verified.",
        "Source main pin is separate from the stable release and installed client."
      ],
      "pipeline": {
        "version": "v1",
        "injectedArtifact": "memory_summary.md",
        "injectedRole": "developer",
        "summaryLimitEstimatedTokens": 2500,
        "indexInjected": false,
        "retrieval": ["selective MEMORY.md search", "referenced rollout summaries"],
        "gates": ["features.memories", "memories.use_memories", "nonempty readable summary"],
        "dedicatedTools": {
          "enabledByDefault": false,
          "names": [
            "memories.list",
            "memories.search",
            "memories.read",
            "memories.add_ad_hoc_note"
          ],
          "search": "lexical",
          "listLimit": 2000,
          "searchLimit": 200,
          "readLimitEstimatedTokens": 20000
        },
        "extraction": {
          "trigger": "qualifying turn/start with new input, through shared app-server execution",
          "timerDriven": false,
          "allowedSources": ["cli", "vscode", "atlas", "chatgpt"],
          "projectFilter": false,
          "scanLimit": 5000,
          "maxRolloutAgeDays": 10,
          "minIdleHours": 6,
          "jobsPerTrigger": 2,
          "sharedActiveLeaseLimit": true,
          "executionConcurrency": 8,
          "leaseHours": 1,
          "failureBackoffHours": 1,
          "initialRetries": 3,
          "minimumRateLimitPercent": 25,
          "ordering": "newest eligible updated_at_ms first; no explicit equal-timestamp ID tiebreaker",
          "watermarks": "whole-second summary/source and successful job watermarks; age filtering uses milliseconds",
          "emptyOutput": "allowed and recorded as successful extraction"
        },
        "consolidation": {
          "cooldownHours": 6,
          "maximumInputs": 256,
          "unusedDays": 30,
          "extensionResourcePruneDays": 7,
          "inputSelection": "usage count, then last usage or source update; never-used records age from source update",
          "artifacts": ["memory_summary.md", "rollout_summaries/", "MEMORY.md", "raw_memories.md"],
          "rewriteTrigger": "workspace diff against last successful Git baseline; global DB lease",
          "containment": "managed profile writes memory root without network; disabled/external parent profiles preserved",
          "summaryTargetUtf8Bytes": null,
          "contextFragmentMaxUtf8Bytes": null
        },
        "corrections": {
          "explicitUserRequestRequired": true,
          "path": "extensions/ad_hoc/notes/<timestamp>-<slug>.md",
          "directlyEditGeneratedFiles": false,
          "application": "consolidation applies correction/deletion notes; saving a note does not imply refreshed injected summary"
        },
        "citationRetention": {
          "fields": ["usage_count", "last_usage"],
          "effect": "valid originating thread IDs update stage-1 retention metadata",
          "provesUsefulness": false
        },
        "defaults": {
          "activeVersion": "v1",
          "featureEnabled": false,
          "useMemories": true,
          "generateMemories": true,
          "dualWrite": false
        },
        "generationGates": [
          "features.memories enabled",
          "root non-ephemeral triggering session",
          "memory database available",
          "primary environment resolved or absent",
          "known quota allowance sufficient; missing/failed lookup permits scan",
          "eligible other threads: unarchived, memory enabled, allowed sources, idle and age windows, uncovered watermark"
        ]
      },
      "availability": "opt-in"
    },
    {
      "harness": "codex",
      "variant": "v2-a9b08151-source",
      "default": false,
      "stability": "source-observed",
      "discovery": {
        "roots": ["$CODEX_HOME/memories_v2"],
        "pathTemplate": "memories_v2/",
        "projectIdentity": "cross-project",
        "sharedAcrossWorktrees": "unknown"
      },
      "storage": {
        "format": "markdown-files",
        "ownership": "harness-generated",
        "index": "memory_summary.md",
        "topicFiles": "rollout-summaries",
        "retention": "selection-and-citation-based"
      },
      "consumption": {
        "indexLoading": "session-start",
        "topicLoading": "on-demand",
        "limits": [],
        "limitCombination": "unknown"
      },
      "configuration": [
        {
          "field": "features.memories",
          "location": "config.toml",
          "scopes": ["user"],
          "constraints": ["opt-in"]
        },
        {
          "field": "memories.generate_memories",
          "location": "config.toml",
          "scopes": ["user"],
          "constraints": []
        },
        {
          "field": "memories.use_memories",
          "location": "config.toml",
          "scopes": ["user"],
          "constraints": []
        },
        {
          "field": "memories.version",
          "location": "config.toml",
          "scopes": ["user"],
          "constraints": []
        },
        {
          "field": "memories.dual_write",
          "location": "config.toml",
          "scopes": ["user"],
          "constraints": []
        },
        {
          "field": "memories.dedicated_tools",
          "location": "config.toml",
          "scopes": ["user"],
          "constraints": []
        }
      ],
      "interoperability": {
        "externalImport": "unknown",
        "merge": "unknown",
        "crossMachineSync": "unknown"
      },
      "evidence": [
        "memory-pipeline-1",
        "memory-pipeline-2",
        "memory-pipeline-3",
        "memory-pipeline-4",
        "memory-pipeline-5",
        "memory-pipeline-6",
        "memory-pipeline-7",
        "memory-pipeline-8",
        "memory-pipeline-9",
        "memory-pipeline-10",
        "memory-pipeline-11",
        "memory-pipeline-12",
        "memory-pipeline-13",
        "memory-pipeline-14",
        "memory-pipeline-15",
        "memory-pipeline-16",
        "memory-pipeline-17",
        "memory-pipeline-18",
        "memory-pipeline-19",
        "memory-pipeline-20",
        "memory-pipeline-21",
        "memory-pipeline-22",
        "memory-pipeline-23",
        "memory-pipeline-24",
        "memory-pipeline-25",
        "memory-pipeline-26",
        "memory-pipeline-27",
        "memory-pipeline-28",
        "memory-pipeline-29",
        "memory-pipeline-30",
        "memory-pipeline-31",
        "memory-pipeline-32",
        "memory-pipeline-33"
      ],
      "references": {
        "ext/memories/src/prompts.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/ext/memories/src/prompts.rs#L1",
        "ext/memories/src/extension.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/ext/memories/src/extension.rs#L1",
        "ext/memories/src/lib.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/ext/memories/src/lib.rs#L1",
        "ext/memories/src/local/search.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/ext/memories/src/local/search.rs#L1",
        "features/src/lib.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/features/src/lib.rs#L1",
        "ext/memories/templates/memories/read_path.md": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/ext/memories/templates/memories/read_path.md#L1",
        "tui/src/app_server_session.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/tui/src/app_server_session.rs#L1414-L1438",
        "exec/src/lib.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/exec/src/lib.rs#L1227-L1231",
        "app-server/src/request_processors/turn_processor.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/app-server/src/request_processors/turn_processor.rs#L704-L717",
        "core/src/codex_thread.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/core/src/codex_thread.rs#L128-L138",
        "memories/write/src/guard.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/memories/write/src/guard.rs#L1",
        "state/src/runtime/memories.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/state/src/runtime/memories.rs#L1",
        "rollout/src/lib.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/rollout/src/lib.rs#L88-L95",
        "memories/write/templates/memories/stage_one_system.md": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/memories/write/templates/memories/stage_one_system.md#L1",
        "memories/write/src/start.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/memories/write/src/start.rs#L1",
        "memories/write/src/phase1.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/memories/write/src/phase1.rs#L1",
        "memories/write/src/rollout_input.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/memories/write/src/rollout_input.rs#L1",
        "memories/write/src/lib.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/memories/write/src/lib.rs#L1",
        "memories/write/src/phase2.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/memories/write/src/phase2.rs#L1",
        "memories/write/src/workspace.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/memories/write/src/workspace.rs#L1",
        "memories/write/src/extensions/prune.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/memories/write/src/extensions/prune.rs#L1",
        "config/src/types.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/config/src/types.rs#L1",
        "model-provider/src/provider.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/model-provider/src/provider.rs#L1",
        "core/src/stream_events_utils.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/core/src/stream_events_utils.rs#L1",
        "memories/read/src/usage.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/memories/read/src/usage.rs#L1",
        "memories/write/templates/extensions/ad_hoc/instructions.md": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/memories/write/templates/extensions/ad_hoc/instructions.md#L1",
        "ext/memories/src/local/ad_hoc_note.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/ext/memories/src/local/ad_hoc_note.rs#L1",
        "memories/write/templates/memories/consolidation_v2.md": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/memories/write/templates/memories/consolidation_v2.md#L1",
        "protocol/src/memory_version.rs": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/protocol/src/memory_version.rs#L1",
        "memories/write/templates/memories/consolidation.md": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/memories/write/templates/memories/consolidation.md#L1",
        "ext/memories/templates/memories/read_path_v2.md": "https://github.com/openai/codex/blob/a9b0815167c27ab13719dd12d13b63e02b70d221/codex-rs/ext/memories/templates/memories/read_path_v2.md#L1"
      },
      "notes": [
        "MEMORY.md is not injected; the active memory_summary.md is developer context.",
        "Nested use/generate defaults do not enable the disabled-by-default memories feature.",
        "generate_memories=false marks newly created threads disabled; it is not a global early-return gate for older eligible threads."
      ],
      "verifiedAt": "2026-10-12",
      "sourceRevision": "a9b0815167c27ab13719dd12d13b63e02b70d221",
      "unknowns": [
        "No live extraction, consolidation, memory import, or effective client configuration verified.",
        "Source main pin is separate from the stable release and installed client."
      ],
      "pipeline": {
        "version": "v2",
        "injectedArtifact": "memory_summary.md",
        "injectedRole": "developer",
        "summaryLimitEstimatedTokens": 2500,
        "indexInjected": false,
        "retrieval": ["summary-linked rollout summaries"],
        "gates": ["features.memories", "memories.use_memories", "nonempty readable summary"],
        "dedicatedTools": {
          "enabledByDefault": false,
          "names": [
            "memories.list",
            "memories.search",
            "memories.read",
            "memories.add_ad_hoc_note"
          ],
          "search": "lexical",
          "listLimit": 2000,
          "searchLimit": 200,
          "readLimitEstimatedTokens": 20000
        },
        "extraction": {
          "trigger": "qualifying turn/start with new input, through shared app-server execution",
          "timerDriven": false,
          "allowedSources": ["cli", "vscode", "atlas", "chatgpt"],
          "projectFilter": false,
          "scanLimit": 5000,
          "maxRolloutAgeDays": 10,
          "minIdleHours": 6,
          "jobsPerTrigger": 2,
          "sharedActiveLeaseLimit": true,
          "executionConcurrency": 8,
          "leaseHours": 1,
          "failureBackoffHours": 1,
          "initialRetries": 3,
          "minimumRateLimitPercent": 25,
          "ordering": "newest eligible updated_at_ms first; no explicit equal-timestamp ID tiebreaker",
          "watermarks": "whole-second summary/source and successful job watermarks; age filtering uses milliseconds",
          "emptyOutput": "allowed and recorded as successful extraction"
        },
        "consolidation": {
          "cooldownHours": 6,
          "maximumInputs": 256,
          "unusedDays": 30,
          "extensionResourcePruneDays": 7,
          "inputSelection": "usage count, then last usage or source update; never-used records age from source update",
          "artifacts": ["memory_summary.md", "rollout_summaries/"],
          "rewriteTrigger": "workspace diff against last successful Git baseline; global DB lease",
          "containment": "managed profile writes memory root without network; disabled/external parent profiles preserved",
          "summaryTargetUtf8Bytes": 10000,
          "contextFragmentMaxUtf8Bytes": 8900
        },
        "corrections": {
          "explicitUserRequestRequired": true,
          "path": "extensions/ad_hoc/notes/<timestamp>-<slug>.md",
          "directlyEditGeneratedFiles": false,
          "application": "consolidation applies correction/deletion notes; saving a note does not imply refreshed injected summary"
        },
        "citationRetention": {
          "fields": ["usage_count", "last_usage"],
          "effect": "valid originating thread IDs update stage-1 retention metadata",
          "provesUsefulness": false
        },
        "defaults": {
          "activeVersion": "v1",
          "featureEnabled": false,
          "useMemories": true,
          "generateMemories": true,
          "dualWrite": false
        },
        "generationGates": [
          "features.memories enabled",
          "root non-ephemeral triggering session",
          "memory database available",
          "primary environment resolved or absent",
          "known quota allowance sufficient; missing/failed lookup permits scan",
          "eligible other threads: unarchived, memory enabled, allowed sources, idle and age windows, uncovered watermark"
        ]
      },
      "availability": "opt-in"
    },
    {
      "harness": "cursor-agent",
      "variant": "current",
      "default": true,
      "stability": "documented-public",
      "availability": "none",
      "observedVersion": "2026.10.12-d47ca18",
      "answers": {
        "turnOn": {
          "status": "unsupported",
          "answer": "The Cursor CLI (cursor-agent) has no built-in memory, so there is nothing to turn on or off. For context that carries across sessions, use project rules in .cursor/rules or an AGENTS.md/CLAUDE.md at the project root. The CLI loads these automatically. The editor's beta Memories feature (added in Cursor 1.0) was removed in Cursor 2.1.x.",
          "reference": "https://cursor.com/docs/cli/using#rules",
          "evidence": [
            "cursor-cli-using-docs",
            "cursor-rules-docs",
            "memory-cursor-agent-cursor-com-changelog-1-0",
            "memory-cursor-agent-forum-cursor-com-t-are-my-memories-gone-144057-3"
          ],
          "notes": [
            "Cloud Automations are the one Cursor surface with memory today: their Memories tool is on by default and can be disabled per automation. It does not apply to cursor-agent or editor chats."
          ]
        },
        "whoWrites": {
          "status": "unsupported",
          "answer": "Nothing is saved automatically in the CLI. If you want the agent to keep a lesson, ask it to write the lesson into a rule file (for example .cursor/rules/<name>.mdc or AGENTS.md), or create one with `cursor-agent generate-rule`.",
          "reference": "https://cursor.com/docs/cli/using#rules",
          "evidence": [
            "cursor-cli-using-docs",
            "memory-cursor-agent-cursor-com-docs-cloud-agent-automations"
          ],
          "notes": [
            "In Cloud Automations the agent itself reads and writes memory notes during each run."
          ]
        },
        "where": {
          "status": "unsupported",
          "answer": "The CLI has no memory store. Rules that replace it live in .cursor/rules/ and AGENTS.md/CLAUDE.md in the repo, which makes them per repo and lets them follow every checkout and worktree. User Rules are global to your Cursor account and Team Rules come from the team dashboard.",
          "reference": "https://cursor.com/docs/rules#project-rules",
          "evidence": [
            "cursor-rules-docs",
            "memory-cursor-agent-cursor-com-docs-cloud-agent-automations"
          ],
          "notes": [
            "Cloud Automation memories are named entries (MEMORIES.md by default). They are stored per automation, outside the agent's working filesystem."
          ]
        },
        "loaded": {
          "status": "unsupported",
          "answer": "No memories are loaded because none exist. At startup the CLI loads .cursor/rules according to each rule's settings, plus AGENTS.md and CLAUDE.md from the project root. Rules that apply are placed at the start of the model context.",
          "reference": "https://cursor.com/docs/cli/using#rules",
          "evidence": ["cursor-cli-using-docs", "cursor-rules-docs"]
        },
        "view": {
          "status": "unsupported",
          "answer": "The CLI has no memory to view. To see what persists between sessions, open the files in .cursor/rules/, AGENTS.md and CLAUDE.md. In the editor, User and Project Rules appear under Cursor Settings > Rules.",
          "reference": "https://cursor.com/docs/rules#project-rules",
          "evidence": [
            "cursor-rules-docs",
            "memory-cursor-agent-cursor-com-docs-cloud-agent-automations"
          ],
          "notes": [
            "Cloud Automation memories can be viewed and edited in the automation's tool configuration UI."
          ]
        },
        "remember": {
          "status": "unsupported",
          "answer": "There is no 'remember this' command. Add the fact to a rule yourself, ask the agent to edit .cursor/rules or AGENTS.md, or run `cursor-agent generate-rule` to create a rule interactively.",
          "reference": "https://cursor.com/docs/cli/using#rules",
          "evidence": ["cursor-cli-using-docs", "cursor-rules-docs"]
        },
        "forget": {
          "status": "unsupported",
          "answer": "The CLI keeps no memory to clear. To change what carries over, edit or delete the rule files. If you have memories left from the old editor Memories beta, run 'Export memories' from the editor command palette to save them as an .mdc rule, then keep or delete that file.",
          "reference": "https://cursor.com/docs/rules#project-rules",
          "evidence": [
            "cursor-rules-docs",
            "memory-cursor-agent-forum-cursor-com-t-are-my-memories-gone-144057-3",
            "memory-cursor-agent-cursor-com-docs-cloud-agent-automations"
          ],
          "notes": [
            "Cloud Automation memory files can be deleted in the tool configuration UI, and the agent can also delete outdated ones during a run."
          ]
        },
        "share": {
          "status": "unsupported",
          "answer": "There is no memory to share. To share context with teammates, commit .cursor/rules and AGENTS.md to the repo, or use Team Rules from the dashboard on Team and Enterprise plans.",
          "reference": "https://cursor.com/docs/rules#team-rules",
          "evidence": [
            "cursor-rules-docs",
            "memory-cursor-agent-cursor-com-docs-cloud-agent-automations"
          ],
          "notes": [
            "A Cloud Automation's memories belong to that automation. Teammates you give access to through the automation's Share settings can see them."
          ]
        },
        "subagents": {
          "status": "unsupported",
          "answer": "Subagents (.cursor/agents/*.md) have no memory field and keep nothing between runs. They receive the same project rules as the parent agent.",
          "reference": "https://cursor.com/docs/subagents#configuration-fields",
          "evidence": ["cursor-subagents-docs", "cursor-cli-using-docs"]
        }
      },
      "evidence": [
        "cursor-cli-using-docs",
        "cursor-rules-docs",
        "memory-cursor-agent-cursor-com-changelog-1-0",
        "memory-cursor-agent-cursor-com-docs-cloud-agent-automations",
        "cursor-subagents-docs"
      ],
      "references": {
        "availability": "https://cursor.com/docs/cli/using#rules"
      }
    },
    {
      "harness": "opencode",
      "variant": "1.x",
      "default": false,
      "stability": "documented-public",
      "availability": "none",
      "observedVersion": "1.19.0",
      "answers": {
        "turnOn": {
          "status": "unsupported",
          "answer": "OpenCode 1.x has no built-in memory: it never saves facts from one session and brings them back in a later one, so there is nothing to turn on or off. For persistent guidance, use AGENTS.md rules files and the `instructions` list in opencode.json, or install a community memory plugin such as opencode-supermemory.",
          "reference": "https://opencode.ai/docs/rules/#types",
          "evidence": [
            "memory-opencode-opencode-ai-docs-rules",
            "memory-opencode-packages-web-src-content-docs-ecosystem-mdx"
          ]
        },
        "whoWrites": {
          "status": "unsupported",
          "answer": "Nothing is written automatically. You write AGENTS.md yourself, or run `/init`, which scans the repo and creates or updates AGENTS.md with build commands, conventions and gotchas.",
          "reference": "https://opencode.ai/docs/rules/#initialize",
          "evidence": [
            "memory-opencode-opencode-ai-docs-rules",
            "memory-opencode-packages-opencode-src-command-index-ts"
          ]
        },
        "where": {
          "status": "unsupported",
          "answer": "There is no memory store. Rules files are loaded from the project (the first AGENTS.md or CLAUDE.md found walking up from the current directory) and globally from ~/.config/opencode/AGENTS.md, falling back to ~/.claude/CLAUDE.md.",
          "reference": "https://opencode.ai/docs/rules/#precedence",
          "evidence": [
            "memory-opencode-opencode-ai-docs-rules",
            "memory-opencode-packages-opencode-src-session-instruction-ts"
          ]
        },
        "loaded": {
          "status": "unsupported",
          "answer": "No memory is loaded. Every session starts with the global and project rules files plus any files, globs or URLs listed in `instructions` in opencode.json; remote URLs are fetched with a 5-second timeout.",
          "reference": "https://opencode.ai/docs/rules/#custom-instructions",
          "evidence": [
            "memory-opencode-opencode-ai-docs-rules",
            "memory-opencode-packages-opencode-src-session-instruction-ts"
          ]
        },
        "view": {
          "status": "unsupported",
          "answer": "There is no memory viewer or command. To see and change the guidance the agent gets, open and edit AGENTS.md, ~/.config/opencode/AGENTS.md, or the files listed under `instructions`.",
          "reference": "https://opencode.ai/docs/rules/#types",
          "evidence": ["memory-opencode-opencode-ai-docs-rules"]
        },
        "remember": {
          "status": "unsupported",
          "answer": "Add the fact to AGENTS.md (project) or ~/.config/opencode/AGENTS.md (personal, all projects), or ask the agent to edit that file for you. Re-running `/init` improves an existing AGENTS.md in place.",
          "reference": "https://opencode.ai/docs/rules/#global",
          "evidence": ["memory-opencode-opencode-ai-docs-rules"]
        },
        "forget": {
          "status": "unsupported",
          "answer": "There is nothing to wipe. Delete or edit the line in the relevant AGENTS.md or instructions file. Set OPENCODE_DISABLE_CLAUDE_CODE_PROMPT=1 to stop ~/.claude/CLAUDE.md being picked up as a fallback.",
          "reference": "https://opencode.ai/docs/rules/#claude-code-compatibility",
          "evidence": ["memory-opencode-opencode-ai-docs-rules"]
        },
        "share": {
          "status": "unsupported",
          "answer": "There is no memory to share, but a project AGENTS.md is meant to be committed to Git, and `instructions` can point at shared files or remote URLs (for example a team rules repo).",
          "reference": "https://opencode.ai/docs/rules/#initialize",
          "evidence": ["memory-opencode-opencode-ai-docs-rules"]
        },
        "subagents": {
          "status": "unsupported",
          "answer": "Agents and subagents have no memory field. You can give a subagent standing guidance only through its `prompt` in the agent config or markdown file.",
          "reference": "https://opencode.ai/docs/agents/#prompt",
          "evidence": ["opencode-agents-docs"]
        }
      },
      "evidence": ["memory-opencode-opencode-ai-docs-rules", "opencode-agents-docs"],
      "references": {
        "availability": "https://opencode.ai/docs/rules/#types"
      }
    },
    {
      "harness": "opencode",
      "variant": "2.x",
      "default": true,
      "stability": "documented-public",
      "availability": "none",
      "observedVersion": "2.0.29",
      "answers": {
        "turnOn": {
          "status": "unsupported",
          "answer": "OpenCode 2.x has no built-in memory either: nothing is saved from one session for a later one, so there is nothing to turn on or off. Use AGENTS.md files for persistent guidance, or a plugin written for the V2 plugin API.",
          "reference": "https://opencode.ai/v2/docs/instructions/#scope",
          "evidence": [
            "memory-opencode-opencode-ai-v2-docs-instructions",
            "memory-opencode-opencode-ai-v2-docs-plugins"
          ],
          "notes": [
            "Community memory plugins such as opencode-supermemory target the 1.x plugin API; V2 uses a new plugin API."
          ]
        },
        "whoWrites": {
          "status": "unsupported",
          "answer": "Nothing is written automatically. You write AGENTS.md yourself or run `/init` to have the agent create or improve it.",
          "reference": "https://opencode.ai/v2/docs/instructions/#scope",
          "evidence": [
            "memory-opencode-opencode-ai-v2-docs-instructions",
            "memory-opencode-packages-core-src-plugin-command-ts"
          ]
        },
        "where": {
          "status": "unsupported",
          "answer": "There is no memory store. V2 loads ~/.config/opencode/AGENTS.md plus every AGENTS.md from the current directory up to the project root (or home). It does not fall back to CLAUDE.md.",
          "reference": "https://opencode.ai/v2/docs/instructions/#scope",
          "evidence": [
            "memory-opencode-opencode-ai-v2-docs-instructions",
            "memory-opencode-packages-core-src-config-plugin-instruction-ts"
          ]
        },
        "loaded": {
          "status": "unsupported",
          "answer": "No memory is loaded. A new session gets the global AGENTS.md and the upward AGENTS.md files; nested AGENTS.md files below the workspace are added only when the agent reads or lists that area. The `instructions` config array is accepted but not yet applied in V2.",
          "reference": "https://opencode.ai/v2/docs/instructions/#discovery",
          "evidence": ["memory-opencode-opencode-ai-v2-docs-instructions"]
        },
        "view": {
          "status": "unsupported",
          "answer": "There is no memory viewer or command. Open and edit the AGENTS.md files; edits to global or upward files are picked up before the next model request in a running session.",
          "reference": "https://opencode.ai/v2/docs/instructions/#updates",
          "evidence": ["memory-opencode-opencode-ai-v2-docs-instructions"]
        },
        "remember": {
          "status": "unsupported",
          "answer": "Add the fact to AGENTS.md (project) or ~/.config/opencode/AGENTS.md (personal), or ask the agent to edit it. Changes apply to a running session on the next prompt.",
          "reference": "https://opencode.ai/v2/docs/instructions/#updates",
          "evidence": ["memory-opencode-opencode-ai-v2-docs-instructions"]
        },
        "forget": {
          "status": "unsupported",
          "answer": "There is nothing to wipe. Edit or delete the line in AGENTS.md; removing every ambient AGENTS.md tells the session its earlier instructions no longer apply. OPENCODE_DISABLE_PROJECT_CONFIG=1 skips project AGENTS.md discovery.",
          "reference": "https://opencode.ai/v2/docs/instructions/#updates",
          "evidence": ["memory-opencode-opencode-ai-v2-docs-instructions"]
        },
        "share": {
          "status": "unsupported",
          "answer": "There is no memory to share. Commit project AGENTS.md files so everyone working in the repository gets the same guidance.",
          "reference": "https://opencode.ai/v2/docs/instructions/#scope",
          "evidence": ["memory-opencode-opencode-ai-v2-docs-instructions"]
        },
        "subagents": {
          "status": "unsupported",
          "answer": "Agents have no memory field. Standing guidance for a specific agent goes in its system prompt in the agent definition.",
          "reference": "https://opencode.ai/v2/docs/agents/#system",
          "evidence": ["memory-opencode-opencode-ai-v2-docs-agents"]
        }
      },
      "evidence": [
        "memory-opencode-opencode-ai-v2-docs-instructions",
        "memory-opencode-opencode-ai-v2-docs-plugins",
        "memory-opencode-opencode-ai-v2-docs-agents"
      ],
      "references": {
        "availability": "https://opencode.ai/v2/docs/instructions/#scope"
      }
    },
    {
      "harness": "pi",
      "variant": "current",
      "default": true,
      "stability": "source-observed",
      "availability": "none",
      "observedVersion": "1.2.0",
      "answers": {
        "turnOn": {
          "status": "unsupported",
          "answer": "Pi has no built-in memory, so there is nothing to turn on or off. Persistent guidance comes from context files (AGENTS.md or CLAUDE.md) that you write, which load automatically; `--no-context-files` (`-nc`) disables them for one run. For saved memory, install a Pi package or write an extension.",
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/configuration.md#L41-L47",
          "evidence": [
            "memory-pi-packages-coding-agent-docs-configuration-md",
            "memory-pi-packages-coding-agent-readme-md",
            "pi-docs-1-2-0"
          ],
          "notes": [
            "Pi is minimal by design. Its README says it skips features like sub-agents and plan mode and leaves them to extensions and packages."
          ]
        },
        "whoWrites": {
          "status": "unsupported",
          "answer": "Nothing is saved automatically between sessions. Context files change only when you edit them or ask Pi to edit them with its file tools. An extension can store its own data outside a session.",
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/extensions.md#L225-L234",
          "evidence": ["steering-pi-packages-coding-agent-docs-extensions-md"]
        },
        "where": {
          "status": "unsupported",
          "answer": "There is no memory store. Context files are the alternative: a global one in the agent directory (`~/.pi/agent/AGENTS.md`, or `AGENTS.override.md`/`CLAUDE.md`, or `$PI_CODING_AGENT_DIR`), plus one per directory, read from the working directory and every parent directory. Sessions themselves are stored as JSONL under `~/.pi/agent/sessions/`, grouped by working directory.",
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/configuration.md#L18",
          "evidence": [
            "memory-pi-packages-coding-agent-docs-configuration-md",
            "memory-pi-packages-coding-agent-src-core-resource-loader-ts",
            "memory-pi-packages-coding-agent-docs-sessions-md"
          ],
          "notes": [
            "In a linked worktree nested inside the main checkout, the worktree's own AGENTS.md replaces the main repo's copy, so the same context does not load twice."
          ]
        },
        "loaded": {
          "status": "unsupported",
          "answer": "No memories are loaded, because none exist. At startup Pi puts into the system prompt the full text of the global context file plus one context file per directory from the filesystem root down to the working directory, with no size limit or truncation. Past sessions return only if you reopen one with `pi --continue`, `pi --resume`, or `/resume`.",
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/src/core/resource-loader.ts#L184-L203",
          "evidence": [
            "memory-pi-packages-coding-agent-src-core-resource-loader-ts",
            "steering-pi-packages-coding-agent-docs-how-pi-works-md",
            "memory-pi-packages-coding-agent-docs-sessions-md"
          ],
          "notes": [
            "In each directory only the first match is used, in this order: AGENTS.override.md, AGENTS.md, AGENTS.MD, CLAUDE.md, CLAUDE.MD."
          ]
        },
        "view": {
          "status": "unsupported",
          "answer": "There is no memory viewer or command. Open the AGENTS.md files directly to see or edit what Pi is told every session, then run `/reload` to apply changes made outside Pi.",
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/configuration.md#L5",
          "evidence": ["memory-pi-packages-coding-agent-docs-configuration-md"]
        },
        "remember": {
          "status": "unsupported",
          "answer": "There is no remember command. Add the fact to `AGENTS.md` in the project (or `~/.pi/agent/AGENTS.md` for every project), either by hand or by asking Pi to edit the file.",
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/configuration.md#L41-L45",
          "evidence": ["memory-pi-packages-coding-agent-docs-configuration-md"]
        },
        "forget": {
          "status": "unsupported",
          "answer": "There is no memory to wipe. Delete or edit the line in the relevant AGENTS.md, or start without context files using `pi --no-context-files`. Session files under `~/.pi/agent/sessions/` can be deleted, and `--no-session` stops a run from being saved.",
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/cli.md#L214-L215",
          "evidence": ["pi-docs-1-2-0", "memory-pi-packages-coding-agent-docs-sessions-md"]
        },
        "share": {
          "status": "unsupported",
          "answer": "There is no memory to share. A project AGENTS.md is an ordinary file you can commit so teammates get the same context. Any memory extension can be shared as a Pi package through npm or git, installed with `pi install` (add `-l` to record it in `.pi/settings.json` for the project).",
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/packages.md#L7-L21",
          "evidence": ["memory-pi-packages-coding-agent-docs-packages-md"]
        },
        "subagents": {
          "status": "unsupported",
          "answer": "Pi has no built-in subagents and no memory. The example subagent extension runs each agent as a separate `pi --no-session` process defined by frontmatter fields `name`, `description`, `tools` and `model`, with no memory field. Each run loads the usual AGENTS.md context files, and nothing from it is saved.",
          "reference": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/examples/extensions/subagent/README.md#L125-L143",
          "evidence": [
            "memory-pi-packages-coding-agent-examples-extensions-subagent-readme-md",
            "memory-pi-packages-coding-agent-readme-md",
            "memory-pi-packages-coding-agent-examples-extensions-subagent-index-ts"
          ]
        }
      },
      "evidence": [
        "memory-pi-packages-coding-agent-docs-configuration-md",
        "memory-pi-packages-coding-agent-readme-md",
        "pi-docs-1-2-0",
        "steering-pi-packages-coding-agent-docs-extensions-md",
        "memory-pi-packages-coding-agent-src-core-resource-loader-ts",
        "memory-pi-packages-coding-agent-docs-sessions-md",
        "steering-pi-packages-coding-agent-docs-how-pi-works-md",
        "memory-pi-packages-coding-agent-docs-packages-md",
        "memory-pi-packages-coding-agent-examples-extensions-subagent-readme-md",
        "memory-pi-packages-coding-agent-examples-extensions-subagent-index-ts"
      ],
      "references": {
        "availability": "https://github.com/earendil-works/pi/blob/06a466935536f8c9bcacb2d5efc0fc021be1bdff/packages/coding-agent/docs/configuration.md#L41-L47"
      },
      "verifiedAt": "2026-10-15",
      "sourceRevision": "06a466935536f8c9bcacb2d5efc0fc021be1bdff",
      "unknowns": ["Checked docs and source at 1.2.0; no live session was run."]
    }
  ]
}
