mirror of
https://github.com/basicmachines-co/basic-memory
synced 2026-06-21 13:47:35 +00:00
5365f971ef
Signed-off-by: phernandez <paul@basicmachines.co>
315 lines
10 KiB
Markdown
315 lines
10 KiB
Markdown
# Basic Memory Plugin for Claude Code
|
|
|
|
This plugin provides skills and hooks for working with [Basic Memory](https://basicmemory.com) — a local-first knowledge management system built on the Model Context Protocol (MCP).
|
|
|
|
It uses [Claude Code's plugin format](https://docs.claude.com/en/docs/claude-code/plugins) (skills and hooks bundled into an installable marketplace) and **only works with Claude Code**.
|
|
|
|
This package lives in the canonical [`basic-memory`](https://github.com/basicmachines-co/basic-memory) repository under `plugins/claude-code/`.
|
|
|
|
> **Looking for framework-agnostic skills?** See the top-level [`skills/`](../../skills) directory — `SKILL.md` files that work in Claude Code, Claude Desktop, and other MCP-compatible agents. The hooks in this plugin are Claude Code-specific and aren't available there.
|
|
|
|
## Prerequisites
|
|
|
|
You need the Basic Memory MCP server running. Install it via:
|
|
|
|
```bash
|
|
# Install basic-memory
|
|
pip install basic-memory
|
|
|
|
# Or with pipx
|
|
pipx install basic-memory
|
|
```
|
|
|
|
Then add it to your Claude Code MCP configuration.
|
|
|
|
## Installation
|
|
|
|
### Add the Marketplace
|
|
|
|
```
|
|
claude plugin marketplace add basicmachines-co/basic-memory --sparse .claude-plugin plugins/claude-code
|
|
```
|
|
|
|
### Install the Plugin
|
|
|
|
```
|
|
claude plugin install basic-memory@basicmachines-co
|
|
```
|
|
|
|
### Or via Repository Settings
|
|
|
|
Add to your `.claude/settings.json`:
|
|
|
|
```json
|
|
{
|
|
"plugins": {
|
|
"extraKnownMarketplaces": {
|
|
"basicmachines-co": {
|
|
"source": {
|
|
"source": "github",
|
|
"repo": "basicmachines-co/basic-memory",
|
|
"sparse": [".claude-plugin", "plugins/claude-code"]
|
|
}
|
|
}
|
|
},
|
|
"installed": ["basic-memory@basicmachines-co"]
|
|
}
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Configuration
|
|
|
|
The plugin reads project conventions from a unified config file. Without one, it falls back to sensible built-in defaults. You can adopt the config gradually as you discover what you want to standardize.
|
|
|
|
### Where it lives
|
|
|
|
| Scope | Location | Format |
|
|
|-------|----------|--------|
|
|
| Project | A note titled `basic-memory` at the project root | Basic Memory note (read via MCP) |
|
|
| Global | `~/.basic-memory/basic-memory.md` | Filesystem markdown file |
|
|
|
|
### Schema
|
|
|
|
The config file uses H2 sections for categories and H3 sub-sections for project-specific overrides. Bare content under an H2 is the default; H3 sub-sections override it for a specific project.
|
|
|
|
```markdown
|
|
# Basic Memory config
|
|
|
|
## Projects
|
|
- work: default project for daily work
|
|
- personal: personal notes and reflections
|
|
- research: long-form research notes
|
|
|
|
## Placements
|
|
- Place into existing folders by topic match
|
|
- Never create new top-level folders without asking
|
|
- Match the project's existing naming convention
|
|
|
|
### research
|
|
- Long-form notes go in `papers/`
|
|
- Quick references go in `refs/`
|
|
|
|
## Formats
|
|
- Required frontmatter: title, type, date
|
|
- Observation categories: fact, decision, technique, problem, solution
|
|
|
|
## Schemas
|
|
### work
|
|
person:
|
|
- name
|
|
- email
|
|
- role
|
|
```
|
|
|
|
### Reserved sections
|
|
|
|
| Section | Scope | Purpose |
|
|
|---------|-------|---------|
|
|
| `## Projects` | Global only | Routing rules — when to use which project |
|
|
| `## Placements` | Project or global | Folder conventions for new notes |
|
|
| `## Formats` | Project or global | Frontmatter and observation conventions |
|
|
| `## Schemas` | Project or global | Note type definitions |
|
|
|
|
Other H2 sections are treated as user notes and ignored.
|
|
|
|
### Precedence
|
|
|
|
For each section the plugin needs:
|
|
|
|
1. Project's `basic-memory` note → if the section exists, use it
|
|
2. Global `~/.basic-memory/basic-memory.md` → look for `### <project>` first, then bare content under the H2
|
|
3. Built-in defaults
|
|
|
|
Section-level fallback means a project file can override one section while inheriting others from global.
|
|
|
|
### Bootstrap
|
|
|
|
For an existing project with established conventions, ask Claude to generate a starter `basic-memory.md` based on what's already in the project:
|
|
|
|
> "Look at my `<project-name>` project structure and generate a starter `basic-memory` note for it. Inspect the folder layout and existing notes to infer placement and format conventions."
|
|
|
|
Claude will:
|
|
1. Inspect the project tree (`list_directory`) and sample notes from each folder
|
|
2. Infer naming conventions, depth patterns, and organizational structure
|
|
3. Draft a `basic-memory` note with `## Placements` populated and other sections as commented placeholders
|
|
4. Show you the draft for review before writing
|
|
|
|
This is a one-time conversational pattern — no slash command required.
|
|
|
|
---
|
|
|
|
## Skills
|
|
|
|
Model-invoked capabilities that Claude uses automatically based on context.
|
|
|
|
### placement
|
|
|
|
Decides which folder a new note belongs in. Runs automatically before every Basic Memory `write_note` call via a `PreToolUse` hook with matcher `mcp__.*__write_note` (catches local, cloud, and claude.ai connector variants).
|
|
|
|
**Triggers when:**
|
|
- About to call any MCP basic-memory `write_note` tool
|
|
- Manually invoked when planning a write
|
|
|
|
**How it works:**
|
|
1. Reads project and global config (`basic-memory.md`) — extracts `## Placements` rules
|
|
2. Short-circuits at the first definitive answer:
|
|
- Config rule applies → use it
|
|
- Tree match obvious → use it
|
|
- Search for related notes → use as a placement signal
|
|
3. Asks the user if placement remains ambiguous
|
|
|
|
**Best for:** Keeping notes organized according to project conventions without per-write instruction.
|
|
|
|
### knowledge-capture
|
|
|
|
Automatically captures insights, decisions, and learnings into structured notes.
|
|
|
|
**Triggers when:**
|
|
- Important decisions are made
|
|
- Technical insights are discovered
|
|
- Problems are solved
|
|
- Design trade-offs are discussed
|
|
|
|
### continue-conversation
|
|
|
|
Resumes previous work by building context from the knowledge graph.
|
|
|
|
**Triggers when:**
|
|
- Starting a new session
|
|
- User mentions previous work ("continue with...", "back to...")
|
|
- Need context about ongoing projects
|
|
|
|
### edit-note
|
|
|
|
Interactively edit notes using MCP tools in a conversational workflow.
|
|
|
|
**Triggers when:**
|
|
- User wants to edit, update, or modify a note
|
|
- User asks to change specific content in a note
|
|
- User wants to add observations or relations
|
|
|
|
**How it works:**
|
|
1. Fetches the note via MCP
|
|
2. Shows current content
|
|
3. Applies edits using `edit_note` operations (append, prepend, find_replace, replace_section)
|
|
4. Shows the updated result
|
|
|
|
### knowledge-organize
|
|
|
|
Help organize, link, and maintain the knowledge graph.
|
|
|
|
**Triggers when:**
|
|
- User wants to organize their notes
|
|
- User asks about orphan or unlinked notes
|
|
- User wants to find connections between notes
|
|
- User mentions duplicates or similar notes
|
|
- User asks for help with folder organization
|
|
|
|
**Capabilities:**
|
|
- **Find orphan notes** - Identify notes with no relations
|
|
- **Suggest relations** - Propose meaningful links between notes
|
|
- **Identify duplicates** - Find notes covering similar topics
|
|
- **Folder organization** - Review and suggest folder structure
|
|
- **Tag consistency** - Normalize and improve tagging
|
|
- **Create index notes** - Generate hub notes linking related topics
|
|
- **Enrich sparse notes** - Suggest observations and structure
|
|
|
|
**Best for:** Periodic knowledge base maintenance and improving discoverability.
|
|
|
|
### research
|
|
|
|
Research topics thoroughly and produce structured reports saved to Basic Memory.
|
|
|
|
**Triggers when:**
|
|
- User asks to research or investigate something
|
|
- User wants to understand a concept or technology
|
|
- User needs context before making a decision
|
|
- Phrases like "research", "look into", "explore", "investigate"
|
|
|
|
**What it produces:**
|
|
- Structured report with summary, findings, and analysis
|
|
- Recommendations when applicable
|
|
- Links to sources and related notes
|
|
- Saved to `research/` folder (or wherever `placement` directs)
|
|
|
|
**Best for:** Building knowledge base through investigation and documentation.
|
|
|
|
---
|
|
|
|
## Hooks
|
|
|
|
Automated behaviors that enhance the Basic Memory workflow.
|
|
|
|
### PreToolUse: write_note
|
|
|
|
Advisory reminder before saving a note. Injects context that prompts the model to run the `placement` skill (if it hasn't already for this write). The hook returns `permissionDecision: allow` unconditionally — it never blocks the write — so the placement decision is made by the skill + model rather than by hook approval. Matcher is `mcp__.*__write_note`, so it catches any MCP basic-memory variant (local install, cloud, claude.ai connector).
|
|
|
|
### PostToolUse: write_note
|
|
|
|
Confirms when notes are saved to Basic Memory. Same `mcp__.*__write_note` matcher.
|
|
|
|
---
|
|
|
|
## Development and Validation
|
|
|
|
Use the monorepo root target when changing this plugin:
|
|
|
|
```bash
|
|
just package-check-claude-code
|
|
```
|
|
|
|
Or from `plugins/claude-code/`:
|
|
|
|
```bash
|
|
just check
|
|
```
|
|
|
|
The local justfile runs a portable manifest/agent/skill layout check and `claude plugin validate . --strict`. CI uses `just ci-check`, which performs the portable layout validation without requiring the Claude Code CLI on the runner.
|
|
|
|
---
|
|
|
|
## MCP Tools Used
|
|
|
|
This plugin leverages Basic Memory's MCP tools:
|
|
|
|
| Tool | Purpose |
|
|
|------|---------|
|
|
| `write_note` | Create/update markdown notes |
|
|
| `read_note` | Read notes by title or permalink |
|
|
| `search_notes` | Full-text search across content |
|
|
| `list_directory` | Inspect project folder structure |
|
|
| `build_context` | Navigate knowledge graph via memory:// URLs |
|
|
| `recent_activity` | Get recently updated information |
|
|
| `edit_note` | Incrementally update notes |
|
|
|
|
---
|
|
|
|
## Plugin Structure
|
|
|
|
```
|
|
basic-memory/
|
|
├── .claude-plugin/
|
|
│ └── marketplace.json # Root marketplace manifest
|
|
└── plugins/
|
|
└── claude-code/
|
|
├── .claude-plugin/
|
|
│ ├── marketplace.json # Plugin-local marketplace manifest
|
|
│ └── plugin.json # Plugin manifest
|
|
├── skills/
|
|
├── hooks/
|
|
├── agents/
|
|
├── README.md # Quick start guide
|
|
└── PLUGIN.md # Full documentation
|
|
```
|
|
|
|
---
|
|
|
|
## Related
|
|
|
|
- [Basic Memory Documentation](https://docs.basicmemory.com)
|
|
- [Basic Memory GitHub](https://github.com/basicmachines-co/basic-memory)
|
|
- [Model Context Protocol](https://modelcontextprotocol.io)
|
|
- [Claude Code Plugins](https://code.claude.com/docs/en/plugins)
|