RepoPilot

Dependency evidence API repository v2 · proof loop v1

Give a coding agent repository evidence before it acts, evaluate an exact npm version in bounded project context, then verify the resolved change and local receipts afterward. RepoPilot separates observed evidence, caller-asserted claims, and unknowns. It does not certify safety or production fit.

Quick start

curl
curl -s "https://repopilot.app/api/v2/check?package=npm:express"
json
{
  "version": "2",
  "status": "ok",
  "repo": "expressjs/express",
  "package": "npm:express",
  "signal": "Healthy",
  "recommendation": "proceed_with_review",
  "decision_scope": "Repository-level signals only; verify the exact package version and fit.",
  "signals": {
    "license": "MIT",
    "license_status": "verified",
    "has_tests": true,
    "tests_status": "present",
    "test_receipts": ["test/app.js"],
    "has_ci": true,
    "ci_status": "present",
    "ci_receipts": [".github/workflows/ci.yml"],
    "cve_scan_status": "scanned",
    "cve_dependencies_scanned": 12,
    "evidence_complete": true
  },
  "concerns": [],
  "disclaimer": "Decision support, not a certification or install approval."
}

Check a dependency

GET/api/v2/check
packagenpm package name, optionally prefixed with npm:
repoowner/repo or GitHub URL. Use this for non-npm ecosystems.

Pass exactly one target. Package-to-repository resolution currently supports npm. Cached verdicts return immediately. A miss returns bounded live GitHub/OpenSSF evidence with evidence_source: live_fallback, analysis_cached: false, and explicit unknowns. It does not start a full repository analysis or consume the uncached-analysis budget; do not treat limited evidence as approval.

Existing /api/v1/check callers keep the legacy go/caution/avoid recommendation values.

Evaluate and verify an exact npm change

Call evaluate before changing the manifest or lockfile. It combines immutable npm/deps.dev evidence with a bounded project snapshot and returns blockers, warnings, evidence gaps, required checks, and a deterministic verification context. RepoPilot never installs the package or runs a command.

POST/api/v1/dependency-change/evaluate
json
{
  "change": {
    "ecosystem": "npm",
    "name": "express",
    "from_version": "4.21.2",
    "to_version": "5.1.0",
    "dependency_type": "runtime"
  },
  "project": {
    "package_manager": "npm",
    "node_version": "22.20.0",
    "direct_dependencies": { "express": "^4.21.2" },
    "installed_versions": { "express": "4.21.2" },
    "scripts": ["test", "build"],
    "manifest_path": "package.json",
    "lockfile_path": "package-lock.json",
    "lockfile_sha256": "<64 hex characters>"
  },
  "policy_profile": "strict",
  "intent": "Upgrade the HTTP server"
}

Policy profiles are permissive, balanced (default), and strict. Strict blocks high/critical advisories, requires an npm provenance attestation, and denies packages declaring install lifecycle hooks. Only hook names are returned, never bodies. The response includes a declarative rollback_planthat RepoPilot does not execute. Preserve the returned verification_context unchanged. After the approved change, send it back with the bounded after snapshot, resolved versions, new lockfile digest, and exact command/exit-code receipts.

POST/api/v1/dependency-change/verify
javascript
{
  evaluation: evaluateResponse.verification_context,
  after: {
    package_manager: "npm",
    node_version: "22.20.0",
    direct_dependencies: { express: "^5.1.0" },
    installed_versions: { express: "5.1.0" },
    lockfile_sha256: "<new 64-character digest>",
    resolved_graph_complete: false,
    resolved_changes: [{
      name: "express",
      from_version: "4.21.2",
      to_version: "5.1.0",
      direct: true,
      dependency_type: "runtime"
    }]
  },
  checks: [{ id: "test", command: "npm test", exit_code: 0 }]
}

Verification reports complete, incomplete, or failed. Command receipts are labelled caller_asserted because RepoPilot checks them but did not execute them. Do not rebuild or edit the verification context. Set resolved_graph_complete to true only when the receipt covers the complete installed graph; this direct-change example therefore keeps it false. The verification response repeats the non-executing rollback plan.

Recommendation semantics

proceed_with_review — no blocking repository-level signal was found. Verify exact version, compatibility, provenance, and deployment constraints.

review — concerns or incomplete evidence need a human decision.

avoid — material concerns; require explicit approval and consider alternatives.

Evidence states are present, absent, or unknown. “Absent” is emitted only after a complete Git-tree scan. Ambiguous license metadata is unknown, not a non-standard license claim.

Full repository brief

GET / POST/api/v1/onboard?repo_url=GITHUB_URL

Returns the verdict, evidence, generated onboarding summary, and agent artifacts. Use this when entering an unfamiliar repository; use /check for dependency decisions.

curl
curl -s "https://repopilot.app/api/v1/onboard?repo_url=https://github.com/sindresorhus/slugify"

Change-risk heuristic

POST/api/v1/change-risk
curl
curl -s -X POST https://repopilot.app/api/v1/change-risk \
  -H "Content-Type: application/json" \
  -d '{"repo":"honojs/hono","pr":5086}'

Returns a deterministic 0–10 score based on diff size, file spread, tests touched, sensitive paths, hotspots, and blast radius. It is a change-shape heuristic, not a defect predictor or merge approval.

json
{
  "repo": "owner/repo",
  "files": [
    { "path": "src/auth.ts", "status": "modified", "additions": 4, "deletions": 1 }
  ]
}

Structured file facts keep source and diff hunks local. Inputs are capped at 250 files and relative paths are bounded. Raw diff and repo + pr modes remain available.

MCP server

The live Streamable HTTP endpoint exposes check_dependency, evaluate_dependency_change, verify_dependency_change, analyze_repo, plan_repo_task, get_artifact, compare_repos, and check_change_risk. Each response includes structured agent guidance: a summary, confidence, explicit evidence gaps, and next actions. JSON text is also returned for older clients.

json
{
  "mcpServers": {
    "repopilot": { "url": "https://repopilot.app/api/mcp" }
  }
}

See the MCP quick start for one-line Codex and Claude Code installs, a test prompt, and tool-selection guidance.

Limits, authentication, and errors

Want a rules file instead of wiring the API yourself? Install the Claude Code or Cursor rule.