Record a vetted Hex package version in hex_vet.exs after a security review — manages the audit ledger, not the scanner. Use to approve a dep after /phx:deps-audit findings or to initialize hex_vet.exs.
npx skills add https://github.com/oliver-kriska/claude-elixir-phoenix --skill deps-vet
Review a Hex package version, run Phase 1 supply-chain rules against it,
prompt the user for a verdict, append the result to hex_vet.exs
(project-root audit ledger). Vetted versions get downgraded to INFO
on subsequent /phx:deps-audit runs.
Run this AFTER /phx:deps-audit to clear findings.
Run this BEFORE merging a mix.lock PR to certify new versions.
/phx:deps-vet phoenix 1.7.21 # vet a single package version
/phx:deps-vet --seed # import curated baseline seed (~30 pkgs)
/phx:deps-vet --list # show existing ledger entries
/phx:deps-vet --check # cross-check mix.lock vs ledger
AskUserQuestionconfirmation. Drive-by trust ruins the ledger's value.
mix.lock has version X and theledger vets X-1, emit INFO and treat X as unvetted. Don't silently
trust the older entry.
hex_vet.exs is a first-classsecurity artifact, visible in PR review. Don't move it into .claude/.
inspect/2. When appending, read the file withCode.eval_file/1, mutate the map, and write back via
inspect(term, pretty: true, limit: :infinity). Hand-rolled string
appends drift over time.
being vetted. No silent :safe_to_deploy defaults.
an AskUserQuestion (criteria split, new/overwrite/no-op) MUST be
derived from the loaded data *before* prompting — e.g.
Enum.frequencies_by(seed.audits, & &1.criteria). Eyeballing the
file and approving on wrong numbers corrupts the consent.
hex_vet.exsIf hex_vet.exs exists at project root:
Read it via Code.eval_file/1
Else:
Write the empty-ledger stub (see ${CLAUDE_SKILL_DIR}/references/hex-vet.md §"Empty ledger")
Inform user: "Created hex_vet.exs at project root."
<pkg> <version> → single-vet path (Step 3-7).--seed → import priv/hex_vet_seed.exs. Before prompting,Code.eval_file/1 the seed and compute (Iron Law #6): the
criteria split (Enum.frequencies_by(seed.audits, & &1.criteria))
and, against any existing ledger, exact new / overwrite / no-op
counts. Put those computed numbers in the AskUserQuestion. Also
state up front that the seed is a **provenance baseline, not
certification of your current mix.lock** (per Iron Law #2, seed
versions older than the locked ones stay unvetted). Ask before
overwriting existing entries.
--list → render the audits table; exit.--check → compare ledger entries with mix.lock; warn ondrift. Read the lock via Code.eval_file("mix.lock") with
2>/dev/null — modern locks have quoted keys and emit a
found quoted keyword warning per package (tens of KB of noise that
gets persisted as an oversized tool result otherwise).
Run the deps-audit corpus loader. Cache lives at
~/.cache/phx-deps-audit/corpus/<pkg>/<version>/contents/. Use:
bash plugins/elixir-phoenix/skills/deps-audit/smoke-test/corpus.d/fetch.sh \
<pkg> <version>
Source the rules from ../deps-audit/references/rules-impl.md.
Run run_all_rules over the cached dir. Write findings to a temp
vet-findings.jsonl. Set FINDINGS_FILE to override default path.
Print the findings table per ../deps-audit/references/output-renderer.md.
On zero findings: say "No findings — vet from a clean baseline."
On any finding: show severity, file, line, snippet inline.
Call AskUserQuestion with these 4 options:
:safe_to_deploy — full trust; findings investigated and cleared.:safe_to_run — trust in non-production envs only (test deps).:does_not_implement_crypto — Mozilla-style sub-criterion.Skip — defer decision; don't write an entry.If any finding is BLOCK severity: default-highlight Skip. Require
explicit override before writing :safe_to_deploy over a BLOCK.
Read existing hex_vet.exs via Code.eval_file/1. Append the audit
map below to :audits. Write back via
Code.format_string!(inspect(...)).
%{
package: "<pkg>",
version: "<version>",
criteria: <verdict_atom>,
reviewer: "<git config user.email>",
notes: "<user-provided one-liner OR findings summary>",
reviewed_at: ~D[<today>]
}
Write back via Code.format_string!(inspect(term, pretty: true)).
Confirm to user: "Added <pkg> <version> to hex_vet.exs."
/phx:deps-audit to clear vetted findings.mix.lock PR to certify new versions./phx:deps-vet --check to detect ledger drift vs mix.lock./phx:deps-audit auto-downgrades vetted findings to INFO.${CLAUDE_SKILL_DIR}/references/hex-vet.md — schema, parser, lookup${CLAUDE_SKILL_DIR}/references/seed.md — --seed flag, curated baseline${CLAUDE_SKILL_DIR}/../deps-audit/references/rules-impl.md — thesame rules /phx:deps-audit runs
mix phx.deps_vet to a separate Hexpackage phx_deps_vet for non-CC users.
that gates mix deps.get.
imports: untiltrust-chain semantics are designed.
Integration with protocols.io API for managing scientific protocols. This skill should be used when working with protocols.io to search, create, update, or publish protocols; manage protocol steps and materials; handle discussions and comments; organize workspaces; upload and manage files; or integrate protocols.io functionality into workflows. Applicable for protocol discovery, collaborative protocol development, experiment tracking, lab protocol management, and scientific documentation.
Analyzes job descriptions and generates tailored resumes that highlight relevant experience, skills, and achievements to maximize interview chances
Generate Excalidraw diagrams from natural language descriptions. Use when asked to "create a diagram", "make a flowchart", "visualize a process", "draw a system architecture", "create a mind map", or "generate an Excalidraw file". Supports flowcharts, relationship diagrams, mind maps, and system architecture diagrams. Outputs .excalidraw JSON files that can be opened directly in Excalidraw.
Build and distribute Expo development clients locally or via TestFlight
Use when you have a written implementation plan to execute in a separate session with review checkpoints
Data structure for annotated matrices in single-cell analysis. Use when working with .h5ad files or integrating with the scverse ecosystem. This is the data format skill—for analysis workflows use scanpy; for probabilistic models use scvi-tools; for population-scale queries use cellxgene-census.
Benchling R&D platform integration. Access registry (DNA, proteins), inventory, ELN entries, workflows via API, build Benchling Apps, query Data Warehouse, for lab data management automation.
Comprehensive molecular biology toolkit. Use for sequence manipulation, file parsing (FASTA/GenBank/PDB), phylogenetics, and programmatic NCBI/PubMed access (Bio.Entrez). Best for batch processing, custom bioinformatics pipelines, BLAST automation. For quick lookups use gget; for multi-service integration use bioservices.
Take oliver-kriska/deps-vet from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.