Skip to content

Commit d1c7747

Browse files
Paul Kyleclaude
andcommitted
scrub: replace internal project refs with generic examples for public release
- runner.py: hardcoded mm-kmd/infrastructure keyword maps → configurable via config - mcp.py, cli/save.py, cli/session_end.py: antigravity/roo-code/openclaw-attractor → cursor/api - All docs/prompts: mm-kmd → my-app, person/peter → person/alice - PRD.md: ~/clawd/ paths → ~/.palinode/, removed IPs and CalArts refs - PROGRAM.md: removed domain-specific examples (vLLM, LoRA, color class) - README.md: tool count 17 → 18, added prompt tool, removed Antigravity from MCP table - tests: antigravity → cursor in source surface test Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent d6e0c03 commit d1c7747

28 files changed

Lines changed: 272 additions & 153 deletions

ADR-001-tools-over-pipeline.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ Applied to Palinode:
4646
## Consequences
4747

4848
### Positioning
49-
Lead with: "17 tools + a memory directory your agent uses however it wants."
49+
Lead with: "18 tools + a memory directory your agent uses however it wants."
5050
Not: "4-phase injection pipeline."
5151

5252
The pipeline is an implementation detail. The tools are the interface.

PRD.md

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -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
9898
category: decision
9999
status: active
100100
core: false
101-
entities: [project/mm-kmd]
101+
entities: [project/my-app]
102102
supersedes: []
103103
confidence: 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:
423423
CAPTURE PROCESSING MEMORY
424424
─────── ────────── ──────
425425

426-
Telegram ────┐ ~/clawd/palinode/
426+
Telegram ────┐ ~/.palinode
427427
Slack ───────┤ ┌──────────────┐ ├── people/*.md
428428
Webchat ─────┼→ OpenClaw ──────→│ Palinode Plugin │ ├── projects/*.md
429429
CLI ─────────┘ 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
437437
URL 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
494494
extensions:
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
```
588588
specs/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

Comments
 (0)