- Read: 12 min
- Updated: Apr 28, 2026
- Audience: Workspace owners
§ 01 How to think about Apex
Treat Apex like a fast auditing team. It works best on whole systems rather than tiny diffs, with context about architecture, permissions, invariants, and integrations.Key idea Apex works best as a standalone scan of a coherent system. Aim it at one deployable unit at a time, not at every PR.
§ 02 When to run a scan
- Run after a meaningful batch of merged changes - not on every PR.
- Re-scan before major launches, risky refactors, upgrade work, or new external integrations.
- Avoid back-to-back scans on near-identical code.
- The first scan on a system is usually the highest-yield pass.
§ 03 Audit vs normal scans
Two scan modes, picked by what you already know about the system and how much is riding on the result. Normal scan- After a meaningful batch of changes, when you already understand the system.
- Follow-up passes on stable scope.
- When the change matters enough to re-check, but isn’t a launch-grade event.
- When repos, trust boundaries, threat model, and focus areas are already known.
- First scan of a system, protocol, or large codebase.
- Before launch, major release, or external security review handoff.
- After changes to auth, permissions, upgrade paths, signing, payments, settlement, or privileged flows.
- When risk lives in interactions and trust boundaries rather than one file.
Don’t burn an Audit on A small PR (unless it crosses a critical trust boundary), a repeat scan on near-identical code, a tiny isolated change, or work where fast iteration matters more than assurance.
§ 04 Threat model guidance
Apex does not infer priorities from code alone. A few sentences in plain language change the output significantly.- Say directly if griefing or DoS is out of scope.
- Say directly if privileged role abuse, signer misuse, upgrade risk, or fee math matters.
- Specify if only critical and high-severity findings matter.
§ 05 Scope and inputs
- Use one scan for one coherent system whenever possible.
- Provide the best documentation you have: README, architecture notes, trust boundaries, permissions, external integrations.
- Split unrelated apps, services, contracts, and infrastructure into separate scans.
- Do not expand scope just because everything lives in one repository.
Helpful inputs
- Repository selections that map to one deployable unit or review target.
- Current docs explaining architecture, permissions, upgrade paths, and integrations.
- Focused notes on assumptions, legacy paths, sharp edges, and sensitive flows.
§ 06 Splitting large repos
A large monorepo is rarely one review target. The split you want is the split a security reviewer would draw if they had to read the whole thing.- Split by deployable system - When services ship independently, scan them independently.
- Split by trust boundary - Isolate areas that handle secrets, auth, payments, signing, or other privileged actions.
- Split by runtime - Contracts, backend services, frontend apps, and infrastructure are materially different systems.
- Keep code together only when - It should be reasoned about as a single security surface.