Skip to content
Back to skills

Dashboard

ASecurity

Show what this repository has already decided about its vulnerabilities, read from the durable record rather than by scanning again — open versus resolved, the decision taken on each, and what is still waiting. Use when picking up triage after a break, auditing past decisions, onboarding to a repository with security history, or checking nothing high-severity is open before a release.

  • 9 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 20, 2026
securitygobashexpresssecurity

Works with

  • cli
  • mcp

Security analysis

A100/100

Pro scans all 3 files and shows the line behind each finding

Scanned October 20, 2026

npx -y skills add Vulnetix/pix-ai-coding-assistant --skill dashboard --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Dashboard?

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

Security grade badge for Dashboard
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/vulnetix-dashboard/badge)](https://www.skillsdirectory.com/skills/vulnetix-dashboard)

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: dashboard
description: 'Show what this repository has already decided about its vulnerabilities, read from the durable record rather than by scanning again — open versus resolved, the decision taken on each, and what is still waiting. Use when picking up triage after a break, auditing past decisions, onboarding to a repository with security history, or checking nothing high-severity is open before a release.'
license: Apache-2.0
allowed-tools: Bash(vulnetix:*) Read Grep Glob
user-invocable: true
model: haiku
metadata:
  outputBudget: medium
  cooldown: per-session
  chain: "repo-impact"
---
# Vulnetix Vulnerability Dashboard

## Use when

- You want a single view of every vulnerability tracked in this repo, grouped by status and decision.
- Someone asks "where did we leave triage last week?".
- Onboarding to a repo and you want to see prior security decisions before duplicating work.
- You want to spot stale `under_investigation` items that need re-triaging.
- Pre-release: confirm no high-severity entries remain open before tagging.

## Don't use for

- Fetching new vulnerability data — use `repo-impact` for whether an advisory reaches this repository, or `vulnetix_vuln` / `vulnetix vdb vuln <id>` for the advisory itself.
- Applying fixes — use `fix`.
- Cross-repo dashboards — this skill reads only the current repo's memory file.

## Conventions

Follows `skills/_lib/contract.md`. In short: use the `vulnetix_*` MCP tools when the agent has them and the CLI otherwise — both shape their own output, so there is no jq step any more. Independent calls go out as concurrent Bash tool calls in one message. One trailing suggestion, not a playbook. See the contract for surface selection, output style and memory writes.


This skill reads `.vulnetix/memory.yaml` and displays a comprehensive vulnerability status report. It is read-only and does not modify any files.

## Workflow

### Step 1: Load Memory

1. Use **Glob** to check if `.vulnetix/memory.yaml` exists in the repo root
2. If it does not exist, display: **"No vulnerability data found. Run `repo-impact <CVE-…>` or `vulnetix_exploits` (MCP) to start tracking."** and stop.
3. Use **Read** to load the full contents of `.vulnetix/memory.yaml`

### Step 2: Parse and Categorize

From the `vulnerabilities:` section, categorize each entry:

**Open (unresolved):**
- `status: affected` -- "Vulnerable"
- `status: under_investigation` -- "Investigating"

**Resolved:**
- `status: fixed` -- "Fixed"
- `status: not_affected` -- "Not affected"
- Entries with `decision.choice: risk-accepted` -- "Risk accepted"
- Entries with `decision.choice: deferred` -- "Deferred"

From the `manifests:` section, collect manifest tracking info.

### Step 3: Display Summary Header

```
Vulnetix Security Dashboard
============================
Open: <N> (<X> vulnerable, <Y> investigating)
Resolved: <N> (<X> fixed, <Y> not affected, <Z> risk-accepted, <W> deferred)
Manifests tracked: <N> (last scan: <timestamp>)
```

If there are zero vulnerabilities and zero manifests, display: **"Clean slate -- no vulnerabilities tracked yet."**

### Step 4: Open Vulnerabilities Table

If there are open vulnerabilities, display them sorted by CWSS priority (P1 first), then by severity:

```
Open Vulnerabilities
--------------------
| ID | Package | Severity | Status | Priority | Decision |
|----|---------|----------|--------|----------|----------|
| CVE-2021-44228 | log4j-core | critical | Vulnerable | P1 (87.5) | investigating |
| GHSA-xxxx-yyyy | express | high | Investigating | P2 (62.0) | investigating |
```

For each column:
- **ID**: Primary vulnerability key
- **Package**: `package` field
- **Severity**: `severity` field
- **Status**: Developer-friendly status (see VEX mapping above)
- **Priority**: `cwss.priority` and `cwss.score` if available, otherwise "--"
- **Decision**: `decision.choice` if available, otherwise "--"

### Step 5: Resolved Vulnerabilities Table

If there are resolved vulnerabilities, display them:

```
Resolved Vulnerabilities
------------------------
| ID | Package | Severity | Resolution | Decision | Date |
|----|---------|----------|------------|----------|------|
| CVE-2023-1234 | lodash | high | Fixed | fix-applied | 2024-01-15 |
```

For the **Date** column, use the most recent `history` entry timestamp, or `discovery.date` as fallback.

### Step 6: Manifest Tracking

If manifests are tracked, display:

```
Tracked Manifests
-----------------
| Manifest | Ecosystem | Last Scanned | Vulns Found |
|----------|-----------|--------------|-------------|
| package.json | npm | 2024-01-15T10:30:00Z | 3 |
| go.mod | go | 2024-01-15T10:31:00Z | 0 |
```

### Step 7: Suggested Actions

For each open vulnerability (up to 5), suggest a next action based on its state:

- Has no `threat_model` or `cwss`: `"vulnetix vdb exploits <id>"` -- get exploit analysis and priority scoring
- Has `cwss` but no fix applied: `"fix <id>"` -- get fix intelligence
- Has decision `risk-accepted`, `deferred`, or `mitigated` (non-patch): `"vulnetix vdb traffic-filters <id>"` -- get Snort rules for network-level mitigation
- General: `"fix <id>"` -- get a full remediation plan

If there are more than 5 open vulns, add: `"Use vulnetix vdb exploits to find exploited vulnerabilities across your ecosystem."`

Always end with: `"Use vulnetix vdb vuln <id> for detailed info on any vulnerability."`

## Edge cases & gotchas

- Reads `.vulnetix/memory.yaml` only. If the file is missing, the skill exits silently — run `repo-impact` or `vulnetix_vuln` (MCP) or `vulnetix vdb vuln <id>` first to populate.
- `decision.choice` is a closed enum; entries with arbitrary strings render under "Unknown decision".
- Mermaid pie chart of decisions is auto-skipped if the total is < 3 (avoids rendering near-empty visuals).
- For repos with > 200 tracked vulns, the dashboard caps the table at 50 rows sorted by CWSS — full list is in `memory.yaml`.
- CWSS scores can be missing for entries that were created by `vulnetix_vuln` (MCP) or `vulnetix vdb vuln <id>` lookup-only mode; the dashboard sorts those to the bottom.

Files in this skill

  • SKILL.md6 KB
  • evals/evals.json2.4 KB
  • evals/trigger-eval.json1.2 KB

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.