crawl-apis — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited crawl-apis (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Scan a codebase directory for API definitions and propose registry entries.
$1 — Path to scan (required). Absolute or relative path to the codebase to crawl.--domain <name> — Domain to assign discovered APIs to (optional, will ask if omitted).--write — Write proposed entries to registry immediately (default: preview only).If no path is provided, ask the user which directory to scan.
Read models/registry-mapping.yaml to find:
api_contract entriesapi_endpoint entries_template.md in each folder for frontmatter structureNever hardcode paths. Always derive from the YAML.
Search the target directory for API-related files. Use these detection patterns:
OpenAPI / Swagger specs:
# Find OpenAPI/Swagger YAML and JSON files**/{openapi,swagger}*.{yaml,yml,json}, **/api-spec*.{yaml,yml,json}openapi: or swagger: at the top levelREST route definitions (Node.js/Express/Fastify/Hono):
router\.(get|post|put|delete|patch), app\.(get|post|put|delete|patch), @Get|@Post|@Put|@Delete (NestJS decorators)**/routes/**, **/controllers/**, **/handlers/**, **/api/**GraphQL schemas:
**/*.graphql, **/*.gqltype Query, type Mutation, schema {gRPC / Protobuf:
**/*.protoservice <Name> blocksPython (FastAPI/Flask/Django REST):
@app.route, @router.get|post|put|delete, @api_view, class.*ViewSetFor each discovered API, extract:
| Field | Source |
|---|---|
name | OpenAPI info.title, route prefix, GraphQL type name, proto service name |
description | OpenAPI info.description, JSDoc/docstring if available |
protocol | REST, GraphQL, gRPC, async (inferred from file type) |
endpoints | Individual route paths / operations / queries+mutations |
status | draft (always — human reviews and promotes) |
Before proposing entries, check existing registry entries:
# List existing api-contract and api-endpoint entriesCompare by name (case-insensitive). Flag potential duplicates.
Show the user a summary table:
**API Discovery Results** — scanned: <path>
Found X API definitions:
| # | Name | Protocol | Endpoints | Status |
|---|------|----------|-----------|--------|
| 1 | User API | REST | 5 routes | NEW |
| 2 | Payment API | GraphQL | 3 queries, 2 mutations | NEW |
| 3 | Billing API | REST | 8 routes | DUPLICATE (exists) |
**Proposed Registry Entries:**
For each NEW API, show the proposed frontmatter:
- 1 `api_contract` entry (logical grouping)
- N `api_endpoint` entries (one per route/operation, or grouped by resource)For each approved entry:
_template.md for the target type**Written X entries:**
- api_contract: registry-v2/<path>/api-name.md
- api_endpoint: registry-v2/<path>/endpoint-name.md
**Next steps:**
1. Review and fill in TBD fields (owner, relationships)
2. Wire relationships: `implements_api_contract`, `parent_software_subsystem`
3. Run `/validate` to check model consistencystatus: draft — never auto-promote to activeapi_contract when they share a prefix/resourcecatalog-ui/ and docs-site/ (they're the UI, not the modeled system)~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.