verdict
Skill0 starsChanged 43 days agoMITView on GitHub
Use whenever an agent has something for a person to decide or read - any decision, or a report, findings, summary or final report longer than a few lines - and before pasting a long list, table or numbered decisions into chat. Also for designs, mockups, screenshots, data to approve or categorize, when the user asks for a review page or review link, and whenever a `verdict` review is open at the end of a session.
10 other projects use a version of this.
Adopted by
Most recently taken up by
- ronniepinnell/caspertheir own version, first seen Nov 8, 2026
- rhasselle-oddball/claude-skillstheir own version, first seen Nov 1, 2026
- duthaho/skillhubtheir own version, first seen Oct 31, 2026
- udecode/platetheir own version, first seen Oct 17, 2026
- jacobgreenwald21/claude-skillstheir own version, first seen Oct 15, 2026
- arbelh/perduretheir own version, first seen Oct 11, 2026
Other versions10 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 10
- udecode/plate★ 17ksame name
- SanketSapkal/founder-skills★ 10same name
- damionrashford/Adversaria★ 9same name
- duthaho/skillhub★ 9same name
- ronniepinnell/casper★ 1same name
- andrewcovenant/skills★ 0same name
- arbelh/perdure★ 0same name
- jacobgreenwald21/claude-skills★ 0same name
- OpentypeAI/opentype-claude-plugin★ 0same name
- rhasselle-oddball/claude-skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository34 other files it gives its agents.
- afkSkill
- apple-contactsSkill
- apple-devSkill
- apple-notesSkill
- apple-photosSkill
- bug-huntSkill
- catch-upSkill
- cherriSkill
- chrome-controlSkill
- claude-sessionsSkill
- coordinatorSkill
- discountsSkill
- forge-skillSkill
- groupmeSkill
- herdr-crewSkill
- iconsSkill
- imsgSkill
- language-selectionSkill
- laterSkill
- mac-controlSkill
- nix-mechanicsSkill
- notion-cliSkill
- posthogSkill
- quotaSkill
- redditSkill
- rustSkill
- scoutSkill
- semverSkill
- social-contentSkill
- spotifySkill
- travelSkill
- validate-ideaSkill
- web-reconSkill
- whatsappSkill
The file
We split this skill into the rules it gives an agent
11 rules. 0 are common, 5 are distinctive, and 6 are very specific to this project.
0
Common
Most of the 9 edited versions we read keep these.
5
Distinctive
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 31
Use verdict update only when the user explicitly asks to edit that existing page.
- Very specific: line 46
Write the page (contract below): a .md file, or a directory holding index.md (or index.html) with any screenshots next to it.
- Very specific: line 63
Never leave a wait running in the background past the session.
- Distinctive: line 64
Read the answers (shape below) and act on them.
- Distinctive: line 84
Write Markdown unless the layout needs HTML:
- Distinctive: line 131
Every element stays annotatable: in comment mode (Ctrl+Option+C) the reviewer taps anything and types a note.
- Very specific: line 137
Keep the page plain: a lead saying what the batch is, one numbered section per decision or topic with the evidence (numbers, a table, a …
- Very specific: line 152
Read general first: it can scope the rest ("only section A is done").
- Distinctive: line 156
If a required item is still unanswered, ask on a fresh follow-up page, or record its details for later when the task can finish without it.
- Very specific: line 170
Every review you publish ends in verdict close, in this session or a later one you resume.
- Distinctive: line 174
Do not keep copies of the answers in scratch files past the session.
“Common” is measured: kept by at least 6 in 10 of the 9 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Verdict: decisions and reports on a page
Verdict is the default channel from agent to person. The agent writes a page
(Markdown or HTML), publishes it with the verdict CLI, sends the link, and
reads the answers back as JSON. The reviewer opens it on any device, picks
answers, pins notes to any element, and presses Done (Got it on a page with
nothing to answer). Any agent that can run a shell command can use it; the
CLI is the whole contract.
What goes on a page
| On a page | In chat |
| every decision you need from the person, with its evidence and your recommendation | the link, plus one sentence on what you need |
| any report longer than a few lines: findings, a summary, what you applied, the final report of a task | a one-line answer to a direct question |
| designs, mockups, screenshots, rows to approve or categorize | a short status line while you work |
| one quick blocking question mid-task, through the harness's own question prompt when it has one |
The reviewer's time is the scarce resource: one page per decision batch or
round, never one page per question. A new round gets a new page: follow-up
questions, new evidence, what you applied and a substantive final report go
through verdict publish with only the new material. Keep a short link back
when context matters. Do not make the person scroll past an earlier round or
replace content they have already seen.
Use verdict update only when the user explicitly asks to edit that existing
page. Preserve its answers and notes; an explicit edit is not permission to
append later rounds to it.
Flow
verdict publish report.md --task <task id> # prints the URL; also a directory, or - for stdin
verdict publish follow-up.md --task <task id> # a fresh page for the next round
verdict wait <id> # blocks until Done; prints the state JSON (exit 3 after 8 h)
verdict show <id> # read the state any time, e.g. when the user says "done" in chat
verdict close <id> # after acting on it; purged later by gc
verdict gc # end of session: purge, kill orphan waits, list stale reviews- Write the page (contract below): a
.mdfile, or a directory holdingindex.md(orindex.html) with any screenshots next to it. verdict publishonce for this round. The URL is stdout,id: <id>is stderr. Put the link in chat on its own line THE MOMENT publish returns, plus on the task record's links if the workspace has one. Say what you need in one sentence; the page carries the detail. Several pages in flight? Send each link as it publishes. Published twice by mistake?verdict closethe extra right away.- Arm a wake-up right after publishing. A configured publish hook
(
VERDICT_PUBLISH_HOOK) may already have done it: publish then prints its output (e.g.armed <id>: wakes pane ...) on stderr, and you arm nothing more. Otherwise, where the environment has a waker that messages your session when a command returns (such asagent-wake verdict <id>), arm it and keep working: Done reaches you without polling, and the page tells the reviewer an agent is listening. Without one,verdict wait <id>in the foreground when the review is the next step; otherwise continue other work andverdict show <id>when the user says they are done. Never leave awaitrunning in the background past the session. - Read the answers (shape below) and act on them. Close the consumed review after everything on it is resolved. If there is substantive new material to show, publish a fresh, focused page for that next round, with the task link appended to its existing links. Leave the earlier page intact.
- A substantive final report is a fresh page too: show what changed and its verification without copying the old questions. Its Done or Got it covers only that new report. Keep the session open while a requested decision or review remains. Do not create another page merely to acknowledge an unchanged report, and do not send repeated unchanged completion reports.
verdict gcbefore the final message of any session that touched a review. It kills orphanverdict waitprocesses on this machine, forgets dead waiters and lists stale reviews. A stale review you own is yours to finish or close; one you do not own is reported to the user, never closed.
verdict publish also warns on stderr when stale reviews exist. Read the
warning; do not suppress it.
Page contract
Write Markdown unless the layout needs HTML:
# Finance: three decisions
Where these came from, in one sentence.
## 1. Investment price history
Alpha Vantage free returns only 100 daily closes per symbol. Tiingo gives full history on a free key.
| Provider | History | Cost |
|---|---|---|
| Tiingo | full | free |
| Alpha Vantage | 100 days | $49.99/mo for full |
<div data-item="prices" data-choices="Tiingo, Alpha Vantage as fallback|Alpha Vantage paid" data-default="Tiingo, Alpha Vantage as fallback">Price source</div>
<div data-item="prices-note" data-input="anything else?" data-optional>Optional notes</div>- The text before the first
##is the lead; each##heading opens a card. A decision is one HTML line, with a blank line before and after it. - Screenshots:
with the file next toindex.md. - Inside HTML blocks such as
<details>, use HTML for the contents too:<details><summary>Earlier version</summary><img src="earlier.png" alt="Earlier version"></details>. Markdown image syntax inside these blocks renders as literal text. After publishing, expand every image dropdown in the browser and verify its images load (img.complete && img.naturalWidth > 0). - HTML works too (
index.html, or a single.htmlfile). The server injects base styles for type, cards (class="card"), tables, images and both color schemes, so a page needs no<style>. If you add one, define colors as tokens with a dark-mode override: a light card under dark-mode text is unreadable on a phone at night.
| Markup | Meaning |
data-item="id" | something to answer or annotate; id becomes the key in answers |
data-choices="a|b|c" | pick one; | is the only separator, any other text is fine; data-default names the recommendation (else the first) |
data-input="placeholder" | free-text answer |
data-optional | an optional answer; saved normally but excluded from required progress and unanswered warnings |
data-section="name" | gets an "accept this section's recommendations" button for the choices inside it (every Markdown card is a section) |
A page with no choices or inputs is a report: the reviewer gets a Got it
button. A page with optional inputs still has Done, without requiring those
inputs to be filled. Mark supplemental notes, corrections and additional
instructions with data-optional; do not turn them into required questions.
Every element stays annotatable: in comment mode (Ctrl+Option+C) the
reviewer taps anything and types a note.
Let the client supply review controls and its responsive pane; do not build a second Done interface.
Keep the page plain: a lead saying what the batch is, one numbered section
per decision or topic with the evidence (numbers, a table, a screenshot), the
choices last, the recommendation in data-default. Mobile first: no fixed
widths, no tiny text. Use the reviewer's words for the choices, not internal
ids.
Answers
{"status": "done",
"answers": {"prices": {"choice": "…", "defaulted": false}, "prices-note": {"text": "…"}},
"comments": [{"item": "prices", "selector": "…", "snippet": "…", "text": "…", "at": "…"}],
"general": "…"}- Read
generalfirst: it can scope the rest ("only section A is done"). - Done sends only what the reviewer touched. A nonblank item-linked comment
can answer a question without an entry in
answers; read those comments before declaring it unanswered. Blank optional fields need no follow-up. If a required item is still unanswered, ask on a fresh follow-up page, or record its details for later when the task can finish without it. Never apply an untouched recommendation on your own. defaulted: true= the reviewer took the recommendation with an accept button. That is a decision; apply it.- A comment's
itemis the enclosingdata-itemor null;snippetis the text of the element they tapped. Treat comments as instructions about that part of the page; they override the choice on the same item. Acknowledge each one in the applied report. statusopenaftershowmeans not finished: do not apply partial answers unless the user says so.
Cleanup rules
- Every review you publish ends in
verdict close, in this session or a later one you resume. Record the review id with the task. verdict waitis foreground or killed;gccatches the rest, run it.- The server stores the page and answers as files; nothing else is created. Do not keep copies of the answers in scratch files past the session.
Failures
| Symptom | Meaning | Do |
exit 5 cannot reach the server | VERDICT_URL unset or the server is down | first check whether the shell simply lacks VERDICT_URL (a session started before the variable was declared): read the server's public URL from the machine configuration and pass it explicitly (VERDICT_URL=<url> verdict ...); only when the server itself is unreachable tell the user in chat and report the outage |
exit 1 the server refused it | bad input, e.g. a file name with a space | fix what the message names and publish again |
exit 3 from wait | 8 h without Done | verdict show; ask the user; leave the review open |
| exit 4 | the review was purged or the id is wrong | verdict list --all |
| stale warning on publish | old reviews nobody finished | finish or close yours; report the others |
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

