@@ -67,7 +67,7 @@ All of these store things. None of them *remember*.
6767** Directory structure:**
6868
6969```
70- ~/clawd/ palinode/
70+ ~/. palinode/
7171├── people/ → who you know (relationships, prefs, follow-ups)
7272├── projects/ → what you're building (status, next actions, blockers)
7373├── decisions/ → choices made (rationale, what was rejected, supersedes)
@@ -98,26 +98,26 @@ last_updated: 2026-03-22T15:00:00Z
9898category : decision
9999status : active
100100core : false
101- entities : [project/mm-kmd ]
101+ entities : [project/my-app ]
102102supersedes : []
103103confidence : 0.92
104- source : session/attractor/ 2026-03-17
104+ source : session/2026-03-17
105105---
106106
107- # Decision: Adopt LangGraph for MA-KMD Orchestration
107+ # Decision: Adopt FastAPI for My App Backend
108108
109109# # Statement
110- Use LangGraph StateGraph for game orchestration in the multi-agent pivot.
110+ Use FastAPI for the backend API in the microservices pivot.
111111
112112# # Rationale
113- - DiriGent research validated Director-Actor pattern
114- - StateGraph provides explicit state management without LangChain agent abstraction
115- - ADR-063 documents the full rationale
113+ - Async-first design matches our event-driven architecture
114+ - Type hints provide automatic request validation
115+ - OpenAPI spec generation simplifies integration testing
116116
117117# # Alternatives Rejected
118- - Pure function calls (too manual for complex game state )
119- - CrewAI (role-based paradigm doesn't map to Director-Actor )
120- - AutoGen (message-passing model less suitable for state-heavy orchestration )
118+ - Flask (synchronous, less suited for async workloads )
119+ - Django REST (too heavy for microservice scope )
120+ - Express.js (team more proficient in Python )
121121` ` `
122122
123123**Schemas (typed objects):**
@@ -139,11 +139,11 @@ Use LangGraph StateGraph for game orchestration in the multi-agent pivot.
139139
140140- **Vector & Keyword store:** SQLite-vec + FTS5 (embedded, no server, single file at `palinode/.palinode.db`)
141141- **Embedding model:** BGE-M3 via Ollama (1536d, 8K context, top-tier retrieval)
142- - **Embedding server:** Ollama on ***REMOVED***69 (5090 GPU)
142+ - **Embedding server:** Ollama (local or remote GPU)
143143
144144**Indexing:**
145145
146- - File watcher daemon (`watchdog`) monitors `~/clawd/palinode/`
146+ - File watcher daemon (`watchdog`) monitors the memory directory
147147- On file create/modify : parse markdown → split by headings.
148148- Deduplication : compute `content_hash` (SHA-256) of text. Skip Ollama embedding call if identical to existing hash.
149149- Insert sections to `chunks` table → auto-syncs to FTS5 virtual table → upserts vectors to SQLite-vec.
@@ -257,15 +257,15 @@ When a chunk matches, don't return the chunk alone:
257257**Mode 1: Conversational (automatic + explicit)**
258258
259259- **Automatic:** `agent_end` hook extracts typed memories from every substantive turn
260- - **Explicit:** "Remember: Peter wants 5 acts " → classified and filed immediately
260+ - **Explicit:** "Remember: Alice wants 5 modules " → classified and filed immediately
261261- **Channels:** Telegram, Slack, webchat, CLI — all go through OpenClaw → Palinode plugin
262262
263263**Mode 2: Document ingestion (file drops)**
264264
265- - Watch folder : ` ~/Palinode-Inbox/ ` on MBP , synced via Syncthing to `~/clawd/ palinode/inbox/raw/`
265+ - Watch folder : ` ~/palinode-inbox/ ` , synced to `~/. palinode/inbox/raw/`
266266- Processing by file type :
267267 - PDF → text extraction (pymupdf) → LLM summarize + extract → `research/*.md`
268- - Audio (m4a/mp3/wav) → Transcriptor API (***REMOVED***61, GPU Whisper) → transcript → summarize → `research/*.md`
268+ - Audio (m4a/mp3/wav) → Whisper transcription → transcript → summarize → `research/*.md`
269269 - Video → extract audio → Transcriptor → same as audio
270270 - Markdown/text → classify directly → appropriate bucket
271271 - URL (.webloc/.url/text containing URL) → fetch → readability extract → summarize → `research/*.md`
@@ -333,7 +333,7 @@ When a chunk matches, don't return the chunk alone:
333333
334334**Session-start nudge:**
335335
336- - " You last worked on MM-KMD two days ago. Status: M5 Phase 1 voice LoRAs complete, waiting on Peter feedback."
336+ - " You last worked on My App two days ago. Status: M5 Phase 1 complete, waiting on Alice's feedback."
337337- Injected as part of Phase 1 context
338338
339339# ## 5.8 Quality Metrics
@@ -361,7 +361,7 @@ When a chunk matches, don't return the chunk alone:
361361┌─────────────────────────────────────────────────────────────┐
362362│ SOURCE OF TRUTH │
363363│ │
364- │ Markdown files in ~ /clawd/ palinode/ │
364+ │ Markdown files in ~ /. palinode/ │
365365│ Git-versioned (human-readable, diffable, portable) │
366366│ YAML frontmatter for structured metadata │
367367└──────────────────────────┬──────────────────────────────────┘
@@ -389,7 +389,7 @@ When a chunk matches, don't return the chunk alone:
389389│ File Watcher (Python watchdog, systemd service) │
390390│ - Monitors palinode/ → embeds → upserts to SQLite-vec │
391391│ │
392- │ Embedding Generation (Ollama BGE-M3 on *** REMOVED *** 69) │
392+ │ Embedding Generation (Ollama BGE-M3) │
393393└──────────────────────────┬──────────────────────────────────┘
394394 │
395395┌──────────────────────────▼──────────────────────────────────┐
@@ -403,7 +403,7 @@ When a chunk matches, don't return the chunk alone:
403403│ │
404404│ Capture Points │
405405│ - Telegram / Slack / webchat / CLI (via OpenClaw) │
406- │ - MBP watch folder (Syncthing → inbox/raw/) │
406+ │ - Watch folder (synced to inbox/raw/) │
407407│ - Web capture (agent fetches URL → summarizes → files) │
408408│ │
409409│ Surfacing │
@@ -423,7 +423,7 @@ When a chunk matches, don't return the chunk alone:
423423CAPTURE PROCESSING MEMORY
424424─────── ────────── ──────
425425
426- Telegram ────┐ ~ /clawd/ palinode/
426+ Telegram ────┐ ~ /. palinode
427427Slack ───────┤ ┌──────────────┐ ├── people/* .md
428428Webchat ─────┼→ OpenClaw ──────→│ Palinode Plugin │ ├── projects/* .md
429429CLI ─────────┘ Agent │ │ ├── decisions/* .md
@@ -432,13 +432,13 @@ CLI ─────────┘ Agent │ │
432432 │ │ tools │──→ search ├── daily/* .md
433433 │ └──────┬───────┘ ├── research/* .md
434434 │ │ ├── inbox/
435- MBP Watch ───┐ │ ▼ ├── archive/
436- NAS Drop ─ ───┼───┼──→ Ingestion → Extraction ├── .palinode.db
435+ Watch ──── ───┐ │ ▼ ├── archive/
436+ File Drop ───┼───┼──→ Ingestion → Extraction ├── .palinode.db
437437URL Capture ─┘ │ Pipeline Pipeline └── PROGRAM.md
438438 │ │ │
439439 │ ▼ ▼
440440 │ Transcriptor Memory Manager
441- │ ( *** REMOVED *** 61) (typed schemas)
441+ │ (typed schemas)
442442 │ ADD/UPDATE/DELETE/NOOP
443443 │ │
444444 │ ▼
@@ -494,12 +494,12 @@ Sunday Cron ────→ Weekly review → Telegram
494494extensions:
495495 openclaw-palinode:
496496 # Paths
497- palinodeDir: "~/clawd/ palinode" # Memory store root
497+ palinodeDir: "~/. palinode" # Memory store root
498498 programFile: "PROGRAM.md" # Memory manager behavior spec (relative to palinodeDir)
499499 promptsDir: "specs/prompts" # System prompts directory (relative to palinodeDir)
500500
501501 # Embedding
502- ollamaUrl: "http://***REMOVED***69 :11434" # Ollama endpoint for embeddings
502+ ollamaUrl: "http://localhost :11434" # Ollama endpoint for embeddings
503503 embeddingModel: "bge-m3" # Model name — change without code changes
504504
505505 # Behavior
@@ -582,16 +582,16 @@ When you tune extraction, you edit a markdown file. `git log specs/prompts/extra
582582
583583### Level 2: Task Prompts (instructions given to agents)
584584
585- When you spend 30 minutes writing a prompt to an agent — "build a RAW grading assignment with Colorist/Filmmaker role structure, CalArts-sensitive " — that prompt is the specification. The output is the compiled artifact. Losing the prompt means losing the intent, constraints, and reasoning.
585+ When you spend 30 minutes writing a prompt to an agent — "build a data pipeline spec with Producer/Consumer role structure" — that prompt is the specification. The output is the compiled artifact. Losing the prompt means losing the intent, constraints, and reasoning.
586586
587587```
588588specs/task-prompts/
589- ├── mm-kmd / ← M*-EXECUTE-PROMPT.md files (already doing this!)
590- ├── color-class / ← assignment specs, lesson plan prompts
589+ ├── my-app / ← M*-EXECUTE-PROMPT.md files (already doing this!)
590+ ├── onboarding / ← assignment specs, process prompts
591591└── palinode/ ← research prompts, build prompts
592592```
593593
594- The M-EXECUTE-PROMPT.md pattern from MM-KMD is already this practice — generalized across all work.
594+ The M-EXECUTE-PROMPT.md pattern from My App is already this practice — generalized across all work.
595595
596596** Capture rule:** When a substantial prompt produces a substantial output, save the prompt alongside the output. The memory manager should detect "this looks like a build spec or research request" and offer to save it to ` specs/task-prompts/ ` .
597597
@@ -690,7 +690,7 @@ Prompts are not disposable. They're the most durable artifact in the system —
690690| Phase | Scope | Timeline |
691691| --- | --- | --- |
692692| ** 0: MVP** | SQLite-vec + file watcher + session-end extraction + 2 tools + Phase 1 injection | 1 week |
693- | ** 0.5: Capture** | Slack channel + Telegram formalization + MBP watch folder + ingestion pipeline | During/after MVP |
693+ | ** 0.5: Capture** | Slack channel + Telegram formalization + watch folder + ingestion pipeline | During/after MVP |
694694| ** 1: Core Memory** | Two-phase injection + core memory files + retire MEMORY.md | Week 2 |
695695| ** 2: Consolidation** | Weekly cron + entity linking + insights extraction | Weeks 3-4 |
696696| ** 3: Migration** | Backfill from Mem0 (2,632) + QC MCP (14K) selectively | Week 4+ |
0 commit comments