crawl-data — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited crawl-data (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 data model 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 models 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:
data_concept entriesdata_aggregate entriesdata_entity entries_template.md in each folder for frontmatter structureNever hardcode paths. Always derive from the YAML.
Search the target directory for data model files. Use these detection patterns:
SQL Schema files:
**/*.sql, **/migrations/**/*.sql, **/schema/**/*.sqlCREATE TABLE, ALTER TABLEPrisma models:
**/schema.prisma, **/*.prismamodel <Name> {@relation)TypeORM / Sequelize / Drizzle (TypeScript ORMs):
@Entity(), @Table, Model.init, pgTable(, mysqlTable(**/models/**, **/entities/**, **/schema/**Pydantic / dataclass models (Python):
class.*BaseModel, @dataclass, class.*Model.*models.Model (Django)**/models/**, **/schemas/**, **/domain/**TypeScript interfaces / types:
export interface, export type.*=.*{**/types/**, **/interfaces/**, **/models/**Protobuf messages:
**/*.protomessage <Name> {For each discovered model, extract:
| Field | Source |
|---|---|
name | Table/class/interface name, converted to Title Case |
description | JSDoc/docstring/comment above definition, or TBD |
entity_type | root if standalone, child if has foreign key to parent, value-object if embedded |
attributes | Column/field definitions with name, type, required status |
classification | pii if field names suggest personal data (email, phone, ssn, address), internal otherwise |
Group discovered models into the three-level registry hierarchy:
Before proposing entries, check existing registry entries:
Show the user a summary:
**Data Model Discovery Results** — scanned: <path>
Found X data models:
**Proposed Hierarchy:**
📦 Customer (Data Concept)
└─ 🗃️ Customer Aggregate (Data Aggregate)
├─ 📝 Customer (root entity, 8 attributes)
├─ 📝 Customer Address (child entity, 5 attributes)
└─ 📝 Customer Preference (value-object, 3 attributes)
📦 Order (Data Concept)
└─ 🗃️ Order Aggregate (Data Aggregate)
├─ 📝 Order (root entity, 12 attributes)
└─ 📝 Order Line Item (child entity, 6 attributes)
**Duplicates:** (if any)
- "Customer" already exists in registry as data-concepts/customer.md
**Classification hints:**
- Customer → PII detected (email, phone fields)
- Order → internalFor each approved entry:
_template.md for the target typename, description, status: draftclassification for data_conceptentity_type and attributes for data_entityparent_data_concept, parent_data_aggregate)**Written X entries:**
- data_concept: registry-v2/<path>/concept-name.md
- data_aggregate: registry-v2/<path>/aggregate-name.md
- data_entity: registry-v2/<path>/entity-name.md
**Next steps:**
1. Review and fill in TBD fields (owner, description)
2. Verify classification (PII, business-confidential, internal)
3. Wire component relationships: `owned_by_component`
4. Run `/validate` to check model consistencystatus: draft — never auto-promote to active~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.