claude-recall 0.20.10 → 0.20.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,27 @@
1
1
  {
2
2
  "hooks": {
3
+ "SubagentStart": [
4
+ {
5
+ "hooks": [
6
+ {
7
+ "type": "command",
8
+ "command": "node /home/ebiarao/.nvm/versions/node/v20.19.3/lib/node_modules/claude-recall/dist/cli/claude-recall-cli.js hook run subagent-start",
9
+ "timeout": 5
10
+ }
11
+ ]
12
+ }
13
+ ],
14
+ "SubagentStop": [
15
+ {
16
+ "hooks": [
17
+ {
18
+ "type": "command",
19
+ "command": "node /home/ebiarao/.nvm/versions/node/v20.19.3/lib/node_modules/claude-recall/dist/cli/claude-recall-cli.js hook run subagent-stop",
20
+ "timeout": 10
21
+ }
22
+ ]
23
+ }
24
+ ],
3
25
  "SessionStart": [
4
26
  {
5
27
  "matcher": "compact",
@@ -88,5 +110,5 @@
88
110
  }
89
111
  ]
90
112
  },
91
- "hooksVersion": "11.0.0"
113
+ "hooksVersion": "12.0.0"
92
114
  }
@@ -8,28 +8,17 @@ source: claude-recall
8
8
 
9
9
  # Corrections
10
10
 
11
- Auto-generated from 18 memories. Last updated: 2026-04-06.
11
+ Auto-generated from 7 memories. Last updated: 2026-04-06.
12
12
 
13
13
  ## Rules
14
14
 
15
15
  - CORRECTION: Memory with complex metadata
16
+ - CORRECTION: Never delete claude-recall memories without asking the user first. Show what you plan to delete and get explicit approval before running delete_memory.
16
17
  - CORRECTION: Memory with complex metadata
17
18
  - CORRECTION: Memory with complex metadata
18
- - CORRECTION: Memory with complex metadata
19
- - CORRECTION: Memory with complex metadata
20
- - CORRECTION: Memory with complex metadata
21
- - CORRECTION: Memory with complex metadata
22
- - CORRECTION: Memory with complex metadata
23
- - CORRECTION: Memory with complex metadata
24
- - CORRECTION: Memory with complex metadata
25
- - CORRECTION: Memory with complex metadata
26
- - CORRECTION: Memory with complex metadata
27
- - CORRECTION: Memory with complex metadata
28
- - CORRECTION: Memory with complex metadata
29
- - CORRECTION: Memory with complex metadata
30
- - CORRECTION: License copyright should include user's name instead of 'Claude Recall Contributors'
19
+ - CORRECTION: i just want you tellme what you observe claude recall has done lately
31
20
  - CORRECTION: Use true agentic design where agents decide when to run, not cron jobs
32
- - CORRECTION: License copyright should list your name instead of 'Claude Recall Contributors'
21
+ - CORRECTION: delete without asking first
33
22
 
34
23
  ---
35
24
  *Auto-generated by Claude Recall. Regenerate: `npx claude-recall skills generate`*
@@ -1,26 +1,15 @@
1
1
  {
2
2
  "topicId": "corrections",
3
- "sourceHash": "f96988b031c72141d7607ba19dc871b09a774b4cebd97a35cb4155ac8b1f4055",
4
- "memoryCount": 18,
5
- "generatedAt": "2026-04-06T18:15:28.374Z",
3
+ "sourceHash": "c3bf72dbbe482ded411952a50d3c0d6bb04f7c0a8d8ee76c01992ed8f27c8fcd",
4
+ "memoryCount": 7,
5
+ "generatedAt": "2026-04-06T21:44:03.092Z",
6
6
  "memoryKeys": [
7
+ "memory_1775511843079_fzzjymikj",
8
+ "memory_1775511566528_2zqlbeiyy",
9
+ "memory_1775500740471_dp5hmdxaf",
7
10
  "memory_1775499328353_2ade6746o",
8
- "memory_1775496241485_1yyc5ht88",
9
- "memory_1775494279035_j6uj5lzxo",
10
- "memory_1775492069326_vksvzmt3f",
11
- "memory_1775491767369_sepsjmg8y",
12
- "memory_1775169786543_43p8to1hu",
13
- "memory_1775169704632_wzwczltzu",
14
- "memory_1775169639101_rmxkftqtk",
15
- "memory_1775169273281_4fod7ku6f",
16
- "memory_1775169256118_y7kc07y6y",
17
- "memory_1775169244673_d6d0uc33a",
18
- "memory_1775160781806_vnqf355e9",
19
- "memory_1775159399542_awfryrxp3",
20
- "memory_1775157082825_8uvrul28i",
21
- "memory_1775156381094_dr1nihes8",
22
- "hook_correction_1774180798682_9b5a2hadq",
11
+ "hook_correction_1775511596163_oj20xa10q",
23
12
  "hook_correction_1775498361284_9amjuw4le",
24
- "hook_correction_1774180805192_4ft4zhfsa"
13
+ "hook_correction_1775511572913_yq1y9tvlo"
25
14
  ]
26
15
  }
@@ -8,16 +8,41 @@ source: claude-recall
8
8
 
9
9
  # Failure Lessons
10
10
 
11
- Auto-generated from 27 memories. Last updated: 2026-04-06.
11
+ Auto-generated from 87 memories. Last updated: 2026-04-06.
12
12
 
13
13
  ## Rules
14
14
 
15
15
  - Check command syntax, file paths, and prerequisites before running
16
+ - Check inputs and prerequisites before retrying
17
+ - OpenClaw gateway websocket connection fails from root user context in sandbox; this is a known pairing regression. CLI cannot communicate with gateway from inside the container.
16
18
  - SQLite query syntax error: LIKE clause requires single quotes around string literal, not double quotes
