Knowledge ask
Claude Code plugin marketplace + plugin that turns Basic Memory into an actively maintained knowledge graph
npx -y skills add voxpelli/vp-claude --skill knowledge-askAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 3 stars3 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
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).
SKILL.md
7.2 KB, as published. Nobody here has run it
Knowledge Ask
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
/intel or /knowledge-gaps to fill the gap.
Arguments
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.
Edge Cases
- No results -- assign "No Coverage" confidence. Report "Basic Memory has no
notes matching this question." Suggest
/intel <pkg>if the query looks like a package or tool name. - BM unavailable -- report the error and suggest trying again later. The PostToolUseFailure hook covers BM write-tool errors only; read-tool failures (search_notes, read_note, build_context) surface as raw error strings.
- Ambiguous query -- if
search_notesreturns results spanning 3+ unrelated topics, pick the best-matching cluster and note "Results also touched [other topics] -- narrow your query for those." - Package/tool not in BM -- if a prefixed query (e.g.,
npm:undici) has nolist_directorymatch and no search results, report "No note found fornpm:undici." and suggest/intel undicito create it. - Very broad query -- if the query maps to an entire ecosystem directory
(e.g., "what do I know about npm packages"), use
list_directory(dir_name="npm", depth=1)to report directory-level counts rather than loading individual notes. Suggest/knowledge-primefor project-scoped overviews or/knowledge-gapsfor coverage audits. - Schema notes in results -- exclude notes with titles starting with
schema/from the answer synthesis. These are structural definitions, not knowledge content.
Workflow
1. Search
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.
2. Load candidates
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.
3. Traverse graph
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.
4. Assign confidence
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 |
5. Synthesize answer
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 `/intel <pkg>` to create.
Rules:
- Omit the "Coverage Gaps" section entirely when confidence is Direct.
- For "No Coverage" answers: report "Basic Memory has no notes matching this question." -- never invent content.
- If the query looks project-scoped (mentions "this project", "our deps",
"this codebase"), add a handoff hint: "For project-wide context, try
/knowledge-prime." - If the query is broad enough to warrant a coverage audit, suggest
/knowledge-gapsinstead.
Guidelines
- Read-only -- this skill never writes, edits, or deletes notes
- Graph-first -- always search Basic Memory before answering; never answer from general knowledge alone
- Cite sources -- every factual claim must reference a
[[note-title]] - Prefer precision -- a narrow accurate answer beats a broad speculative one
- Gap-fill suggestions -- when coverage is incomplete, suggest the right
skill to fill it (
/intelor/knowledge-gaps) - Max 1-hop traversal -- stop at direct neighbors to keep latency low and avoid context bloat