Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/lukehinds-patch
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: productivity
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/patch
What's inside
- Skill name
patch- Description
- Propose a code patch for a finding. Produces a unified diff against the current HEAD plus a short rationale, written back as a finding note so the analyst can review, adjust, and open a PR themselves. The skill never pushes to the remote.
- License
- MIT
- Compatibility
- Needs network access to the scrutineer API (http://host:port/api). Finding-scoped; runs against ./src at HEAD.
- Metadata
- scrutineer.version: 1 · scrutineer.output_file: report.json · scrutineer.output_kind: patch
- Instructions
- 83 lines in SKILL.md · view on GitHub
Files (4)
- SKILL.md
- SKILL.md.bundle
- schema.json
- schema.json.bundle
SKILL.md (first lines)
# patch
Propose a minimal code patch that fixes a confirmed finding. You are not shipping the fix; you are handing the analyst a starting diff and explaining what it does. The analyst reviews, edits if needed, and opens a PR by hand.
## Workspace
- `./src` — the repository at its current HEAD, on the default branch, writable
- `./context.json` — has `scrutineer.api_base`, `scrutineer.token`, `scrutineer.repository_id`, `scrutineer.scan_id`, `scrutineer.finding_id` (required; this skill only makes sense finding-scoped)
- `./report.json` — write the patch + rationale here
- `./schema.json` — shape of `report.json`
## What to do
1. Read `./context.json`. If `scrutineer.finding_id` is missing, write `{"error": "no finding_id in context.json; patch is finding-scoped"}` to `report.json` and exit 0.
2. Fetch the finding: `GET {api_base}/findings/{finding_id}` with `Authorization: Bearer {token}`. Read `location`, `cwe`, `trace`, `boundary`, `validation`, `rating`. These five together tell you where the sink is, what the vulnerable input flow looks like, and what dangerous behaviour you need to stop.
3. Inside `./src`, edit files to fix the finding. Constraints:
- **Minimal.** Change only what the fix requires. Do not refactor surrounding code, rename variables, reformat unrelated lines, or upgrade dependencies unless the fix inherently requires it.
- **In place.** Fix the sink where it lives. If the finding's `location` is `pkg/foo/bar.go:42`, that is where the patch should land (or at the nearest layer where a guard is sensible — e.g. the input validator that feeds the sink).
- **Consistent.** Match the existing code style and idioms. If the codebase uses a specific sanitiser, validator, or helper for similar cases, reuse it. Do not introduce a new helper module for a one-off fix.
- **Safe.** The patch must not break the reproduction's documented legitimate behaviour — only block the dangerous path. If you cannot tell where the dangerous path diverges from legitimate use, stop and refuse to patch (see "Refusing to patch" below for the `{"error": ...}` shape).
- **Include a test when practical.** If the repo has a test suite that covers the vulnerable code path, add a regression test that would fail without your patch. If the repo has no tests, or the sink is in a place that is hard to cover, skip this and say why in `rationale`.
4. Once you have a working tree edit, generate a unified diff against HEAD:
```sh
cd src
git add -N .
git diff HEAD -- . > ../patch.diff
```
Read `../patch.diff` (the workspace root, alongside `report.json`) and put its contents into `report.json` under the `patch` field. Do not commit; the diff is the artefact. If the diff is empty, something went wrong — do not write an empty patch. Write `{"error": "patch produced no diff"}` and exit 0.
5. POST a finding note summarising the patch: `POST {api_base}/findings/{finding_id}/notes` with:
```json
{
"body": "Proposed patch in scan #{scan_id}.\n\nFiles changed: ...\n\n{short rationale}\n\nApply with: `git apply` the diff from the scan report.",
"by": "patch"
}
```
The note lives on the finding page; the full diff lives in `report.json` and is viewable on the scan page.
6. Do not PATCH any editable fields on the finding. Specifically:
- Do not set `fix_commit` — that field means a shipped upstream fix, not a proposal. The analyst sets it after their PR merges.
- Do not set `fix_version` — same reason.
- Do not touch `status`. Lifecycle transitions belong to the analyst.
7. Write `./report.json`:
```json
{
"patch": "diff --git a/pkg/foo/bar.go b/pkg/foo/bar.go\n...",
"rationale": "Short prose — two or three sentences. What the guard is, why it blocks the trace, what legitimate input it still lets through.",
"files_changed": ["pkg/foo/bar.go", "pkg/foo/bar_test.go"],
"base_commit": "<HEAD sha from ./src>",
"tests_added": true,
"notes": "Optional: anything the analyst should know — a second sink you spotted but didn't patch, a style choice you weren't sure of, a test you couldn't write."
}
```
`base_commit` is the HEAD sha the diff applies to. The analyst needs this to `git am` or `git apply` cleanly — if they rebased since the scan, they know the patch may not apply and can regenerate.
## Refusing to patch
Write `{"error": "...", "rationale": "..."}` and exit 0 in any of these cases — do not ship a bad patch:
- The finding prose is too thin (empty Trace, empty Validation). You need both to know where the sink is and what behaviour to stop.
- The fix is architectural (e.g. "rewrite this whole module to not shell out") rather than localisable. A patch skill proposes a surgical fix; larger changes are an issue comment for the maintainer, not a diff.
- The codebase is in a language or framework you cannot confidently edit without risking regressions. It is better to say so than to produce a plausible-looking but wrong patch.
- The finding has already been fixed upstream. Check `git log -- {location}` — if a recent commit looks like it addressed the sink, surface the SHA in `notes` and refuse to duplicate.
## Constraints
- Do not push. Do not commit. Do not open a PR. The scrutineer workspace is ephemeral and isolated; your diff is the only thing that survives the scan.
- Do not add new dependencies. If sanitisation or escaping is needed, reuse a helper the codebase already imports. A patch that needs a new top-level dep almost always means the fix is in the wrong place.
- Do not edit the lockfile, go.sum, Gemfile.lock, package-lock.json, Cargo.lock, etc. unless you also changed the manifest that owns it. Stray lockfile churn makes diffs hard to review.
- Do not touch files outside what the fix requires. CI config, docs unrelated to the fix, README — leave alone.From lukehinds/scrutineer-attest-test, MIT.
More from lukehinds/scrutineer-attest-test
- 0.479score
sbom
lukehinds
Generate a CycloneDX Software Bill of Materials for the repository.
SkillCFreshness: CClaude Code +9 - 0.476score
dependencies
lukehinds
Index every dependency declared in the repository's manifest and lockfile files (package.json, Gemfile, go.mod, requirements.txt, etc.) and record each one…
SkillCFreshness: CClaude Code +9 - 0.476score
zizmor
lukehinds
Audit the repository's GitHub Actions workflows for common security issues (credential mishandling, untrusted inputs, template injection, overly permissive…
SkillCFreshness: CClaude Code +9 - 0.476score
semgrep
lukehinds
Run semgrep static analysis with the security-audit and secrets rulesets, then map each hit into scrutineer's findings shape so it surfaces alongside…
SkillCFreshness: CClaude Code +9 - 0.474score
maintainers
lukehinds
Identify the real maintainers of a repository and the best way to contact them about a security issue.
SkillCFreshness: CClaude Code +9 - 0.474score
cna-match
lukehinds
Determine which CVE Numbering Authority (if any) covers this repository, so disclosures can be routed to the CNA's security contact rather than only the…
SkillCFreshness: CClaude Code +9 - 0.474score
posture
lukehinds
Assess a repository's security posture and its readiness to receive a vulnerability report.
SkillCFreshness: CClaude Code +9 - 0.474score
repo-overview
lukehinds
Produce a structured plain-language overview of what a repository does, who maintains it, its activity level, and the shape of its codebase.
SkillCFreshness: CClaude Code +9 - 0.474score
reachability
lukehinds
Check whether known sinks in this application's dependencies are reachable from its own trust boundaries.
SkillCFreshness: CClaude Code +9 - 0.474score
security-deep-dive
lukehinds
Audit first-party source for security vulnerabilities using an inventory-first, six-step per-sink methodology.
SkillCFreshness: CClaude Code +9 - 0.474score
disclose
lukehinds
Draft the disclosure content for a finding in GitHub Security Advisory shape.
SkillCFreshness: CClaude Code +9 - 0.474score
fork
lukehinds
Fork the scanned repository into the configured GitHub organisation, enable private vulnerability reporting on the fork, record the scan as a git note, and…
SkillCFreshness: CClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Jun 11, 2026 (4 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from lukehinds
- 0.479score
sbom
lukehinds
Generate a CycloneDX Software Bill of Materials for the repository.
SkillCFreshness: CClaude Code +9 - 0.476score
zizmor
lukehinds
Audit the repository's GitHub Actions workflows for common security issues (credential mishandling, untrusted inputs, template injection, overly permissive…
SkillCFreshness: CClaude Code +9 - 0.476score
semgrep
lukehinds
Run semgrep static analysis with the security-audit and secrets rulesets, then map each hit into scrutineer's findings shape so it surfaces alongside…
SkillCFreshness: CClaude Code +9 - 0.476score
dependencies
lukehinds
Index every dependency declared in the repository's manifest and lockfile files (package.json, Gemfile, go.mod, requirements.txt, etc.) and record each one…
SkillCFreshness: CClaude Code +9 - 0.474score
disclose
lukehinds
Draft the disclosure content for a finding in GitHub Security Advisory shape.
SkillCFreshness: CClaude Code +9 - 0.474score
fork
lukehinds
Fork the scanned repository into the configured GitHub organisation, enable private vulnerability reporting on the fork, record the scan as a git note, and…
SkillCFreshness: CClaude Code +9
Cite this page
patch skill. Agent Mart. https://agentmart.dev/skills/lukehinds-patch (last updated 2026-10-24)