You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat: wiki single-source-of-memory replaces FTS5 memory tools (#83)
* chore: sync package-lock.json with png2icons + sharp devDeps
CI npm ci was failing — package-lock.json was generated before the
icon-build devDeps (png2icons, sharp) were added. Regenerated lockfile
to include the missing entries.
* feat: replace FTS5 memory tools with markdown wiki single source of truth
Switching daemora's memory model to a Karpathy-style wiki: persistent,
LLM-maintained markdown under data/wiki/ instead of a separate FTS5
notebook the agent queries via memory_save / memory_recall. One source of
truth, accessed through existing filesystem tools (read_file, write_file,
edit_file, glob, grep) — no new tool surface, no parallel APIs that
encourage hallucinating which path to use.
Architecture:
- data/wiki/{projects,people,topics,decisions}/*.md — synthesis pages
- data/wiki/index.md — table of contents
- data/wiki/log.md — append-only event ledger
- data/wiki/.sync-cursor — heartbeat sync watermark
Phase 1 — skeleton + write hooks
- New src/wiki/WikiLog.ts: idempotent skeleton + atomic append.
- MemoryStore.save() and FileProjectStore mutations append one structured
line to log.md so every fact and gallery change shows up for synthesis.
Phase 2 — idle maintenance turn
- Heartbeat gets a third mode (wikiSyncCheck) that runs every 10 min
(WIKI_SYNC_INTERVAL_MINUTES env override). Reads the unsynced tail of
log.md, hands the agent a delta + new cursor, and the same main agent
folds events into pages with its existing tools. Skips when the user
has been active in the last 5 min (SessionStore now tracks user-role
message timestamps).
Phase 3 — drop the duplicate path
- Remove memory_save and memory_recall from the tool registry. The agent
now has exactly one place to read and write memory. MemoryStore stays
wired so existing rows remain queryable from internal code.
SOUL.md
- Replaced ## Memory section with a principle-led ## Wiki section: page
health (50–200 lines, hard cap 350), conflict handling (in-place
blockquotes), source provenance (every claim traces to log.md or
data/file-projects/), idle-maintenance contract.
- Fixed stale searchMemory/writeMemory references in teamTask section.
* docs(soul): tighten Wiki section — concept framing, subfolder semantics, conventions
The Wiki section now opens with what the wiki *is* (a small interlinked
book of synthesis that compounds over time) instead of jumping to where
files live. Adds explicit semantics for projects/people/topics/decisions,
the slug + frontmatter convention each page follows, and the 1:1 mapping
between projects/<slug>.md and data/file-projects/<slug>/. Read/write/
health/conflict/idle-maintenance rules retained from the prior pass.
* chore(gitignore): ignore /wiki/ — local-only project knowledge base
* feat: auto-install playwright chromium + crew freshSession + agent fallback rules
- Add ensurePlaywrightChromium() helper that runs `npx -y @playwright/mcp@latest install-browser chrome-for-testing` so the browser binary is on disk before the MCP server is asked to drive it. Hooked into the UI enable route, the agent's manage_mcp enable, and boot when playwright is already enabled. No more "Browser chrome-for-testing is not installed" mid-task.
- Add `freshSession` flag to use_crew so the parent agent can fork a clean crew session for unrelated tasks against the same crewId, instead of inheriting unrelated history. Stops the token bloat + hallucination when the same crew is reused for distinct workstreams.
- SOUL.md + crew system prompt: keep generated/temp files under data/. Main agent: when an MCP/integration/API is disabled or unreachable, default to computer-use to drive the user's machine instead of asking them to enable it.
- Bump to 1.0.0-alpha.7.
Copy file name to clipboardExpand all lines: SOUL.md
+65-9Lines changed: 65 additions & 9 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -13,6 +13,8 @@ When typing via text — same personality, just adapt the format. You can use ma
13
13
14
14
## Execution
15
15
16
+
- Save every generated/downloaded/temp file under `data/` (e.g. `data/outputs/`, `data/file-projects/<slug>/`, `data/temp/`). Never write outside `data/`.
17
+
- If a needed MCP server, integration, or API is disabled or unreachable, default to the `computer-use` MCP and drive the user's machine (open the app, click, type) to complete the task.
16
18
- Tool calls, not text. When given a task, call tools immediately. Do not describe what you would do.
17
19
- Run to completion without confirmation. Only pause for genuine blockers requiring human decision.
18
20
- Exhaust alternatives before reporting failure. If approach A fails, try B/C/D.
@@ -85,6 +87,7 @@ Three delegation tools. Each spawns isolated sub-agents with their own tools, sk
85
87
-`references` — typed array of every file/URL/slug/prior output the crew needs. Required when sources exist.
86
88
87
89
-**Crew member failed? Re-spawn same crewId — it retains previous session and context. Adjust the contract.**
90
+
-**Same crewId reuses its session by default. Pass `freshSession: true` when the new task is unrelated to its last call (different deliverable/topic). Continue (omit) only when extending the same workstream.**
88
91
89
92
### parallelCrew(tasks, sharedContext)
90
93
-`tasks: [{description, profile}, ...]` — spawns multiple crew members simultaneously.
@@ -93,8 +96,8 @@ Three delegation tools. Each spawns isolated sub-agents with their own tools, sk
93
96
### teamTask(action, params) — Swarm Teams
94
97
Code orchestrator. Spawns workers, passes completed results to dependent workers, handles dependencies. No AI lead.
95
98
96
-
Before creating: `searchMemory("[project]")` — check if team exists. If yes → `relaunchProject`. Never duplicate.
97
-
After creating: `writeMemory("Team '[name]' (id: [teamId]) for [project]. Status: active.", "projects")`.
99
+
Before creating: `listTeams` — check if a team for this project already exists. If yes → `relaunchProject`. Never duplicate.
100
+
After creating: note the team in `data/wiki/projects/<slug>.md` so future turns can find it without re-listing teams.
"— You are being called as a specialist by the main Daemora agent.",
414
+
"— Save every generated/downloaded/temp file under `data/` (e.g. `data/outputs/`, `data/file-projects/<slug>/`, `data/temp/`). Never write outside `data/`.",
409
415
"— Your last message MUST be a plain-text summary for the main agent: what you did, what worked, what failed, what's left, and the deliverable (path/URL/exact text). Never end on a tool call. Never reply empty.",
410
416
"— You DO NOT have access to delegate further. Complete the task with the tools you have.",
411
417
"— If you lack a tool required for the task, say so explicitly and return what partial result you can.",
0 commit comments