Intel
This skill should be used to research a software package OR a developer/CI tool and create or update a structured Basic Memory note with post-write cross-linking. Triggers: 'research package', 'package intel', 'what does [pkg] do', 'add [pkg] to knowledge graph', 'enrich [pkg]', when adding depends_on [[npm-*]] relations, 'research crate/gem/go module/composer/pypi package', 'research a homebrew formula', 'brew intel', 'research a cask', 'research a GitHub Action', 'action intel', 'research a docker image', 'research a VSCode extension', 'vscode intel', 'research a gh CLI extension', 'research a Claude Code plugin', 'research an agent skill', 'tool intel', 'what does [tool] do', 'upgrade haul', or a pasted npm/brew (or crate/go/composer/pypi/gem) outdated/upgrade line. Prefixes: package family — npm:, crate:, go:, composer:, pypi:, gem: (no prefix defaults to npm); tool family — brew:, cask:, action:, docker:, vscode:, gh:, plugin:, skill:.From its SKILL.md
npx -y skills add voxpelli/vp-claude --skill intelAssembled 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.
SKILL.md
13.9 KB, ~3.3k tokens by cl100k_base, as published. Nobody here has run it
Intelligence
Research a package or a developer/CI tool and synthesize a structured Basic Memory note, then cross-link existing notes. One research lifecycle — detect → check → resolve → enrich → synthesize → write → cross-link — routed per-ecosystem via the table below. The two families (package and tool) share one BM-note lifecycle end to end; Step 3 (enrichment) is the only point where the source roster diverges. Smaller family-specific bits also exist in Arguments normalization, Batch mode, Step 1 freshness, Step 4 observation rules, and Step 6 — but the unifying axis is the shared lifecycle, not the sourcing mechanics.
Supported ecosystems, by family:
- package — npm, Rust crates, Go modules, PHP Composer, Python PyPI, Ruby gems.
- tool — Homebrew formulae/casks, GitHub Actions, Docker images, VSCode extensions, GitHub CLI extensions, Claude Code plugins, skills.sh agent-skill bundles.
Arguments
One or more identifiers, each with an optional <prefix>: (a single call may mix
families — npm:fastify brew:ripgrep — and routes each token by its own prefix).
The prefix alone selects the family and the routing row:
| Prefix | Family | BM dir | Note type | Ecosystem ref | Note template |
|---|---|---|---|---|---|
npm | package | npm/ | npm_package | references/ecosystem-npm.md | references/note-template-npm.md |
crate | package | crates/ | crate_package | references/ecosystem-crates.md | references/note-template-crates.md |
go | package | go/ | go_module | references/ecosystem-go.md | references/note-template-go.md |
composer | package | composer/ | composer_package | references/ecosystem-composer.md | references/note-template-composer.md |
pypi | package | pypi/ | pypi_package | references/ecosystem-pypi.md | references/note-template-pypi.md |
gem | package | gems/ | ruby_gem | references/ecosystem-gems.md | references/note-template-gems.md |
brew | tool | brew/ | brew_formula | references/ecosystem-brew.md | references/note-template-brew.md |
cask | tool | casks/ | brew_cask | references/ecosystem-cask.md | references/note-template-cask.md |
action | tool | actions/ | github_action | references/ecosystem-action.md | references/note-template-action.md |
docker | tool | docker/ | docker_image | references/ecosystem-docker.md | references/note-template-docker.md |
vscode | tool | vscode/ | vscode_extension | references/ecosystem-vscode.md | references/note-template-vscode.md |
gh | tool | gh/ | gh_extension | references/ecosystem-gh.md | references/note-template-gh.md |
plugin | tool | plugins/ | claude_plugin | references/ecosystem-plugin.md | references/note-template-plugin.md |
skill | tool | plugins/ | claude_plugin | references/ecosystem-skill.md | references/note-template-plugin.md |
Every prefix belongs to exactly one family (the two sets are disjoint), so the family is unambiguous from the prefix alone.
Per-prefix identifier normalization. Package prefixes pass through (scoped
npm @scope/pkg stays npm; Go module paths keep their slashes). Tool prefixes
normalize first: action: / docker: strip a trailing @version / :tag;
vscode: is the dot-separated publisher.name; gh: / plugin: / skill:
strip a github.com/… URL to owner/repo, validate the two-part shape, and
keep an optional #<name> suffix.
Backward compatibility. No prefix always resolves to npm (package family). A bare tool name in a batch is disambiguated inside the tool adapter's formula-vs-cask auto-routing (see Batch mode), not hoisted here.
Batch mode: upgrade haul
Detection hook (before Step 0). If the input is not a single prefixed
identifier but a batch — multiple bare/prefixed names, OR a pasted
upgrade/outdated command line (npm outdated, npm i a@latest b@latest,
cargo install-update -l, go list -u -m all, composer outdated,
pip list --outdated, bundle outdated, brew upgrade, brew outdated) —
treat it as an upgrade haul (a batch refresh of already-documented notes
against a version delta) rather than a from-scratch research call. The single
prefixed-identifier path is unchanged.
Load the shared core. Read references/upgrade-haul.md in full and follow
it — input parsing/de-qualification, highlights-reel synthesis, the two
recording axes, stale-cache arbitration, batch orchestration, and the --stale
relationship all live there. Route each operand by its prefix to its family
adapter:
- package family — Axis-B narrative target is the note's inline
## Release Highlightssection (a one-line convention, no separate adapter file). Run the Step-1 existence check as one listing per package directory. - tool family — follow
references/upgrade-haul-adapter-tool.md(bare-name formula-vs-cask auto-routing, thenot-in-apire-dispatch, the@-suffix dual-key fetch, inline[feature]/[version]Axis-B target).
A mixed-family batch routes each operand independently by its own prefix.
Ecosystem Dispatch
Step 0: Detect ecosystem & family
- Explicit prefix — the part before
:is the ecosystem. Look it up in the Arguments table to setFAMILY(package|tool), the BM directory, note type, ecosystem ref, and note template.FAMILYis set once here and read only at Step 3. Strip the prefix for the name (applying the per-prefix normalization above). - No prefix (package family only) — infer from project context:
Cargo.toml→ crate,go.mod→ go,composer.json(nopackage.json) → composer,pyproject.toml/requirements.txt(nopackage.json) → pypi,Gemfile(nopackage.json) → gem, otherwise → npm. State: "No prefix detected — treating as<ecosystem>:<name>based on project context. Use an explicit prefix to override." - Unknown prefix — error and print the 14-row Arguments table.
- Third-party tap (
brew:only) — count/-segments afterbrew:; the zero/one/two-slash dispatch (core formula vs tap formula vs invalid shape) lives inreferences/ecosystem-brew.md("Third-Party Tap Formulae"). BM dir, note type, and reference are unchanged; only Step 2's fetch mechanics differ.
Title convention. The command uses : delimiters, but the BM note title
replaces every :, /, and # with - (preserving @ and .) — a purely
literal mapping matching the filename BM generates. Examples: npm:fastify →
npm-fastify, npm:@fastify/postgres → npm-@fastify-postgres,
action:actions/checkout → action-actions-checkout,
plugin:voxpelli/vp-claude#vp-knowledge → plugin-voxpelli-vp-claude-vp-knowledge.
See CLAUDE.md → "Prefix convention" for the full rule.
Step 1: Check for existing note
Follow references/note-lookup-and-freshness.md: the existence glob, the
freshness-tier matrix (the <60 days fast-path differs by family — package runs
Context7 + Socket, tool does not), the append-don't-overwrite rule, and the
audit-context stale-handling branch. Hold the recorded version + ## Relations
for later steps.
Step 2: Resolve registry & repository
Read the routing row's references/ecosystem-<ecosystem>.md for the
registry/extraction API, required headers, and how to extract owner/repo for
the enrichment and changelog steps.
Forge detection. Parse the host of the resolved repository/homepage URL
and hold it as repo_forge (github, codeberg/any Forgejo, sourcehut
*.sr.ht, or unknown). When repo_forge != github, follow
references/forge-fallback.md for the DeepWiki-skip rule and the changelog
procedure. action: and gh: encode a GitHub owner/repo by construction — skip
forge detection for them.
If the ecosystem reference documents a download/popularity source, fetch the
count now and hold it as popularity_count for Step 4.
Step 3: Family enrichment — the source-roster branch
This is the point where the two families' source roster diverges (other
steps carry smaller family-specific bits). Route by FAMILY:
FAMILY=package→ load and followreferences/enrichment-package.md(seven sources: DeepWiki, Context7, Tavily, Raindrop, changelog, Readwise, Socket depscore).FAMILY=tool→ load and followreferences/enrichment-tool.md(six sources: DeepWiki, Tavily, Raindrop, changelog, Readwise, man-page — plus Homebrew analytics and the Open VSX trust signal where applicable).
Five sources are common to both (DeepWiki, Tavily, Raindrop, Readwise, changelog). Design invariant: each family file OWNS its per-ecosystem skip/run gates as explicit conditionals — DeepWiki skip for brew/cask; man-page for brew/cask only; Open VSX for vscode only; Context7 for the package family only; Socket for npm/pypi/cargo/gem only. These gates are NEVER collapsed into a generic "run these N sources" loop here or in either family file.
Step 4: Synthesize into note
Read the routing row's references/note-template-<ecosystem>.md. Every note uses
three enrichment layers: frontmatter (type, tags, and any packages
array), ## Observations with [category]-tagged items, and
## Relations with [[wiki-links]].
Observation conventions:
[version](mandatory, every cohort) — record the documented latest version as a clean leading token, e.g.- [version] 5.8.5. The same value goes in the header pipe (… | v<version> | …); keep them consistent. (Which slot--stalereads first is cohort-dependent — the[version]observation for npm, the header pipe otherwise — so refresh both.)[popularity]— if a count was obtained, add it with metric window + source, e.g.- [popularity] 2.1M downloads/week (npm, 2026-04). Omit for PyPI and Go (no reliable count).[security]— Socket depscore (package family) or the Open VSX trust signal (vscode); plus any advisory findings.
No wiki-links in observations. Never use [[Target]] in an observation line —
BM's parser treats [[ as a relation boundary. Put all wiki-links in
## Relations only.
Verify before capture. For any note not on Step 1's fast path (missing, 60+
days, or security-sensitive/thin-evidence), follow references/verify-before-capture.md
before writing.
Step 5: Write or update the note
Follow references/note-write-mechanics.md for the new-note / relocated-stub /
existing-note decision, the two edit_note find_replace templates, the
never-append-with-section=Observations rule, the ~40KB append fallback, and
the "trust schema_validate + the file, not the inline count" rule.
Step 6: Confirm and summarize
Report a compact summary:
- Family and note location (directory + title).
- Key findings and any
[gotcha]/[limitation]observations recorded. - Security/analytics concerns — Socket scores (package) or Open VSX/analytics (tool), whichever applies.
- Cross-links added (or deferred to follow-up pass for large batches).
- Enrichment-source status — for each Step-3 source, report which of used / attempted-but-failed / intentionally-skipped applies. Sources must be attempted, not skipped by assumption; an attempt that fails (auth error, server not found) must be surfaced as a failure, never silently omitted or relabelled an intentional skip (non-GitHub forge, ecosystem not covered).
- Unresolved contradictions from Step 3–4.
Step 7: Cross-link existing notes
Follow references/cross-link-existing-notes.md: search for notes referencing
this subject, add relates_to links where genuine, verify each edge resolved via
the relation index (not build_context), and reconcile bare-name stubs.
References
Every file below is one level deep in references/ and reachable from the steps
above:
- Lifecycle:
note-lookup-and-freshness.md,verify-before-capture.md,note-write-mechanics.md,cross-link-existing-notes.md. - Enrichment (Step 3 branch):
enrichment-package.md,enrichment-tool.md. - Changelog/forge fallbacks:
gh-api-fallback.md,forge-fallback.md. - Batch:
upgrade-haul.md,upgrade-haul-adapter-tool.md. - Per-ecosystem recipes + note templates:
ecosystem-<prefix>.md,note-template-<prefix>.md(see the Arguments table).
What ships with it: 37 files
211.8 KB alongside SKILL.md
references/
- cross-link-existing-notes.md3.5 KB
- ecosystem-action.md2.9 KB
- ecosystem-brew.md17.1 KB
- ecosystem-cask.md4.6 KB
- ecosystem-composer.md2.0 KB
- ecosystem-crates.md2.7 KB
- ecosystem-docker.md3.1 KB
- ecosystem-gems.md2.0 KB
- ecosystem-gh.md6.8 KB
- ecosystem-go.md2.6 KB
- ecosystem-npm.md2.6 KB
- ecosystem-plugin.md3.1 KB
- ecosystem-pypi.md2.3 KB
- ecosystem-skill.md2.7 KB
- ecosystem-vscode.md6.6 KB
- enrichment-package.md12.8 KB
- enrichment-tool.md21.1 KB
- forge-fallback.md6.9 KB
- gh-api-fallback.md10.3 KB
- note-lookup-and-freshness.md3.2 KB
- note-template-action.md3.0 KB
- note-template-brew.md9.3 KB
- note-template-cask.md6.7 KB
- note-template-composer.md2.8 KB
- note-template-crates.md3.8 KB
- note-template-docker.md3.3 KB
- note-template-gems.md2.9 KB
- note-template-gh.md7.3 KB
- note-template-go.md2.9 KB
- note-template-npm.md3.9 KB
- note-template-plugin.md2.1 KB
- note-template-pypi.md3.9 KB
- note-template-vscode.md4.7 KB
- note-write-mechanics.md7.4 KB
- upgrade-haul-adapter-tool.md9.7 KB
- upgrade-haul.md16.4 KB
- verify-before-capture.md2.7 KB
Gives 0 of the 12 instructions most context ai engineering skills give in ~3.3k tokens
Counted across 1,328 of the 2,349 authors here whose files we hold, read 2026-09-06
- Dispatch a fresh subagent for each taskin 76 of 1328, across 59 files
- Perform spec compliance review before code quality reviewin 44 of 1328, across 34 files
- Dispatch a final code reviewer after all tasksin 38 of 1328, across 26 files
- Answer subagent questions before allowing implementationin 36 of 1328, across 26 files
- Use the least powerful model capable of the taskin 33 of 1328, across 26 files
- Create a TodoWrite list for all tasksin 32 of 1328, across 22 files
- Perform a task review after each implementationin 31 of 1328, across 24 files
- Extract all tasks and context from the planin 29 of 1328, across 20 files
- Provide full task text to subagentsin 28 of 1328, across 20 files
- Use git worktrees for isolated workspacesin 25 of 1328, across 20 files
- Specify the model explicitly when dispatching a subagentin 23 of 1328, across 18 files
- Execute all tasks from the plan without stoppingin 21 of 1328, across 16 files
Said here and by no other author read
- detect ecosystem and family from prefix or context
- check for existing note and verify freshness
- resolve registry and repository information
- enrich data using family-specific source rosters
- synthesize note using ecosystem-specific templates
- record version and popularity observations
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.