Primacode
Skill: privacy-audit
Map what personal data exists and where it flows, grouped by data element rather than by file.
Live Built and working today on the surface this card describes.
What it does
Its own description: use when asked to inventory or review what a system holds and where it travels, for data-retention or data-residency questions, or when preparing a data processing agreement or a record of processing activities.
Findings are grouped by data element, not by file. The reader is answering "where is the phone number", not "what is in this controller".
Each element gets where it is stored, everywhere it flows to, and what the retention is. A missing deletion path is a finding, stated as one.
Unverified is the headline. What could not be determined is listed before what could, with the reason. "No third-party sharing found" and "I did not check third-party sharing" are opposite findings and must never render the same way.
Inputs and outputs
| Input | An existing codebase and its schema. |
|---|---|
| Output | One block per data element: Element, Stored, Flows to, Retention, Verdict. |
| Special-category data | Handled separately, with its own section in the skill. |
| Verdicts | confirmed checked and the risk is real, and say what you read · refuted checked and it does not apply here, and say why not · unverified could not be determined, and say what would settle it. |
Configuration
| How it is chosen | By name, or by the model matching the description this card opens with. That description is the routing rule, and it is what decides which of the nine runs. |
|---|---|
| Where it lives | Embedded in the binary as <name>/SKILL.md, on the branch that ships it. The same file is what the published catalog serves, so there is one copy in one layout. The catalog itself is built and verified and not yet uploaded to the portal. |
PRIMACODE_SKILLS_URL | Points the tool at a catalog of skills. Leave it alone unless you are serving a separate catalog. The nine that ship in the binary are already loaded without it. |
Limits
- It is a survey of existing code and schema, not a check on a pending change. For that, the compliance skill is the one.
- Do not point the tool at the published catalog for these nine. The binary already embeds them, and the loader keys skills by name: a duplicate logs a warning and silently replaces rather than merging.
Example
the shape of one element
Element:
Customer phone number
Stored:
users.phone (varchar) - migration 2026_03_11_create_users.php:14
Flows to:
- GET /api/v1/orders response, unredacted - OrderResource.php:38
- application log on checkout failure - CheckoutService.php:112
- monthly CSV export to finance - ExportJob.php:64
Retention:
No deletion path found. Rows persist after account closure.
Verdict: confirmed Source of truth
primacode/.opencode/skills/privacy-audit/SKILL.md (the checked-out copy; on branch `claim-event-model` the same file is embedded at packages/core/src/plugin/skill/primacode/privacy-audit/SKILL.md, which is what a released binary carries)philosophers_stone/platform/primacode.md § Status (the nine skills ship in the binary, 2026-08-27)