agentleFS
techfleetworkstechfleetworks/enterprise-software-AI-skills/.claude/skills/owasp-secure-coding-bdd/SKILL.md

owasp-secure-coding-bdd

Skill1 starsChanged 15 days agoMITView on GitHub

The always-on secure-coding entry point. Use on ANY change that touches input, auth, sessions, access control, crypto or secrets, file handling, APIs, dependencies, AI/LLM/agent code, or infrastructure, and any time security matters. It routes to one reference file per OWASP cheat sheet (137 of them) for the condensed controls, hardened with the attacker's view, and it REQUIRES that each security control ships an executable @security BDD scenario added to the repo's shared feature-file index so the secure coding is actually tested in CI (via bdd-comprehensive-testing). Trigger on build, add, implement, fix, change, login, password, token, upload, query, injection, xss, csrf, ssrf, crypto, secret, cookie, header, deserialize, dependency, or 'is this secure' even when 'OWASP' or 'security' are not said.

The file

We split this skill into the rules it gives an agent

2 rules. About 0 are common, 0 are distinctive, and 2 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈0

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Every references/cheatsheets/<Slug>.md follows the same shape, and the catalog gate enforces it:

    line 294
  2. Very specific:

    Every script this skill ships declares an install scope in a comment marker, and esk-genesis installs only what the gate manifest lists.

    line 401

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

OWASP secure coding

Why this exists

Most breaches come from a short list of mistakes that are well understood and well documented: injection, broken authentication, broken access control, weak crypto, unsafe deserialization, and so on. The OWASP Cheat Sheet Series is the community's condensed, actionable guidance for each one. This skill makes that guidance usable on a real change: it routes you to the right cheat sheet, states the attack each control stops in plain terms, and, most important, it does not let a security control ship as advice. Every control must arrive with an executable @security BDD scenario that actually tests it, in the same place every other scenario runs.

Advice that is not tested rots. A comment that says "we validate input here" is not a control; a test that sends the attack and sees it rejected is. So this skill is the secure-coding half, and it leans on bdd-comprehensive-testing for the executable half: the secure-coding controls come from the cheat sheets, and the proof that they hold comes from @security scenarios wired into CI.

The non-negotiables

  1. Find the relevant cheat sheet(s). For the change in front of you, look up the matching sheet in the catalog below (for example a login form touches Authentication, Session Management, Password Storage, and Credential Stuffing Prevention). Read its per-sheet file and apply the controls.
  2. Threat-model with the attacker's view. Each per-sheet file states the real attack the control stops, grounded in a penetration-testing source, so you defend against what attackers actually do, not an abstract risk.
  3. Every control ships an executable @security BDD scenario (not prose). When you apply a sheet to real code, write or update its @security Gherkin scenario and ADD IT to the repo's single shared feature-file index that bdd-comprehensive-testing owns (its "Storing BDD scenarios permanently" section), tagged @security, and wire it into CI (its "CI/CD wiring") so it runs as a blocking autotest in the same place as every other scenario. The scenario in each per-sheet file is the canonical copy to add; the per-sheet doc is not where tests run. A security control with no executable scenario in that shared index is not done.
  4. Name the real guarantee. The scenario checks one attack is blocked; the structural control (a parameterized query, contextual output encoding, an Argon2id hash, a DB constraint) is what makes every case safe. State both, so no one mistakes a passing test for a proof.

The selection flow: OWASP threat modeling (required, enforced)

Choosing the right cheat sheets is not left to chance. Follow OWASP's own Threat Modeling Process, which runs in four steps, and the flow produces a security-decision record plus the executable scenarios the enforcement gate checks. This is the secure-coding analogue of how pattern-selector forces a deliberate pattern choice.

Step 1: Scope your work

Map the change's surface the way OWASP's first step does: the entry and exit points, the assets worth protecting, the trust boundaries the data crosses, and the data flows. From that surface, SELECT the cheat sheets that apply. For example, a login form that writes to SQL crosses an authentication trust boundary and touches a database, so it selects Authentication, Session Management, Password Storage, and SQL Injection Prevention.

Step 2: Determine threats

For the scoped surface, name what can go wrong using a categorization such as STRIDE, and map each threat to the cheat sheet that addresses it. Rank the threats high, medium, or low by exploitability and impact, as OWASP's process does, so the most dangerous are handled first.

Step 3: Determine countermeasures and mitigation

