Outline KB migration 2026-10: git memories moved into collection KB (cutover done)
Last updated 05/11/2026 · outline, memory, migration, kb
Status 2026-10-31: CUTOVER DONE. Outline KB is the only writable memory store. Git memories/ and user/ are frozen history (mem new / mem save refuse to touch them; MEM_ALLOW_MEMORIES=1 overrides for maintenance). Final check before the freeze: migrate.py dry run = 79 documents unchanged. Operating details are in memory-system.
What was copied
- 77
memories/*.md+user/user.md-> 78 documents in the Outline collection**KB**(https://docs.niklas-stephan.de). Script:/data/maintenance/outline-kb-migration/migrate.py(dry run by default,--applyto write, idempotent, never deletes; readsOUTLINE_KEYfrom/data/ai-persistence/.env). Rerun it aftermem saveto refresh the copy. - Format: Outline strips frontmatter, so each doc starts with a bullet header
kb-id,importance,tags,updated,summary,origin, a rule, then the original body. The script matches existing docs by thekb-idline. - The semantic index points at
KB(notAI) since 2026-10-31; verified 8 natural-language questions find the right memory (6 of 8 at rank 1, the others in the top 3 or answered byagents.mdwhich stays in git).
Stays in git (loaded as files, not searched)
agents.md + hosts/* (rendered into /data/AGENTS.md on every host), skills/ (Zed/agent skills loaded from disk), config/ (Zed and VS Code templates), bin/mem. These are instructions, not knowledge.
Gotchas found
- Outline titles max 100 characters (HTTP 400
validation_error); the script shortens at a word boundary, the full title is only in git. - Outline rewrites markup on save (
-bullets to*, unwraps soft line breaks, widens table separator rows, drops\hard breaks, re-wraps bold/code spans), so exact text comparison never matches; the script compares letters and digits only and tolerates a 3-character difference. documents.listdoes return the fulltext; rate limits were not hit with 0.2 s pacing. Large docs (48 KB) work.- An Outline API key cannot manage API keys (403).
- The old
AIcollection (30 docs) is stale: 26 of them are the origins of memories (urlIdin the memory header). They are left untouched, not indexed.
Cutover (done 2026-10-31)
agents.mdMemory section and skillagent-memoryrewritten (commit5e36b82); rendered on handtrixxx.com, metis, iris, hestia.memfrozen formemories/anduser/; the history stays in git.kb export(manual) can write a frontmatter-markdown snapshot ofKBwhen wanted.- Secret scan:
kb scanby hand (regex:ol_api_,gh[pousr]_,sk-, private key header,password|token|secret|api_key = value). No scheduled job (Niklas did not want one, 2026-10-31). importance: kept as header text; the sidecar parses it and serveslist_memories(min_importance, tag)(29 high/critical of 79).- Backup: Outline’s
./dband./dataare under/data, covered by Backrest planhandtrixxx-data(23:00). A restore test has not been done. - Open: ThinkPad (
100.64.0.8) still lacksOUTLINE_KEYandSEMANTIC_MCP_TOKENand thekbCLI (offline when checked); do it at the next sync. Zed and VS Code clients were configured from templates but not exercised in the real apps. A restore test ofoutline.sql.gzinto a scratch Postgres has not been done.
Source: Wiki.js