GitHub Issue Export
Purpose
Read findings.json from the current pentest session and produce one copy-pasteable GitHub issue markdown block per confirmed finding.
Each block follows the AppSec reporting guide format — concrete impact, reproducible steps, raw PoC — so developers can act immediately without back-and-forth.
Workflow
- Read
findings.json from the repo root (or the path provided in $ARGUMENTS if given)
- For each entry in
findings[].findings (skip diagram entries):
- Format it using the template below
- Check
pocs/ for any .http file whose name contains a keyword from the finding title — if found, read it and paste the content into the PoC block
- After formatting the block, call
http(action="request", ...) with method PATCH, url http://localhost:5000/api/findings/{finding.id}, body {"gh_issue": "<the formatted markdown block>"}, and headers {"Content-Type": "application/json"} — this couples the block to the finding in the dashboard
- Write all formatted blocks to
gh-issues.md in the repo root, separated by ---, with a header line # GitHub Issues — <target> — <date> at the top. Create or overwrite the file.
- Print all blocks consecutively with a
--- separator between them
- After the last block, print a one-line summary:
X issue(s) ready to file — saved to gh-issues.md and copied above.
Output Template
For every finding, output exactly this structure (omit ## Browsers Verified In for non-browser/non-web findings):
**Summary:** <one sentence: what the vulnerability is and which component/endpoint is affected>
**Impact:** <what an attacker can concretely do — name the data exposed, the privilege gained, or the service disrupted. Never write "could lead to" — write "allows an attacker to". One short paragraph.>
**Severity Level:** <Critical | High | Medium | Low>
## Steps To Reproduce:
1. <exact first step — full URL, parameter name, payload>
2. <exact second step>
3. <what to observe in the response that confirms the issue>
## PoC
```
<paste the raw curl command, HTTP request from pocs/*.http, or tool output excerpt that proves exploitability>
```
## Supporting Material/References:
* <CVE ID if applicable, otherwise omit this line>
* Affected target: <target URL or file path from the finding>
* Tool: <tool_used value from the finding>
* <any additional evidence: key excerpt from raw tool output>
## Remediation
<if the finding has a `remediation` field, include this section — otherwise omit it entirely>
**Effort:** <effort level> | **Breaking change:** <Yes/No>
```diff
<paste the diff from remediation.diff, or show before/after from remediation.before and remediation.after>
```
**File:** <remediation.file>:<remediation.line>
**Verification:** <remediation.verification — how to confirm the fix worked>
**References:**
* <each URL from remediation.references>
Rules
- One block per finding — never merge two findings into one issue
- Impact must be concrete — derive it from the finding's
description and evidence fields; never invent hypothetical consequences
- Steps to Reproduce must be self-contained — if the finding has a
reproduction field, use its command as the primary reproduction step. Otherwise include full URLs and exact payloads so a developer can reproduce without asking questions
- PoC block is mandatory — if a matching
.http file exists in pocs/, paste its full content; if the finding has reproduction.command, include that; otherwise extract the most relevant raw evidence line from the evidence field
- Remediation section — if the finding has a
remediation field, include the ## Remediation section with the diff, effort level, verification step, and references. If no remediation exists, omit the section entirely
- Severity mapping: critical →
Critical, high → High, medium → Medium, low → Low
- Output only the markdown blocks and the final summary line — no extra prose, no headers, no explanation around the blocks
1---2name: gh-export3description: Formats all confirmed pentest findings from findings.json into copy-pasteable GitHub issue markdown blocks, following the AppSec reporting guide template.4---5
6# GitHub Issue Export
7
8## Purpose
9
10Read `findings.json` from the current pentest session and produce one copy-pasteable GitHub issue markdown block per confirmed finding.
11
12Each block follows the AppSec reporting guide format — concrete impact, reproducible steps, raw PoC — so developers can act immediately without back-and-forth.
13
14## Workflow
15
161. Read `findings.json` from the repo root (or the path provided in `$ARGUMENTS` if given)
172. For each entry in `findings[].findings` (skip diagram entries):
18 - Format it using the template below
19 - Check `pocs/` for any `.http` file whose name contains a keyword from the finding title — if found, read it and paste the content into the PoC block
20 - After formatting the block, call `http(action="request", ...)` with method `PATCH`, url `http://localhost:5000/api/findings/{finding.id}`, body `{"gh_issue": "<the formatted markdown block>"}`, and headers `{"Content-Type": "application/json"}` — this couples the block to the finding in the dashboard
213. Write all formatted blocks to `gh-issues.md` in the repo root, separated by `---`, with a header line `# GitHub Issues — <target> — <date>` at the top. Create or overwrite the file.
224. Print all blocks consecutively with a `---` separator between them
235. After the last block, print a one-line summary: `X issue(s) ready to file — saved to gh-issues.md and copied above.`
24
25## Output Template
26
27For every finding, output exactly this structure (omit `## Browsers Verified In` for non-browser/non-web findings):
28
29~~~markdown
30**Summary:** <one sentence: what the vulnerability is and which component/endpoint is affected>
31
32**Impact:** <what an attacker can concretely do — name the data exposed, the privilege gained, or the service disrupted. Never write "could lead to" — write "allows an attacker to". One short paragraph.>
33
34**Severity Level:** <Critical | High | Medium | Low>
35
36## Steps To Reproduce:
37
381. <exact first step — full URL, parameter name, payload>
392. <exact second step>
403. <what to observe in the response that confirms the issue>
41
42## PoC
43
44```
45<paste the raw curl command, HTTP request from pocs/*.http, or tool output excerpt that proves exploitability>
46```
47
48## Supporting Material/References:
49
50* <CVE ID if applicable, otherwise omit this line>
51* Affected target: <target URL or file path from the finding>
52* Tool: <tool_used value from the finding>
53* <any additional evidence: key excerpt from raw tool output>
54
55## Remediation
56
57<if the finding has a `remediation` field, include this section — otherwise omit it entirely>
58
59**Effort:** <effort level> | **Breaking change:** <Yes/No>
60
61```diff
62<paste the diff from remediation.diff, or show before/after from remediation.before and remediation.after>
63```
64
65**File:** <remediation.file>:<remediation.line>
66
67**Verification:** <remediation.verification — how to confirm the fix worked>
68
69**References:**
70* <each URL from remediation.references>
71~~~
72
73## Rules
74
75- **One block per finding** — never merge two findings into one issue
76- **Impact must be concrete** — derive it from the finding's `description` and `evidence` fields; never invent hypothetical consequences
77- **Steps to Reproduce must be self-contained** — if the finding has a `reproduction` field, use its `command` as the primary reproduction step. Otherwise include full URLs and exact payloads so a developer can reproduce without asking questions
78- **PoC block is mandatory** — if a matching `.http` file exists in `pocs/`, paste its full content; if the finding has `reproduction.command`, include that; otherwise extract the most relevant raw evidence line from the `evidence` field
79- **Remediation section** — if the finding has a `remediation` field, include the ## Remediation section with the diff, effort level, verification step, and references. If no remediation exists, omit the section entirely
80- **Severity mapping**: critical → `Critical`, high → `High`, medium → `Medium`, low → `Low`
81- Output only the markdown blocks and the final summary line — no extra prose, no headers, no explanation around the blocks