From vp-knowledge
This skill should be used when the user asks 'what do I know about [topic]', 'what does Basic Memory say about [X]', 'do I have notes on [X]', 'look up [X] in my knowledge graph', 'ask memory about [X]', 'recall what we captured about [topic]', 'find notes on [topic]', 'knowledge question', 'query the knowledge graph', 'what observations do I have about [X]', 'knowledge lookup'. Searches Basic Memory for notes and observations matching a specific topic or question -- synthesizes an answer with source citations and gap suggestions. NOT for project-wide inventory or coverage reports (use /knowledge-prime for that).
How this skill is triggered — by the user, by Claude, or both
Slash command
/vp-knowledge:knowledge-ask <question><question>This skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Answer a freeform question by searching the Basic Memory knowledge graph, loading
Answer a freeform question by searching the Basic Memory knowledge graph, loading relevant notes, traversing 1-hop neighbors, and synthesizing a cited answer. Each answer includes a confidence tier (Direct, Partial, or No Coverage) so the user knows how much the graph actually covers.
Read-only -- never writes or modifies notes. When coverage is incomplete, suggests
/package-intel, /tool-intel, or /knowledge-gaps to fill the gap.
The user provides a topic or question after the skill invocation:
| Form | Example |
|---|---|
| Topic phrase | /knowledge-ask fastify error handling |
| Natural language question | /knowledge-ask how does pino redaction work? |
| Concept | /knowledge-ask IndieWeb |
| Package identifier (with prefix) | /knowledge-ask npm:undici |
| Tool identifier (with prefix) | /knowledge-ask brew:ripgrep |
| gh CLI extension (with prefix) | /knowledge-ask gh:meiji163/gh-notify |
Prefixed identifiers (npm:, crate:, brew:, action:, gh:, etc.) trigger
a fast existence check via list_directory in addition to the hybrid search.
/package-intel <pkg> or /tool-intel
if the query looks like a package or tool name.search_notes returns results spanning 3+ unrelated
topics, pick the best-matching cluster and note "Results also touched [other
topics] -- narrow your query for those."npm:undici) has no
list_directory match and no search results, report "No note found for
npm:undici." and suggest /package-intel undici to create it.list_directory(dir_name="npm", depth=1) to report directory-level counts
rather than loading individual notes. Suggest /knowledge-prime for
project-scoped overviews or /knowledge-gaps for coverage audits.schema/ from the answer synthesis. These are structural definitions, not
knowledge content.Run a hybrid search (the default mode) against Basic Memory:
search_notes(query="<user question>", page_size=10)
If the query contains a recognized ecosystem prefix (npm:, crate:, go:,
composer:, pypi:, gem:, brew:, cask:, action:, docker:, vscode:,
gh:), also run a fast existence check:
list_directory(dir_name="<ecosystem-dir>", file_name_glob="*<name>*")
Prefix-to-directory mapping:
| Prefix | Directory |
|---|---|
npm: | npm/ |
crate: | crates/ |
go: | go/ |
composer: | composer/ |
pypi: | pypi/ |
gem: | gems/ |
brew: | brew/ |
cask: | casks/ |
action: | actions/ |
docker: | docker/ |
vscode: | vscode/ |
gh: | gh/ |
Filter out schema notes (titles starting with schema/) from the results.
If fewer than 3 unique note topics are returned, note this as a sparse coverage signal for the confidence tier in step 4.
For the top 3 results from step 1, load full note content:
read_note(identifier="<note-title>", include_frontmatter=true)
Extract observations relevant to the user's question. When multiple observations
match, prioritize by category:
[gotcha] > [breaking] > [limitation] > [pattern] > [decision] > [lesson]
Token budget: Load at most 3 notes fully. If a note is very long (50+ observations), extract only the observations relevant to the question rather than quoting the entire section.
Expand the highest-scoring note's immediate neighborhood:
build_context(url="<top-result-title>", depth=1, max_related=5)
Check whether any 1-hop neighbor is more relevant to the question than the direct search results. If a neighbor is a better fit, load it:
read_note(identifier="<neighbor-title>", include_frontmatter=true)
Load at most 1 additional note from graph traversal. Stop at 1 hop -- do not recurse further.
Based on the loaded notes and observations, assign one of three confidence tiers:
| Tier | Condition |
|---|---|
| Direct | One or more notes directly address the question with specific observations |
| Partial | Notes touch the topic but don't fully answer, or only tangential neighbors matched |
| No Coverage | No notes found, or only schema notes matched |
Produce a structured answer using this template:
## Answer: <question>
**Coverage:** Direct / Partial / No Coverage
<Prose answer, 2-5 sentences. Quote observations directly with
[[note-title]] - [category] citations. Stick to what the graph contains --
never hallucinate facts not present in the loaded notes.>
### Sources
- [[<note-title>]] -- <one-line reason this note was relevant>
### Coverage Gaps
<Only if Partial or No Coverage>
- **<subject>** -- Not documented. Run `/package-intel <pkg>` to create.
Rules:
/knowledge-prime."/knowledge-gaps instead.[[note-title]]/package-intel, /tool-intel, or /knowledge-gaps)Guides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.
npx claudepluginhub voxpelli/vp-claude --plugin vp-knowledge