Skip to content
Back to skills

Knowledge Ask

ASecurity

"This skill should be used when the user asks 'what do I know about [topic]',

  • 3 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added May 26, 2026
ai-agentsgodocker

Works with

  • vscode
  • cli
  • mcp

Security analysis

A100/100

Scanned May 27, 2026

npx -y skills add voxpelli/vp-claude --skill knowledge-ask --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Knowledge Ask?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Knowledge Ask
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/voxpelli-knowledge-ask/badge)](https://www.skillsdirectory.com/skills/voxpelli-knowledge-ask)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: knowledge-ask
description: "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)."
user-invocable: true
argument-hint: "<question>"
allowed-tools:
  - mcp__basic-memory__search_notes
  - mcp__basic-memory__read_note
  - mcp__basic-memory__build_context
  - mcp__basic-memory__list_directory
---

# 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
`/package-intel`, `/tool-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 `/package-intel <pkg>` or `/tool-intel`
  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_notes` returns 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 no
  `list_directory` match and no search results, report "No note found for
  `npm:undici`." and suggest `/package-intel undici` to 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-prime` for
  project-scoped overviews or `/knowledge-gaps` for 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:

````markdown
## 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:**
- 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-gaps` instead.

## 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 (`/package-intel`, `/tool-intel`, or `/knowledge-gaps`)
- **Max 1-hop traversal** -- stop at direct neighbors to keep latency low and
  avoid context bloat

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.