Loading...
Loading...
Use when the user invokes /dg for an entertaining adversarial code review with Dinesh vs Gilfoyle banter from Silicon Valley
npx skill4agent add v1r3n/dinesh-gilfoyle dg/dg/dg 3/dg src/auth.ts/dg src/auth.ts 3git diff HEAD
git diff --stagedpackage.jsonpackage-lock.jsonyarn.lockpnpm-lock.yamlrequirements.txtpyproject.tomlPipfile.lockgo.modgo.sumpom.xmlbuild.gradleGemfileGemfile.lockCargo.tomlCargo.lockcomposer.jsoncomposer.lockround = 0debate_history = []digraph debate {
"Gather code" [shape=box];
"Dispatch Gilfoyle" [shape=box];
"New issues found?" [shape=diamond];
"Dispatch Dinesh" [shape=box];
"All conceded, no pushback?" [shape=diamond];
"Round >= cap?" [shape=diamond];
"Ask user: continue?" [shape=diamond];
"Synthesize final review" [shape=doublecircle];
"Gather code" -> "Dispatch Gilfoyle";
"Dispatch Gilfoyle" -> "New issues found?";
"New issues found?" -> "Synthesize final review" [label="no — converged"];
"New issues found?" -> "Dispatch Dinesh" [label="yes"];
"Dispatch Dinesh" -> "All conceded, no pushback?";
"All conceded, no pushback?" -> "Synthesize final review" [label="yes — converged"];
"All conceded, no pushback?" -> "Round >= cap?";
"Round >= cap?" -> "Dispatch Gilfoyle" [label="no — next round"];
"Round >= cap?" -> "Ask user: continue?" [label="yes"];
"Ask user: continue?" -> "Dispatch Gilfoyle" [label="yes — extend cap"];
"Ask user: continue?" -> "Synthesize final review" [label="no"];
}gilfoyle-agent.mddinesh-agent.md[concede][defend][dismiss]## Dinesh vs Gilfoyle Review — [target]
### [N] rounds of mass destruction
---
### Best of the Banter
[2-4 of the funniest or most insightful exchanges from the debate]
---
### Verdict
#### Critical (Gilfoyle won, Dinesh conceded)
[Issues where Dinesh couldn't mount a defense — these are real and need fixing]
- `file:line` — issue — fix
#### Important (Gilfoyle won after debate)
[Issues Dinesh tried to defend but Gilfoyle's argument was stronger]
- `file:line` — issue — fix
#### Contested (Dinesh held his ground)
[Issues where Dinesh's defense was valid — code is likely fine]
- `file:line` — what was raised — why the defense holds
#### Dismissed (Gilfoyle was nitpicking)
[Issues both sides agree don't matter]
- `file:line` — what was raised — why it's a non-issue
### Strengths
[Things even Gilfoyle grudgingly acknowledged were good]
### Score
Gilfoyle: X | Dinesh: Y
[Tongue-in-cheek tally of who won more arguments]
### Recommended Changes
[Clean checklist — no banter, no context, just what to do]
- [ ] `file:line` — what to change
- [ ] `file:line` — what to change
- [ ] ...
If no changes needed: "Nothing to fix. Gilfoyle is furious.""Want a comic strip of the best moments? (y/N/pr)"
- y — generate and open in browser
- pr — generate, convert to PNG, and attach to the current PR as a comment
- N — skip
yprcomic-template.html{{REVIEW_TARGET}}{{ROUND_COUNT}}{{GILFOYLE_SCORE}}{{DINESH_SCORE}}{{DATE}}{{PANELS}}<!-- Gilfoyle panel -->
<div class="panel gilfoyle">
<span class="panel-number">1</span>
<div class="panel-header">
<div class="avatar"><svg><use href="#gilfoyle-avatar"/></svg></div>
GILFOYLE
</div>
<div class="panel-body">
<div class="speech">The quote goes here. Use <code>inline code</code> for technical references.</div>
</div>
</div>
<!-- Dinesh panel -->
<div class="panel dinesh">
<span class="panel-number">2</span>
<div class="panel-header">
<div class="avatar"><svg><use href="#dinesh-avatar"/></svg></div>
DINESH
</div>
<div class="panel-body">
<div class="speech">The response goes here.</div>
</div>
</div>
<!-- Full-width panel for dramatic moments -->
<div class="panel gilfoyle full-width">
<span class="panel-number">3</span>
<div class="panel-header">
<div class="avatar"><svg><use href="#gilfoyle-avatar"/></svg></div>
GILFOYLE
</div>
<div class="panel-body">
<div class="speech">A particularly devastating line that deserves the full width.</div>
</div>
</div>{{VERDICT_ITEMS}}<div class="verdict-item">
<span class="tag tag-fixed">FIXED</span> CSP nonce replaced with deploy-time placeholder
</div>
<div class="verdict-item">
<span class="tag tag-contested">CONTESTED</span> MutationObserver lifetime — Dinesh held ground
</div>
<div class="verdict-item">
<span class="tag tag-dismissed">DISMISSED</span> prop-types — tree-shakes out
</div>/tmp/dg-comic-{timestamp}.htmlyopen /tmp/dg-comic-{timestamp}.htmlpr# Try puppeteer/chromium first, fall back to wkhtmltoimage, then to Safari
npx --yes puppeteer-screenshot /tmp/dg-comic-{timestamp}.html /tmp/dg-comic-{timestamp}.png 2>/dev/null \
|| wkhtmltoimage --quality 90 /tmp/dg-comic-{timestamp}.html /tmp/dg-comic-{timestamp}.png 2>/dev/null \
|| /usr/bin/osascript -e 'tell application "Safari" to open POSIX file "/tmp/dg-comic-{timestamp}.html"'gh pr view --json number,url --jq '.number'gh pr comment {PR_NUMBER} --body "$(cat <<'EOF'
## /dg Review Comic Strip

_Generated by [/dg](https://github.com/v1r3n/dinesh-gilfoyle)_
EOF
)"gh pr comment