19
+ - Fault injection into mock-eiap/world-state.json on host will not be visible to sandbox agents until collect.sh runs and pushes updated signals.json into the sandbox. Verify data propagation by checking signals.json inside sandbox, not just host files.
20
+ - Session extraction prompt design flaw: fix pairing relies on string similarity between commands, but problem fixes often look structurally different from the failing command (e.g. bash script vs echo piped to bash); causes failure→fix patterns to not be recognized
21
+ - Missing shared tool files in sandbox caused SENTINEL's full chain to fail silently — always verify all tool dependencies (check-delta.js, post-comms.js, self-assess.js, update-run-state.js) are deployed before running agent cycles
22
+ - When collect.sh fails with 'EIAP endpoint unreachable' inside sandbox, check if EIAP_URL env var is set. If empty, the script should auto-detect sandbox environment and default to http://host.openshell.internal:8090 instead of localhost.
23
+ - Avoid: Command failed: git commit -m "$(cat <<'EOF'
24
+ Event-driven agent cascade + direct EIAP polling — two breakthroughs... → Instead: Check command syntax, file paths, and prerequisites before running
25
+ - Avoid: Command failed: docker exec openshell-cluster-nemoclaw kubectl exec -n openshell nka-telco -- ls -la /sandbox/.op... → Instead: Check command syntax, file paths, and prerequisites before running
26
+ - Avoid: Command failed: cat /tmp/claude-1000/-home-ebiarao-repos-wsl-personal-projects-openclaw-autonomous-telco-agents/5... → Instead: Check command syntax, file paths, and prerequisites before running
27
+ - Avoid: Command failed: openshell sandbox list 2>/dev/null; curl -s http://localhost:3000/api/service-health 2>&1 → Instead: Check command syntax, file paths, and prerequisites before running
28
+ - When agent tasks complete but downstream verifications report missing output files, check if required shared tools were uploaded during sandbox initialization — re-push missing files with 'docker exec ... kubectl cp' rather than restarting the sandbox.
29
+ - Exit code 7 from Bash commands in this project context often indicates timing issues (services not fully up) or missing sandboxes during rebuild — retry after confirming 'openshell sandbox list' shows 'Ready' state.
30
+ - Background command 'Verify services and cron message' failed with exit code 7
31
+ - Background command 'Verify services and cron message' failed with exit code 7
32
+ - Avoid: Command failed: openshell status 2>/dev/null | head -5; openshell sandbox list 2>/dev/null → Instead: Check command syntax, file paths, and prerequisites before running
33
+ - SENTINEL verify task failed - collect.sh not running after rebuild (exit code 1)
34
+ - When tool outputs succeed but dependent processes don't trigger, check for stale state like file offsets — trigger-watcher set initial offset from old pre-rebuild state, causing it to miss new entries after rebuild+resync
35
+ - Avoid: Command failed: curl -s http://localhost:3000/api/service-health 2>&1; echo ""; docker exec openshell-cluster-nem... → Instead: Check command syntax, file paths, and prerequisites before running
36
+ - Avoid: Command failed: bash scripts/upgrade-sandbox.sh 2>&1 → Instead: Check command syntax, file paths, and prerequisites before running
37
+ - Avoid: Command failed: echo "Waiting 2 min for next SENTINEL cron tick to fire with delivery:silent..." && sleep 120 && ... → Instead: Check command syntax, file paths, and prerequisites before running
38
+ - Avoid: Command failed: kill $(pgrep -f "trigger-watcher.js") 2>/dev/null; sleep 1; rm -f artifacts/.trigger-watcher-offs... → Instead: Check command syntax, file paths, and prerequisites before running
39
+ - Fix pairing in tool-outcome-watcher fails when the original failing command and the fix command have low string similarity (low Jaccard similarity). Pattern matching is insufficient; needs LLM reasoning about command intent.
40
+ - Avoid: Command failed: kill $(pgrep -f "node.*webui/server.js") 2>/dev/null; sleep 1; cd /home/ebiarao/repos-wsl/persona... → Instead: Check command syntax, file paths, and prerequisites before running
41
+ - Avoid: Command failed: ls artifacts/urgent-trigger-ORACLE.json 2>&1 → Instead: Check command syntax, file paths, and prerequisites before running
42
+ - Avoid: Command failed: node agents/shared/tools/post-comms.js '{"agent":"TEST","type":"handoff","priority":"bad","messag... → Instead: Check command syntax, file paths, and prerequisites before running
17
43
  - Avoid: Command failed: kill $(pgrep -f "node.*webui/server.js") 2>/dev/null; kill $(pgrep -f "node.*mock-eiap/server.js"... → Instead: Check command syntax, file paths, and prerequisites before running
18
44
  - Avoid: Command failed: pgrep -af "webui/server" ; curl -s http://localhost:3000/api/service-health 2>&1 → Instead: Check command syntax, file paths, and prerequisites before running
19
45
  - Avoid: Command failed: kill $(pgrep -f "node.*webui/server.js") 2>/dev/null; sleep 1; node webui/server.js > /tmp/webui.... → Instead: Check command syntax, file paths, and prerequisites before running
20
- - Avoid: Command failed: claude-recall outcomes 2>&1 → Instead: Check command syntax, file paths, and prerequisites before running
21
46
  - Avoid: Command failed: npm whoami 2>&1 && npm config get registry 2>&1 → Instead: Check command syntax, file paths, and prerequisites before running
22
47
  - Claude-recall MCP Server failed to start with npx claude-recall@latest mcp start
23
48
  - Claude-recall MCP Server failed to start with command: npx -y claude-recall@latest mcp start
@@ -25,6 +50,38 @@ Auto-generated from 27 memories. Last updated: 2026-04-06.
25
50
  - Avoid: Command failed: npx jest tests/unit/failure-detectors.test.ts 2>&1 → Instead: Check command syntax, file paths, and prerequisites before running
26
51
  - SQLite query error: LIKE clause needs proper string literal syntax with single quotes in better-sqlite3
27
52
  - Node.js syntax error: multiline strings in -e flag not properly escaped; newlines break the command parsing
53
+ - {"what_failed":"Bash command failed: git commit -m \"$(cat <<'EOF'\nEvent-driven agent cascade + direct EIAP polling — two breakthroughs...","why_failed":"Exit code 128\nerror: gpg failed to sign the data:\n[GNUPG:] KEY_CONSIDERED F3CE7255442A2E7886375262B810E846921AD84F 2\n[GNUPG:] BEGIN_SIGNING H10\n[GNUPG:] USERID_HINT B810E846921AD84F Raoul Biagioni ...","what_should_do":"Check inputs and prerequisites before retrying","context":"Bash error: Exit code 128\nerror: gpg failed to sign the data:\n[GNUPG:] KEY_CONSIDERED F3CE7255442A2E7886375262B810E846921AD84F 2\n[GNUPG:] BEGIN_SIGNING H10\n[GNUPG:] USERID_HINT B810E846921AD84F Raoul Biagioni ...","preventative_checks":["Verify tool inputs are correct","Check preconditions"]}
54
+ - {"what_failed":"Bash command failed: docker exec openshell-cluster-nemoclaw kubectl exec -n openshell nka-telco -- ls -la /sandbox/.op...","why_failed":"Exit code 1\nfile missing","what_should_do":"Check inputs and prerequisites before retrying","context":"Bash error: Exit code 1\nfile missing","preventative_checks":["Verify tool inputs are correct","Check preconditions"]}
55
+ - {"what_failed":"Bash command failed: cat /tmp/claude-1000/-home-ebiarao-repos-wsl-personal-projects-openclaw-autonomous-telco-agents/5...","why_failed":"Exit code 7\n\u001b[1mNAME \u001b[0m \u001b[1mNAMESPACE\u001b[0m \u001b[1mCREATED \u001b[0m \u001b[1mPHASE\u001b[0m\nnka-telco openshell 2026-04-06 21:16:26 \u001b[32mReady\u001b[39m\n\u001b[1mNAME \u001b[0m \u001b[1mNAMESPACE\u001b[0m \u001b[1mCRE...","what_should_do":"Check inputs and prerequisites before retrying","context":"Bash error: Exit code 7\n\u001b[1mNAME \u001b[0m \u001b[1mNAMESPACE\u001b[0m \u001b[1mCREATED \u001b[0m \u001b[1mPHASE\u001b[0m\nnka-telco openshell 2026-04-06 21:16:26 \u001b[32mReady\u001b[39m\n\u001b[1mNAME \u001b[0m \u001b[1mNAMESPACE\u001b[0m \u001b[1mCRE...","preventative_checks":["Verify tool inputs are correct","Check preconditions"]}
56
+ - {"what_failed":"Bash command failed: openshell sandbox list 2>/dev/null; curl -s http://localhost:3000/api/service-health 2>&1","why_failed":"Exit code 7\nNo sandboxes found.","what_should_do":"Check inputs and prerequisites before retrying","context":"Bash error: Exit code 7\nNo sandboxes found.","preventative_checks":["Verify tool inputs are correct","Check preconditions"]}
57
+ - {"what_failed":"Bash command failed: docker exec openshell-cluster-nemoclaw kubectl exec -n openshell nka-telco -- bash -c 'echo $EIAP...","why_failed":"Exit code 1\n\n---\n[collect] fetching EIAP endpoints at 2026-04-06T20:58:54Z\ncommand terminated with exit code 1","what_should_do":"Check inputs and prerequisites before retrying","context":"Bash error: Exit code 1\n\n---\n[collect] fetching EIAP endpoints at 2026-04-06T20:58:54Z\ncommand terminated with exit code 1","preventative_checks":["Verify tool inputs are correct","Check preconditions"]}
58
+ - {"what_failed":"Bash command failed: openshell status 2>/dev/null | head -5; openshell sandbox list 2>/dev/null","why_failed":"Exit code 1\n\u001b[1m\u001b[36mGateway Status\u001b[39m\u001b[0m\n\n \u001b[2mStatus:\u001b[0m No gateway configured.\n\nDeploy a gateway with: \u001b[2mopenshell gateway start\u001b[0m","what_should_do":"Check inputs and prerequisites before retrying","context":"Bash error: Exit code 1\n\u001b[1m\u001b[36mGateway Status\u001b[39m\u001b[0m\n\n \u001b[2mStatus:\u001b[0m No gateway configured.\n\nDeploy a gateway with: \u001b[2mopenshell gateway start\u001b[0m","preventative_checks":["Verify tool inputs are correct","Check preconditions"]}
59
+ - {"what_failed":"Read failed","why_failed":"File content (12314 tokens) exceeds maximum allowed tokens (10000). Use offset and limit parameters to read specific portions of the file, or search for specific content instead of reading the whol...","what_should_do":"Check inputs and prerequisites before retrying","context":"Error: File content (12314 tokens) exceeds maximum allowed tokens (10000). Use offset and limit parameters to read specific portions of the file, or search for specific content instead of reading the whol...","preventative_checks":["Verify tool inputs are correct","Check preconditions"]}
60
+ - {"what_failed":"Bash command failed: B64=$(base64 -w0 < agents/shared/tools/post-comms.js) && ssh -q -o StrictHostKeyChecking=no -o Us...","why_failed":"Exit code 1","what_should_do":"Check inputs and prerequisites before retrying","context":"Bash error: Exit code 1","preventative_checks":["Verify tool inputs are correct","Check preconditions"]}
61
+ - {"what_failed":"Read failed","why_failed":"File does not exist. Note: your current working directory is /home/ebiarao/repos-wsl/personal-projects/openclaw-autonomous-telco-agents.","what_should_do":"Check inputs and prerequisites before retrying","context":"Error: File does not exist. Note: your current working directory is /home/ebiarao/repos-wsl/personal-projects/openclaw-autonomous-telco-agents.","preventative_checks":["Verify tool inputs are correct","Check preconditions"]}
62
+ - {"what_failed":"Bash command failed: docker exec openshell-cluster-nemoclaw kubectl exec -n openshell nka-telco -- tail -10 /sandbox/....","why_failed":"Exit code 1\nTraceback (most recent call last):\n File \"<string>\", line 6, in <module>\n d=json.loads(line)\n File \"/home/ebiarao/miniconda3/lib/python3.13/json/__init__.py\", line 346, in loads\n ...","what_should_do":"Check inputs and prerequisites before retrying","context":"Bash error: Exit code 1\nTraceback (most recent call last):\n File \"<string>\", line 6, in <module>\n d=json.loads(line)\n File \"/home/ebiarao/miniconda3/lib/python3.13/json/__init__.py\", line 346, in loads\n ...","preventative_checks":["Verify tool inputs are correct","Check preconditions"]}
63
+ - {"what_failed":"Bash command failed: pgrep -af trigger-watcher; echo \"---\"; cat artifacts/trigger-log.jsonl 2>/dev/null || echo \"no tr...","why_failed":"Exit code 1\n3180787 node /home/ebiarao/repos-wsl/personal-projects/openclaw-autonomous-telco-agents/scripts/trigger-watcher.js\n3233721 /bin/bash -c source /home/ebiarao/.claude/shell-snapshots/snap...","what_should_do":"Check inputs and prerequisites before retrying","context":"Bash error: Exit code 1\n3180787 node /home/ebiarao/repos-wsl/personal-projects/openclaw-autonomous-telco-agents/scripts/trigger-watcher.js\n3233721 /bin/bash -c source /home/ebiarao/.claude/shell-snapshots/snap...","preventative_checks":["Verify tool inputs are correct","Check preconditions"]}
64
+ - {"what_failed":"Bash command failed: cat artifacts/trigger-log.jsonl 2>/dev/null || echo \"(no triggers yet)\"; echo \"===\"; tail -5 arti...","why_failed":"Exit code 1\n(no triggers yet)\n===","what_should_do":"Check inputs and prerequisites before retrying","context":"Bash error: Exit code 1\n(no triggers yet)\n===","preventative_checks":["Verify tool inputs are correct","Check preconditions"]}
65
+ - {"what_failed":"Bash command failed: pwd; ls agents/nka/scripts/collect.sh 2>/dev/null","why_failed":"Exit code 2\n/home/ebiarao/repos-wsl/personal-projects/openclaw-autonomous-telco-agents/webui/client","what_should_do":"Check inputs and prerequisites before retrying","context":"Bash error: Exit code 2\n/home/ebiarao/repos-wsl/personal-projects/openclaw-autonomous-telco-agents/webui/client","preventative_checks":["Verify tool inputs are correct","Check preconditions"]}
66
+ - {"what_failed":"Bash command failed: ls artifacts/ 2>/dev/null; mkdir -p artifacts && EIAP_URL=http://127.0.0.1:8090 bash agents/nka/s...","why_failed":"Exit code 127\nbash: agents/nka/scripts/collect.sh: No such file or directory","what_should_do":"Check inputs and prerequisites before retrying","context":"Bash error: Exit code 127\nbash: agents/nka/scripts/collect.sh: No such file or directory","preventative_checks":["Verify tool inputs are correct","Check preconditions"]}
67
+ - {"what_failed":"Bash command failed: cat artifacts/state.json","why_failed":"Exit code 1\ncat: artifacts/state.json: No such file or directory","what_should_do":"Check inputs and prerequisites before retrying","context":"Bash error: Exit code 1\ncat: artifacts/state.json: No such file or directory","preventative_checks":["Verify tool inputs are correct","Check preconditions"]}
68
+ - {"what_failed":"Bash command failed: sleep 3 && curl -s http://localhost:3000/api/service-health","why_failed":"Exit code 7","what_should_do":"Check inputs and prerequisites before retrying","context":"Bash error: Exit code 7","preventative_checks":["Verify tool inputs are correct","Check preconditions"]}
69
+ - {"what_failed":"Bash command failed: cd /home/ebiarao/repos-wsl/personal-projects/openclaw-autonomous-telco-agents && kill $(pgrep -f ...","why_failed":"Exit code 144","what_should_do":"Check inputs and prerequisites before retrying","context":"Bash error: Exit code 144","preventative_checks":["Verify tool inputs are correct","Check preconditions"]}
70
+ - {"what_failed":"Bash command failed: node -e \"\nconst fs = require('fs');\nconst wsFile = 'mock-eiap/world/world-state.json';\nconst ws =...","why_failed":"Exit code 1\nnode:fs:449\n return binding.readFileUtf8(path, stringToFlags(options.flag));\n ^\n\nError: ENOENT: no such file or directory, open 'mock-eiap/world/world-state.json'\n ...","what_should_do":"Check inputs and prerequisites before retrying","context":"Bash error: Exit code 1\nnode:fs:449\n return binding.readFileUtf8(path, stringToFlags(options.flag));\n ^\n\nError: ENOENT: no such file or directory, open 'mock-eiap/world/world-state.json'\n ...","preventative_checks":["Verify tool inputs are correct","Check preconditions"]}
71
+ - {"what_failed":"Bash command failed: curl -s http://localhost:3000/api/service-health 2>&1; echo \"\"; docker exec openshell-cluster-nem...","why_failed":"Exit code 1\n{\"eiap\":true,\"dataStale\":false,\"signalsAge\":3,\"checkedAt\":\"2026-04-06T18:54:08.040Z\"}\nTraceback (most recent call last):\n File \"<string>\", line 6, in <module>\n print(f\"{j['name']:12...","what_should_do":"Check inputs and prerequisites before retrying","context":"Bash error: Exit code 1\n{\"eiap\":true,\"dataStale\":false,\"signalsAge\":3,\"checkedAt\":\"2026-04-06T18:54:08.040Z\"}\nTraceback (most recent call last):\n File \"<string>\", line 6, in <module>\n print(f\"{j['name']:12...","preventative_checks":["Verify tool inputs are correct","Check preconditions"]}
72
+ - {"what_failed":"Bash command failed: docker exec openshell-cluster-nemoclaw kubectl exec -n openshell nka-telco -- bash -c 'openclaw c...","why_failed":"Exit code 1\nError: gateway closed (1006 abnormal closure (no close frame)): no close reason\nGateway target: ws://127.0.0.1:18789\nSource: local loopback\nConfig: /root/.openclaw/openclaw.json\nBind: l...","what_should_do":"Check inputs and prerequisites before retrying","context":"Bash error: Exit code 1\nError: gateway closed (1006 abnormal closure (no close frame)): no close reason\nGateway target: ws://127.0.0.1:18789\nSource: local loopback\nConfig: /root/.openclaw/openclaw.json\nBind: l...","preventative_checks":["Verify tool inputs are correct","Check preconditions"]}
73
+ - {"what_failed":"Bash command failed: docker exec openshell-cluster-nemoclaw kubectl exec -n openshell nka-telco -- bash -c 'ps aux | g...","why_failed":"Exit code 1\nbash: line 1: ps: command not found\ncommand terminated with exit code 1","what_should_do":"Check inputs and prerequisites before retrying","context":"Bash error: Exit code 1\nbash: line 1: ps: command not found\ncommand terminated with exit code 1","preventative_checks":["Verify tool inputs are correct","Check preconditions"]}
74
+ - {"what_failed":"Bash command failed: docker exec openshell-cluster-nemoclaw kubectl exec -n openshell nka-telco -- bash -c 'openclaw c...","why_failed":"Exit code 1\nError: gateway closed (1006 abnormal closure (no close frame)): no close reason\nGateway target: ws://127.0.0.1:18789\nSource: local loopback\nConfig: /root/.openclaw/openclaw.json\nBind: l...","what_should_do":"Check inputs and prerequisites before retrying","context":"Bash error: Exit code 1\nError: gateway closed (1006 abnormal closure (no close frame)): no close reason\nGateway target: ws://127.0.0.1:18789\nSource: local loopback\nConfig: /root/.openclaw/openclaw.json\nBind: l...","preventative_checks":["Verify tool inputs are correct","Check preconditions"]}
75
+ - {"what_failed":"Bash command failed: docker exec openshell-cluster-nemoclaw kubectl exec -n openshell nka-telco -- bash -c 'openclaw c...","why_failed":"Exit code 1\ncommand terminated with exit code 1","what_should_do":"Check inputs and prerequisites before retrying","context":"Bash error: Exit code 1\ncommand terminated with exit code 1","preventative_checks":["Verify tool inputs are correct","Check preconditions"]}
76
+ - Fix pairing based on Jaccard string similarity between failing command and fix command is too weak when fixes look syntactically different from original commands (e.g. adding echo pipe vs original bash call); consider semantic matching or explicit fix linking
77
+ - {"what_failed":"Bash command failed: bash scripts/upgrade-sandbox.sh 2>&1","why_failed":"Exit code 1\n\n\u001b[0;32m[upgrade]\u001b[0m ==========================================\n\u001b[0;32m[upgrade]\u001b[0m NeMoClaw Sandbox Rebuild\n\u001b[0;32m[upgrade]\u001b[0m ==========================================\n\n\u001b[0;32m...","what_should_do":"Check inputs and prerequisites before retrying","context":"Bash error: Exit code 1\n\n\u001b[0;32m[upgrade]\u001b[0m ==========================================\n\u001b[0;32m[upgrade]\u001b[0m NeMoClaw Sandbox Rebuild\n\u001b[0;32m[upgrade]\u001b[0m ==========================================\n\n\u001b[0;32m...","preventative_checks":["Verify tool inputs are correct","Check preconditions"]}
78
+ - {"what_failed":"Bash command failed: echo \"Waiting 2 min for next SENTINEL cron tick to fire with delivery:silent...\" && sleep 120 && ...","why_failed":"Exit code 1\nWaiting 2 min for next SENTINEL cron tick to fire with delivery:silent...\nTraceback (most recent call last):\n File \"<string>\", line 1, in <module>\n import json,sys;d=json.load(sys.s...","what_should_do":"Check inputs and prerequisites before retrying","context":"Bash error: Exit code 1\nWaiting 2 min for next SENTINEL cron tick to fire with delivery:silent...\nTraceback (most recent call last):\n File \"<string>\", line 1, in <module>\n import json,sys;d=json.load(sys.s...","preventative_checks":["Verify tool inputs are correct","Check preconditions"]}
79
+ - {"what_failed":"Bash command failed: pkill -f \"node.*trigger-watcher\" 2>/dev/null; sleep 1; rm -f /tmp/trigger-watcher.log artifacts/....","why_failed":"Exit code 144","what_should_do":"Check inputs and prerequisites before retrying","context":"Bash error: Exit code 144","preventative_checks":["Verify tool inputs are correct","Check preconditions"]}
80
+ - {"what_failed":"Bash command failed: pkill -f \"trigger-watcher\" 2>/dev/null; sleep 1; rm -f /tmp/trigger-watcher.log artifacts/.trigge...","why_failed":"Exit code 144","what_should_do":"Check inputs and prerequisites before retrying","context":"Bash error: Exit code 144","preventative_checks":["Verify tool inputs are correct","Check preconditions"]}
81
+ - {"what_failed":"Bash command failed: kill $(pgrep -f \"trigger-watcher.js\") 2>/dev/null; sleep 1; rm -f artifacts/.trigger-watcher-offs...","why_failed":"Exit code 144","what_should_do":"Check inputs and prerequisites before retrying","context":"Bash error: Exit code 144","preventative_checks":["Verify tool inputs are correct","Check preconditions"]}
82
+ - {"what_failed":"Bash command failed: openshell sandbox list 2>/dev/null; openshell status 2>/dev/null; ls ~/.openclaw-ata/cron/jobs.js...","why_failed":"Exit code 2\n\u001b[1mNAME \u001b[0m \u001b[1mNAMESPACE\u001b[0m \u001b[1mCREATED \u001b[0m \u001b[1mPHASE\u001b[0m\nnka-telco openshell 2026-04-06 11:22:57 \u001b[32mReady\u001b[39m\n\u001b[1m\u001b[36mServer Status\u001b[39m\u001b[0m\n\n \u001b[2mGatewa...","what_should_do":"Check inputs and prerequisites before retrying","context":"Bash error: Exit code 2\n\u001b[1mNAME \u001b[0m \u001b[1mNAMESPACE\u001b[0m \u001b[1mCREATED \u001b[0m \u001b[1mPHASE\u001b[0m\nnka-telco openshell 2026-04-06 11:22:57 \u001b[32mReady\u001b[39m\n\u001b[1m\u001b[36mServer Status\u001b[39m\u001b[0m\n\n \u001b[2mGatewa...","preventative_checks":["Verify tool inputs are correct","Check preconditions"]}
83
+ - {"what_failed":"Bash command failed: ls artifacts/urgent-trigger-ORACLE.json 2>&1","why_failed":"Exit code 2\nls: cannot access 'artifacts/urgent-trigger-ORACLE.json': No such file or directory","what_should_do":"Check inputs and prerequisites before retrying","context":"Bash error: Exit code 2\nls: cannot access 'artifacts/urgent-trigger-ORACLE.json': No such file or directory","preventative_checks":["Verify tool inputs are correct","Check preconditions"]}
84
+ - {"what_failed":"Bash command failed: echo \"38\" > artifacts/.trigger-watcher-offset && timeout 8 node scripts/trigger-watcher.js 2>&1","why_failed":"Exit code 124\n[trigger-watcher] 2026-04-06T18:17:44.804Z started — polling every 5s\n[trigger-watcher] 2026-04-06T18:17:44.806Z initial offset: 39 lines","what_should_do":"Check inputs and prerequisites before retrying","context":"Bash error: Exit code 124\n[trigger-watcher] 2026-04-06T18:17:44.804Z started — polling every 5s\n[trigger-watcher] 2026-04-06T18:17:44.806Z initial offset: 39 lines","preventative_checks":["Verify tool inputs are correct","Check preconditions"]}
28
85
  - {"what_failed":"Bash command failed: node webui/server.js > /tmp/webui.log 2>&1 & sleep 3 && curl -s http://localhost:3000/api/service...","why_failed":"Exit code 7\n[1]+ Exit 1 node webui/server.js > /tmp/webui.log 2>&1","what_should_do":"Check inputs and prerequisites before retrying","context":"Bash error: Exit code 7\n[1]+ Exit 1 node webui/server.js > /tmp/webui.log 2>&1","preventative_checks":["Verify tool inputs are correct","Check preconditions"]}
29
86
  - {"what_failed":"Bash command failed: sleep 2 && curl -s http://localhost:3000/api/service-health 2>&1","why_failed":"Exit code 7","what_should_do":"Check inputs and prerequisites before retrying","context":"Bash error: Exit code 7","preventative_checks":["Verify tool inputs are correct","Check preconditions"]}
30
87
  - {"what_failed":"Bash command failed: kill $(pgrep -f \"node.*webui/server.js\") 2>/dev/null; sleep 1; cd /home/ebiarao/repos-wsl/persona...","why_failed":"Exit code 144","what_should_do":"Check inputs and prerequisites before retrying","context":"Bash error: Exit code 144","preventative_checks":["Verify tool inputs are correct","Check preconditions"]}
@@ -34,10 +91,14 @@ Auto-generated from 27 memories. Last updated: 2026-04-06.
34
91
  - {"what_failed":"Read failed","why_failed":"File content (11505 tokens) exceeds maximum allowed tokens (10000). Use offset and limit parameters to read specific portions of the file, or search for specific content instead of reading the whol...","what_should_do":"Check inputs and prerequisites before retrying","context":"Error: File content (11505 tokens) exceeds maximum allowed tokens (10000). Use offset and limit parameters to read specific portions of the file, or search for specific content instead of reading the whol...","preventative_checks":["Verify tool inputs are correct","Check preconditions"]}
35
92
  - Avoid: Test command reported failures: npx jest tests/unit/failure-detectors.test.ts 2>&1 → Instead: Read test output carefully — exit code 0 does not mean all tests passed
36
93
  - Node.js -e flag cannot parse multiline strings with unescaped newlines in single quotes
94
+ - Grep with escaped quotes (pattern="SESSION_EXTRACTION_PROMPT\"") returns no matches — use unescaped pattern="SESSION_EXTRACTION_PROMPT" instead
95
+ - Gateway token mismatch error — requires verifying token in Control UI settings via dashboard URL
37
96
  - claude-recall reconnection failed after reinstall
38
97
  - claude-recall reconnection failed after reinstall attempt
39
98
  - Output is showing '>' instead of expected response
40
99
  - Code output returns '>' instead of expected response
100
+ - Background command 'Wait one more SENTINEL cycle' failed with exit code 1
101
+ - Avoid: Claude backtracked: "Let me try another" → Instead: Consider the problem more carefully before starting. Check for similar past failures.
41
102
  - Avoid: Claude backtracked: "let me try a different approach" → Instead: Consider the problem more carefully before starting. Check for similar past failures.
42
103
 
43
104
  ---
@@ -1,15 +1,39 @@
1
1
  {
2
2
  "topicId": "failure-lessons",
3
- "sourceHash": "543a967cdc5416d35aa4d95b097e319a3d4c184780ea4ee2975551d2c1187e59",
4
- "memoryCount": 27,
5
- "generatedAt": "2026-04-06T18:15:28.298Z",
3
+ "sourceHash": "0a433bc57da8ed5c3137f8676cae1ec253e4a5037b115400d0e0c9e394789440",
4
+ "memoryCount": 87,
5
+ "generatedAt": "2026-04-06T21:44:03.038Z",
6
6
  "memoryKeys": [
7
7
  "promoted_1775498319002_awwrsovw6",
8
+ "promoted_1775499579486_bxvgjc80r",
9
+ "hook_failure_1775502039213_k4yusuan1",
8
10
  "hook_failure_1772637584921_0tj4rrxnt",
11
+ "hook_failure_1775503464385_vz5vdzxvs",
12
+ "hook_failure_1775500959351_j74owpvko",
13
+ "hook_failure_1775511109813_ly4cjtde6",
14
+ "hook_failure_1775509498191_f79imbrs4",
15
+ "hook_failure_non-zero-exit_1775511575363_nen5eyl3b",
16
+ "hook_failure_non-zero-exit_1775510785418_2xm52g5q8",
17
+ "hook_failure_non-zero-exit_1775510309712_olv4egt1g",
18
+ "hook_failure_non-zero-exit_1775510309694_1cipsasft",
19
+ "hook_failure_1775510785331_kxr1uoozx",
20
+ "hook_failure_1775510309605_z58f30w5t",
21
+ "hook_failure_1775510305548_qq8hdyk12",
22
+ "hook_failure_1775510298887_aoeh4m2cl",
23
+ "hook_failure_non-zero-exit_1775508193513_ms20rhkf1",
24
+ "hook_failure_1775509104206_lg9fvtipb",
25
+ "hook_failure_1775504451387_fmycaea7m",
26
+ "hook_failure_non-zero-exit_1775503134951_mq2x1hj77",
27
+ "hook_failure_non-zero-exit_1775502651250_4ah16usm4",
28
+ "hook_failure_non-zero-exit_1775502651238_l0c5dkykp",
29
+ "hook_failure_non-zero-exit_1775501919378_s3j17tkr3",
30
+ "hook_failure_1775500665745_zl6zsp7jw",
31
+ "hook_failure_non-zero-exit_1775499579462_n5xb6rr8r",
32
+ "hook_failure_non-zero-exit_1775499579440_2tv110hs9",
33
+ "hook_failure_non-zero-exit_1775499579425_n53js176o",
9
34
  "hook_failure_non-zero-exit_1775498318987_pqbmsatub",
10
35
  "hook_failure_non-zero-exit_1775498318976_mzbyvdceo",
11
36
  "hook_failure_non-zero-exit_1775498318963_thiuiiqef",
12
- "hook_failure_non-zero-exit_1774020949485_6ubuoswae",
13
37
  "hook_failure_non-zero-exit_1773409269877_ful451241",
14
38
  "hook_failure_1773409616313_gmsfcbuzh",
15
39
  "hook_failure_1773409607268_83ie5yunz",
@@ -17,6 +41,38 @@
17
41
  "hook_failure_non-zero-exit_1772640279977_g3gwlfoqi",
18
42
  "hook_failure_1772637570984_yxs8zmurp",
19
43
  "hook_failure_1772637485532_djep8eysa",
44
+ "hook_failure_1775511332509_3mxf5vtg3",
45
+ "hook_failure_1775510710817_sn23160zp",
46
+ "hook_failure_1775510222535_o2t7vm7qp",
47
+ "hook_failure_1775510141049_oo7v7htpv",
48
+ "hook_failure_1775509134627_wu9wz6w1p",
49
+ "hook_failure_1775508183011_gy3nzxwiy",
50
+ "hook_failure_1775505258754_l50o6be33",
51
+ "hook_failure_1775503921254_zyjka5vj9",
52
+ "hook_failure_1775503659141_1fh62brao",
53
+ "hook_failure_1775503198240_qzmm07ves",
54
+ "hook_failure_1775503190006_k5mdxukzl",
55
+ "hook_failure_1775503183507_rs20xzomb",
56
+ "hook_failure_1775503035650_efta0k28k",
57
+ "hook_failure_1775503031427_e9070twhb",
58
+ "hook_failure_1775503009947_ea2euap40",
59
+ "hook_failure_1775502961298_snolsqnu9",
60
+ "hook_failure_1775502951488_hyvabjgp1",
61
+ "hook_failure_1775502809370_icsa9nxsy",
62
+ "hook_failure_1775501648406_78lsvrrb1",
63
+ "hook_failure_1775501136927_v2zesbrwh",
64
+ "hook_failure_1775501122267_ejvqdr0id",
65
+ "hook_failure_1775501085124_c92qa38u7",
66
+ "hook_failure_1775501078345_pryhog20w",
67
+ "hook_failure_1775500618695_6grbwpm3t",
68
+ "hook_failure_1775500273633_yrw798ahh",
69
+ "hook_failure_1775500125145_ad65bw8rs",
70
+ "hook_failure_1775499854068_ze23fp9gf",
71
+ "hook_failure_1775499797961_6ziqluf1i",
72
+ "hook_failure_1775499784048_qsshv04hl",
73
+ "hook_failure_1775499638896_pfhgi3kn5",
74
+ "hook_failure_1775499503779_k9vabnkif",
75
+ "hook_failure_1775499472886_1exmgb4ef",
20
76
  "hook_failure_1775499266183_drme5d0j6",
21
77
  "hook_failure_1775499258759_4unleb4yv",
22
78
  "hook_failure_1775499252924_czqqpfsp3",
@@ -26,10 +82,14 @@
26
82
  "hook_failure_1775498542480_wc23ux8gt",
27
83
  "hook_failure_silent-test-failure_1772640279996_m8f3ks8fw",
28
84
  "hook_failure_1772637495154_i21dho3dv",
85
+ "hook_failure_1775511713477_psti3hr7y",
86
+ "hook_failure_1775502085189_pnbd0kkg1",
29
87
  "hook_failure_1773410663873_oegccxk83",
30
88
  "hook_failure_1773410656672_kno1aw8wf",
31
89
  "hook_failure_1772637391602_cjj3esg33",
32
90
  "hook_failure_1772637376157_hvco6jbm4",
91
+ "hook_failure_1775509857057_847nm61ld",
92
+ "hook_failure_backtracking_1775508193524_54wn8o688",
33
93
  "hook_failure_backtracking_1772640280006_snb0x5cgg"
34
94
  ]
35
95
  }
@@ -8,91 +8,33 @@ source: claude-recall
8
8
 
9
9
  # Preferences
10
10
 
11
- Auto-generated from 81 memories. Last updated: 2026-04-06.
11
+ Auto-generated from 23 memories. Last updated: 2026-04-06.
12
12
 
13
13
  ## Rules
14
14
 
15
+ - Session test preference 1775511843229
16
+ - Test preference 1775511843109-2
17
+ - Test preference 1775511843109-1
18
+ - Test preference 1775511843109-0
19
+ - Test memory content
20
+ - Session test preference 1775500740595
21
+ - Test preference 1775500740495-2
22
+ - Test preference 1775500740495-1
23
+ - Test preference 1775500740495-0
24
+ - Test memory content
15
25
  - Session test preference 1775499328559
16
26
  - Test preference 1775499328384-2
17
27
  - Test preference 1775499328384-1
18
28
  - Test preference 1775499328384-0
19
29
  - Test memory content
20
30
  - Session test preference 1775496241643
21
- - Test preference 1775496241514-2
22
- - Test preference 1775496241514-1
23
- - Test preference 1775496241514-0
24
- - Test memory content
25
- - Session test preference 1775494279149
26
- - Test preference 1775494279061-2
27
- - Test preference 1775494279061-1
28
- - Test preference 1775494279061-0
29
- - Test memory content
30
- - Session test preference 1775492069465
31
- - Test preference 1775492069353-2
32
- - Test preference 1775492069353-1
33
- - Test preference 1775492069353-0
34
- - Test memory content
35
- - Session test preference 1775491767519
36
- - Test preference 1775491767395-2
37
- - Test preference 1775491767395-1
38
- - Test preference 1775491767395-0
39
- - Test memory content
40
31
  - After each refactoring, document the changes made. Don't batch documentation to the end — write it as you go.
41
32
  - Any major refactoring requires exhaustive search to make sure nothing is missed. Always grep/search comprehensively before and after changes to verify no stale references, broken imports, or missed files remain.
42
- - Session test preference 1775169786712
43
- - Test preference 1775169786565-2
44
- - Test preference 1775169786565-1
45
- - Test preference 1775169786565-0
46
- - Test memory content
47
- - Session test preference 1775169704849
48
- - Test preference 1775169704668-2
49
- - Test preference 1775169704668-1
50
- - Test preference 1775169704668-0
51
- - Test memory content
52
- - Session test preference 1775169639212
53
- - Test preference 1775169639121-2
54
- - Test preference 1775169639121-1
55
- - Test preference 1775169639121-0
56
- - Test memory content
57
- - Session test preference 1775169273366
58
- - Test preference 1775169273296-2
59
- - Test preference 1775169273296-1
60
- - Test preference 1775169273296-0
61
- - Test memory content
62
- - Session test preference 1775169256189
63
- - Test preference 1775169256133-2
64
- - Test preference 1775169256133-1
65
- - Test preference 1775169256133-0
66
- - Test memory content
67
- - Session test preference 1775169244752
68
- - Test preference 1775169244686-2
69
- - Test preference 1775169244686-1
70
- - Test preference 1775169244686-0
71
- - Test memory content
72
33
  - Markdown documentation files should be named with the convention YYYYMMDD_<filename>.md (e.g., 20260402_nemoclaw_integration.md). Use underscores, not hyphens, in the date-prefixed filenames.
73
- - Session test preference 1775160781884
74
- - Test preference 1775160781820-2
75
- - Test preference 1775160781820-1
76
- - Test preference 1775160781820-0
77
- - Test memory content
78
- - Session test preference 1775159399698
79
- - Test preference 1775159399559-2
80
- - Test preference 1775159399559-1
81
- - Test preference 1775159399559-0
82
- - Test memory content
83
- - Session test preference 1775157082982
84
- - Test preference 1775157082853-2
85
- - Test preference 1775157082853-1
86
- - Test preference 1775157082853-0
87
- - Test memory content
88
- - Session test preference 1775156381211
89
- - Test preference 1775156381110-2
90
- - Test preference 1775156381110-1
91
- - Test preference 1775156381110-0
92
- - Test memory content
93
- - axios npm package was compromised in a supply chain attack (axios@1.14.1 pulled in malicious plain-crypto-js@4.2.1). Claude Recall is NOT affected — does not use axios. Verified 2026-04-01. If axios is ever added as a dependency, pin the version and audit lockfiles.
34
+ - Always ask before deleting anything
35
+ - When user questions the scope or complexity of a solution mid-session, pause and clarify the reusable abstractions extracted from the implementation. Identify generalizable patterns (e.g., trigger-watcher, signal-based coordination) that justify the engineering effort beyond the immediate use case.
36
+ - When discovering architectural issues, create comprehensive documentation immediately (host/sandbox duality) and add redesign work to TODO list for later iteration.
94
37
  - For agentic design, agents should decide when to run rather than using cron jobs for scheduling
95
- - Upgrade all projects whenever a new version is pushed
96
38
 
97
39
  ---
98
40
  *Auto-generated by Claude Recall. Regenerate: `npx claude-recall skills generate`*
@@ -1,89 +1,31 @@
1
1
  {
2
2
  "topicId": "preferences",
3
- "sourceHash": "dce1646010683da840451f75aec6672ca62e50210bc5d2c89fe733ab9f9a60bd",
4
- "memoryCount": 81,
5
- "generatedAt": "2026-04-06T18:15:28.596Z",
3
+ "sourceHash": "819c9fa966f5ffabe7b065fa6290958f1601072fb16e47d162bd513228ec08d5",
4
+ "memoryCount": 23,
5
+ "generatedAt": "2026-04-06T21:44:03.259Z",
6
6
  "memoryKeys": [
7
+ "memory_1775511843231_at7wjj6kf",
8
+ "memory_1775511843181_7ruo2iof1",
9
+ "memory_1775511843150_vdcha6qwp",
10
+ "memory_1775511843112_mmaq6zmrn",
11
+ "memory_1775511842984_cn67mk6m3",
12
+ "memory_1775500740596_xok3iey9j",
13
+ "memory_1775500740545_op5713e5i",
14
+ "memory_1775500740519_ln1fd8ow4",
15
+ "memory_1775500740497_f06v303gf",
16
+ "memory_1775500740399_ud5aghy9a",
7
17
  "memory_1775499328561_9m7ao3h8s",
8
18
  "memory_1775499328480_e2zx9g5ly",
9
19
  "memory_1775499328425_plvaaxd69",
10
20
  "memory_1775499328386_dqcav3itu",
11
21
  "memory_1775499328258_cilhe1owj",
12
22
  "memory_1775496241645_xtz7cwan4",
13
- "memory_1775496241576_j7sxxuge3",
14
- "memory_1775496241542_rg3hj24ud",
15
- "memory_1775496241516_y3inz8rlf",
16
- "memory_1775496241411_vwdz6igrm",
17
- "memory_1775494279150_n4pq7zy11",
18
- "memory_1775494279108_6hbe8qoit",
19
- "memory_1775494279088_nv8hjdm7s",
20
- "memory_1775494279062_jx4wrwn6s",
21
- "memory_1775494278982_fsc491z41",
22
- "memory_1775492069467_5cturlg0a",
23
- "memory_1775492069400_icg4tjivf",
24
- "memory_1775492069377_goix7nu9v",
25
- "memory_1775492069354_wma3zh5i7",
26
- "memory_1775492069258_q9d2k28wt",
27
- "memory_1775491767523_p2xtn4uak",
28
- "memory_1775491767447_q1dwsdfk3",
29
- "memory_1775491767421_vgntf4jt8",
30
- "memory_1775491767397_f181w5lqd",
31
- "memory_1775491767290_s7ntmkwpg",
32
23
  "memory_1775208934902_2kovciriy",
33
24
  "memory_1775208477621_fqa3w21j1",
34
- "memory_1775169786717_1zmwoe6ai",
35
- "memory_1775169786630_rdudb8hbc",
36
- "memory_1775169786589_zurej1v51",
37
- "memory_1775169786567_3esvhc01j",
38
- "memory_1775169786460_vugzw5yl0",
39
- "memory_1775169704852_ezdebznpz",
40
- "memory_1775169704771_ak9vkaswc",
41
- "memory_1775169704739_dg78h7lte",
42
- "memory_1775169704670_f1yhtrmsz",
43
- "memory_1775169704515_lby33vw9c",
44
- "memory_1775169639213_w3i85h357",
45
- "memory_1775169639170_iewh2evi0",
46
- "memory_1775169639145_x9s0519l7",
47
- "memory_1775169639123_fa53agp0a",
48
- "memory_1775169639037_f290kffwd",
49
- "memory_1775169273368_c1e5jdl9r",
50
- "memory_1775169273337_wozxe12k3",
51
- "memory_1775169273319_3o1ww90na",
52
- "memory_1775169273297_oqmyxziav",
53
- "memory_1775169273232_eoymf3ezj",
54
- "memory_1775169256190_681x8frvt",
55
- "memory_1775169256164_kqderurux",
56
- "memory_1775169256150_0nqbk7tx9",
57
- "memory_1775169256134_ftj0m44bb",
58
- "memory_1775169256069_dywd646f7",
59
- "memory_1775169244754_sjfarlk41",
60
- "memory_1775169244722_mavida9fg",
61
- "memory_1775169244707_nmmu0s0lu",
62
- "memory_1775169244688_03q4mmcky",
63
- "memory_1775169244628_7kuhf5met",
64
25
  "memory_1775168901303_o8o0i4952",
65
- "memory_1775160781885_fkbnc0s85",
66
- "memory_1775160781857_gj5y299dr",
67
- "memory_1775160781842_0xmv146n5",
68
- "memory_1775160781821_o9ipt8nsc",
69
- "memory_1775160781747_70e5gbp7j",
70
- "memory_1775159399702_yg6ynd05n",
71
- "memory_1775159399631_fmy4s2vhr",
72
- "memory_1775159399606_xymkvcjfv",
73
- "memory_1775159399561_o6vpb3fto",
74
- "memory_1775159399463_0pvhuixyr",
75
- "memory_1775157082984_oiyt9u65w",
76
- "memory_1775157082927_29d7mm59z",
77
- "memory_1775157082892_o9i0jbw76",
78
- "memory_1775157082855_zlbl2ib0j",
79
- "memory_1775157082743_fu07oklto",
80
- "memory_1775156381212_ptlo01224",
81
- "memory_1775156381158_3p6goornd",
82
- "memory_1775156381132_ikx95mk0n",
83
- "memory_1775156381111_1x4fxfu9n",
84
- "memory_1775156381012_3tw7we7cz",
85
- "memory_1775154208266_arwo2fctx",
86
- "hook_preference_1775498374200_6d21qj14y",
87
- "hook_preference_1774106575282_45sk4ep52"
26
+ "hook_preference_1775511561137_rjm92h4o3",
27
+ "hook_preference_1775508193449_aphyh28z9",
28
+ "hook_preference_1775503672864_weqgjstda",
29
+ "hook_preference_1775498374200_6d21qj14y"
88
30
  ]
89
31
  }
package/README.md CHANGED
@@ -84,11 +84,11 @@ Once installed, Claude Recall works automatically in the background:
84
84
  1. **Session start** — active rules are loaded before the first action. In Claude Code, this happens via the `search_enforcer` hook; in Pi, rules are injected into the system prompt automatically
85
85
  2. **As you work** — every prompt is classified for corrections and preferences. Natural statements like *"we use tabs here"* or *"no, put tests in `__tests__/`"* are detected and stored
86
86
  3. **Tool outcomes** — results from all tools (Bash, Edit, Write, and more) are captured. Failures are stored as memories; Bash failures are paired with successful fixes
87
- 4. **End of session** — session episodes are created, candidate lessons extracted from failures, and a promotion cycle graduates validated patterns into active rules. A session extraction pass sends the last 50 transcript entries to Haiku to extract durable project knowledge from long coding sessions
87
+ 4. **End of session** — session episodes are created, candidate lessons extracted from failures, and a promotion cycle graduates validated patterns into active rules. A session extraction pass sends the last 50 transcript entries to Haiku to identify cause-and-effect patterns: what failed, why, and what fixed it
88
88
  5. **Reask detection** — frustration signals ("still broken", "that didn't work") are recorded as outcome events
89
89
  6. **Before context compression** — aggressive memory sweep captures important context before the window shrinks
90
90
  7. **After context compression** (Claude Code only) — rules are automatically re-injected into context so they're not lost when the window shrinks
91
- 8. **Multi-agent outcomes** — subagent completions (completed/failed/killed) are captured from task notifications and recorded as outcome events
91
+ 8. **Sub-agent recall** (Claude Code only) when sub-agents are spawned, active rules are injected into their context automatically. Sub-agent outcomes (completed/failed/killed) are captured as events
92
92
  9. **Rules sync** (Claude Code only) — top 30 rules are exported as typed `.md` files to Claude Code's native memory directory
93
93
 
94
94
  Classification uses Claude Haiku (via `ANTHROPIC_API_KEY`) with silent regex fallback. No configuration needed.
@@ -48,8 +48,8 @@ async function handleCorrectionDetector(input) {
48
48
  // Reject short/garbage extracts and raw dumps (not clean rules)
49
49
  if (result.extract.length < 10 || result.extract.length > 200)
50
50
  return;
51
- // Corrections and preferences need high confidence; others need moderate
52
- if ((result.type === 'correction' || result.type === 'preference') && result.confidence < 0.7)
51
+ // Corrections, preferences, and devops need high confidence to prevent noise
52
+ if ((result.type === 'correction' || result.type === 'preference' || result.type === 'devops') && result.confidence < 0.75)
53
53
  return;
54
54
  if (result.confidence < 0.6)
55
55
  return;
@@ -18,7 +18,7 @@ const SYSTEM_PROMPT = `You are a memory classifier for a developer tool. Classif
18
18
  - correction: User correcting a mistake ("no, use X not Y", "wrong, it should be...")
19
19
  - preference: User stating a clear, reusable directive about how they want things done going forward ("we use tabs", "always use TypeScript", "I prefer X"). Must be a rule that applies beyond this conversation. NOT observations, complaints, questions, debugging statements, or one-off instructions like "fix this" or "tell me about X"
20
20
  - failure: Something broke or failed ("build failed", "error in deployment")
21
- - devops: CI/CD, deployment, Docker, git workflow patterns
21
+ - devops: CI/CD, deployment, Docker, git workflow patterns. ONLY durable rules — not transient operational events like "sandbox rebuilt" or "background task exited"
22
22
  - project-knowledge: Architecture, stack, database, API patterns
23
23
  - none: Casual conversation, questions, code snippets, or anything not worth remembering
24
24
 
@@ -39,7 +39,7 @@ const BATCH_SYSTEM_PROMPT = `You are a memory classifier for a developer tool. Y
39
39
  - correction: User correcting a mistake ("no, use X not Y", "wrong, it should be...")
40
40
  - preference: User stating a clear, reusable directive about how they want things done going forward ("we use tabs", "always use TypeScript", "I prefer X"). Must be a rule that applies beyond this conversation. NOT observations, complaints, questions, debugging statements, or one-off instructions like "fix this" or "tell me about X"
41
41
  - failure: Something broke or failed ("build failed", "error in deployment")
42
- - devops: CI/CD, deployment, Docker, git workflow patterns
42
+ - devops: CI/CD, deployment, Docker, git workflow patterns. ONLY durable rules — not transient operational events like "sandbox rebuilt" or "background task exited"
43
43
  - project-knowledge: Architecture, stack, database, API patterns
44
44
  - none: Casual conversation, questions, code snippets, or anything not worth remembering
45
45
 
@@ -149,26 +149,36 @@ async function extractHindsightHint(failureDescription, context) {
149
149
  return null;
150
150
  }
151
151
  }
152
- const SESSION_EXTRACTION_PROMPT = `You are analyzing a coding session transcript to extract durable project knowledge.
152
+ const SESSION_EXTRACTION_PROMPT = `You are analyzing a coding session transcript to extract durable lessons.
153
153
 
154
- The transcript shows tool calls (Bash, Edit, Read, Grep, etc.) and their results, plus user and assistant messages.
154
+ The transcript shows tool calls (Bash, Edit, Read, Grep, etc.) and their results, plus user and assistant messages. Your primary job is to identify CAUSE-AND-EFFECT patterns — what failed, why, and what fixed it.
155
155
 
156
- Extract ONLY facts useful in FUTURE sessions:
157
- - Project conventions discovered (file structure, naming patterns, build tools, test frameworks)
158
- - Workflow patterns that worked or failed (e.g. "tests must be run from project root")
159
- - Technical constraints or gotchas encountered (e.g. "this project uses ESM, not CJS")
160
- - Environment requirements discovered (e.g. "needs Node 20+", "uses pnpm not npm")
156
+ PRIORITY 1 Failure Fix sequences:
157
+ Look for tool calls that failed (errors, timeouts, non-zero exits) followed by a different approach that succeeded. Extract the lesson as an imperative rule.
158
+ Examples:
159
+ - Command timed out because of interactive prompt → "scripts/upgrade-sandbox.sh requires interactive confirmation pipe 'y' to auto-confirm"
160
+ - Edit failed with old_string not found "File X uses tabs not spaces — match exact indentation when editing"
161
+ - Build failed after dependency change → "Run npm install after modifying package.json before building"
162
+
163
+ PRIORITY 2 — Project conventions discovered:
164
+ - File structure, naming patterns, build tools, test frameworks
165
+ - Workflow patterns (e.g. "tests must be run from project root")
166
+ - Technical constraints or gotchas (e.g. "this project uses ESM, not CJS")
167
+ - Environment requirements (e.g. "needs Node 20+", "uses pnpm not npm")
168
+
169
+ PRIORITY 3 — User corrections applied:
170
+ - When the user corrected the agent's approach mid-session
161
171
 
162
172
  Do NOT extract:
163
- - Task-specific details (what was built, which files changed this session)
164
- - Debugging steps unlikely to recur
165
- - Code patterns visible by reading the codebase
173
+ - Task-specific details (what was built, which files changed)
174
+ - One-off debugging steps unlikely to recur
175
+ - Code patterns derivable from reading the codebase
166
176
  - Anything in the EXISTING MEMORIES list below
167
177
 
168
178
  Respond with ONLY valid JSON (no markdown fences):
169
179
  [{"type":"project-knowledge|preference|devops|failure","content":"<imperative statement>","confidence":0.0-1.0}]
170
180
 
171
- Return [] if nothing durable was learned. Max 10 items. Each content should be a concise imperative statement (e.g. "Run tests with pnpm test, not npm test").`;
181
+ Return [] if nothing durable was learned. Max 10 items. Each content should be a concise, actionable rule (e.g. "Pipe 'y' to scripts/upgrade-sandbox.sh it has an interactive confirmation prompt").`;
172
182
  /**
173
183
  * Extract durable session learnings from a conversation summary using Haiku.
174
184
  * Returns null if no API key or on any failure.
@@ -94,8 +94,8 @@ async function handleMemoryStop(input) {
94
94
  // Reject extracts that are too short or too long (not clean rules)
95
95
  if (result.extract.length < 10 || result.extract.length > 200)
96
96
  continue;
97
- // Corrections and preferences need higher confidence
98
- if ((result.type === 'correction' || result.type === 'preference') && result.confidence < 0.7)
97
+ // Corrections, preferences, and devops need higher confidence to prevent noise
98
+ if ((result.type === 'correction' || result.type === 'preference' || result.type === 'devops') && result.confidence < 0.75)
99
99
  continue;
100
100
  if (result.confidence < 0.6)
101
101
  continue;
@@ -235,7 +235,10 @@ async function handleBashFailure(command, exitCode, output, sessionId) {
235
235
  const memoryService = memory_1.MemoryService.getInstance();
236
236
  memoryService.store({
237
237
  key,
238
- value: failureContent,
238
+ value: {
239
+ content: `${failureContent.what_failed}. ${failureContent.why_failed}`,
240
+ ...failureContent,
241
+ },
239
242
  type: 'failure',
240
243
  context: { timestamp: Date.now() },
241
244
  relevanceScore: 0.85,
@@ -206,7 +206,10 @@ function storeToolFailure(toolName, toolInput, output, sessionId) {
206
206
  const key = `hook_failure_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
207
207
  memory_1.MemoryService.getInstance().store({
208
208
  key,
209
- value: failureContent,
209
+ value: {
210
+ content: `${failureContent.what_failed}. ${failureContent.why_failed}`,
211
+ ...failureContent,
212
+ },
210
213
  type: 'failure',
211
214
  context: { timestamp: Date.now() },
212
215
  relevanceScore: 0.75,
@@ -278,7 +281,7 @@ async function processUserInput(text, sessionId) {
278
281
  return null;
279
282
  if (result.extract.length < 10 || result.extract.length > 200)
280
283
  return null;
281
- if ((result.type === 'correction' || result.type === 'preference') && result.confidence < 0.7)
284
+ if ((result.type === 'correction' || result.type === 'preference' || result.type === 'devops') && result.confidence < 0.75)
282
285
  return null;
283
286
  if (result.confidence < 0.6)
284
287
  return null;
@@ -325,7 +328,7 @@ async function processSessionEnd(userTexts, sessionId, projectId, maxStore = 3)
325
328
  continue;
326
329
  if (result.extract.length < 10 || result.extract.length > 200)
327
330
  continue;
328
- if ((result.type === 'correction' || result.type === 'preference') && result.confidence < 0.7)
331
+ if ((result.type === 'correction' || result.type === 'preference' || result.type === 'devops') && result.confidence < 0.75)
329
332
  continue;
330
333
  if (result.confidence < 0.6)
331
334
  continue;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-recall",
3
- "version": "0.20.10",
3
+ "version": "0.20.12",
4
4
  "description": "Persistent memory for Claude Code and Pi with native Skills integration, automatic capture, failure learning, and project scoping",
5
5
  "main": "dist/index.js",
6
6
  "bin": {