--- name: secure-dependency-health-check description: | Helps choose secure, healthy open-source packages by evaluating vulnerability status, maintenance health, popularity, community, and security posture. Use this skill when: - Agent needs to import a new dependency - User asks "which package should I use for X?" - User wants to compare packages (A vs B) - User asks "is this package safe?" - User asks for a "secure alternative" to a package - User mentions "dependency health", "package chooser", or "package security" allowed-tools: "mcp_snyk_snyk_package_health_check Read Write Bash Grep" license: Apache-2.0 compatibility: | Requires Snyk MCP server connection and authenticated Snyk account. Supported ecosystems: npm, pypi, maven, nuget, golang. metadata: author: Snyk version: 1.1.0 --- # Secure Dependency Health Check Help developers and AI agents make informed decisions when selecting open-source packages by evaluating security health, vulnerability history, popularity, community, and maintenance status. **Core Principle**: Choose dependencies wisely to minimize supply chain risk. --- ## Quick Start When asked to recommend a package: 1. Identify the functional requirement 2. Research candidate packages 3. Run `snyk_package_health_check` on each candidate 4. Compare and recommend the healthiest, most secure option --- ## Phase 1: Understand Requirements **Goal**: Clarify what the user needs before recommending packages. ### Step 1.1: Identify Candidates If user provided candidates: - Note each package name and version (if specified) - Identify the package ecosystem If user needs suggestions: - Search for packages that meet the functional requirement - Select 2-4 top candidates based on popularity/relevance --- ## Phase 2: Security & Health Analysis **Goal**: Evaluate each candidate package's security posture and overall health. ### Step 2.1: Run Package Health Check for Each Candidate For each candidate package, run `snyk_package_health_check` with the package name, version, and ecosystem (`npm`, `pypi`, `maven`, `nuget`, or `golang`). Key fields returned: - **`overall_rating`**: "Healthy" or "Review recommended" — use as the primary evaluation metric - **`security`**: vulnerability counts by severity (critical/high/medium/low) and a security rating - **`maintenance`**: lifecycle status, latest release date, `is_archived` flag, and a maintenance rating ("Healthy", "Sustainable", or "Inactive") - **`popularity`**: download counts, dependent packages/repos, and a popularity rating - **`community`**: stargazers count, community file presence, and a rating ("Active" or "Sustainable") - **`latest_version`**: the most recent published version - **`recommendation`**: a human-readable summary of the overall assessment ### Step 2.2: Review Tool Results Surface the following from the tool response for comparison: - Overall rating ("Healthy" vs "Review recommended") - Security rating and vulnerability breakdown by severity - Maintenance rating and lifecycle status (check `is_archived`, `latest_release_published_at`) - Popularity and community ratings ### Step 2.3: Disqualifiers **Immediately disqualify packages regardless of overall rating if**: - Security issues found with critical or high severity vulnerabilities - Maintenance rating is "Inactive" or package is archived (`is_archived: true`) - No releases in 3+ years (check `latest_release_published_at`) - Known malicious package (supply chain attack) - Typosquatting indicators (similar name to popular package) --- ## Phase 3: Generate Recommendation **Goal**: Present a clear, actionable comparison. ### Step 3.1: Comparison Table ``` ## Package Comparison: [Use Case] | Criteria | Package A | Package B | Package C | |----------|-----------|-----------|-----------| | **Overall Rating** | Healthy | Review recommended | Healthy | | **Security Rating** | Security issues found | Security issues found | No known security issues | | **Critical CVEs** | 0 | 1 | 0 | | **High CVEs** | 1 | 2 | 0 | | **Maintenance** | Healthy | Inactive | Healthy | | **Last Release** | 2 weeks ago | 8 months ago | 1 month ago | | **Downloads** | 500K | 2M | 300K | | **Popularity** | Influential project | Influential project | Influential project | ### Recommendation: **Package C** **Reasons**: 1. "Healthy" overall rating with no known security issues 2. Healthy maintenance rating - actively maintained with recent release 3. Fewest vulnerabilities across all severity levels **Trade-offs**: - Fewer downloads than Package B (less battle-tested) - Consider if specific features of Package A/B are required **Recommended version**: Use the `latest_version` from the tool response to pin an exact version. ``` ### Step 3.2: Alternative Scenarios If no package meets the security threshold: ``` ## Warning: No Secure Option Available All evaluated packages have significant security concerns: - Package A: 2 Critical CVEs (actively exploited) - Package B: Abandoned - no updates in 3 years - Package C: Multiple high-severity vulnerabilities with no fix available ### Alternatives: 1. **Implement in-house**: For simple functionality 2. **Fork and fix**: If one package is close but has fixable issues 3. **Wait**: If updates are expected soon 4. **Accept risk**: With documented justification and monitoring ``` --- ## Phase 4: Integration Guidance **Goal**: Help the user safely add the recommended package. ### Step 4.1: Post-Installation Scan Recommend running `snyk_sca_scan` after installation to verify the full dependency tree doesn't introduce unexpected vulnerabilities. ### Step 4.2: Monitoring Recommendation Advise committing lock files, enabling vulnerability notifications, and checking for security updates regularly. --- ## Error Handling ### Package Not Found - Verify package name and ecosystem - Check for typos - Search for alternative names ### Scan Fails or Insufficient Data - The tool may return "Snyk doesn't have sufficient information about this package" for some packages - Retry once; if still no data, fall back to manual research - Report partial results with disclaimer that the tool could not assess this package ### No Candidates Meet Threshold - Report why each failed - Suggest alternatives (in-house, fork, wait) - Document risk if user proceeds anyway --- ## Constraints 1. **Never recommend packages with known exploits** 2. **Always specify exact version** in recommendations 3. **Disclose limitations** if full analysis isn't possible 4. **Update recommendations** if user provides new constraints