Apply each selected sheet's controls, preferring the structural one it names first. For every threat choose a risk response the way OWASP's third step frames it: eliminate, mitigate, transfer, or (rarely, with a stated reason) accept. A threat with no countermeasure is a vulnerability, not a decision. Add each control's @security scenario to the shared feature-file index (via bdd-comprehensive-testing), so the countermeasure is tested, not merely asserted.

Step 4: Assess your work (the security-decision record)

Record the result: the surface, the cheat sheets selected, the threats and their ranking, the countermeasures applied, the @security scenarios added (or the explicit, reasoned waivers), and the real guarantee for each. This security-decision record is the evidence that the flow ran, and it is exactly what OWASP's fourth step asks for: a scope, a threat list, and a control list that exist and are reviewable.

What makes this impossible to skip, and the honest limit

The flow is enforced at the OUTCOME, not on trust. scripts/check-security-coverage.mjs maps the changed code to the security surfaces it touches (SQL, auth, sessions, uploads, JWT, rendering, SSRF, command execution, deserialization, and more in assets/security-coverage.config.json) and FAILS the build when a triggered surface has no matching @security scenario in the feature index and no reasoned, unexpired waiver. So shipping security-relevant code with nothing testing it cannot pass CI, and it cannot regress silently, because the gate runs on every change and has a discriminating test. The honest limit: the gate makes it impossible to SKIP the flow or ship an untested surface; it cannot guarantee you picked the perfect set of sheets or wrote a perfect scenario. That judgment is caught by a judge-arch review, and every gap found becomes a new surface rule in the config, so the part that rests on judgment only shrinks.

The cheat-sheet catalog (the routing index)

Each OWASP cheat sheet is its own reference file under references/cheatsheets/<Slug>.md, loaded on demand. The authoritative list is references/cheatsheets-manifest.json (137 sheets, from the OWASP sitemap, retrieved 2026-10-10). All 137 are written to the per-sheet template with a cited, executable @security scenario. The check-cheatsheet-catalog.mjs gate keeps this honest: every sheet must have its file, every required section, a citation, an executable @security scenario, and an entry in this index.

Frontend & browser (16/16)

Cheat sheetFileStatus
Browser Extension Vulnerabilitiesreferences/cheatsheets/Browser_Extension_Vulnerabilities.mddone
Clickjacking Defensereferences/cheatsheets/Clickjacking_Defense.mddone
Content Security Policyreferences/cheatsheets/Content_Security_Policy.mddone
Cookie Theft Mitigationreferences/cheatsheets/Cookie_Theft_Mitigation.mddone
Cross Site Scripting Preventionreferences/cheatsheets/Cross_Site_Scripting_Prevention.mddone
Cross-Site Request Forgery Preventionreferences/cheatsheets/Cross-Site_Request_Forgery_Prevention.mddone
DOM Clobbering Preventionreferences/cheatsheets/DOM_Clobbering_Prevention.mddone
DOM based XSS Preventionreferences/cheatsheets/DOM_based_XSS_Prevention.mddone
HTML5 Securityreferences/cheatsheets/HTML5_Security.mddone
HTTP Headersreferences/cheatsheets/HTTP_Headers.mddone
Micro Frontend Securityreferences/cheatsheets/Micro_Frontend_Security.mddone
Prototype Pollution Preventionreferences/cheatsheets/Prototype_Pollution_Prevention.mddone
Third Party Javascript Managementreferences/cheatsheets/Third_Party_Javascript_Management.mddone
Web Frontend Securityreferences/cheatsheets/Web_Frontend_Security.mddone
XS Leaksreferences/cheatsheets/XS_Leaks.mddone
XSS Filter Evasionreferences/cheatsheets/XSS_Filter_Evasion.mddone

Backend: input, injection & data stores (15/15)

Cheat sheetFileStatus
Injection Preventionreferences/cheatsheets/Injection_Prevention.mddone
Input Validationreferences/cheatsheets/Input_Validation.mddone
SQL Injection Preventionreferences/cheatsheets/SQL_Injection_Prevention.mddone
Query Parameterizationreferences/cheatsheets/Query_Parameterization.mddone
OS Command Injection Defensereferences/cheatsheets/OS_Command_Injection_Defense.mddone
LDAP Injection Preventionreferences/cheatsheets/LDAP_Injection_Prevention.mddone
XPath Injection Preventionreferences/cheatsheets/XPath_Injection_Prevention.mddone
Server Side Template Injection Preventionreferences/cheatsheets/Server_Side_Template_Injection_Prevention.mddone
Server Side Request Forgery Preventionreferences/cheatsheets/Server_Side_Request_Forgery_Prevention.mddone
Deserializationreferences/cheatsheets/Deserialization.mddone
XML External Entity Preventionreferences/cheatsheets/XML_External_Entity_Prevention.mddone
XML Securityreferences/cheatsheets/XML_Security.mddone
Mass Assignmentreferences/cheatsheets/Mass_Assignment.mddone
Database Securityreferences/cheatsheets/Database_Security.mddone
NoSQL Securityreferences/cheatsheets/NoSQL_Security.mddone

Backend: authentication & sessions (11/11)

Cheat sheetFileStatus
Authenticationreferences/cheatsheets/Authentication.mddone
Authentication Patternsreferences/cheatsheets/Authentication_Patterns.mddone
Multifactor Authenticationreferences/cheatsheets/Multifactor_Authentication.mddone
Passkey Securityreferences/cheatsheets/Passkey_Security.mddone
Password Storagereferences/cheatsheets/Password_Storage.mddone
Forgot Passwordreferences/cheatsheets/Forgot_Password.mddone
Credential Stuffing Preventionreferences/cheatsheets/Credential_Stuffing_Prevention.mddone
Choosing and Using Security Questionsreferences/cheatsheets/Choosing_and_Using_Security_Questions.mddone
Session Managementreferences/cheatsheets/Session_Management.mddone
Email Validation and Verificationreferences/cheatsheets/Email_Validation_and_Verification.mddone
Bot Management and Anti-Automationreferences/cheatsheets/Bot_Management_and_Anti-Automation.mddone

Backend: authorization & access control (10/10)

Cheat sheetFileStatus
Access Controlreferences/cheatsheets/Access_Control.mddeprecated
Authorizationreferences/cheatsheets/Authorization.mddone
Authorization Decisions And Output Handlingreferences/cheatsheets/Authorization_Decisions_And_Output_Handling.mddone
Authorization Patternsreferences/cheatsheets/Authorization_Patterns.mddone
Authorization Policy And Data Distributionreferences/cheatsheets/Authorization_Policy_And_Data_Distribution.mddone
Authorization Regression Testingreferences/cheatsheets/Authorization_Regression_Testing.mddone
Authorization Testing Automationreferences/cheatsheets/Authorization_Testing_Automation.mddone
Insecure Direct Object Reference Preventionreferences/cheatsheets/Insecure_Direct_Object_Reference_Prevention.mddone
Transaction Authorizationreferences/cheatsheets/Transaction_Authorization.mddone
Business Logic Securityreferences/cheatsheets/Business_Logic_Security.mddone

Backend: handling, output & resources (8/8)

Cheat sheetFileStatus
File Uploadreferences/cheatsheets/File_Upload.mddone
Error Handlingreferences/cheatsheets/Error_Handling.mddone
Loggingreferences/cheatsheets/Logging.mddone
Logging Vocabularyreferences/cheatsheets/Logging_Vocabulary.mddone
Denial of Servicereferences/cheatsheets/Denial_of_Service.mddone
Unvalidated Redirects and Forwardsreferences/cheatsheets/Unvalidated_Redirects_and_Forwards.mddone
Web Cache Securityreferences/cheatsheets/Web_Cache_Security.mddone
Third Party Payment Gateway Integrationreferences/cheatsheets/Third_Party_Payment_Gateway_Integration.mddone

API & services (14/14)

Cheat sheetFileStatus
GraphQLreferences/cheatsheets/GraphQL.mddone
gRPC Securityreferences/cheatsheets/gRPC_Security.mddone
REST Assessmentreferences/cheatsheets/REST_Assessment.mddone
REST Securityreferences/cheatsheets/REST_Security.mddone
Web Service Securityreferences/cheatsheets/Web_Service_Security.mddone
Webhook Securityreferences/cheatsheets/Webhook_Security.mddone
WebSocket Securityreferences/cheatsheets/WebSocket_Security.mddone
Microservices Securityreferences/cheatsheets/Microservices_Security.mddone
Microservices based Security Arch Docreferences/cheatsheets/Microservices_based_Security_Arch_Doc.mddone
JSON Web Tokenreferences/cheatsheets/JSON_Web_Token.mddone
OAuth2references/cheatsheets/OAuth2.mddone
SAML Securityreferences/cheatsheets/SAML_Security.mddone
Identity Propagation Patternsreferences/cheatsheets/Identity_Propagation_Patterns.mddone
Workload Identity Federationreferences/cheatsheets/Workload_Identity_Federation.mddone

Cryptography, secrets & transport (10/10)

Cheat sheetFileStatus
Cryptographic Storagereferences/cheatsheets/Cryptographic_Storage.mddone
Key Managementreferences/cheatsheets/Key_Management.mddone
Secrets Managementreferences/cheatsheets/Secrets_Management.mddone
TLS Cipher Stringreferences/cheatsheets/TLS_Cipher_String.mddeprecated
Transport Layer Securityreferences/cheatsheets/Transport_Layer_Security.mddone
Transport Layer Protectionreferences/cheatsheets/Transport_Layer_Protection.mddeprecated
HTTP Strict Transport Securityreferences/cheatsheets/HTTP_Strict_Transport_Security.mddone
Pinningreferences/cheatsheets/Pinning.mddone
Post Quantum Cryptographyreferences/cheatsheets/Post_Quantum_Cryptography.mddone
User Privacy Protectionreferences/cheatsheets/User_Privacy_Protection.mddone

Infrastructure, containers & cloud (10/10)

Cheat sheetFileStatus
Docker Securityreferences/cheatsheets/Docker_Security.mddone
NodeJS Dockerreferences/cheatsheets/NodeJS_Docker.mddone
Kubernetes Securityreferences/cheatsheets/Kubernetes_Security.mddone
Infrastructure as Code Securityreferences/cheatsheets/Infrastructure_as_Code_Security.mddone
Secure Cloud Architecturereferences/cheatsheets/Secure_Cloud_Architecture.mddone
Network Segmentationreferences/cheatsheets/Network_Segmentation.mddone
Serverless FaaS Securityreferences/cheatsheets/Serverless_FaaS_Security.mddone
Zero Trust Architecturereferences/cheatsheets/Zero_Trust_Architecture.mddone
Subdomain Takeover Preventionreferences/cheatsheets/Subdomain_Takeover_Prevention.mddone
Multi Tenant Securityreferences/cheatsheets/Multi_Tenant_Security.mddone

CI/CD & supply chain (6/6)

Cheat sheetFileStatus
CI CD Securityreferences/cheatsheets/CI_CD_Security.mddone
GitHub Actions Securityreferences/cheatsheets/GitHub_Actions_Security.mddone
Dependency Graph SBOMreferences/cheatsheets/Dependency_Graph_SBOM.mddone
Vulnerable Dependency Managementreferences/cheatsheets/Vulnerable_Dependency_Management.mddone
Software Supply Chain Securityreferences/cheatsheets/Software_Supply_Chain_Security.mddone
NPM Securityreferences/cheatsheets/NPM_Security.mddone

AI, LLM & agents (9/9)

Cheat sheetFileStatus
AI Agent Securityreferences/cheatsheets/AI_Agent_Security.mddone
AI-Powered Advertising Systems Securityreferences/cheatsheets/AI-Powered_Advertising_Systems_Security.mddone
AML Sanctions AI Agent Paymentsreferences/cheatsheets/AML_Sanctions_AI_Agent_Payments.mddone
LLM Prompt Injection Preventionreferences/cheatsheets/LLM_Prompt_Injection_Prevention.mddone
MCP Securityreferences/cheatsheets/MCP_Security.mddone
RAG Securityreferences/cheatsheets/RAG_Security.mddone
Secure AI Model Opsreferences/cheatsheets/Secure_AI_Model_Ops.mddone
Secure Coding with AIreferences/cheatsheets/Secure_Coding_with_AI.mddone
Verifying Third Party Agent Execution Evidencereferences/cheatsheets/Verifying_Third_Party_Agent_Execution_Evidence.mddone

Language & framework guides (16/16)

Cheat sheetFileStatus
Bean Validationreferences/cheatsheets/Bean_Validation.mddone
C-Based Toolchain Hardeningreferences/cheatsheets/C-Based_Toolchain_Hardening.mddone
Django REST Frameworkreferences/cheatsheets/Django_REST_Framework.mddone
Django Securityreferences/cheatsheets/Django_Security.mddone
DotNet Securityreferences/cheatsheets/DotNet_Security.mddone
FastAPI Securityreferences/cheatsheets/FastAPI_Security.mddone
Injection Prevention in Javareferences/cheatsheets/Injection_Prevention_in_Java.mddeprecated
JAASreferences/cheatsheets/JAAS.mddone
Java Securityreferences/cheatsheets/Java_Security.mddone
JavaScript and TypeScript Securityreferences/cheatsheets/JavaScript_and_TypeScript_Security.mddone
Laravelreferences/cheatsheets/Laravel.mddone
Nextjs Securityreferences/cheatsheets/Nextjs_Security.mddone
Nodejs Securityreferences/cheatsheets/Nodejs_Security.mddone
PHP Configurationreferences/cheatsheets/PHP_Configuration.mddone
Ruby on Railsreferences/cheatsheets/Ruby_on_Rails.mddone
Symfonyreferences/cheatsheets/Symfony.mddone

Mobile & embedded (3/3)

Cheat sheetFileStatus
Mobile Application Securityreferences/cheatsheets/Mobile_Application_Security.mddone
Automotive Securityreferences/cheatsheets/Automotive_Security.mddone
Drone Securityreferences/cheatsheets/Drone_Security.mddone

Security process & cross-cutting (9/9)

Cheat sheetFileStatus
Abuse Casereferences/cheatsheets/Abuse_Case.mddone
Attack Surface Analysisreferences/cheatsheets/Attack_Surface_Analysis.mddone
Threat Modelingreferences/cheatsheets/Threat_Modeling.mddone
Secure Code Reviewreferences/cheatsheets/Secure_Code_Review.mddone
Secure Product Designreferences/cheatsheets/Secure_Product_Design.mddone
Security Terminologyreferences/cheatsheets/Security_Terminology.mddone
Vulnerability Disclosurereferences/cheatsheets/Vulnerability_Disclosure.mddone
Virtual Patchingreferences/cheatsheets/Virtual_Patching.mddone
Legacy Application Managementreferences/cheatsheets/Legacy_Application_Management.mddone

The per-sheet file template

Every references/cheatsheets/<Slug>.md follows the same shape, and the catalog gate enforces it:

  • ## What it is : the sheet's scope in a sentence or two.
  • ## The attack it stops : the real attack, grounded in the OWASP sheet and, where it maps, the attacker's view from a penetration-testing source.
  • ## Controls : the condensed, actionable controls from the OWASP sheet, in its order of preference.
  • ## @security scenario : a real, executable Gherkin @security scenario (the canonical copy to add to the shared feature index). The gate rejects prose here: it must contain a @security tag, Scenario:, and Given / When / Then.
  • ## The real guarantee : the structural control that makes every case safe, versus what the scenario checks.
  • ## Sources : the OWASP cheat-sheet URL with a retrieval date, plus any penetration-testing citation. Cite only what was read.

Mechanical gate

  • scripts/check-security-coverage.mjs (test: test/owasp-security-coverage.test.mjs) is the enforcement gate for the selection flow. It maps the changed code to the security surfaces it touches (assets/security-coverage.config.json) and fails closed when a triggered surface has no matching @security scenario in the feature index and no valid waiver. This is what makes the flow impossible to skip on a security-relevant change. Adopters run it on their changed files in CI.
  • scripts/check-cheatsheet-catalog.mjs (test: test/owasp-cheatsheet-catalog.test.mjs) fails closed unless every sheet has its file, all required sections, a citation URL, and an executable @security Gherkin scenario, and is indexed above, with no orphan files. It confirms all 137 are complete.
  • scripts/check-owasp-lints.mjs (test: test/owasp-lints.test.mjs) is the code-level secure-coding lint (JWT alg:none, insecure cookie flags).
  • The @security scenarios are validated as real runnable Gherkin by bdd-comprehensive-testing's check-gherkin-valid.mjs, and in an adopting repo they execute in CI through that skill's runner.

Before you call it done

  • The selection flow ran: the change's surface was scoped, threats determined and ranked, and the cheat sheet(s) selected (OWASP threat modeling steps 1 and 2).
  • Countermeasures applied, each with a risk response (eliminate, mitigate, transfer, or reasoned accept).
  • Each control has an executable @security scenario in the repo's shared feature-file index, wired into CI, not just prose in the per-sheet doc.
  • The structural guarantee is named, separate from what the scenario checks.
  • The security-decision record (OWASP threat modeling step 4) exists: surface, sheets selected, threats and ranking, countermeasures, scenarios added or reasoned waivers, and the real guarantee for each.
  • check-security-coverage.mjs, check-cheatsheet-catalog.mjs, and check-owasp-lints.mjs pass.
  • The run records its evidence ledger: each control, the attack it stops, the @security scenario that tests it, and the source read, each with an evidence state and a re-runnable source.

