knownout's Claude Code plugins
npx claudepluginhub knownout/claude-project-memoryPersistent, searchable project-level memory for Claude. Two-layer store: lite (always-loaded context) and deep (hybrid semantic+keyword search via OpenAI embeddings).
Persistent, searchable memory for Claude Code, scoped per project. Memories are stored as JSON files committed to git — enabling team sharing. A local SQLite database is rebuilt from files on startup for fast hybrid semantic + keyword search.
| Dependency | Version | Notes |
|---|---|---|
| Node.js | 22.5+ | Uses built-in node:sqlite — no native compilation needed |
| Claude Code | latest | Plugin host |
| OpenAI API key | — | For semantic embeddings. Optional — keyword search works without it. Teammates can load existing embeddings from git without a key. |
/plugin marketplace add knownout/claude-project-memory
/plugin install project-memory@knownout
Then enable memory for your project — run this from the project root:
/project-memory:memory-setup sk-proj-your-openai-key
Restart Claude Code. The project-memory MCP tools will be active for that project.
Repeat /project-memory:memory-setup in each project where you want memory enabled.
Clone and install:
git clone https://github.com/knownout/claude-project-memory.git
cd claude-project-memory && npm install
Add to your project's .mcp.json:
{
"mcpServers": {
"project-memory": {
"command": "/path/to/claude-project-memory/node_modules/.bin/tsx",
"args": ["/path/to/claude-project-memory/src/index.ts"],
"env": {
"OPENAI_API_KEY": "sk-..."
}
}
}
}
Restart Claude Code.
/plugin uninstall project-memory@knownout
Remove .mcp.json entries from any projects where you ran /project-memory:memory-setup.
Claude Code's built-in memory stores facts locally — invisible to anyone else on the team.
Project Memory is built around two ideas: team sharing and context efficiency.
Shared team memory. Memory files live in .memory/entries/ inside your project and are committed to git. Every teammate gets the same memories after a git pull — deployment workflows, credentials, architecture decisions, project conventions. No more explaining the same things to Claude in every new session or on every machine.
Lite and deep layers. Not all memories need to be loaded all the time. Deep entries hold full detail — long commands, full workflows, code snippets. Lite entries are one-sentence pointers to deep ones. Only lite pointers are injected at session start, keeping context lean. When Claude needs the full detail, it fetches the specific deep entry by ID. This means you can store a large amount of knowledge without it eating your context window.
Searchable on demand. Deep memories are searched with hybrid semantic + keyword scoring. Claude can find the right memory even without knowing the exact wording or tag.
Transparent. Every entry is a plain JSON file you can read, edit, or delete directly. Embeddings are stored alongside content — teammates without an OpenAI API key can still load and search all existing memories after a git pull.
| Layer | Role | Size |
|---|---|---|
lite | Short pointers to deep memories + critical always-needed facts | 1 sentence per entry |
deep | All actual content — detailed, fully searchable | No limit |
At session start the UserPromptSubmit hook automatically injects two things into Claude's context (once per session):
This keeps context lean regardless of how much is stored. Claude knows what exists and fetches only what's needed via memory_get or memory_search.
## Lite memory (always loaded)
- [→ abc123] Deployment workflow via GitLab CI [deploy, gitlab]
- [→ def456] MinIO upload commands [minio, uploads]
- Active stack: Next.js frontend, FastAPI backend, PostgreSQL
## Deep memory topics — use memory_get(id) or memory_search(topic)
credentials, deploy, gitlab, minio, pipeline, postgresql, uploads
memory_write handles everything in one call — saves full content to deep and auto-creates a 1-sentence lite pointer:
memory_write(
content="Deploy: git push origin main, tag vX.Y.Z, push tag, check GitLab pipeline list_pipelines(project_id=42)",
tags=["deploy", "gitlab"],
summary="Deployment workflow via GitLab CI"
)
memory_search uses hybrid scoring: 70% cosine similarity (OpenAI embeddings) + 30% BM25 keyword match, both normalized to [0,1].