aw-verify
Skill20 starsChanged 13 days agoMITView on GitHub
Proves a feature works end to end, locally or on the PR preview: reuses the brief and specs `/aw` wrote, gets the environment ready, probes it in the browser (ui-verify) with concurrency and fault cases, then reads what the services recorded (telemetry-verify), fixes what it finds on a local stack one commit per finding, and reports with real screenshots. `setup` writes the committed `.agents/aw/` config every suite skill reads. Triggers on "/aw-verify".
In this repository48 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- skills/workflow/autonomous-workflow/CLAUDE.mdCLAUDE.md
- ideateSkill
- interviewSkill
- playwright-trace-analyzerSkill
- profile-optimizerSkill
- rum-trackingSkill
- screencastSkill
- video-analyserSkill
- youtube-transcriptSkill
- create-skillSkill
- docsSkill
- handoffSkill
- optimize-claude-mdSkill
- persistent-memorySkill
- attach-mediaSkill
- ci-auto-fixSkill
- create-prSkill
- github-actions-authorSkill
- resolve-conflictsSkill
- animations-nativeSkill
- animationsSkill
- behavioral-designSkill
- chartingSkill
- storybookSkill
- uxSkill
- visual-designSkill
- ai-engineeringSkill
- confidenceSkill
- criticalSkill
- impact-mapSkill
- jev-assertSkill
- measurableSkill
- optimize-approachSkill
- polishSkill
- pr-reviewSkill
- review-loopSkill
- tddSkill
- verify-behaviorSkill
- e2e-testing-mobileSkill
- e2e-testingSkill
- telemetry-verifySkill
- ui-verifySkill
- autonomous-workflowSkill
- aw-create-planSkill
- aw-create-walkthroughSkill
- fix-bugSkill
- implement-suggestionSkill
The file
We split this skill into the rules it gives an agent
2 rules. About 0 are common, 1 is distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 46
Do these in order; Read a step's rule before its first action when it is not already in context.
- Distinctive: line 80
Evidence or it did not happen: Every pass and finding cites a screenshot, a response, a span, or a log line.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
aw-verify
Prove a feature works on a real environment, try hard to break it, read what the services recorded while you did, and report it in one shape.
The checks, the browser, and the telemetry must agree.
Repo values come from .agents/aw/ (rules/config.md); repo facts from .agents/aw/notes.md.
Who owns what, the spec contract, and the anti-patterns: rules/delegation.md; why it is shaped this way: references/design.md.
Modes and flags
run [local|preview] [<pr>|<ticket>] is the default (no reference → the branch's PR, else its plan.md).
setup writes .agents/aw/ (rules/setup.md); report re-renders the last report and re-upserts the PR comment, with no stack, browser, or telemetry calls.
Every run with a PR ends by posting its proof — what was tested, why, the result, and uploaded screenshots and recordings — as the aggregate region of the PR's one verify comment, which a re-run from any account updates in place (rules/pr-comment.md): the verdict, what needs a human, a media strip (one recording, then up to two screenshot thumbnails), and one collapsible row per check, everything else collapsed; always, whatever policies.pr_comment says.
Your own PR: fix, push, and re-verify until the verdict is ✅ verified, at most 3 iterations — on local and preview alike — then post (rules/fix-loop.md § Own PR). Someone else's PR: report only.
| Flag | Effect |
--no-fix | Report findings, change no code |
--no-push / --no-comment | Commit fixes but do not push / defer the PR comment — only for a caller that runs report <pr-url> itself afterwards (aw) |
--loops <n> | Fix-and-reverify iterations (default and max 3; telemetry.yml loops may lower it) |
--keep-stack | Never tear the local stack down |
--foreign-stack <teardown|ask|abort> | Overrides policies.foreign_stack; aw passes abort |
Someone else's PR is never fixed, on local or preview: its blocking findings go to review-loop --ui as review threads.
Run card
Do these in order; Read a step's rule before its first action when it is not already in context.
Everything this run writes goes under .agent/{branch}/verify/, never /tmp, where another run uses the same names.
- Config (
rules/config.md § Resolve). No.agents/aw/environments.yml, or no entry for the environment → runsetupfirst; never guess a URL, dataset, or start command. Read lessons (rules/lessons.md § Read). - Intent (
rules/intent.md). Writeintent.md: the brief'sAC-nverbatim, each taggedui:/api:/worker:, and the edge-case matrix. The matrix always has a Concurrency row for any AC that creates a record (fire the trigger twice in parallel, count rows) and one Failure row per guardrail in the brief (break the dependency the guardrail names: make the file unwritable, block the route, stop the service). - Stack (
rules/local-stack.md+ the driver file; login perrules/auth.md). Start it detached, logs toprocs/<name>.log, poll the ready URL. A sandbox that refuseslisten→ drive the app's own request handler in-process and saybrowser: not run (no local port). - Probe in windows (
rules/browser-verification.md). Per batch, append toprobes.jsonl:window_start, run it, thenwindow_endand each log's bytelog_offsets. Batches: acceptance specs, then edge rows, then fault rows; restore every injected fault before the next batch. A defect that blocks the path (a 500, a build error, a crash) → record it, then route around it without changing code (another dev-server mode, a direct request, seeded state) and keep probing; one defect must not hide the next. - Telemetry, once (The two witnesses). After the last window closes, dispatch
telemetry-verifyover all of them; save its block totelemetry.md. - Findings (
rules/findings.md): one JSON line per defect infindings.jsonl, with its probe and evidence. - Fix (your own PR or no PR yet,
localorpreview; never someone else's PR; unless--no-fix:rules/fix-loop.md), then report (rules/report.md), lessons and cleanup (rules/lessons.md § Write). After a fix, re-run the probe that found it; stop at✅ verifiedor at--loops, and report a finding open at the cap asopen.
The verdict is BROKEN when any AC fails or any guardrail does not hold; a defect outside them is reported but does not flip the verdict.
The two witnesses
Skill("ui-verify", "run .agent/<branch>/specs.md --env <env> --url <url> --no-telemetry --no-comment")
Agent(subagent_type="general-purpose",
prompt='Run Skill("telemetry-verify", "--env <env> --windows .agent/<branch>/verify/probes.jsonl [--host <preview host>] [--driver <driver>] --brief <plan.md or verify/intent.md> --out .agent/<branch>/verify/findings.jsonl --no-comment") and return only its TELEMETRY block')- Backend
dash0-mcp→ first check thatmcp__<telemetry.yml mcp_server>__getSpansexists. Absent →telemetry: skipped (Dash0 MCP server '<name>' not connected), no dispatch; never query another Dash0 server, whose empty answer proves nothing. - One dispatch per run, after the last window: the sub-agent pays its setup once, and its ingest wait starts from the last window. A fix loop dispatches once more for the windows it re-probed.
ui-verifyalways gets--no-telemetry, so no window is read twice; both witnesses always get--no-comment, so the PR holds one aggregate (rules/pr-comment.md).- A path that emits no web event, span, or log (a client-side fill, a local-state apply) cannot be
confirms: report it asno regression observed (path emits no signal)and say the browser run is its only proof. - The block has
pipe:, oneAC-n <verdict>line per AC,signals:,findings:, and[receipt] verdict: confirms|contradicts|ambiguous|null; its findings joinfindings.jsonlasT-<n>. - On Dash0 Agent0 the sub-agent type is
general; with no dispatch tool, run it here and saytelemetry: same-context (reduced independence).
Core principles
- Intent before clicks. The brief, PR, and ticket define "works"; the diff only shows where to look.
- The running code is the PR's code. Prove the change is in the checkout and the environment serves it.
- Evidence or it did not happen. Every pass and finding cites a screenshot, a response, a span, or a log line.
- Graceful is a requirement. A crash, blank screen, unhandled rejection, raw stack trace, or silent no-op on bad input is a finding.
- Telemetry is the second witness. A green UI with an ERROR span behind it, or a request whose trace never reached the API, is a finding.
Definition of done
intent.md,probes.jsonl,findings.jsonl, andreport.mdunder.agent/{branch}/verify/;specs.mdfor a UI change.- Every AC and guardrail:
pass,fixed → pass, orfail, with evidence; every edge row probed orn/awith a reason. - A
TELEMETRYblock covering every window, ortelemetry: skipped (<reason>). Never leave it out: the report is incomplete without one of the two, and a connected Dash0 MCP server is never a valid skip reason. - Each fix its own commit, pushed per policy; stack left per policy.
- The PR comment's
aggregateregion posted with every screenshot and recording uploaded, or acomment: not posted (<reason>)line.
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.

