Prima Get an API key

Primacode

Skill: security-audit

Find vulnerabilities in code that already exists, in the order they are actually the way in.

Live Built and working today on the surface this card describes.

What it does

Its own description: use when asked for a security review, whether something is safe, an audit for vulnerabilities, hardening a service before release, or investigating a suspected weakness in authentication, authorization, input handling, secrets, or dependencies.

Work runs in a fixed order, sorted by how often each one is actually the way in rather than by how interesting it is to read about: authentication, authorization, input handling, secrets, transport and storage, dependencies, then rate limiting and resource exhaustion.

Authorization is the big one. For every endpoint that takes an id, the question is whether the handler checks that this caller may touch that object. Missing object-level checks are the most common serious finding in almost every codebase.

A finding marked confirmed has to carry an exploit path. A finding you cannot describe a path to is a suspicion, and belongs under unverified with what would settle it.

Unverified prints first, with its reason.

Inputs and outputs

Input Code that already exists. This surveys a codebase; for a check on a pending change, the compliance skill is the one.
Output One block per finding, most severe first: Risk, How, Exploit, Recommendation, Severity, Verdict.
Secrets Checked in history, not just in the working tree.
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 surveys existing code. It is not a check on a pending diff.
  • Exploit is required on anything marked confirmed, which means a plausible-sounding risk with no described path is not allowed to render as 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 finding

Risk:
Any authenticated user can read any other user's order

How:
GET /api/v1/orders/{id} loads by id and never compares
order.user_id to the caller - OrderController.php:52

Exploit:
Log in as user A, request an order id belonging to user B, receive it

Recommendation:
Scope the query to the caller, or authorize the loaded object

Severity: high
Verdict: confirmed

Source of truth

  • primacode/.opencode/skills/security-audit/SKILL.md (the checked-out copy; on branch `claim-event-model` the same file is embedded at packages/core/src/plugin/skill/primacode/security-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)