npx claudepluginhub blas0/UnseveredMemoryPersistent memory system for Claude Code with enforced context
Share bugs, ideas, or general feedback.
A markdown-based memory system for Claude Code with enforced persistence.
Most memory systems inject context at session start and hope Claude remembers. This doesn't work because:
Unsevered Memory solves this with enforcement:
| Hook | When | Purpose |
|---|---|---|
SessionStart | Session begins | Load full context |
UserPromptSubmit | Every prompt | Inject state reminder |
SessionEnd | Session ends | Archive + remind |
The UserPromptSubmit hook survives context compaction by being injected fresh on every message.
Enforcement Layer
├── SessionStart ──────> Load context.md + scratchpad
├── UserPromptSubmit ──> [Memory] Task: X | Scratchpad: Y lines
└── SessionEnd ────────> Archive scratchpad, remind to update
File Structure
├── .claude/memory/ # Dynamic (every session)
│ ├── context.md # Current state, next steps
│ ├── scratchpad.md # Live session operations
│ ├── decisions.md # Architectural choices
│ └── sessions/ # Daily archives
│
└── .ai/ # Static (when patterns emerge)
├── core/ # Tech stack, architecture
├── patterns/ # Reusable solutions (after 3+ uses)
└── workflows/ # Dev processes
Choose your preferred method:
# Add marketplace
/plugin marketplace add blas0/UnseveredMemory
# Install plugin
/plugin install unsevered-memory@blas0
Then per-project:
cd /path/to/your/project
/unsevered-memory project
# Global setup
npx unsevered-memory init
# Per-project setup
cd /path/to/your/project
npx unsevered-memory project
git clone https://github.com/blas0/UnseveredMemory.git
cd UnseveredMemory
./setup-global.sh
Then per-project:
cd /path/to/your/project
~/.claude/setup-project.sh
Global (~/.claude/):
CLAUDE.md - Global memory protocolsettings.json - Hook configuration (3 hooks)hooks/ - memory-load, memory-remind, memory-saveskills/orchestrate/ - Workflow instructionscommands/orchestrate.md - Orchestrator commandPer-Project:
project/
├── CLAUDE.md # Project instructions
├── .ai/ # Static documentation
│ ├── core/
│ │ ├── technology-stack.md
│ │ └── architecture.md
│ ├── patterns/
│ └── workflows/
└── .claude/
└── memory/
├── context.md # Cross-session state
├── scratchpad.md # Live session log
├── decisions.md # Decision log
└── sessions/ # Daily archives
context.md and scratchpad.md.ai/ documentationEvery prompt shows:
[Memory] Task: Fix auth bug | Scratchpad: 24 lines | .ai/ updated: 2024-01-15
Claude writes to scratchpad.md as it works:
## Session: 2024-01-15 14:30
### Operations
- [14:35] Found issue in validateToken() at src/auth.ts:142
- [14:40] Fixed: was comparing wrong field
### Decisions
- Keep backward compatibility by checking both fields
Claude updates .ai/ when patterns emerge (3+ uses).
sessions/YYYY-MM-DD.mdcontext.mdFor complex multi-step tasks:
/orchestrate Implement user authentication with JWT
The orchestrator:
| File | Content | Update Frequency |
|---|---|---|
context.md | Current state, next steps | End of session |
scratchpad.md | Operations, findings | During session |
decisions.md | Architectural choices | When decisions made |
.ai/core/ | Tech stack, architecture | When they change |
.ai/patterns/ | Reusable solutions | After 3+ uses |