A Claude Code plugin that turns Basic Memory into an actively maintained knowledge graph. Research packages from six ecosystems and tools from six dev-environment categories using parallel enrichment, find documentation gaps in your projects, surface project-relevant knowledge before coding, and let autonomous agents audit and improve your notes — all without leaving your terminal.
Note titles and wiki-links now use hyphen delimiters (npm-fastify,
[[npm-fastify]]) instead of colons (npm:fastify, [[npm:fastify]]).
User command syntax is unchanged (/package-intel npm:fastify). Existing
vault notes need a one-time migration — see
TODO-obsidian-migration.md.
Queries seven sources in parallel, synthesizes a structured note, and cross-links existing notes. Supports six ecosystems:
| Form | Ecosystem | Example |
|---|---|---|
<name> (no prefix) |
npm (default) | fastify |
npm:<name> |
npm | npm:@fastify/postgres |
crate:<name> |
Rust / crates.io | crate:serde |
go:<module/path> |
Go modules | go:github.com/gin-gonic/gin |
composer:<vendor>/<pkg> |
PHP / Packagist | composer:laravel/framework |
pypi:<name> |
Python / PyPI | pypi:requests |
gem:<name> |
Ruby / RubyGems | gem:rails |
/package-intel @fastify/postgres
/package-intel crate:serde
/package-intel pypi:requests
| Source | What it finds |
|---|---|
| Basic Memory | Existing notes, cross-references, usage patterns |
| DeepWiki | Architecture, design patterns, key APIs (2-3 targeted questions) |
| Context7 | API reference, code examples |
| Tavily | Security advisories, recent CVEs (RUSTSEC, PyPA, RubySec, etc.) |
| Raindrop | Your bookmarked articles (with full content extraction) |
| Readwise | Your highlights and saved articles about the package |
| Socket | Supply-chain risk scores (license, maintenance, quality, supply-chain, vulnerability) for npm, pypi, cargo, gem |
Plus changelog analysis via GitHub releases. After writing, searches for existing notes that reference the package and adds bidirectional cross-links. The result is an ecosystem-prefixed note (npm-*, crate-*, pypi-*, etc.) with observations, relations, and release highlights — connected into the graph from day one.
Queries five sources in parallel, synthesizes a structured note, and cross-links existing notes. Supports six tool categories:
| Form | Category | Example |
|---|---|---|
brew:<name> |
Homebrew formula | brew:ripgrep |
cask:<name> |
Homebrew cask | cask:warp |
action:<owner>/<repo> |
GitHub Action | action:actions/checkout |
docker:<image> |
Docker Hub image | docker:node |
vscode:<publisher>.<ext> |
VSCode extension | vscode:esbenp.prettier-vscode |
gh:<owner>/<repo> |
GitHub CLI extension | gh:meiji163/gh-notify |
/tool-intel brew:ripgrep
/tool-intel action:actions/checkout
/tool-intel docker:node
/tool-intel vscode:esbenp.prettier-vscode
/tool-intel gh:meiji163/gh-notify
| Source | What it finds |
|---|---|
| Basic Memory | Existing notes, cross-references |
| DeepWiki | Architecture, design patterns (actions and docker; conditional for gh — only when gh release list returns ≥1 release) |
| Tavily | Security advisories, CVEs, supply-chain risks, gotchas |
| Raindrop | Your bookmarked articles (with full content extraction) |
| Readwise | Your highlights and saved articles about the tool |
| Homebrew MCP (optional) | Install analytics (30/90/365-day counts + build errors) for brew: and cask: — skipped silently when unavailable |
Plus version/changelog data (GitHub releases for actions, Docker Hub tags for images, API versions for brew/vscode). After writing, searches for existing notes that reference the tool and adds bidirectional cross-links. The result is a prefixed note (brew-*, action-*, etc.) with type-specific sections — ## Inputs & Outputs + ## Permissions for actions, ## Tags + ## Base Layers for Docker, ## Common Usage for formulae — plus observations and relations.
Scans your project's manifest files for both code dependencies and dev tooling, checks which have Basic Memory notes, and reports the gaps:
## Knowledge Gap Report — my-project
### npm Coverage: 12/47 packages documented (25%)
#### Tier 1 — Must Document (3+ imports)
| Package | Import Count | Domain |
|---------|--------------|----------------------|
| fastify | 12 | engineering/fastify/ |
| pg | 8 | engineering/ |
#### Tier 2 — Should Document (1-2 imports)
...
---
### crates Coverage: 3/18 packages documented (17%)
#### Tier 1 — Must Document (3+ imports)
| Package | Import Count | Domain |
|---------|--------------|----------|
| serde | 28 | crates/ |
...
---
### Overall Summary
- Total packages across all ecosystems: 65
- Documented: 15 (23%)
- Undocumented Tier 1: 8 packages
Package manifests scanned: package.json, Cargo.toml, go.mod, composer.json, pyproject.toml, Gemfile — tiered by import frequency (3+ imports = Tier 1, must document).
Tool manifests scanned: Brewfile (formulae, casks, vscode entries), .github/workflows/*.yml (actions), Dockerfile/*.dockerfile (docker images), .vscode/extensions.json (vscode extensions) — all manifest entries count equally, no tiering.
Also detects concept-level hub gaps — topics referenced by 3+ notes but with no dedicated note — and reading-signal gaps from Readwise highlights. Offers to run /package-intel (with the right ecosystem prefix) for top undocumented packages and /tool-intel for undocumented tools.
Scans your project's manifest files, cross-references dependencies against Basic Memory, and produces a concise context brief with key gotchas, coverage gaps, and recently updated notes:
## Project Knowledge Brief
### Stack detected
- npm: 45 deps (38 documented, 7 undocumented)
- brew: 12 tools (10 documented, 2 undocumented)
### Key gotchas
- **npm-fastify** — [gotcha] reply.send() after reply.redirect() causes hang
- **npm-pino** — [limitation] redaction doesn't work on nested arrays
### Recent activity
- 3 notes updated in last 7 days: npm-fastify, npm-pino, brew-ripgrep
### Gaps worth filling
- Top undocumented dep: `undici` (used in 12 imports)
- Run `/knowledge-gaps` for full coverage analysis
Uses a three-pass relevance scoring algorithm: dependency match (score 3) → graph expansion via build_context (score 2) → beads/git boost (score 1). Loads only critical observations ([gotcha], [breaking], [limitation]) with an 800-token budget. Supports --deep for expanded output (2000 tokens, top 12 notes, additional categories).
Compares actual note field usage against schema definitions, proposes additions (>25% usage) and removals (0% usage), and dual-syncs both the Basic Memory schema note and the local schemas/ file after approval:
/schema-evolve npm_package
/schema-evolve brew_formula
Includes a watch list for emerging fields (10-24% usage) and validates after every change.
Queries five sources in parallel, synthesizes a structured person note, and cross-links existing notes:
/people-intel Aaron Gustafson
/people-intel Linus Torvalds
| Source | What it finds |
|---|---|
| Basic Memory | Existing mentions, cross-cluster connections (depth-2 traversal) |
| Raindrop | Your bookmarked articles by or about the person |
| Readwise | Your highlights from their writing |
| Tavily | Bio, current role, projects, contributions, controversies |
| DeepWiki | GitHub repo philosophy (developer profiles only) |
Includes a fourth-wall guardrail (no self-referential knowledge-graph content in person notes) and an anti-hagiography step (explicit controversy search). After writing, searches for existing notes that mention the person and adds bidirectional cross-links using the person schema's relation vocabulary (created, founded, maintains, works_with, enables, relates_to).
An autonomous agent that produces a health report without modifying anything:
"Audit my knowledge graph"
Checks for: missing sections, schema violations, orphan notes, broken [[wiki-links]], stale notes (90+ days), duplicates, project-specific data leaking into cross-project notes, tag alignment (non-canonical forms, retired tags, missing ecosystem tags, out-of-vocabulary tags).
Acts on audit findings with tiered autonomy:
"Fix the graph issues"
| Action | Autonomy |
|---|---|
Add missing ## Observations / ## Relations sections |
Auto-fix |
| Normalize observation categories | Auto-fix |
| Normalize tags (canonical forms, remove type-echo/retired) | Auto-fix |
| Add missing ecosystem tags to tool notes | Auto-fix |
| Link orphan notes to related notes | Auto-fix |
| Fix frontmatter type to match schema | Auto-fix |
Run /package-intel for Tier 1 undocumented packages |
Auto-fix |
Run /tool-intel for undocumented tools from manifests |
Auto-fix |
| Merge duplicate notes | Asks first |
Archive abandoned notes (move to archive/) |
Asks first |
| Rewrite note prose | Asks first |
A read-only agent that surfaces project-relevant knowledge before you start working:
"Prime the knowledge graph for this project" / "What does BM know about my deps?"
Same workflow as /knowledge-prime but runs as an autonomous subagent. Pinned to Sonnet for consistent quality regardless of session model. The "before work" counterpart to /session-reflect (which captures knowledge "after work").
A read-only skill that answers freeform questions by searching Basic Memory, loading relevant notes, traversing 1-hop graph neighbors, and synthesizing a cited answer:
"What do I know about fastify error handling?" / "What does BM say about IndieWeb?"
Each answer includes a confidence tier (Direct, Partial, or No Coverage) so you know how much the graph actually covers. When coverage is incomplete, suggests /package-intel, /tool-intel, or /knowledge-gaps to fill the gap. Unlike /knowledge-prime (which shows project-wide dependency coverage), /knowledge-ask answers specific questions about individual topics.
Five modes surface serendipitous connections from across Basic Memory, Raindrop, and Readwise:
"Wander" / "Surprise me" / "Time machine" / "What am I obsessing about?"
| Mode | What it does |
|---|---|
| Random Walk | Start at a random BM note, follow relations 3-5 hops |
| Time Machine | Pair a 10+ year old bookmark with a recent one on a similar theme |
| Cross-System Collision | Match a Readwise highlight with a Raindrop bookmark from different domains |
| Forgotten Shelf | Surface 5 old, untagged bookmarks from another era |
| Obsession Detector | Find the most-saved recent topic with zero BM notes |
Critical design constraint: never scores, ranks, or recommends. Presents collisions and lets the user make meaning.
Pre-research snapshot showing how much you've read about a topic:
"How much have I read about fastify?" / "Readwise check knowledge management"
Reports highlight count, document count, and reading depth — two API calls, compact output.
A user-triggered skill that reviews the current conversation and saves insights to Basic Memory with your approval:
"Reflect on this session" / "Save what we learned" / "Commit this to memory"
User-triggered: extracts candidates, finds the right target notes, shows a grouped preview, and waits before writing anything. Uses the [decision], [lesson], [gotcha], [pattern], [limitation], and [breaking] observation vocabularies.
Triages unsorted Raindrop bookmarks in interactive batches:
"Triage unsorted bookmarks" / "Clean up raindrop inbox" / "Sort unsorted"
The first pass deduplicates by normalized URL (stripping tracking params), detects research bursts (temporal clusters of 3+ bookmarks within 30 minutes), clusters by theme, proposes vocabulary-grounded tags, and moves approved bookmarks to AI-triaged. A --promote pass classifies AI-triaged items into AI-sorted (default), AI-gems (golden), AI-archive (low-reuse), or AI-attention (needs human decision) with structured note annotations. Operates within a 6-collection AI-managed namespace — never touches user-curated collections.
Five hooks run automatically in the background:
- PostToolUse (BM writes) — After any
write_noteoredit_note, validates the note structure against its schema. Catches malformed notes immediately. - PostToolUse (file edits) — After editing shell scripts, detects formatting drift with
shfmt -d, surfaces the diff, and auto-fixes withshfmt -w. After editing schema files, reminds to sync Basic Memory. - PostToolUseFailure — Classifies Basic Memory write and schema tool failures into five categories with actionable recovery guidance.
- SessionStart — Injects a knowledge graph status summary and suggests
/knowledge-primefor project context or/knowledge-askfor topic-specific questions. - PreToolUse (gardener Bash) — Blocks Python and Node.js script execution when running as the knowledge-gardener agent (via
permissionDecision: "deny"), enforcing read-only discipline.
/plugin marketplace add voxpelli/vp-claude
/plugin install vp-knowledge@vp-pluginsAdd to ~/.claude/settings.json:
{
"extraKnownMarketplaces": {
"vp-plugins": {
"source": { "source": "github", "repo": "voxpelli/vp-claude" }
}
},
"enabledPlugins": {
"vp-knowledge@vp-plugins": true
}
}Basic Memory MCP server — the knowledge graph backend:
claude mcp add basic-memory -- basic-memory mcpbasic-memory-skills — core memory-* skills this plugin builds on. Install via skills.sh, the open agent skills CLI:
npx skills add basicmachines-co/basic-memory-skillsThe /package-intel seven-source pipeline and /tool-intel five-source pipeline need these additional MCP servers and plugins. Context7 and Socket are used by /package-intel only; DeepWiki and Tavily are used by both; Readwise is used by both plus /knowledge-gaps.
DeepWiki — repository documentation and architecture questions:
claude mcp add --transport http deepwiki https://mcp.deepwiki.com/mcpContext7 — library documentation and code examples:
/plugin install context7@claude-plugins-officialTavily — web search for security advisories, CVEs, and recent articles. Requires a Tavily API key:
claude mcp add --transport http tavily https://mcp.tavily.com/mcp \
--header "Authorization: Bearer tvly-YOUR_KEY_HERE"Raindrop — searches your bookmarked articles. Requires a Raindrop.io Pro account:
claude mcp add --transport http raindrop https://api.raindrop.io/rest/v2/ai/mcpReadwise — searches your reading highlights and saved articles from Readwise and Reader. Requires a Readwise account:
claude mcp add --transport http readwise https://mcp2.readwise.io/mcpSocket — supply-chain risk scores (license, maintenance, quality, supply-chain, vulnerability) for npm, PyPI, Rust/cargo, and RubyGems packages. Used by /package-intel only:
claude mcp add --transport http socket-mcp https://mcp.socket.dev/Homebrew MCP — bundled with Homebrew 4.5+ (brew mcp-server). Surfaces install analytics (30/90/365-day install counts and build-error counts) that the public formulae.brew.sh JSON API does not expose. /tool-intel picks them up as [popularity] observations on brew: and cask: notes; when the MCP is not installed, the step skips silently without affecting the rest of the research.
claude mcp add homebrew -- brew mcp-serverghCLI — enables changelog analysis via GitHub releases in/package-intel
.claude-plugin/plugin.json Plugin manifest
skills/
package-intel/
SKILL.md Seven-source research workflow
references/ecosystem-npm.md npm registry API + note template
references/ecosystem-crates.md crates.io API + note template
references/ecosystem-go.md Go module proxy + note template
references/ecosystem-composer.md Packagist API + note template
references/ecosystem-pypi.md PyPI API + note template
references/ecosystem-gems.md RubyGems API + note template
tool-intel/
SKILL.md Five-source research workflow
references/ecosystem-brew.md formulae.brew.sh API
references/ecosystem-cask.md formulae.brew.sh/cask API
references/ecosystem-action.md action.yml extraction + permissions
references/ecosystem-docker.md Docker Hub API + tag strategy
references/ecosystem-vscode.md Open VSX API + VS Marketplace fallback
references/note-template-brew.md brew_formula note template
references/note-template-cask.md brew_cask note template
references/note-template-action.md github_action note template
references/note-template-docker.md docker_image note template
references/note-template-vscode.md vscode_extension note template
knowledge-gaps/
SKILL.md Package + tool + concept coverage analysis
knowledge-prime/
SKILL.md Project context priming from BM
schema-evolve/
SKILL.md Schema drift detection and dual-sync
session-reflect/
SKILL.md On-demand conversation → memory capture
knowledge-ask/
SKILL.md Freeform Q&A against the BM knowledge graph
vp-note-quality/
SKILL.md Fourth-wall anti-pattern checklist (not user-invocable)
tag-sync/
SKILL.md Raindrop tag vocabulary sync
wander/
SKILL.md 5-mode purposeless knowledge exploration
readwise-check/
SKILL.md Quick pre-research Readwise lookup
session-bookmarks/
SKILL.md Session URL bookmarking to Raindrop
raindrop-triage/
SKILL.md Interactive unsorted bookmark triage
references/ Tag selection strategy + promote workflow
people-intel/
SKILL.md Five-source person research
references/note-template-person.md Person note template
references/source-guide.md Source-specific research guidance
agents/
knowledge-gardener.md Read-only graph auditor (tags + fourth-wall)
knowledge-maintainer.md Read-write graph enhancer (effort: high)
knowledge-primer.md Autonomous project context priming
raindrop-gardener.md Read-only Raindrop tag auditor
hooks/
hooks.json PreToolUse, PostToolUse x2,
PostToolUseFailure, SessionStart
pre-bash-no-python.sh Python/Node.js blocker for gardener agent
post-bm-write-validate.sh Schema validation after BM writes
post-bm-failure-classify.sh Error classification for BM failures
session-start.sh Graph context + priming hint script
post-file-edit.sh Shell formatting + schema sync script
schemas/
npm_package.md npm package schema (npm_package type)
crate_package.md Rust crate schema (crate_package type)
go_module.md Go module schema (go_module type)
composer_package.md PHP Composer schema (composer_package type)
pypi_package.md Python PyPI schema (pypi_package type)
ruby_gem.md Ruby gem schema (ruby_gem type)
brew_formula.md Homebrew formula schema (brew_formula type)
brew_cask.md Homebrew cask schema (brew_cask type)
github_action.md GitHub Action schema (github_action type)
docker_image.md Docker image schema (docker_image type)
vscode_extension.md VSCode extension schema (vscode_extension type)
engineering.md Engineering knowledge schema (engineering type)
pattern.md Cross-domain structural insight schema (pattern type)
reference.md Lookup document schema (reference type)
standard.md Protocol/standard schema (standard type)
concept.md Concept/movement schema (concept type)
milestone.md Milestone/history schema (milestone type)
service.md Service/product schema (service type)
person.md Person schema (person type)
project.md Project schema (project type)
User says Triggers Output
───────────────── ─────────────────── ──────────────────────────
/package-intel X -> package-intel skill -> <ecosystem>-X note + cross-links
/tool-intel X -> tool-intel skill -> <type>-X note + cross-links
/knowledge-gaps -> knowledge-gaps skill-> gap report (packages, tools, concepts)
+ offers /package-intel, /tool-intel
/knowledge-prime -> knowledge-prime -> context brief with gotchas + gaps
/knowledge-ask Q -> knowledge-ask skill -> cited answer + confidence tier
/schema-evolve X -> schema-evolve skill -> field proposals + dual-sync
/tag-sync [N] -> tag-sync skill -> ~/.claude/references/raindrop-tags.md
/session-bookmarks-> session-bookmarks -> AI-bookmarked collection in Raindrop
/raindrop-triage -> raindrop-triage -> dedupe + burst detect + tag + AI-triaged
(--promote) -> classify into sorted/gems/archive/attention
/wander [mode] -> wander skill -> serendipitous collisions (no scoring)
/readwise-check X-> readwise-check -> highlight count + document count + depth
/session-reflect -> session-reflect -> BM notes + delegates /session-bookmarks
/people-intel X -> people-intel skill -> person note + cross-links
"audit graph" -> knowledge-gardener -> health report (read-only, incl. tags)
"fix the graph" -> knowledge-maintainer-> structural + tag fixes + confirmations
├── audits graph inline (lightweight)
├── auto-fixes structure and tags
├── auto-runs /package-intel for Tier 1 package gaps
├── auto-runs /tool-intel for undocumented tool manifests
└── asks before content changes
"prime context" -> knowledge-primer -> context brief (autonomous agent)
"audit tags" -> raindrop-gardener -> tag health report (read-only)
[any BM write] -> PostToolUse hook -> schema validation feedback
[any file edit] -> PostToolUse hook -> shfmt drift diff + schema sync reminder
[BM tool failure] -> PostToolUseFailure -> classified error + recovery guidance
[session start] -> SessionStart hook -> graph context + priming hint
/session-reflect -> session-reflect -> preview + write to BM
This plugin depends on but does not duplicate the 9 core memory-* skills from basicmachines-co/basic-memory-skills (notes, schema, tasks, lifecycle, reflect, etc.). It adds multi-ecosystem package research (npm, Rust, Go, PHP, Python, Ruby), developer tool research (Homebrew, GitHub Actions, Docker, VSCode), project-level gap analysis, project context priming, knowledge exploration, Readwise integration, schema evolution, tag alignment, and autonomous graph maintenance on top of those foundations.
These are scoped out of current releases but worth tracking:
- Tier-drift log for
knowledge-gaps— track when packages move between tiers over time so you can see which undocumented packages are becoming more critical (medium effort, medium value) - Per-audit reflection notes from
knowledge-gardener— the gardener is intentionally read-only; surfacing audit findings to Basic Memory would need a new output mechanism (e.g. a paired write agent step or a PostToolUse hook on the audit output) - Adaptive research depth in
package-intel— extend the 60-day freshness check into a multi-tier strategy: skip specific sources based on what changed since last update, weight sources by past yield for a given package (Phase 2+ from ACE/MemInsight research patterns)
MIT