Introduction
# ClawVault š
An elephant never forgets. Structured memory for OpenClaw agents.
> **Built for [OpenClaw](https://openclaw.ai)**. Canonical install: npm CLI + hook install + hook enable.
## Security & Transparency
**What this skill does:** - Reads/writes markdown files in your vault directory (`CLAWVAULT_PATH` or auto-discovered) - `repair-session` reads and modifies OpenClaw session transcripts (`~/.openclaw/agents/`) ā creates backups before writing - Provides an OpenClaw **hook pack** (`hooks/clawvault/handler.js`) with lifecycle events (`gateway:startup`, `gateway:heartbeat`, `command:new`, `session:start`, `compaction:memoryFlush`, `cron.weekly`). Hook is opt-in and must be installed/enabled. - `observe --compress` makes LLM API calls (Gemini Flash by default) to compress session transcripts into observations
**Environment variables used:** - `CLAWVAULT_PATH` ā vault location (optional, auto-discovered if not set) - `OPENCLAW_HOME` / `OPENCLAW_STATE_DIR` ā used by `repair-session` to find session transcripts - `GEMINI_API_KEY` ā used by `observe` for LLM compression (optional, only if using observe features)
**No cloud sync ā all data stays local. No network calls except LLM API for observe compression.**
**This is a full CLI tool, not instruction-only.** It writes files, registers hooks, and runs code.
**Auditability:** the published ClawHub skill bundle includes `SKILL.md`, `HOOK.md`, and `hooks/clawvault/handler.js` so users can inspect hook behavior before enabling it.
## Install (Canonical)
```bash npm install -g clawvault openclaw hooks install clawvault openclaw hooks enable clawvault
# Verify and reload openclaw hooks list --verbose openclaw hooks info clawvault openclaw hooks check # restart gateway process ```
`clawhub install clawvault` can install skill guidance, but does not replace explicit hook pack installation.
### Recommended Safe Install Flow
```bash # 1) Review package metadata before install npm view clawvault version dist.integrity dist.tarball repository.url
# 2) Install CLI + qmd dependency npm install -g clawvault@latest npm install -g github:tobi/qmd
# 3) Install hook pack, but DO NOT enable yet openclaw hooks install clawvault
# 4) Review hook source locally before enabling node -e "const fs=require('fs');const p='hooks/clawvault/handler.js';console.log(fs.existsSync(p)?p:'hook file not found in current directory')" openclaw hooks info clawvault
# 5) Enable only after review openclaw hooks enable clawvault openclaw hooks check ```
## Setup
```bash # Initialize vault (creates folder structure + templates) clawvault init ~/my-vault
# Or set env var to use existing vault export CLAWVAULT_PATH=/path/to/memory
# Optional: shell integration (aliases + CLAWVAULT_PATH) clawvault shell-init >> ~/.bashrc ```
## Quick Start for New Agents
```bash # Start your session (recover + recap + summary) clawvault wake
# Capture and checkpoint during work clawvault capture "TODO: Review PR tomorrow" clawvault checkpoint --working-on "PR review" --focus "type guards"
# End your session with a handoff clawvault sleep "PR review + type guards" --next "respond to CI" --blocked "waiting for CI"
# Health check when something feels off clawvault doctor ```
## Reality Checks Before Use
```bash # Verify runtime compatibility with current OpenClaw setup clawvault compat
# Verify qmd is available qmd --version
# Verify OpenClaw CLI is installed in this shell openclaw --version ```
ClawVault currently depends on `qmd` for core vault/query flows.
## Current Feature Set
### Memory Graph
ClawVault builds a typed knowledge graph from wiki-links, tags, and frontmatter:
```bash # View graph summary clawvault graph
# Refresh graph index clawvault graph --refresh ```
Graph is stored at `.clawvault/graph-index.json` ā schema versioned, incremental rebuild.
### Graph-Aware Context Retrieval
```bash # Default context (semantic + graph neighbors) clawvault context "database decision"
# With a profile preset clawvault context --profile planning "Q1 roadmap" clawvault context --profile incident "production outage" clawvault context --profile handoff "session end"
# Auto profile (used by OpenClaw hook) clawvault context --profile auto "current task" ```
### Context Profiles
| Profile | Purpose | |---------|---------| | `default` | Balanced retrieval | | `planning` | Broader strategic context | | `incident` | Recent events, blockers, urgent items | | `handoff` | Session transition context | | `auto` | Hook-selected profile based on session intent |
### OpenClaw Compatibility Diagnostics
```bash # Check hook wiring, event routing, handler safety clawvault compat
# Strict mode for CI clawvault compat --strict ```
## Core Commands
### Wake + Sleep (primary)
```bash clawvault wake clawvault sleep "what I was working on" --next "ship v1" --blocked "waiting for API key" ```
### Store memories by type
```bash # Types: fact, feeling, decision, lesson, commitment, preference, relationship, project clawvault remember decision "Use Postgres over SQLite" --content "Need concurrent writes for multi-agent setup" clawvault remember lesson "Context death is survivable" --content "Checkpoint before heavy work" clawvault remember relationship "Justin Dukes" --content "Client contact at Hale Pet Door" ```
### Quick capture to inbox
```bash clawvault capture "TODO: Review PR tomorrow" ```
### Search (requires qmd installed)
```bash # Keyword search (fast) clawvault search "client contacts"
# Semantic search (slower, more accurate) clawvault vsearch "what did we decide about the database" ```
## Context Death Resilience
### Wake (start of session)
```bash clawvault wake ```
### Sleep (end of session)
```bash clawvault sleep "what I was working on" --next "finish docs" --blocked "waiting for review" ```
### Checkpoint (save state frequently)
```bash clawvault checkpoint --working-on "PR review" --focus "type guards" --blocked "waiting for CI" ```
### Recover (manual check)
```bash clawvault recover --clear # Shows: death time, last checkpoint, recent handoff ```
### Handoff (manual session end)
```bash clawvault handoff \ --working-on "ClawVault improvements" \ --blocked "npm token" \ --next "publish to npm, create skill" \ --feeling "productive" ```
### Recap (bootstrap new session)
```bash clawvault recap # Shows: recent handoffs, active projects, pending commitments, lessons ```
## Auto-linking
Wiki-link entity mentions in markdown files:
```bash # Link all files clawvault link --all
# Link single file clawvault link memory/2024-01-15.md ```
## Folder Structure
``` vault/ āāā .clawvault/ # Internal state ā āāā last-checkpoint.json ā āāā dirty-death.flag āāā decisions/ # Key choices with reasoning āāā lessons/ # Insights and patterns āāā people/ # One file per person āāā projects/ # Active work tracking āāā handoffs/ # Session continuity āāā inbox/ # Quick captures āāā templates/ # Document templates ```
## Best Practices
1. **Wake at session start** ā `clawvault wake` restores context 2. **Checkpoint every 10-15 min** during heavy work 3. **Sleep before session end** ā `clawvault sleep` captures next steps 4. **Use types** ā knowing WHAT you're storing helps WHERE to put it 5. **Wiki-link liberally** ā `[[person-name]]` builds your knowledge graph
## Checklist for AGENTS.md
```markdown ## Memory Checklist - [ ] Run `clawvault wake` at session start - [ ] Checkpoint during heavy work - [ ] Capture key decisions/lessons with `clawvault remember` - [ ] Use wiki-links like `[[person-name]]` - [ ] End with `clawvault sleep "..." --next "..." --blocked "..."` - [ ] Run `clawvault doctor` when something feels off ```
Append this checklist to existing memory instructions. Do not replace your full AGENTS.md behavior unless you intend to.
## Session Transcript Repair (v1.5.0+)
When the Anthropic API rejects with "unexpected tool_use_id found in tool_result blocks", use:
```bash # See what's wrong (dry-run) clawvault repair-session --dry-run
# Fix it clawvault repair-session
# Repair a specific session clawvault repair-session --session <id> --agent <agent-id>
# List available sessions clawvault repair-session --list ```
**What it fixes:** - Orphaned `tool_result` blocks referencing non-existent `tool_use` IDs - Aborted tool calls with partial JSON - Broken parent chain references
Backups are created automatically (use `--no-backup` to skip).
## Troubleshooting
- **qmd not installed** ā install qmd, then confirm with `qmd --version` - **No ClawVault found** ā run `clawvault init` or set `CLAWVAULT_PATH` - **CLAWVAULT_PATH missing** ā run `clawvault shell-init` and add to shell rc - **Too many orphan links** ā run `clawvault link --orphans` - **Inbox backlog warning** ā process or archive inbox items - **"unexpected tool_use_id" error** ā run `clawvault repair-session` - **OpenClaw integration drift** ā run `clawvault compat` - **Hook enable fails / hook not found** ā run `openclaw hooks install clawvault`, then `openclaw hooks enable clawvault`, restart gateway, and verify via `openclaw hooks list --verbose` - **Graph out of date** ā run `clawvault graph --refresh` - **Wrong context for task** ā try `clawvault context --profile incident` or `--profile planning`
## Stability Snapshot
- Typecheck passes (`npm run typecheck`) - Test suite passes (`449/449`) - Cross-platform path handling hardened for Windows in: - qmd URI/document path normalization - WebDAV path safety and filesystem resolution - shell-init output expectations - OpenClaw runtime wiring validated by `clawvault compat --strict` (requires local `openclaw` binary for full runtime validation)
## Integration with qmd
ClawVault uses [qmd](https://github.com/tobi/qmd) for search:
```bash # Install qmd bun install -g github:tobi/qmd
# Alternative npm install -g github:tobi/qmd
# Add vault as collection qmd collection add /path/to/vault --name my-memory --mask "**/*.md"
# Update index qmd update && qmd embed ```
## Environment Variables
- `CLAWVAULT_PATH` ā Default vault path (skips auto-discovery) - `OPENCLAW_HOME` ā OpenClaw home directory (used by repair-session) - `OPENCLAW_STATE_DIR` ā OpenClaw state directory (used by repair-session) - `GEMINI_API_KEY` ā Used by `observe` for LLM-powered compression (optional)
## Links
- npm: https://www.npmjs.com/package/clawvault - GitHub: https://github.com/Versatly/clawvault - Issues: https://github.com/Versatly/clawvault/issues