Scoreboard
Portable secure code review skill for AI coding agents — OWASP/CWE coverage, structured findings, and remediation guidance. Works with Cursor, Claude Code, Kiro, and Open Agent Skills.
npx -y skills add joshuaporth/appsec-skill --skill scoreboardAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Builds the benchmark markdown scoreboard (table and Pulse) from `benchmark/artifacts/scoring/*.txt`. Use when the user asks for a scoreboard from current scoring artifacts without rerunning findings or scoring.
SKILL.md
2.7 KB, as published. Nobody here has run it
Scoreboard
Generate the scoreboard from existing scoring artifacts only.
Inputs
- Read
benchmark/artifacts/scoring/*.txt. - Each scoring artifact is expected to contain:
Challenge: NNPrimary intended issue: ...Verdict: correct|partially_correct|incorrectRationale: ...Bonus findings: ...(optional)
- Do not read
benchmark/challenges/or rewrite findings during scoreboard generation.
Output format
Title block
# Benchmark scoreboard
━━━━━━━━━━━━━━━━━━━━━━ scored challenges · blind find -> judge ━━━━━━━━━━━━━━━━━━━━━━
Glyphs
| Glyph | Meaning |
|---|---|
| 🟢 | Hit (correct) |
| 🟡 | Part (partially_correct) |
| 🔴 | Miss (incorrect) |
| ⚪ | Unknown (missing or malformed scoring artifact) |
Results table
Use this header exactly:
| # | | Intended issue (<=72 chars) | Judge notes (<=96 chars) |
| :-: | :-: | :--------------------------- | :----------------------- |
Rows:
- Include discovered challenge rows only.
- Sort rows by challenge id ascending.
- One glyph per row (
🟢/🟡/🔴/⚪). - Keep ASCII pipes and table column order unchanged.
Pulse
After the table, emit:
### Pulse
**🟢 n · 🟡 p · 🔴 m** - <one sentence>
Replace n, p, m with counts from the rendered table. If any unknown rows
exist, mention the unknown count (⚪) in the sentence.
Parsing and row construction
- Scan
benchmark/artifacts/scoring/*.txt. - For each file, extract
NNfrom filename and/orChallenge:. - Determine row status:
🟢forVerdict: correct🟡forVerdict: partially_correct🔴forVerdict: incorrect⚪if required fields are missing/malformed
- Build columns:
#: two-digitNNIntended issue:Primary intended issue(truncate to 72 chars)Judge notes:Rationale(optionally enrich withBonus findings, non-redundant only, truncate to 96 chars)
- Unknown-row fallback text:
- Intended issue:
- (unknown scoring artifact) - Judge notes:
Unknown scoring output for this challenge.
- Intended issue:
- If two files map to the same
NN, keep the newest file and mention deduplication in the pulse sentence.
What not to do
- Do not output unsorted or duplicate challenge rows.
- Do not add/remove/reorder table columns.
- Do not change glyph meanings.