| Crates.io | working-memory |
| lib.rs | working-memory |
| version | 0.3.8 |
| created_at | 2026-01-02 00:40:45.487638+00 |
| updated_at | 2026-01-20 22:00:33.355679+00 |
| description | Working memory for AI coding assistants |
| homepage | |
| repository | https://github.com/cloud-atlas-ai/wm |
| max_upload_size | |
| id | 2017775 |
| size | 283,930 |
wm automatically captures tacit knowledge from your coding sessions and surfaces relevant context for each new task. It's the memory layer that helps AI assistants learn how you work.
Supported platforms:
LLMs have amnesia. Every conversation starts fresh. The patterns you've established, the constraints you've discovered, the preferences you've revealed—all forgotten.
You end up repeating yourself:
wm runs silently in the background:
The result: AI assistants that remember your patterns across sessions.
Tacit knowledge is the unspoken wisdom in how someone works:
Not captured:
brew tap cloud-atlas-ai/wm
brew install wm
cargo install wm
git clone https://github.com/cloud-atlas-ai/wm.git
cd wm
cargo install --path .
claude plugin install wm
cd /your/project
wm init
This creates a .wm/ directory to store accumulated knowledge.
Codex support uses agent skills that can be invoked at decision points. Most features work, but session auto-discovery is limited due to Codex's different session storage format.
What works:
# 1. Install the binary (choose one)
brew install cloud-atlas-ai/wm/wm # macOS
cargo install wm # All platforms
# 2. Install the skills
mkdir -p ~/.codex/skills
ln -s /path/to/wm/plugin ~/.codex/skills/wm
# Or download agents individually:
mkdir -p ~/.codex/skills/wm/agents
BASE_URL="https://raw.githubusercontent.com/cloud-atlas-ai/wm/main/plugin/agents"
curl -L -o ~/.codex/skills/wm/agents/dive-prep.md $BASE_URL/dive-prep.md
curl -L -o ~/.codex/skills/wm/agents/review.md $BASE_URL/review.md
curl -L -o ~/.codex/skills/wm/agents/distill.md $BASE_URL/distill.md
curl -L -o ~/.codex/skills/wm/agents/compress.md $BASE_URL/compress.md
curl -L -o ~/.codex/skills/wm/agents/pause.md $BASE_URL/pause.md
Available Agent Skills:
| Skill | Support | When to Use |
|---|---|---|
$wm:dive-prep |
✅ Full | Prepare focused work session with intent, context, and workflow |
$wm:review |
✅ Full | Review accumulated knowledge and current context |
$wm:compress |
✅ Full | Synthesize state.md to higher-level abstractions |
$wm:pause |
✅ Full | Pause/resume operations (extract, compile, or both) |
$wm:distill |
⚠️ Manual | Batch extract (requires manual transcript paths) |
Typical Workflows:
# Session start - prepare dive context
$wm:dive-prep --intent fix
# Mid-session - review what wm knows
$wm:review
# Maintenance - compress accumulated knowledge
$wm:compress
# Sensitive work - pause extraction
$wm:pause extract
# Manual extraction from Codex session (since auto-discovery isn't supported yet)
# Find your sessions:
ls ~/.codex/sessions/2026/01/*/rollout-*.jsonl
# Extract from specific transcript:
wm extract --transcript ~/.codex/sessions/2026/01/06/rollout-<timestamp>-<uuid>.jsonl
Why limited session discovery?
Codex stores sessions in ~/.codex/sessions/YYYY/MM/DD/ with different naming and structure than Claude Code's ~/.claude/projects/<project-id>/. Auto-discovery support for Codex sessions is tracked in #11.
Manual Commands:
All CLI commands work normally: wm init, wm show state, wm show working, etc.
See plugin/agents/ for detailed documentation on each skill.
Once installed, wm works automatically:
# View accumulated knowledge
wm show state
# View what context would be injected
wm show working
# List all sessions
wm show sessions
# View session-specific working set
wm show working --session-id <id>
# Manually trigger extraction
wm extract
# Manually compile for a specific intent
wm compile --intent "implement authentication"
# Compress state.md (synthesize to higher abstractions)
wm compress
Over time, state.md accumulates knowledge and can grow unwieldy. The compress command distills it down by:
wm compress
# Compressed: 42 → 18 lines (57% reduction)
# Backup saved to .wm/state.md.backup
Run periodically when state feels bloated, not after every session.
A dive is a focused work session with explicit grounding. The metaphor comes from scuba diving: you prep before you dive, you don't just splash in. You check your gear, review your plan, know your limits. The 30 seconds of setup prevents 30 minutes of drift.
No dive is too small for a dive prep. Even a quick bug fix benefits from explicit intent. The act of stating what you're doing grounds you.
| Term | What It Is |
|---|---|
| dive | A focused work session with explicit grounding |
| dive-prep | The action of preparing a dive (/dive-prep, wm dive-prep) |
| dive pack | A reusable context bundle stored in Open Horizons |
| dive context | The manifest file for the current session (.wm/dive_context.md) |
Without a dive, AI sessions often drift:
With a dive, you start grounded:
This isn't overhead—it's the 30 seconds of setup that saves 30 minutes of drift.
/dive-prep SkillInvoke /dive-prep in Claude Code to prepare a focused work session:
/dive-prep # Interactive - prompts for intent
/dive-prep --intent fix # Fix a bug
/dive-prep --intent plan # Design an approach
/dive-prep --intent explore # Understand something
/dive-prep --intent review # Reflect on recent work
/dive-prep --intent ship # Get something deployed
What it does:
.wm/ knowledge.wm/dive_context.md with curated groundingWith Open Horizons (recommended):
/dive-prep --intent fix --oh bd9d6ace
OH provides the strategic layer: why you're doing this (mission), what not to do (guardrails), and what you've learned (metis).
Without OH:
/dive-prep --intent explore
# Prompts: "What are you exploring?"
Still valuable—you get explicit intent, workflow guidance, and documented focus.
wm dive CommandsManage dive context directly:
wm dive load <pack-id> # Load a pre-built dive pack from OH
wm dive show # Display current dive context
wm dive clear # Remove dive context
Dive packs are curated context bundles stored in Open Horizons. They're useful for recurring work patterns—load a pack instead of rebuilding context each time.
Configuration:
# Set OH API key (required for wm dive load)
export OH_API_KEY=your-key
# Or configure in ~/.config/openhorizons/config.json:
{
"api_key": "your-key",
"api_url": "https://app.openhorizons.me"
}
The distill command extracts knowledge from all your Claude Code sessions at once, instead of per-turn extraction:
wm distill # Process all sessions
wm distill --dry-run # Preview what would be processed
wm distill --force # Re-extract even cached sessions
How it works:
.wm/distill/raw_extractions.mdWhen to use:
Output:
.wm/distill/
├── raw_extractions.md # Accumulated knowledge from all sessions
├── cache.json # Extraction cache (enables incremental runs)
└── errors.log # Any extraction failures
Temporarily disable wm operations without uninstalling:
wm pause # Pause both extract and compile
wm pause extract # Pause only extraction
wm pause compile # Pause only context injection
wm resume # Resume both operations
wm resume extract # Resume only extraction
wm resume compile # Resume only context injection
wm status # Show current state
When to use:
# Watch hooks fire in real-time
tail -f .wm/hook.log
# Check what's being captured
cat .wm/state.md
┌─────────────────────────────────────────────────────────────┐
│ Claude Code Session │
├─────────────────────────────────────────────────────────────┤
│ │
│ [User Prompt] │
│ │ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ wm compile │◄── Reads state.md │
│ │ (hook) │ Filters for relevance │
│ └────────┬────────┘ Injects as context │
│ │ │
│ ▼ │
│ [Claude Processes with Context] │
│ │ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ sg evaluate │◄── Superego evaluates turn │
│ │ (stop hook) │ Calls wm extract in background │
│ └────────┬────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ wm extract │◄── Reads transcript │
│ │ (background) │ Extracts tacit knowledge │
│ └─────────────────┘ Updates state.md │
│ │
└─────────────────────────────────────────────────────────────┘
.wm/
├── state.md # Accumulated tacit knowledge (the "memory")
├── working_set.md # Last compiled context
├── hook.log # Debug log
└── sessions/
└── <session-id>/ # Per-session state (prevents cross-session bleed)
wm is designed to work with superego, a metacognitive advisor for AI assistants. When both are installed:
They compose via shell calls with no shared state (Unix philosophy).
| Variable | Purpose |
|---|---|
WM_DISABLED=1 |
Skip all wm operations |
CLAUDE_PROJECT_DIR |
Project root (auto-set by Claude Code) |
which wm.wm/ exists in projectclaude plugin uninstall wm
claude plugin install ./plugin
# Restart Claude Code
.wm/hook.log for extraction activityReleases are automated via GitHub Actions. To release a new version:
git tag v0.3.5 && git push origin v0.3.5This automatically publishes to:
cargo install working-memory)wm-opencode)Source-available. See LICENSE.md for details.
wm is part of the Cloud Atlas AI ecosystem: