security-audit: 에이전트를 보안 감사관으로 바꾸는 Cloudflare 스킬
Cloudflare 취약점 탐색 하네스의 출발점이던 보안 감사 스킬이 MIT로 공개돼 있어요
- 누가
- Cloudflare가 자기 취약점 탐색 하네스의 출발점이던 스킬을 공개했어요. 코딩 에이전트로 자기 코드를 점검하려는 개발자용이에요.
- 언제
- 저장소는 2026년 6월 18일에 열렸고 릴리스 태그 없이 main으로 배포해요. 감사 흐름과 검증기를 다시 짠 개편은 9월 10일이에요.
- 어디서
- 도구 사용과 병렬 서브 에이전트를 지원하는 코딩 에이전트 어디서나. 소스는 내 PC에서 읽고, 결과는 저장소 밖 폴더에 써요.
이게 불편했어요
코딩 에이전트에게 「보안 점검해 줘」라고 하면 그럴듯한 목록이 돌아와요. 그런데 모범 사례가 빠졌다는 지적과 실제로 뚫리는 구멍이 한 목록에 섞여 있어서, 무엇부터 고쳐야 할지 하나씩 다시 따져 봐야 했어요. 찾은 에이전트가 그 결과를 스스로 확인하니 믿기도 어려웠고요.
그래서 이렇게 풀어요
이 스킬은 찾는 쪽과 확인하는 쪽을 나눠요. 여러 hunter가 커버리지 원장의 단위를 나눠 훑어 후보를 내면, 그 후보를 찾지 않은 새 에이전트가 반박을 시도하고 살아남은 것만 confirmed가 돼요. 소스에 없는 배포 설정처럼 확인할 수 없는 사실에 막힌 건 needs_validation으로 남기고 심각도를 붙이지 않아요. 결과는 스키마로 검증한 findings.json과 REPORT.md로, 감사 대상 저장소 밖 폴더에 쌓여요.

이걸로 만든 사람들
작은 FastAPI 프로젝트에 돌려 봤더니 15만 토큰 넘게 쓰고 세션 한도에 걸려서, 몇 시간 뒤에 이어 돌리겠다고 남겼어요.
At least 150k on my relatively small FastAPI project, but hit my session limit. Continuing in a few hours.
안에서는 이렇게 돌아가요
- 1
나 → 코딩 에이전트 (parent)
security audit this codebase감사나 펜테스트를 분명히 요청하면 6단계 전체를, 보안 질문이면 필요한 부분만 써요.skills/security-audit/SKILL.md - 2
코딩 에이전트 (parent) → hunter 에이전트들
coverage-ledger.json의 단위 배정정찰 에이전트들이 구조와 신뢰 경계를 그리면, parent가 원장을 만들고 단위마다 hunter를 붙여요.skills/security-audit/RECONNAISSANCE.md - 3
hunter 에이전트들 → 코딩 에이전트 (parent)
구조화된 후보 결과hunter는 자기 scratch 폴더에만 쓰고 후보를 정해진 형식으로 돌려줘요. critic 웨이브가 빈 곳을 찾아요.skills/security-audit/HUNTING.md - 4
코딩 에이전트 (parent) → verifier 에이전트
후보 하나마다 새 verifier후보를 찾지 않은 에이전트가 반박을 시도해 confirmed, needs_validation, rejected로 갈라요.skills/security-audit/VALIDATION-AND-REPORTING.md - 5
코딩 에이전트 (parent) → validate-findings.cjs
findings.jsonreport-schema.json의 형식과 판정 규칙을 검사하고, 오류가 없을 때까지 고친 뒤에야 다음 단계로 가요.skills/security-audit/validate-findings.cjs - 6
코딩 에이전트 (parent) → REPORT.md
REPORT.md, FINDINGS-DETAIL.md, NEEDS-VALIDATION.md새 에이전트가 최종 기록을 다시 확인한 뒤, 검증된 기록과 원장에서만 보고서를 만들어요.skills/security-audit/VALIDATION-AND-REPORTING.md
넣으면 이렇게 나와요
나한테 맞을까요
이럴 때 좋아요
- 출시 전, 내 서비스 코드에 실제로 뚫리는 경계가 있는지 소스 근거와 함께 보고 싶을 때
- 결과를 사람이 읽는 보고서와 기계가 읽는 JSON 둘 다로 받고 싶을 때
- 한 번에 끝내기보다 여러 번 돌려 커버리지를 쌓아 갈 생각일 때
- 웹 API뿐 아니라 LLM 앱, 데스크톱 앱, 클라우드 설정, 공급망까지 한 틀로 점검하고 싶을 때
이건 안 돼요
- README 기준, 한 번 실행으로는 여러 번 돌려 찾은 취약점의 대략 절반만 찾았어요.
- 대상 코드를 빌드하거나 실행해 확인하려면 외부 네트워크를 막은 OS 샌드박스가 필요하고, 없으면 실행하지 않고 needs_validation으로 남겨요.
- 에이전트를 여러 개 띄워서 토큰을 많이 써요. Hacker News 후기에는 15만에서 100만 토큰을 썼다는 말이 있어요.
- Windows에서는 Node에 O_NOFOLLOW가 없어 validate-findings.cjs가 입력을 읽지 못해요 (이슈 #117).
발행 전에 Devalley 편집자가 검토했어요. 칼럼은 어떻게 만드나요
security-audit: Cloudflare's agent security auditor skill
The security-audit skill that seeded Cloudflare's vulnerability harness, open under MIT
- Who
- Cloudflare, sharing the skill its vulnerability harness grew from; for developers who want an agent to audit their own code.
- When
- The repository opened on 18 June 2026 and ships from main without release tags; the workflow and validators were reworked on 10 September.
- Where
- Any coding agent with tool use and parallel sub-agents. It reads source on your machine and writes results to a folder outside the repo.
What was hard
Ask a coding agent to check your code for security issues and you get a plausible list back. Missing best practices sit next to holes someone could actually walk through, so you end up re-checking every item to know what to fix first. And the agent that found them is the one vouching for them.
What it does about it
The skill splits finding from checking. Hunters each take units from a coverage ledger and report candidates; a fresh agent that did not find a candidate tries to disprove it, and only what survives is confirmed. When a fact outside the source blocks the answer, such as a deployment setting, the lead stays needs_validation with no severity. Everything lands as a schema-checked findings.json and a REPORT.md in a folder outside the audited repository.

What people made with it
Ran it on a small FastAPI project; it used over 150k tokens and hit the session limit before finishing, to be continued hours later.
At least 150k on my relatively small FastAPI project, but hit my session limit. Continuing in a few hours.
How it runs inside
- 1
You → Coding agent (parent)
security audit this codebaseAn explicit audit or pen-test request runs all six phases; a security question uses only the parts it needs.skills/security-audit/SKILL.md - 2
Coding agent (parent) → Hunter agents
Units from coverage-ledger.jsonRecon agents map structure and trust boundaries; the parent builds the ledger and gives each unit a hunter.skills/security-audit/RECONNAISSANCE.md - 3
Hunter agents → Coding agent (parent)
Structured candidate resultsHunters write only to their own scratch folder and return candidates in a fixed shape; critic waves look for gaps.skills/security-audit/HUNTING.md - 4
Coding agent (parent) → Verifier agent
A fresh verifier per candidateAn agent that did not find the candidate tries to disprove it: confirmed, needs_validation or rejected.skills/security-audit/VALIDATION-AND-REPORTING.md - 5
Coding agent (parent) → validate-findings.cjs
findings.jsonChecked against report-schema.json and the verdict rules; every error is fixed before the run moves on.skills/security-audit/validate-findings.cjs - 6
Coding agent (parent) → REPORT.md
REPORT.md, FINDINGS-DETAIL.md, NEEDS-VALIDATION.mdAfter fresh agents re-check the final records, reports are derived only from verified records and the ledger.skills/security-audit/VALIDATION-AND-REPORTING.md
What goes in, what comes out
Is it for you
Good for
- Before a launch, when you want to know whether a trust boundary in your code really breaks, with the source to show for it
- When you want both a report people read and JSON a tool can read
- When you plan to run it more than once and build coverage over time
- When one method should cover web APIs, LLM apps, desktop apps, cloud config and the supply chain alike
Not for
- Per the README, a single run found roughly half of the vulnerabilities that repeated runs found in total.
- Building or running the target needs an OS-enforced sandbox with no external network; without one, the lead stays needs_validation.
- It runs many agents and spends tokens accordingly: Hacker News commenters report 150k to 1M tokens.
- On Windows, Node has no O_NOFOLLOW, so validate-findings.cjs cannot read its input (issue #117).
Reviewed by Devalley’s editor before publishing. How the column is made