install
source · Clone the upstream repo
git clone https://github.com/Aradotso/trending-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/Aradotso/trending-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/claude-memory-compiler" ~/.claude/skills/aradotso-trending-skills-claude-memory-compiler && rm -rf "$T"
manifest:
skills/claude-memory-compiler/SKILL.mdsource content
--- name: claude-memory-compiler description: Give Claude Code an evolving memory that captures sessions, extracts decisions and lessons via the Claude Agent SDK, and compiles everything into structured cross-referenced knowledge articles. triggers: - set up claude memory compiler - give claude code persistent memory - capture my coding sessions automatically - compile my claude conversations into a knowledge base - set up session hooks for claude code - install llm knowledge base for my project - make claude remember decisions across sessions - auto-capture claude code session transcripts --- # Claude Memory Compiler > Skill by [ara.so](https://ara.so) — Daily 2026 Skills collection. Claude Memory Compiler gives Claude Code a persistent, evolving memory. Claude Code hooks automatically capture conversation transcripts at session end or pre-compaction. A background process using the Claude Agent SDK extracts decisions, lessons, and patterns, appending them to daily logs. A compiler then organizes those logs into structured, cross-referenced knowledge articles — no vector database or RAG required at personal scale. Inspired by [Karpathy's LLM Knowledge Base](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f) architecture. --- ## Installation ### Option 1 — Tell your AI agent
Clone https://github.com/coleam00/claude-memory-compiler into this project. Set up the Claude Code hooks so my conversations automatically get captured into daily logs, compiled into a knowledge base, and injected back into future sessions. Read the AGENTS.md for the full technical reference.
### Option 2 — Manual setup ```bash # Clone into your project root git clone https://github.com/coleam00/claude-memory-compiler .claude-memory cd .claude-memory # Install dependencies (requires uv) uv sync # Copy hooks config into your project's Claude settings cp .claude/settings.json ../.claude/settings.json # Or merge the hooks block into an existing .claude/settings.json
Dependency requirements
- Python 3.10+
package manageruv- Claude Code (with Max, Team, or Enterprise subscription — no separate API credits needed)
How It Works
Conversation -> SessionEnd / PreCompact hooks -> flush.py (Claude Agent SDK extracts knowledge) -> daily/YYYY-MM-DD.md -> compile.py (after 6 PM or manually) -> knowledge/concepts/, connections/, qa/ -> SessionStart hook injects index.md into next session -> cycle repeats
Hook events used
| Hook | Purpose |
|---|---|
| Primary capture — fires when a session closes |
| Safety net — fires before mid-session compaction |
| Injects the knowledge index into each new session |
Key Commands
# Compile new daily logs into knowledge articles uv run python scripts/compile.py # Ask a question against the knowledge base uv run python scripts/query.py "Why did we switch from SQLite to Postgres?" # Ask + save the answer back into the knowledge base uv run python scripts/query.py "What auth strategy are we using?" --file-back # Run all 7 health checks (broken links, orphans, contradictions, staleness) uv run python scripts/lint.py # Run only free structural checks (no LLM calls) uv run python scripts/lint.py --structural-only
Directory Structure
your-project/ ├── .claude/ │ └── settings.json # Hook configuration ├── daily/ │ └── YYYY-MM-DD.md # Raw daily session logs ├── knowledge/ │ ├── index.md # Master index (injected at session start) │ ├── concepts/ # Structured concept articles │ ├── connections/ # Cross-reference articles │ └── qa/ # Q&A articles saved with --file-back └── scripts/ ├── flush.py # Session capture + extraction ├── compile.py # Daily logs -> knowledge articles ├── query.py # Index-guided retrieval └── lint.py # Knowledge base health checks
Configuration — .claude/settings.json
.claude/settings.json{ "hooks": { "SessionEnd": [ { "command": "uv run python scripts/flush.py", "cwd": "${workspaceFolder}" } ], "PreCompact": [ { "command": "uv run python scripts/flush.py --pre-compact", "cwd": "${workspaceFolder}" } ], "SessionStart": [ { "command": "uv run python scripts/inject.py", "cwd": "${workspaceFolder}" } ] } }
If you already have a
.claude/settings.json, merge only the hooks block — don't overwrite existing settings.
Code Examples
Manually flush a transcript
# scripts/flush.py is called automatically by hooks, but you can invoke it directly import subprocess result = subprocess.run( ["uv", "run", "python", "scripts/flush.py"], capture_output=True, text=True ) print(result.stdout)
Programmatic query
# Query the knowledge base from your own scripts import subprocess import sys def query_knowledge_base(question: str, save_back: bool = False) -> str: cmd = ["uv", "run", "python", "scripts/query.py", question] if save_back: cmd.append("--file-back") result = subprocess.run(cmd, capture_output=True, text=True) return result.stdout answer = query_knowledge_base("What database migration strategy are we using?") print(answer)
Trigger compilation manually
import subprocess def compile_knowledge(): """Compile all unprocessed daily logs into knowledge articles.""" result = subprocess.run( ["uv", "run", "python", "scripts/compile.py"], capture_output=True, text=True ) if result.returncode != 0: print("Compile error:", result.stderr) else: print(result.stdout) compile_knowledge()
Run lint checks programmatically
import subprocess def lint_knowledge_base(structural_only: bool = False) -> dict: cmd = ["uv", "run", "python", "scripts/lint.py"] if structural_only: cmd.append("--structural-only") result = subprocess.run(cmd, capture_output=True, text=True) return { "passed": result.returncode == 0, "output": result.stdout, "errors": result.stderr } report = lint_knowledge_base(structural_only=True) print(report["output"])
Daily Log Format (daily/YYYY-MM-DD.md
)
daily/YYYY-MM-DD.mdEach flush appends an entry like:
## Session — 2026-04-10 14:32 ### Decisions - Switched auth from JWT to session cookies to simplify SSR compatibility. ### Lessons Learned - `prisma migrate dev` resets the shadow DB on every run — use `--skip-generate` in CI. ### Patterns Identified - All new API routes follow the `app/api/[resource]/route.ts` convention. ### Gotchas - The `useRouter` hook from `next/navigation` behaves differently in Server Components — always import from the correct package.
Knowledge Article Format (knowledge/concepts/
)
knowledge/concepts/Compiled articles use structured markdown:
# Authentication Strategy **Last Updated:** 2026-04-10 **Related:** [[Session Management]], [[API Security]] ## Summary We use session cookies (not JWTs) for authentication to simplify SSR compatibility with Next.js App Router. ## Key Decisions - Chose session cookies over JWTs on 2026-04-08 after discovering JWT refresh complexity with RSC. ## Lessons - Always import `useRouter` from `next/navigation` in client components, never from `next/router`. ## Open Questions - Should we add refresh token rotation for long-lived sessions?
Automatic Compilation Trigger
flush.py checks local time after each session. If it is after 6 PM, it automatically triggers compile.py to process that day's logs. This means no manual scheduling is needed for end-of-day compilation.
To compile at any time:
uv run python scripts/compile.py
Why No RAG / Vector Database?
At personal scale (50–500 articles), the LLM reads
knowledge/index.md directly and understands context better than cosine similarity over embeddings. RAG becomes necessary only at ~2,000+ articles when the index exceeds the context window.
The index file (
knowledge/index.md) is a plain markdown table of contents injected at session start — giving Claude full awareness of what's been learned without any retrieval infrastructure.
Subscription & Cost Notes
- Runs on Claude Max, Team, or Enterprise subscriptions — no separate API billing required
- Anthropic has confirmed personal use of the Claude Agent SDK is covered under existing subscriptions
runs broken-link and orphan checks without any LLM calls (free)lint.py --structural-only- LLM-powered lint checks (contradiction detection, staleness) consume subscription usage
Common Patterns
Pattern: Bootstrap a new project
# 1. Clone the compiler into your project git clone https://github.com/coleam00/claude-memory-compiler . # 2. Install dependencies uv sync # 3. Merge hooks into .claude/settings.json (see Configuration section) # 4. Open Claude Code — hooks activate automatically on next session
Pattern: Recover after a missed session
If hooks failed to fire, manually flush by running
flush.py with the transcript path (check AGENTS.md for the exact CLI flags your version supports):
uv run python scripts/flush.py --transcript path/to/transcript.json
Pattern: Keep the knowledge base healthy
Run this weekly:
# Free structural check first uv run python scripts/lint.py --structural-only # Full check (uses LLM credits) when issues are suspected uv run python scripts/lint.py
Pattern: Answer a question and persist it
uv run python scripts/query.py "What's our strategy for handling database migrations in CI?" --file-back # Answer is printed AND saved to knowledge/qa/YYYY-MM-DD-slug.md
Troubleshooting
| Problem | Solution |
|---|---|
| Hooks not firing | Confirm exists in your project root with the correct block |
not found | Install uv: |
fails | Ensure Python 3.10+ is active; run if needed |
| Compilation produces empty articles | Check for logs; flush may not have run — open and close a Claude Code session |
returns vague answers | Run first to ensure daily logs are compiled into the index |
| Lint reports broken links | Article was renamed or deleted; update cross-references in the affected files |
| Session injection not working | Verify the hook is present in settings and exists |
Full Technical Reference
See AGENTS.md in the repository for:
- Complete article schema definitions
- Hook architecture internals
- Script CLI flags and extension points
- Cross-platform (Windows/macOS/Linux) hook path details
- Customization options for extraction prompts
- Cost breakdown per operation