Adversarial pre-deploy security gate for web apps and APIs, especially AI/vibe-coded builds. Use after substantial implementation, before production release, or when asked whether an app is safe to ship. Composes security-and-hardening with evidence-driven attack-path checks, safe remediation, and mandatory retesting. Not for pure security theory or a single isolated hardening question.
A working happy path is not evidence that an application is safe to ship. This skill turns security review into a release gate: inspect the actual implementation, identify which controls apply to the detected stack, attempt realistic misuse paths, fix what can be fixed safely, and retest the final tree.
This skill owns gating and adversarial verification. Use security-and-hardening as the underlying control library rather than duplicating its general secure-coding guidance.
When to Use
Use this skill when any of the following is true:
an app, API, dashboard, SaaS, ecommerce feature, or backend is about to be deployed;
substantial functionality was generated or modified quickly by an AI coding agent;
authentication, authorization, database access, uploads, webhooks, payments, admin features, or multi-tenant data are involved;
the user asks whether an application is secure, production-ready, or likely to get hacked;
a prototype is becoming a real product.
Not for: generic explanations of security concepts, one isolated vulnerability question, or work with no runnable/application surface. Use security-and-hardening directly for those.
Required Companion Skills
Load security-and-hardening for control-level guidance.
Use verification-before-completion for evidence discipline.
Use verification-gauntlet when the project supports Agentit's runnable verification probes.
For Supabase/Postgres projects, also load supabase-postgres-best-practices when database policy or schema work is material.
Gate Contract
The final result is exactly one of:
PASS — no unresolved Critical or High finding; material attack paths were retested on the final tree; residual Medium/Low risks are documented.
BLOCKED — one or more release-blocking findings remain, required evidence is unavailable, or a critical control could not be verified.
Never claim an application is "secure" in the absolute sense. A PASS means production-ready from the scope of this security gate with the evidence collected.
Automatic release blockers
Block release when any of these is present or cannot be ruled out with reasonable evidence:
a privileged secret is exposed in client code, build output, logs, or reachable Git history and has not been revoked/rotated;
unauthenticated access to protected functionality;
horizontal or vertical authorization bypass (IDOR/BOLA, cross-tenant access, admin-role bypass);
realistic SQL/NoSQL/command/template injection, SSRF, or remote-code-execution path;
plaintext/recoverable password storage when the application itself stores passwords;
unsafe upload behavior that enables code execution, path traversal, or unintended private-object disclosure;
missing verification on security-sensitive webhooks or callbacks where forgery can cause privileged state changes;
production debug/admin surfaces that materially bypass normal controls.
Process
1. Map the real attack surface
Inspect the repository and deployed architecture before applying a checklist. Record:
frontend framework and what code executes in the browser;
backend/API/serverless functions and public endpoints;
authentication provider and session/token mechanism;
database, ORM/query layer, row/tenant model, and direct client-to-database access;
object/file storage and upload/download flows;
privileged/admin functions;
webhooks, payment callbacks, email flows, OAuth redirects, and third-party APIs;
secrets, PII, payment data, health/financial data, or other sensitive assets.
Mark each control below as applicable, not applicable with reason, or unverified. Do not force stack-specific advice onto a stack where it does not apply.
For common stacks, load references/stack-specific.md only for the detected technologies.
2. Secrets and client exposure
Verify all of the following:
no privileged API keys, database credentials, service-role keys, private keys, signing secrets, webhook secrets, or session secrets are shipped to the browser;
values intentionally designed to be public are distinguished from privileged secrets rather than blindly hidden;
.env*, CI variables, examples, fixtures, logs, error payloads, source maps/build artifacts, and generated config do not leak secrets;
staged changes and repository history are checked for previously committed credentials;
if a real secret reached a remote repository, revoke/rotate first; removing the line or rewriting Git history alone is insufficient;
purge from history only after rotation and only with explicit authorization for the history rewrite.
3. Authentication and session integrity
Verify server-side enforcement, not UI behavior:
every protected action validates the session/token server-side;
session cookies use appropriate HttpOnly, Secure, SameSite, expiry, rotation, and revocation controls when cookies are used;
token validation checks signature and relevant expiry/issuer/audience claims;
password hashing is required only when the app itself stores passwords; managed auth providers own password storage otherwise;
login, signup, MFA, password reset, email verification, and recovery flows cannot be trivially abused or replayed;
reset/verification tokens expire and are single-use where appropriate;
account existence is not unnecessarily enumerable through login/reset/signup responses or timing;
login and recovery endpoints have abuse controls appropriate to the deployment topology.
4. Authorization, ownership, and tenant isolation
Authentication is not authorization. Attempt to cross every object and privilege boundary:
request another user's record by changing IDs, slugs, query parameters, body fields, or GraphQL variables;
update/delete another user's object directly through the API rather than through the UI;
call admin/moderator/owner actions as a normal user;
change role, ownerId, tenantId, userId, price, discount, status, approval flags, entitlement fields, or other privileged fields in request bodies;
test list/search/export endpoints for cross-tenant leakage, not only single-record endpoints;
verify database/RLS/storage policies where clients can reach those systems directly;
verify server-side queries include the required ownership/tenant constraint even if the UI hides foreign records.
A client-side check, hidden button, route middleware, or guessed-unpredictable ID is never sufficient authorization.
5. Database and state mutation
Verify:
parameterized queries or safe ORM bindings are used; untrusted data is not concatenated into SQL/NoSQL/query DSLs;
server-side schemas validate input before state changes;
writes use explicit allowlists/DTOs so extra client fields cannot cause mass assignment or field tampering;
least-privilege database/service credentials are used;
row-level security/policies are enabled and tested when they are part of the trust boundary;
sensitive data is protected in transit, at rest, and with field-level encryption only where the sensitivity/threat model warrants it;
backups, exports, analytics replicas, caches, and search indexes do not accidentally become weaker copies of protected data;
API responses return only fields required by the caller; do not serialize entire database records by default.
6. Input, output, and dangerous sinks
Trace untrusted data from entry point to sink. Check for:
server-side schema validation, length/range limits, and allowlists;
contextual escaping/encoding and safe framework rendering for user-controlled content;
XSS through HTML/Markdown/rich text, stored content, error messages, or model-generated output;
SSRF wherever a user can influence a server-side URL, including image proxies, imports, previews, webhooks, and crawlers;
open/unsafe redirects in OAuth, login, checkout, or next/returnUrl flows;
CORS that is restricted to intended origins and never combines wildcard trust with credentials.
Do not run destructive exploit payloads against production. Prefer controlled local/staging repros or static/data-flow evidence when active testing could harm real systems.
7. File uploads and object storage
When uploads exist, verify:
size limits, file-count limits, and authenticated/authorized upload paths;
type checks do not trust the extension or client-provided MIME value alone when content is security-sensitive;
filenames/paths are generated safely and cannot traverse directories or overwrite arbitrary objects;
uploaded content cannot execute as application code;
private files are private by default and downloads re-check authorization or use appropriately scoped/expiring signed URLs;
image/document processing libraries are patched and resource limits prevent decompression/processing abuse;
malware scanning or quarantine is used when the product's threat model warrants it.
8. Webhooks, external integrations, and abuse controls
Verify:
webhook signatures/authentication are checked before processing privileged events;
timestamp/freshness or event-ID deduplication prevents replay where replay matters;
payment/order/entitlement state is derived from trusted server-side events, not client-submitted success flags;
external API credentials are scoped to least privilege;
login, reset, signup, invitation, verification, expensive search/AI endpoints, and mutation-heavy APIs have rate limits appropriate to expected abuse;
multi-instance/serverless deployments use a shared or platform-level limiter rather than per-process counters when consistency matters;
bot protection/CAPTCHA is added only where abuse evidence or risk warrants it; do not use it as a substitute for authorization or rate limiting.
9. Browser, transport, API, and deployment hardening
Verify the deployed configuration, not just source intent:
HTTPS is enforced end-to-end; HSTS is used where appropriate;
CSP, frame-ancestors/anti-clickjacking, X-Content-Type-Options, Referrer Policy, and Permissions Policy are set appropriately;
CSRF is addressed for cookie-authenticated state-changing requests unless the architecture provides an equivalent protection;
production errors do not expose stack traces, queries, filesystem paths, secrets, or internal identifiers unnecessarily;
debug endpoints, development bypasses, test accounts, default credentials, and unintended admin panels are absent from production;
source maps/build metadata are intentionally exposed or withheld based on whether they reveal sensitive implementation details;
public ports/services and cloud/storage permissions match the intended attack surface;
preview/staging and production secrets/data are separated.
10. Dependency and supply-chain review
Use the repository's actual package manager and committed lockfile. Verify:
the dependency graph installs reproducibly;
native advisory scans are run and Critical/High results are triaged for reachability and fix risk;
unreviewed package lifecycle/install scripts are not blindly executed;
new dependencies and suspicious lockfile changes are reviewed for provenance, ownership, typosquatting, unexpected scripts, and transitive risk;
forced/breaking audit remediation is not applied blindly;
CI/CD credentials have minimum required scope and untrusted PR/build contexts cannot read privileged secrets.
Adversarial Retest Matrix
After fixes, retest the final tree. At minimum, cover every applicable row:
Attack path
Required evidence
Unauthenticated protected request
Direct API/server call is rejected
Horizontal IDOR/BOLA
User A cannot read/update/delete User B's object
Vertical privilege escalation
Normal user cannot invoke admin/owner action
Cross-tenant list/search/export
Tenant A receives no Tenant B records
Field tampering / mass assignment
Privileged fields are ignored/rejected server-side
Expired/tampered/replayed session
Invalid session is rejected and sensitive action does not occur
Password reset / verification abuse
Tokens expire/single-use as applicable; responses avoid needless enumeration
Injection / dangerous sink
Controlled malicious inputs remain data, not executable/query structure
XSS / rich user content
Output renders safely in the relevant browser surface
SSRF / outbound URL control
Disallowed/private destinations cannot be reached through user-influenced fetches
Bad signature or disallowed replay cannot mutate privileged state
Rate-limit abuse
Repeated auth/high-cost attempts are throttled in the real deployment topology
API overfetching
Sensitive/internal fields are absent from responses
If a test would be unsafe against production, use staging/local execution, an isolated test tenant, or static evidence and record the limitation.
Safe Auto-Fix Policy
When the repository is writable, fix issues instead of merely listing them when the change is bounded, reversible, and testable. Typical safe fixes include:
server-side validation schemas and explicit writable-field allowlists;
missing ownership/tenant guards;
response DTO/serializer allowlists;
secure cookie flags and token checks;
security headers, strict CORS configuration, and safe redirect validation;
upload size/type/path restrictions;
rate-limit integration/configuration;
tests that reproduce IDOR, privilege, tampering, replay, and leakage regressions;
database/RLS migrations as code when they can be reviewed before deployment.
Do not silently perform irreversible or production-wide actions. Require explicit authorization and a rollback plan before revoking live credentials, rewriting published Git history, deleting production data, changing live tenant/admin roles, or applying policy changes that could lock users out.
Stack-Specific Rules
Do not memorize folklore such as "all API keys must be hidden." Some stacks intentionally expose identifiers or publishable keys while relying on server-side policy as the security boundary.
Load references/stack-specific.md for the detected stack. Its rules currently cover Supabase, Firebase, managed auth providers, Next.js, common serverless deployments, payments/webhooks, and object storage.
Do not inflate severity. A finding's severity depends on exploitability, privileges required, blast radius, data sensitivity, and deployment context.
Completion Criteria
The skill is complete only when:
attack surface and trust boundaries are documented;
every relevant control is classified as applicable, not applicable with reason, or unverified;
secrets/client exposure and Git-history risk were checked;
authentication, authorization, ownership, admin, and tenant boundaries were tested where applicable;
input/output, database, file, webhook, session, deployment, and supply-chain surfaces were reviewed where applicable;
safe fixes were applied and verified instead of only recommended;
adversarial tests were rerun on the final tree after fixes;
no unresolved Critical/High finding remains for PASS;
every evidence gap or accepted residual risk is explicit;
final status is PASS or BLOCKED, never a vague "looks secure".
1---2name: app-security-gate3description: Adversarial pre-deploy security gate for web apps and APIs, especially AI/vibe-coded builds. Use after substantial implementation, before production release, or when asked whether an app is safe to ship. Composes security-and-hardening with evidence-driven attack-path checks, safe remediation, and mandatory retesting. Not for pure security theory or a single isolated hardening question.4---56# App Security Gate78A working happy path is not evidence that an application is safe to ship. This skill turns security review into a release gate: inspect the actual implementation, identify which controls apply to the detected stack, attempt realistic misuse paths, fix what can be fixed safely, and retest the final tree.910This skill owns **gating and adversarial verification**. Use `security-and-hardening` as the underlying control library rather than duplicating its general secure-coding guidance.1112## When to Use1314Use this skill when any of the following is true:1516- an app, API, dashboard, SaaS, ecommerce feature, or backend is about to be deployed;17- substantial functionality was generated or modified quickly by an AI coding agent;18- authentication, authorization, database access, uploads, webhooks, payments, admin features, or multi-tenant data are involved;19- the user asks whether an application is secure, production-ready, or likely to get hacked;20- a prototype is becoming a real product.2122**Not for:** generic explanations of security concepts, one isolated vulnerability question, or work with no runnable/application surface. Use `security-and-hardening` directly for those.2324## Required Companion Skills2526- Load `security-and-hardening` for control-level guidance.27- Use `verification-before-completion` for evidence discipline.28- Use `verification-gauntlet` when the project supports Agentit's runnable verification probes.29- For Supabase/Postgres projects, also load `supabase-postgres-best-practices` when database policy or schema work is material.3031## Gate Contract3233The final result is exactly one of:3435- **PASS** — no unresolved Critical or High finding; material attack paths were retested on the final tree; residual Medium/Low risks are documented.36- **BLOCKED** — one or more release-blocking findings remain, required evidence is unavailable, or a critical control could not be verified.3738Never claim an application is "secure" in the absolute sense. A PASS means **production-ready from the scope of this security gate with the evidence collected**.3940### Automatic release blockers4142Block release when any of these is present or cannot be ruled out with reasonable evidence:4344- a privileged secret is exposed in client code, build output, logs, or reachable Git history and has not been revoked/rotated;45- unauthenticated access to protected functionality;46- horizontal or vertical authorization bypass (IDOR/BOLA, cross-tenant access, admin-role bypass);47- realistic SQL/NoSQL/command/template injection, SSRF, or remote-code-execution path;48- plaintext/recoverable password storage when the application itself stores passwords;49- unsafe upload behavior that enables code execution, path traversal, or unintended private-object disclosure;50- missing verification on security-sensitive webhooks or callbacks where forgery can cause privileged state changes;51- production debug/admin surfaces that materially bypass normal controls.5253## Process5455### 1. Map the real attack surface5657Inspect the repository and deployed architecture before applying a checklist. Record:5859- frontend framework and what code executes in the browser;60- backend/API/serverless functions and public endpoints;61- authentication provider and session/token mechanism;62- database, ORM/query layer, row/tenant model, and direct client-to-database access;63- object/file storage and upload/download flows;64- privileged/admin functions;65- webhooks, payment callbacks, email flows, OAuth redirects, and third-party APIs;66- CI/CD, runtime environment, preview/staging/production boundaries;67- secrets, PII, payment data, health/financial data, or other sensitive assets.6869Mark each control below as **applicable**, **not applicable with reason**, or **unverified**. Do not force stack-specific advice onto a stack where it does not apply.7071For common stacks, load `references/stack-specific.md` only for the detected technologies.7273### 2. Secrets and client exposure7475Verify all of the following:7677- no privileged API keys, database credentials, service-role keys, private keys, signing secrets, webhook secrets, or session secrets are shipped to the browser;78- values intentionally designed to be public are distinguished from privileged secrets rather than blindly hidden;79- `.env*`, CI variables, examples, fixtures, logs, error payloads, source maps/build artifacts, and generated config do not leak secrets;80- staged changes and repository history are checked for previously committed credentials;81- if a real secret reached a remote repository, **revoke/rotate first**; removing the line or rewriting Git history alone is insufficient;82- purge from history only after rotation and only with explicit authorization for the history rewrite.8384### 3. Authentication and session integrity8586Verify server-side enforcement, not UI behavior:8788- every protected action validates the session/token server-side;89- session cookies use appropriate `HttpOnly`, `Secure`, `SameSite`, expiry, rotation, and revocation controls when cookies are used;90- token validation checks signature and relevant expiry/issuer/audience claims;91- password hashing is required only when the app itself stores passwords; managed auth providers own password storage otherwise;92- login, signup, MFA, password reset, email verification, and recovery flows cannot be trivially abused or replayed;93- reset/verification tokens expire and are single-use where appropriate;94- account existence is not unnecessarily enumerable through login/reset/signup responses or timing;95- login and recovery endpoints have abuse controls appropriate to the deployment topology.9697### 4. Authorization, ownership, and tenant isolation9899Authentication is not authorization. Attempt to cross every object and privilege boundary:100101- request another user's record by changing IDs, slugs, query parameters, body fields, or GraphQL variables;102- update/delete another user's object directly through the API rather than through the UI;103- call admin/moderator/owner actions as a normal user;104- change `role`, `ownerId`, `tenantId`, `userId`, price, discount, status, approval flags, entitlement fields, or other privileged fields in request bodies;105- test list/search/export endpoints for cross-tenant leakage, not only single-record endpoints;106- verify database/RLS/storage policies where clients can reach those systems directly;107- verify server-side queries include the required ownership/tenant constraint even if the UI hides foreign records.108109A client-side check, hidden button, route middleware, or guessed-unpredictable ID is never sufficient authorization.110111### 5. Database and state mutation112113Verify:114115- parameterized queries or safe ORM bindings are used; untrusted data is not concatenated into SQL/NoSQL/query DSLs;116- server-side schemas validate input before state changes;117- writes use explicit allowlists/DTOs so extra client fields cannot cause mass assignment or field tampering;118- least-privilege database/service credentials are used;119- row-level security/policies are enabled and tested when they are part of the trust boundary;120- sensitive data is protected in transit, at rest, and with field-level encryption only where the sensitivity/threat model warrants it;121- backups, exports, analytics replicas, caches, and search indexes do not accidentally become weaker copies of protected data;122- API responses return only fields required by the caller; do not serialize entire database records by default.123124### 6. Input, output, and dangerous sinks125126Trace untrusted data from entry point to sink. Check for:127128- server-side schema validation, length/range limits, and allowlists;129- contextual escaping/encoding and safe framework rendering for user-controlled content;130- XSS through HTML/Markdown/rich text, stored content, error messages, or model-generated output;131- SQL/NoSQL injection, shell/command injection, template injection, unsafe `eval`, unsafe deserialization, and path traversal;132- SSRF wherever a user can influence a server-side URL, including image proxies, imports, previews, webhooks, and crawlers;133- open/unsafe redirects in OAuth, login, checkout, or `next`/`returnUrl` flows;134- CORS that is restricted to intended origins and never combines wildcard trust with credentials.135136Do not run destructive exploit payloads against production. Prefer controlled local/staging repros or static/data-flow evidence when active testing could harm real systems.137138### 7. File uploads and object storage139140When uploads exist, verify:141142- size limits, file-count limits, and authenticated/authorized upload paths;143- type checks do not trust the extension or client-provided MIME value alone when content is security-sensitive;144- filenames/paths are generated safely and cannot traverse directories or overwrite arbitrary objects;145- uploaded content cannot execute as application code;146- private files are private by default and downloads re-check authorization or use appropriately scoped/expiring signed URLs;147- image/document processing libraries are patched and resource limits prevent decompression/processing abuse;148- malware scanning or quarantine is used when the product's threat model warrants it.149150### 8. Webhooks, external integrations, and abuse controls151152Verify:153154- webhook signatures/authentication are checked before processing privileged events;155- timestamp/freshness or event-ID deduplication prevents replay where replay matters;156- payment/order/entitlement state is derived from trusted server-side events, not client-submitted success flags;157- external API credentials are scoped to least privilege;158- login, reset, signup, invitation, verification, expensive search/AI endpoints, and mutation-heavy APIs have rate limits appropriate to expected abuse;159- multi-instance/serverless deployments use a shared or platform-level limiter rather than per-process counters when consistency matters;160- bot protection/CAPTCHA is added only where abuse evidence or risk warrants it; do not use it as a substitute for authorization or rate limiting.161162### 9. Browser, transport, API, and deployment hardening163164Verify the deployed configuration, not just source intent:165166- HTTPS is enforced end-to-end; HSTS is used where appropriate;167- CSP, `frame-ancestors`/anti-clickjacking, `X-Content-Type-Options`, Referrer Policy, and Permissions Policy are set appropriately;168- CSRF is addressed for cookie-authenticated state-changing requests unless the architecture provides an equivalent protection;169- production errors do not expose stack traces, queries, filesystem paths, secrets, or internal identifiers unnecessarily;170- debug endpoints, development bypasses, test accounts, default credentials, and unintended admin panels are absent from production;171- source maps/build metadata are intentionally exposed or withheld based on whether they reveal sensitive implementation details;172- public ports/services and cloud/storage permissions match the intended attack surface;173- preview/staging and production secrets/data are separated.174175### 10. Dependency and supply-chain review176177Use the repository's actual package manager and committed lockfile. Verify:178179- the dependency graph installs reproducibly;180- native advisory scans are run and Critical/High results are triaged for reachability and fix risk;181- unreviewed package lifecycle/install scripts are not blindly executed;182- new dependencies and suspicious lockfile changes are reviewed for provenance, ownership, typosquatting, unexpected scripts, and transitive risk;183- forced/breaking audit remediation is not applied blindly;184- CI/CD credentials have minimum required scope and untrusted PR/build contexts cannot read privileged secrets.185186## Adversarial Retest Matrix187188After fixes, retest the **final tree**. At minimum, cover every applicable row:189190| Attack path | Required evidence |191|---|---|192| Unauthenticated protected request | Direct API/server call is rejected |193| Horizontal IDOR/BOLA | User A cannot read/update/delete User B's object |194| Vertical privilege escalation | Normal user cannot invoke admin/owner action |195| Cross-tenant list/search/export | Tenant A receives no Tenant B records |196| Field tampering / mass assignment | Privileged fields are ignored/rejected server-side |197| Expired/tampered/replayed session | Invalid session is rejected and sensitive action does not occur |198| Password reset / verification abuse | Tokens expire/single-use as applicable; responses avoid needless enumeration |199| Injection / dangerous sink | Controlled malicious inputs remain data, not executable/query structure |200| XSS / rich user content | Output renders safely in the relevant browser surface |201| SSRF / outbound URL control | Disallowed/private destinations cannot be reached through user-influenced fetches |202| File upload abuse | Disallowed type/size/path/access attempts fail safely |203| Webhook forgery/replay | Bad signature or disallowed replay cannot mutate privileged state |204| Rate-limit abuse | Repeated auth/high-cost attempts are throttled in the real deployment topology |205| API overfetching | Sensitive/internal fields are absent from responses |206207If a test would be unsafe against production, use staging/local execution, an isolated test tenant, or static evidence and record the limitation.208209## Safe Auto-Fix Policy210211When the repository is writable, fix issues instead of merely listing them **when the change is bounded, reversible, and testable**. Typical safe fixes include:212213- server-side validation schemas and explicit writable-field allowlists;214- missing ownership/tenant guards;215- response DTO/serializer allowlists;216- secure cookie flags and token checks;217- security headers, strict CORS configuration, and safe redirect validation;218- upload size/type/path restrictions;219- rate-limit integration/configuration;220- tests that reproduce IDOR, privilege, tampering, replay, and leakage regressions;221- database/RLS migrations as code when they can be reviewed before deployment.222223Do **not** silently perform irreversible or production-wide actions. Require explicit authorization and a rollback plan before revoking live credentials, rewriting published Git history, deleting production data, changing live tenant/admin roles, or applying policy changes that could lock users out.224225## Stack-Specific Rules226227Do not memorize folklore such as "all API keys must be hidden." Some stacks intentionally expose identifiers or publishable keys while relying on server-side policy as the security boundary.228229Load `references/stack-specific.md` for the detected stack. Its rules currently cover Supabase, Firebase, managed auth providers, Next.js, common serverless deployments, payments/webhooks, and object storage.230231## Required Close-Out232233Return a compact report with this shape:234235```text236SECURITY GATE: PASS | BLOCKED237Scope:238- architecture / surfaces reviewed239240Findings:241- [Critical|High|Medium|Low] finding — evidence — affected path/surface242243Fixes applied:244- change — verification245246Adversarial retest:247- attack path — PASS/FAIL — evidence248249Residual risk / unverified:250- item — reason — owner/follow-up251```252253Do not inflate severity. A finding's severity depends on exploitability, privileges required, blast radius, data sensitivity, and deployment context.254255## Completion Criteria256257The skill is complete only when:258259- [ ] attack surface and trust boundaries are documented;260- [ ] every relevant control is classified as applicable, not applicable with reason, or unverified;261- [ ] secrets/client exposure and Git-history risk were checked;262- [ ] authentication, authorization, ownership, admin, and tenant boundaries were tested where applicable;263- [ ] input/output, database, file, webhook, session, deployment, and supply-chain surfaces were reviewed where applicable;264- [ ] safe fixes were applied and verified instead of only recommended;265- [ ] adversarial tests were rerun on the final tree after fixes;266- [ ] no unresolved Critical/High finding remains for PASS;267- [ ] every evidence gap or accepted residual risk is explicit;268- [ ] final status is PASS or BLOCKED, never a vague "looks secure".
Run npx skillmds@latest add marcmarti9/app-security-gate in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
Adversarial pre-deploy security gate for web apps and APIs, especially AI/vibe-coded builds. Use after substantial implementation, before production release, or when asked whether an app is safe to ship. Composes security-and-hardening with evidence-driven attack-path checks, safe remediation, and mandatory retesting. Not for pure security theory or a single isolated hardening question. It is listed under DevOps & Infra on SkillMD.
This skill has not completed SkillMD's automated safety review yet. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
marcmarti9 (@marcmarti9) published this skill. Their other Agent Skills are listed on their SkillMD profile.