From 6c4e14d048194cf78c593de2aae2a94eb3f9e8f6 Mon Sep 17 00:00:00 2001 From: Nicholai Date: Thu, 19 Feb 2026 12:35:13 -0700 Subject: [PATCH] 2026-02-19T19-35-13_auto_memory/memories.db-shm, memory/memories.db-wal, me --- .daemon/logs/daemon.out.log | 23 ++++++ .daemon/logs/signet-2026-02-19.log | 9 +++ hooks/agent-memory/handler.js | 56 +++++++------- memory/memories.db | Bin 17158144 -> 17158144 bytes memory/memories.db-shm | Bin 32768 -> 0 bytes memory/memories.db-wal | Bin 131872 -> 0 bytes skills/memory-debug/SKILL.md | 115 +++++++++++++++++++++++++++++ skills/recall/SKILL.md | 9 ++- skills/remember/SKILL.md | 11 ++- skills/signet/SKILL.md | 84 +++++++++++++++++++++ 10 files changed, 271 insertions(+), 36 deletions(-) delete mode 100644 memory/memories.db-shm delete mode 100644 memory/memories.db-wal create mode 100644 skills/memory-debug/SKILL.md create mode 100644 skills/signet/SKILL.md diff --git a/.daemon/logs/daemon.out.log b/.daemon/logs/daemon.out.log index 931ad0267..345b2ffed 100644 --- a/.daemon/logs/daemon.out.log +++ b/.daemon/logs/daemon.out.log @@ -6643,3 +6643,26 @@ hint: See the 'Note about fast-forwards' in 'git push --help' for details. 13:55:11 INFO  [watcher] File changed {"path":"/home/nicholai/.agents/memory/memories.db-wal"} 13:55:12 INFO  [memory] Memory saved {"id":"6ef334e1-7f6e-4f0e-a64a-6b34f603f7fb","type":"issue","pinned":false,"embedded":true} 13:55:12 INFO  [watcher] File changed {"path":"/home/nicholai/.agents/memory/memories.db-wal"} +13:55:17 INFO  [git] Auto-committed {"message":"2026-02-19T13-55-17_auto_memory/memories.db-wal, memory/memories.db-wal","filesChanged":2} +13:55:37 WARN  [git] Push failed: To https://github.com/Signet-AI/signetai.git + ! [rejected] HEAD -> main (non-fast-forward) +error: failed to push some refs to 'https://github.com/Signet-AI/signetai.git' +hint: Updates were rejected because the tip of your current branch is behind +hint: its remote counterpart. If you want to integrate the remote changes, +hint: use 'git pull' before pushing again. +hint: See the 'Note about fast-forwards' in 'git push --help' for details. + +13:55:37 WARN  [git] Periodic sync failed: Push failed: To https://github.com/Signet-AI/signetai.git + ! [rejected] HEAD -> main (non-fast-forward) +error: failed to push some refs to 'https://github.com/Signet-AI/signetai.git' +hint: Updates were rejected because the tip of your current branch is behind +hint: its remote counterpart. If you want to integrate the remote changes, +hint: use 'git pull' before pushing again. +hint: See the 'Note about fast-forwards' in 'git push --help' for details. + +13:57:48 WARN  [hooks] Failed to parse LLM output as JSON +19:35:08 INFO  [hooks] Session start hook {"harness":"claude-code","project":"/home/nicholai"} +19:35:08 INFO  [hooks] Session start completed {"memoryCount":6,"durationMs":39} +19:35:08 INFO  [watcher] File changed {"path":"/home/nicholai/.agents/memory/memories.db-shm"} +19:35:08 INFO  [watcher] File changed {"path":"/home/nicholai/.agents/memory/memories.db-wal"} +19:35:08 INFO  [watcher] File changed {"path":"/home/nicholai/.agents/memory/memories.db"} diff --git a/.daemon/logs/signet-2026-02-19.log b/.daemon/logs/signet-2026-02-19.log index 95a06a45f..a035ac0f1 100644 --- a/.daemon/logs/signet-2026-02-19.log +++ b/.daemon/logs/signet-2026-02-19.log @@ -2493,3 +2493,12 @@ {"timestamp":"2026-02-19T13:55:11.328Z","level":"info","category":"watcher","message":"File changed","data":{"path":"/home/nicholai/.agents/memory/memories.db-wal"}} {"timestamp":"2026-02-19T13:55:12.124Z","level":"info","category":"memory","message":"Memory saved","data":{"id":"6ef334e1-7f6e-4f0e-a64a-6b34f603f7fb","type":"issue","pinned":false,"embedded":true}} {"timestamp":"2026-02-19T13:55:12.125Z","level":"info","category":"watcher","message":"File changed","data":{"path":"/home/nicholai/.agents/memory/memories.db-wal"}} +{"timestamp":"2026-02-19T13:55:17.146Z","level":"info","category":"git","message":"Auto-committed","data":{"message":"2026-02-19T13-55-17_auto_memory/memories.db-wal, memory/memories.db-wal","filesChanged":2}} +{"timestamp":"2026-02-19T13:55:37.260Z","level":"warn","category":"git","message":"Push failed: To https://github.com/Signet-AI/signetai.git\n ! [rejected] HEAD -> main (non-fast-forward)\nerror: failed to push some refs to 'https://github.com/Signet-AI/signetai.git'\nhint: Updates were rejected because the tip of your current branch is behind\nhint: its remote counterpart. If you want to integrate the remote changes,\nhint: use 'git pull' before pushing again.\nhint: See the 'Note about fast-forwards' in 'git push --help' for details.\n"} +{"timestamp":"2026-02-19T13:55:37.260Z","level":"warn","category":"git","message":"Periodic sync failed: Push failed: To https://github.com/Signet-AI/signetai.git\n ! [rejected] HEAD -> main (non-fast-forward)\nerror: failed to push some refs to 'https://github.com/Signet-AI/signetai.git'\nhint: Updates were rejected because the tip of your current branch is behind\nhint: its remote counterpart. If you want to integrate the remote changes,\nhint: use 'git pull' before pushing again.\nhint: See the 'Note about fast-forwards' in 'git push --help' for details.\n"} +{"timestamp":"2026-02-19T13:57:48.522Z","level":"warn","category":"hooks","message":"Failed to parse LLM output as JSON"} +{"timestamp":"2026-02-19T19:35:08.746Z","level":"info","category":"hooks","message":"Session start hook","data":{"harness":"claude-code","project":"/home/nicholai"}} +{"timestamp":"2026-02-19T19:35:08.785Z","level":"info","category":"hooks","message":"Session start completed","data":{"memoryCount":6,"durationMs":39}} +{"timestamp":"2026-02-19T19:35:08.788Z","level":"info","category":"watcher","message":"File changed","data":{"path":"/home/nicholai/.agents/memory/memories.db-shm"}} +{"timestamp":"2026-02-19T19:35:08.788Z","level":"info","category":"watcher","message":"File changed","data":{"path":"/home/nicholai/.agents/memory/memories.db-wal"}} +{"timestamp":"2026-02-19T19:35:08.810Z","level":"info","category":"watcher","message":"File changed","data":{"path":"/home/nicholai/.agents/memory/memories.db"}} diff --git a/hooks/agent-memory/handler.js b/hooks/agent-memory/handler.js index ebdcf57c3..3bddd1bf6 100644 --- a/hooks/agent-memory/handler.js +++ b/hooks/agent-memory/handler.js @@ -1,20 +1,14 @@ -import { spawn } from "node:child_process"; -import os from "node:os"; +const DAEMON_URL = process.env.SIGNET_DAEMON_URL || "http://localhost:3850"; -const MEMORY_SCRIPT = "/home/nicholai/.agents/memory/scripts/memory.py"; - -async function runMemoryScript(args) { - return new Promise((resolve, reject) => { - const proc = spawn("python3", [MEMORY_SCRIPT, ...args], { timeout: 5000 }); - let stdout = "", stderr = ""; - proc.stdout.on("data", (d) => { stdout += d.toString(); }); - proc.stderr.on("data", (d) => { stderr += d.toString(); }); - proc.on("close", (code) => { - if (code === 0) resolve(stdout.trim()); - else reject(new Error(stderr || `exit code ${code}`)); - }); - proc.on("error", reject); +async function fetchDaemon(path, body) { + const res = await fetch(`${DAEMON_URL}${path}`, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(body), + signal: AbortSignal.timeout(5000), }); + if (!res.ok) throw new Error(`daemon ${res.status}`); + return res.json(); } const handler = async (event) => { @@ -23,24 +17,34 @@ const handler = async (event) => { switch (event.action) { case "remember": - if (!args.trim()) { event.messages.push("🧠 Usage: /remember "); return; } + if (!args.trim()) { event.messages.push("Usage: /remember "); return; } try { - const result = await runMemoryScript(["save", "--mode", "explicit", "--who", "openclaw", "--content", args.trim()]); - event.messages.push(`🧠 ${result}`); - } catch (e) { event.messages.push(`🧠 Error: ${e.message}`); } + await fetchDaemon("/api/hooks/remember", { + harness: "openclaw", who: "openclaw", content: args.trim(), + }); + event.messages.push(`saved: ${args.trim().slice(0, 50)}...`); + } catch (e) { event.messages.push(`Error: ${e.message}`); } break; case "recall": - if (!args.trim()) { event.messages.push("🧠 Usage: /recall "); return; } + if (!args.trim()) { event.messages.push("Usage: /recall "); return; } try { - const result = await runMemoryScript(["query", args.trim(), "--limit", "10"]); - event.messages.push(result ? `🧠 Results:\n\n${result}` : "🧠 No memories found."); - } catch (e) { event.messages.push(`🧠 Error: ${e.message}`); } + const data = await fetchDaemon("/api/hooks/recall", { + harness: "openclaw", query: args.trim(), + }); + if (data.results?.length) { + event.messages.push(data.results.map(r => `- ${r.content}`).join("\n")); + } else { + event.messages.push("No memories found."); + } + } catch (e) { event.messages.push(`Error: ${e.message}`); } break; case "context": try { - const result = await runMemoryScript(["load", "--mode", "session-start"]); - event.messages.push(result ? `🧠 **Context**\n\n${result}` : "🧠 No context."); - } catch (e) { event.messages.push(`🧠 Error: ${e.message}`); } + const data = await fetchDaemon("/api/hooks/session-start", { + harness: "openclaw", + }); + event.messages.push(data.inject || "no context"); + } catch (e) { event.messages.push(`Error: ${e.message}`); } break; } }; diff --git a/memory/memories.db b/memory/memories.db index 70c9ee0cb30738191ce0fcb29ae1ee0a5cce0101..7ddf515726bafea1450d21f2c22d92a354a4a719 100644 GIT binary patch delta 9491 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 delta 6724 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 TB5xHH{B^N$(AX@J&*uIcSEql; diff --git a/memory/memories.db-shm b/memory/memories.db-shm deleted file mode 100644 index cf437a51e1d2a623c3ef3cd8a60dd40e9666cc6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeI*zb*t(6vy$i*56&$`m>DnZyM7n6eJ2SprDs1h*mp^PUitOTD=$0cmRb?s}q$c zpyGFBBCDB<*ctB5_atX0*?Z>Pb3YGoCwN*n7gc4&tQqQg*fhJ|jXGC1+qH0O=j8G} zzKCug+Z&s4C-`B#+I>c#-}kOa{{DJsZyQmLDkqeYGFILVnH|^69_q?*vsW#iHq6eI zZ_4LMvwh8bpzMC%)w^0(v!*rI|3!xk)bB`zE&YF{+)LioGJyaB2q1s}0tg_000Iag zfB*srAbjG+s* zyorX*doybugRbP!G>4wGJ9h|unf#u8+?pqTC0toc8z@W|c^YJ(v0=Ww4!%GAL y2&4*3S(v)cA_52?@LK_W!jM1!0R##aXcxL0n<0Pz0tg_0KvsdptcBDeAb}5_hBN^H diff --git a/memory/memories.db-wal b/memory/memories.db-wal deleted file mode 100644 index 7411348005e0c982ccc4107f4eca2c288a67caad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131872 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�`+ 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 F{{UkbF=qe( diff --git a/skills/memory-debug/SKILL.md b/skills/memory-debug/SKILL.md new file mode 100644 index 000000000..c612ea318 --- /dev/null +++ b/skills/memory-debug/SKILL.md @@ -0,0 +1,115 @@ +--- +name: memory-debug +description: Diagnose and fix Signet memory issues (daemon health, embeddings, search quality, and data integrity). +user_invocable: true +arg_hint: "[symptom or query]" +builtin: true +--- + +# /memory-debug + +Debug the Signet memory system when recall quality is poor, memories are missing, or remember/recall commands fail. + +Use this skill when the user asks things like: +- "memory is broken" +- "recall isn't finding anything" +- "remember didn't save" +- "why are results low quality?" + +## syntax + +```bash +/memory-debug +/memory-debug recall is empty +/memory-debug embeddings failing +``` + +## workflow + +Run these checks in order and stop when you find the root cause. + +### 1) verify daemon + config + +```bash +signet status +curl -s http://localhost:3850/health +``` + +If daemon is down, run: + +```bash +signet start +signet restart +``` + +Then verify key files exist: +- `~/.agents/agent.yaml` +- `~/.agents/memory/memories.db` + +### 2) verify write path (`remember`) + +```bash +signet remember "memory-debug smoke test" -t debug,smoke -w claude-code +``` + +Expected: success response with `embedded: true` or a clear fallback message. + +If save fails, capture exact CLI error and recommend the fix (daemon restart, permissions, missing config, etc.). + +### 3) verify read path (`recall`) + +```bash +signet recall "memory-debug smoke test" -l 5 --json +``` + +If no results: +- retry with simpler keyword query +- check `search.min_score` and `search.alpha` in `~/.agents/agent.yaml` +- confirm the memory was actually written in step 2 + +### 4) check embedding health + +If memories save but semantic recall is weak: + +```bash +signet recall "memory-debug smoke test" --json +``` + +Inspect whether scores are keyword-heavy and whether embedding appears unavailable. + +Then verify embedding provider configuration in `~/.agents/agent.yaml`: +- `embedding.provider` +- `embedding.model` +- `embedding.dimensions` + +Common fixes: +- provider offline (Ollama/OpenAI unreachable) +- wrong model name +- dimensions mismatch after model change + +### 5) advanced diagnostics + +Check daemon logs for hook and memory errors: + +```bash +signet logs -c hooks +signet logs -c memory +``` + +Use direct API checks for deeper issues: + +```bash +curl -s "http://localhost:3850/api/memory/search?q=debug&limit=5" +curl -s http://localhost:3850/api/status +``` + +## response format + +When reporting back, include: +1. what failed +2. exact command + error +3. likely root cause +4. concrete fix steps +5. verification command to confirm fix + +Prefer minimal, reproducible checks over broad speculation. diff --git a/skills/recall/SKILL.md b/skills/recall/SKILL.md index bdf725116..3e83ad639 100644 --- a/skills/recall/SKILL.md +++ b/skills/recall/SKILL.md @@ -49,15 +49,16 @@ Example with filters: signet recall "signet" --type preference --tags architecture -l 5 ``` -### fallback (daemon not running) +### daemon required -If the daemon is unavailable, fall back to the Python script: +The daemon must be running for recall to work. Check status: ```bash -python ~/.agents/memory/scripts/memory.py query "" +signet status +curl -s http://localhost:3850/health ``` -Check daemon status: `signet status` or `curl -s http://localhost:3850/health` +If the daemon is down, start it with `signet start`. ## response format diff --git a/skills/remember/SKILL.md b/skills/remember/SKILL.md index 1299b8487..f8ec577ad 100644 --- a/skills/remember/SKILL.md +++ b/skills/remember/SKILL.md @@ -53,17 +53,16 @@ The daemon automatically: - generates embedding via configured provider (Ollama/OpenAI) - stores in SQLite + embeddings table -### fallback (daemon not running) +### daemon required -If the daemon is unavailable, fall back to the Python script: +The daemon must be running for remember to work. Check status: ```bash -python ~/.agents/memory/scripts/memory.py save \ - --mode explicit --who --project "$(pwd)" \ - --content "" +signet status +curl -s http://localhost:3850/health ``` -Check daemon status: `signet status` or `curl -s http://localhost:3850/health` +If the daemon is down, start it with `signet start`. ## type inference diff --git a/skills/signet/SKILL.md b/skills/signet/SKILL.md new file mode 100644 index 000000000..6acb5a4ff --- /dev/null +++ b/skills/signet/SKILL.md @@ -0,0 +1,84 @@ +# Signet Skill + +Use Signet for portable agent identity, memory, and secrets management. + +## Secrets + +Retrieve secrets (API keys, tokens) stored in Signet's encrypted vault: + +```bash +# Get a secret value +signet secret get OPENAI_API_KEY + +# List available secrets (names only, never values) +signet secret list +``` + +Secrets are encrypted at rest and only accessible to the agent. + +## Memory + +Save and recall information across sessions: + +```bash +# Save a memory (auto-categorizes and embeds) +signet remember "User prefers dark mode and vim keybindings" + +# Search memories +signet recall "user preferences" + +# Save with explicit importance +signet remember --importance critical "Never delete the production database" +``` + +Memory is persisted in `~/.agents/memory/memories.db` and synced across harnesses. + +## Daemon API + +The Signet daemon runs at `http://localhost:3850`. You can query it directly: + +```bash +# Check daemon status +curl http://localhost:3850/api/status + +# Search memories via API +curl "http://localhost:3850/api/memory/search?q=preferences" + +# Get a secret via API (requires local access) +curl http://localhost:3850/api/secrets/OPENAI_API_KEY +``` + +## Agent Identity Files + +Your identity is defined in `~/.agents/`: + +- `AGENTS.md` - Instructions and capabilities +- `SOUL.md` - Personality and tone +- `IDENTITY.md` - Name and traits +- `USER.md` - User profile and preferences +- `MEMORY.md` - Working memory summary (auto-generated) +- `agent.yaml` - Configuration + +## Skills + +Skills are stored in `~/.agents/skills/` and symlinked to harness directories. + +Install skills: +```bash +npx skills install +``` + +## Commands Reference + +```bash +signet # Interactive menu +signet status # Show status +signet dashboard # Open web UI +signet secret put NAME # Store a secret +signet secret get NAME # Retrieve a secret +signet secret list # List secret names +signet remember "..." # Save a memory +signet recall "..." # Search memories +signet sync # Sync built-in templates/skills +signet restart # Restart daemon +```