Pentest SAST — Orchestration Skill
This skill is the entry point for the vantage plugin. It covers both
the web and mobile scan pipelines, and the separate fix capability.
It is intentionally short: everything phase-specific lives in
${CLAUDE_PLUGIN_ROOT}/agents/{web,mobile,others}/*.md, read on demand.
Cross-phase control (gates, parallelism, resume) lives in
${CLAUDE_PLUGIN_ROOT}/workflow/orchestration.md.
Two roots — do not confuse them
- Plugin assets (
workflow/, agents/, schemas/, templates/,
knowledge/, examples/, START-HERE.md, TIMESTAMPS.md) live at
${CLAUDE_PLUGIN_ROOT} — always resolve them from there, never from the
target project's working directory.
- Artifacts (scope, endpoints, findings, PoCs, reports, fixes) are
per-engagement output, always written under
./.vantage/artifacts/...
relative to the target project currently open — never inside the
plugin's own install directory.
Golden rules (non-negotiable)
- SAST only during scanning. Analyze source code, configuration, and
dependencies. Never run the application, never install a mobile build,
never send requests, never exploit live systems. (Live verification of a
PoC is a separate, human-run manual step.)
- One exception:
fix-agent. Every scan-phase agent is strictly
read-only. fix-agent — invoked only by /vantage:fix-issue,
/vantage:fix, or /vantage:fix-diff, never automatically — is the sole
agent allowed to edit the target repository's source code, and only to
implement an already-validated finding's remediation. See "Fixing
findings" below.
- Artifacts are the single source of truth. Every phase reads the
previous phase's artifact and writes its own — no shared memory between
agents.
- Validate before reporting or fixing. No finding reaches a report, and
no finding gets fixed, without passing
validator-agent first.
- Impact-first. Critical → High → Medium before Low/Informational.
- Never block on the user. If
scope.json is missing, auto-generate it
from ${CLAUDE_PLUGIN_ROOT}/artifacts/recon/scope.json.template (a plugin
asset) with sane defaults and proceed. If the user's request implies a
platform ("this is an Android app", "review this iOS codebase" → mobile;
otherwise → web), set platform accordingly instead of always defaulting
to web.
Full detail: ${CLAUDE_PLUGIN_ROOT}/START-HERE.md (golden rules §1, universal
agent loop §5, quality bar §8) and cross-phase control (gates, parallelism,
platform routing, resume, failure handling) in
${CLAUDE_PLUGIN_ROOT}/workflow/orchestration.md.
The scan pipeline
Phases 01-03 route by scope.json.platform; phases 04-06 are shared. Each
agent file is self-contained — there is no separate phase file to read.
| # |
Phase |
platform: "web" |
platform: "mobile" |
| 01 |
Recon |
recon-agent |
mobile-recon-agent |
| 02 |
Mapping |
mapper-agent |
mobile-mapper-agent |
| 03 |
Testing |
auth-agent, authorization-agent, api-agent, sqli-agent, xss-agent, upload-agent, business-logic-agent, injection-agent, dependency-agent, secrets-agent (parallel) |
credential-usage-agent, supply-chain-agent, mobile-auth-agent, mobile-validation-agent, mobile-network-agent, privacy-agent, binary-protection-agent, mobile-config-agent, mobile-storage-agent, mobile-crypto-agent (parallel; M1-M10) |
| 04 |
Validation |
validator-agent — same agent, either platform |
|
| 05 |
PoC |
poc-agent — same agent, either platform |
|
| 06 |
Reporting |
report-agent — same agent, either platform |
|
Phases run strictly in order 01→06; a phase only starts once its gate
(defined in ${CLAUDE_PLUGIN_ROOT}/workflow/orchestration.md) is
satisfied. Phase 03's 10 agents (whichever platform's set) run in parallel
and each write their own raw-findings.<agent-name>.json — never a shared
file, and never mix web and mobile agents in the same Phase 03 run.
How to operate — scanning
- Determine platform once: read
scope.json.platform if it exists, or
infer it from the user's request/repo structure (Android/iOS project
layout → mobile; otherwise → web) when generating a fresh scope.json.
Every phase after this dispatches the matching agent set from the table
above instead of assuming web.
- Determine scope: if the user named a specific phase or vulnerability
class, dispatch only the relevant agent(s) (via Task). Otherwise run the
full pipeline, phase by phase.
- Before each phase, check its gate in
${CLAUDE_PLUGIN_ROOT}/workflow/orchestration.md and
confirm/auto-generate ./.vantage/artifacts/recon/scope.json if needed.
- Dispatch the owning agent(s) for that phase (see table above) via the Task
tool — each subagent reads its own
${CLAUDE_PLUGIN_ROOT}/agents/{web,mobile,others}/<name>.md for full
methodology.
- After Phase 03, merge all
raw-findings.*.json before Phase 04 validates
(this works identically whether they came from the web or mobile agent set).
- Append one line per agent run to
./.vantage/artifacts/run-log.md.
- Stop and report using the exact artifact paths — never invent alternate
filenames (e.g. no
SAST-REPORT.md).
Slash-command equivalent: /vantage:scan-web or /vantage:scan-mobile —
each forces its platform and runs phases 01-06 in one go.
Fast incremental check — one commit or PR/MR, not the full pipeline
For "does this commit/PR introduce a vuln" instead of a full repo review,
use /vantage:scan-diff [commit-hash | PR/MR number]
(${CLAUDE_PLUGIN_ROOT}/commands/scan-diff.md) — not part of Phases
01-06. It diffs the change, dispatches the platform's 10 testing agents
scoped to just the changed lines, validates, and generates a PoC per
Medium-Critical finding — all under a self-contained
artifacts/commit-scans/<id>/. No report.md is produced; results are
reported directly in chat. A clean result only means that diff is clean, not
the whole app.
Fixing findings — separate from scanning, and destructive by design
fix-agent (${CLAUDE_PLUGIN_ROOT}/agents/others/fix-agent.md) applies a
validated finding's remediation directly to the target repository's source
code. This is never triggered automatically by a scan — only by explicit
request, matching /vantage:fix-issue <id> (one finding), /vantage:fix
(all validated findings, dispatched sequentially, never in parallel,
since fixes may touch the same file), or /vantage:fix-diff <commit-scan-id> <finding-id> (a finding from scan-diff instead of the main pipeline).
- Confirm the finding exists and
validated: true in
artifacts/findings/validated-findings.json (or
artifacts/commit-scans/<id>/validated-findings.json for fix-diff);
skip if its fix record already exists (already handled).
- Dispatch
fix-agent via Task. It re-locates the vulnerable pattern in the
current source (it may have moved), applies the minimal targeted edit, and
writes a fix record — or marks the finding not_auto_fixable with a
reason instead of guessing.
fix-agent never runs a build, test suite, or the application — always
tell the user to review git diff and run their own tests before committing.
Slash-command equivalent: /vantage:fix-issue <id>, /vantage:fix, or
/vantage:fix-diff <commit-scan-id> <finding-id>.
1---2name: vantage3description: Autonomous, artifact-driven SAST (Static Application Security Testing) for web AND mobile app repositories, plus optional code-level remediation. Use whenever the user asks to security-review, pentest, audit, or scan a codebase for vulnerabilities — web (SQLi, XSS, IDOR/BOLA, auth bypass, SSRF, XXE, hardcoded secrets, vulnerable dependencies, business logic flaws) or mobile/Android/iOS (OWASP Mobile Top 10 2024: improper credential usage, insecure data storage, insecure communication, insufficient cryptography, etc.) — via static code analysis, never by running the app, installing it, or sending requests. Also use when the user asks to fix, patch, or remediate a finding this framework produced, or to check a single commit/PR/MR for newly introduced vulnerabilities without a full repo scan. Drives a 6-phase scan pipeline (recon, mapping, testing, validation, PoC, reporting) through the vantage plugin's specialized subagents, branching on platform, plus a separate on-demand fix step and a fast incremental commi4---56# Pentest SAST — Orchestration Skill78This skill is the entry point for the `vantage` plugin. It covers **both**9the web and mobile **scan** pipelines, and the separate **fix** capability.10It is intentionally short: everything phase-specific lives in11`${CLAUDE_PLUGIN_ROOT}/agents/{web,mobile,others}/*.md`, read on demand.12Cross-phase control (gates, parallelism, resume) lives in13`${CLAUDE_PLUGIN_ROOT}/workflow/orchestration.md`.1415## Two roots — do not confuse them1617- **Plugin assets** (`workflow/`, `agents/`, `schemas/`, `templates/`,18 `knowledge/`, `examples/`, `START-HERE.md`, `TIMESTAMPS.md`) live at19 `${CLAUDE_PLUGIN_ROOT}` — always resolve them from there, never from the20 target project's working directory.21- **Artifacts** (scope, endpoints, findings, PoCs, reports, fixes) are22 per-engagement output, always written under `./.vantage/artifacts/...`23 **relative to the target project currently open** — never inside the24 plugin's own install directory.2526## Golden rules (non-negotiable)27281. **SAST only during scanning.** Analyze source code, configuration, and29 dependencies. Never run the application, never install a mobile build,30 never send requests, never exploit live systems. (Live verification of a31 PoC is a separate, human-run manual step.)322. **One exception: `fix-agent`.** Every scan-phase agent is strictly33 read-only. `fix-agent` — invoked only by `/vantage:fix-issue`,34 `/vantage:fix`, or `/vantage:fix-diff`, never automatically — is the sole35 agent allowed to edit the target repository's source code, and only to36 implement an already-validated finding's remediation. See "Fixing37 findings" below.383. **Artifacts are the single source of truth.** Every phase reads the39 previous phase's artifact and writes its own — no shared memory between40 agents.414. **Validate before reporting or fixing.** No finding reaches a report, and42 no finding gets fixed, without passing `validator-agent` first.435. **Impact-first.** Critical → High → Medium before Low/Informational.446. **Never block on the user.** If `scope.json` is missing, auto-generate it45 from `${CLAUDE_PLUGIN_ROOT}/artifacts/recon/scope.json.template` (a plugin46 asset) with sane defaults and proceed. If the user's request implies a47 platform ("this is an Android app", "review this iOS codebase" → mobile;48 otherwise → web), set `platform` accordingly instead of always defaulting49 to web.5051Full detail: `${CLAUDE_PLUGIN_ROOT}/START-HERE.md` (golden rules §1, universal52agent loop §5, quality bar §8) and cross-phase control (gates, parallelism,53platform routing, resume, failure handling) in54`${CLAUDE_PLUGIN_ROOT}/workflow/orchestration.md`.5556## The scan pipeline5758Phases 01-03 route by `scope.json.platform`; phases 04-06 are shared. Each59agent file is self-contained — there is no separate phase file to read.6061| # | Phase | `platform: "web"` | `platform: "mobile"` |62|---|-------|--------------------|------------------------|63| 01 | Recon | `recon-agent` | `mobile-recon-agent` |64| 02 | Mapping | `mapper-agent` | `mobile-mapper-agent` |65| 03 | Testing | `auth-agent`, `authorization-agent`, `api-agent`, `sqli-agent`, `xss-agent`, `upload-agent`, `business-logic-agent`, `injection-agent`, `dependency-agent`, `secrets-agent` (parallel) | `credential-usage-agent`, `supply-chain-agent`, `mobile-auth-agent`, `mobile-validation-agent`, `mobile-network-agent`, `privacy-agent`, `binary-protection-agent`, `mobile-config-agent`, `mobile-storage-agent`, `mobile-crypto-agent` (parallel; M1-M10) |66| 04 | Validation | `validator-agent` — same agent, either platform | |67| 05 | PoC | `poc-agent` — same agent, either platform | |68| 06 | Reporting | `report-agent` — same agent, either platform | |6970Phases run strictly in order 01→06; a phase only starts once its gate71(defined in `${CLAUDE_PLUGIN_ROOT}/workflow/orchestration.md`) is72satisfied. Phase 03's 10 agents (whichever platform's set) run in parallel73and each write their own `raw-findings.<agent-name>.json` — never a shared74file, and never mix web and mobile agents in the same Phase 03 run.7576## How to operate — scanning77781. Determine platform **once**: read `scope.json.platform` if it exists, or79 infer it from the user's request/repo structure (Android/iOS project80 layout → mobile; otherwise → web) when generating a fresh `scope.json`.81 Every phase after this dispatches the matching agent set from the table82 above instead of assuming web.832. Determine scope: if the user named a specific phase or vulnerability84 class, dispatch only the relevant agent(s) (via Task). Otherwise run the85 full pipeline, phase by phase.863. Before each phase, check its gate in87 `${CLAUDE_PLUGIN_ROOT}/workflow/orchestration.md` and88 confirm/auto-generate `./.vantage/artifacts/recon/scope.json` if needed.894. Dispatch the owning agent(s) for that phase (see table above) via the Task90 tool — each subagent reads its own91 `${CLAUDE_PLUGIN_ROOT}/agents/{web,mobile,others}/<name>.md` for full92 methodology.935. After Phase 03, merge all `raw-findings.*.json` before Phase 04 validates94 (this works identically whether they came from the web or mobile agent set).956. Append one line per agent run to `./.vantage/artifacts/run-log.md`.967. Stop and report using the exact artifact paths — never invent alternate97 filenames (e.g. no `SAST-REPORT.md`).9899Slash-command equivalent: `/vantage:scan-web` or `/vantage:scan-mobile` —100each forces its platform and runs phases 01-06 in one go.101102## Fast incremental check — one commit or PR/MR, not the full pipeline103104For "does this commit/PR introduce a vuln" instead of a full repo review,105use `/vantage:scan-diff [commit-hash | PR/MR number]`106(`${CLAUDE_PLUGIN_ROOT}/commands/scan-diff.md`) — **not** part of Phases10701-06. It diffs the change, dispatches the platform's 10 testing agents108scoped to just the changed lines, validates, and generates a PoC per109Medium-Critical finding — all under a self-contained110`artifacts/commit-scans/<id>/`. No `report.md` is produced; results are111reported directly in chat. A clean result only means that diff is clean, not112the whole app.113114## Fixing findings — separate from scanning, and destructive by design115116`fix-agent` (`${CLAUDE_PLUGIN_ROOT}/agents/others/fix-agent.md`) applies a117validated finding's remediation directly to the target repository's source118code. This is **never** triggered automatically by a scan — only by explicit119request, matching `/vantage:fix-issue <id>` (one finding), `/vantage:fix`120(all validated findings, dispatched **sequentially**, never in parallel,121since fixes may touch the same file), or `/vantage:fix-diff <commit-scan-id>122<finding-id>` (a finding from `scan-diff` instead of the main pipeline).1231241. Confirm the finding exists and `validated: true` in125 `artifacts/findings/validated-findings.json` (or126 `artifacts/commit-scans/<id>/validated-findings.json` for `fix-diff`);127 skip if its fix record already exists (already handled).1282. Dispatch `fix-agent` via Task. It re-locates the vulnerable pattern in the129 current source (it may have moved), applies the minimal targeted edit, and130 writes a fix record — or marks the finding `not_auto_fixable` with a131 reason instead of guessing.1323. `fix-agent` never runs a build, test suite, or the application — always133 tell the user to review `git diff` and run their own tests before committing.134135Slash-command equivalent: `/vantage:fix-issue <id>`, `/vantage:fix`, or136`/vantage:fix-diff <commit-scan-id> <finding-id>`.