Reference files

TopicFile
The authoritative list of all 137 cheat sheetsreferences/cheatsheets-manifest.json
One file per cheat sheet (the routing targets)references/cheatsheets/<Slug>.md
Standing cross-cutting companion (not an OWASP sheet): avoid self-lockout, accidental deletion, and broken access while hardeningreferences/lockout-prevention-safe-changes.md
Example executable @security features, one per stack layer (merge into the adopter's shared index)assets/example/features/
Enforcement gate for the selection flow (change-type to required scenario)scripts/check-security-coverage.mjs
The surface-to-scenario map the enforcement gate reads (tune per stack)assets/security-coverage.config.json
Completeness gate for the per-sheet catalogscripts/check-cheatsheet-catalog.mjs
Code-level secure-coding lintsscripts/check-owasp-lints.mjs
License-hygiene gate: each own-words sheet vs its vendored CC-BY-SA sourcescripts/check-verbatim.mjs (npm run check:verbatim)
Fetch the exact upstream OWASP text (CC-BY-SA, on demand)tools/vendor-owasp.mjs (npm run vendor:owasp)
The vendored exact text and its attributionvendor/NOTICE.md

Evidence & skeptical assessment (required)

"This control is in place and tested" is a factual claim, so it follows the repo's evidence discipline (canonical contract: skeptical-audit/references/evidence-discipline.md). The deliverable for a change is its evidence ledger: each control, its attack, its @security scenario, and the source read, each with a state and a re-runnable source.

ClaimReaches observed byBecomes proven when
"This control is applied"the code shows the structural control (the parameterized query, the encoder, the Argon2id call) at a file:linea lint or type makes the unsafe form impossible (for example check-owasp-lints blocks alg:none and insecure cookies)
"The control is tested"the @security scenario runs against the code and passesthe scenario is in the shared feature index and runs as a blocking autotest on every push (via bdd-comprehensive-testing)
"The per-sheet catalog is honest"the per-sheet file reads complete and citedcheck-cheatsheet-catalog.mjs passes in CI with a discriminating test
"The guidance matches OWASP"the controls match the cited cheat-sheet URL read this sessionthe citation is present and the sheet's content was read, not summarized by proxy

Definition of done: the right sheets are applied; every control has an executable @security scenario in the shared feature index wired into CI; the structural guarantee is named; both gates pass; and the evidence ledger is recorded. A security control with no scenario in the shared index is not-assessed, never a pass.

Why this holds for every developer and every agent

It binds everyone because the controls, the per-sheet files, the catalog gate, and the @security scenarios live in committed files and CI, not memory. Agents get it through the always-on hook, which lists this skill in always-on/enterprise-skills-always-on.md. People and agents alike are held by the catalog gate (no half-written sheet merges) and by the shared feature index plus bdd-comprehensive-testing's gherkin and coverage gates (a security control with no runnable scenario does not merge). It survives any one person because everything is in git. The honest limit: the catalog gate proves a sheet is complete and its scenario is real Gherkin, and the BDD gates prove the scenario runs; none of them proves the control is the right one for the threat, which is why the attacker-view threat modeling and a judge-arch review sit alongside. A second honest limit: each per-sheet file condenses a single OWASP cheat sheet, so it inherits that one source's coverage and currency. This matters most for the fast-moving AI and LLM sheets; for those, treat the condensed file as a routing entry point and read the live upstream sheet (and OWASP's separate AI/LLM project) before relying on it.

Sources and attribution

  • OWASP Cheat Sheet Series (https://cheatsheetseries.owasp.org/, index retrieved 2026-10-10): the 137 cheat sheets this skill routes to; each per-sheet file cites the specific sheet it condenses, read this session. [documented]
  • Georgia Weidman, Penetration Testing: A Hands-On Introduction to Hacking (No Starch Press, 2014, ISBN 978-1-59327-564-8): the attacker's view that hardens the per-sheet files, cited per sheet from the chapters read this session. [documented]
  • bdd-comprehensive-testing (this repo): owns the shared feature-file index, the official-parser gherkin validation, and the CI wiring that runs the @security scenarios. [documented]

Where this skill's scripts run

Every script this skill ships declares an install scope in a comment marker, and esk-genesis installs only what the gate manifest lists. Which scripts run in a consumer repo, which are enforced there, and which govern only this authoring repo are defined by gate-manifest.json and ADR-0109, not restated here, so there is one source of truth.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.