9662844853
The `learn` tool previously required a `hindsight`/`mnemopi` backend. It now also works when `memory.backend` is `local` (the file-based rollout backend): lessons append to a `learned.md` under the project's memory root, kept separate from the consolidation artifacts so a consolidation pass never clobbers them, and are injected into future sessions alongside the memory summary. - memories: `saveLearnedLesson` (newest-first, deduped, count- and per-field size-capped, secret-redacted, injection-neutralized) with per-path write serialization; `buildMemoryToolDeveloperInstructions` reads `learned.md` and shares one injection budget with the summary; `redactSecrets` extended with GitHub/npm/Slack/Google token prefixes. - local backend: implements `save()`; status reports `writable: true`. - learn tool: `local` execute branch; `createIf`/`isToolAllowed`/auto-include and the standing guidance extended to `local`; local saves tier as a `write` approval. - read-path prompt: renders the learned-lessons block when present. - Lessons are injection-neutralized and secret-redacted on BOTH write and read (they render unescaped into the system prompt). Also moves the auto-learn CHANGELOG entry out of the released [15.12.6] section (a cherry-pick artifact) back under [Unreleased] and notes the local backend. Tests: local storage (format, dedup, cap, redaction incl. provider/delimiter- split tokens, concurrency), read-back (with/without summary, off-gating, raw hand-edited file), tool gating + write-approval tiering.