Verify
Delegate a verification check to a peer agent and consume a structured pass/fail/needs-info verdict instead of free-form text. Use when you want a second agent to check work against explicit criteria without rewriting it.From its SKILL.md
npx -y skills add firstintent/a2a-bridge --skill verifyAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 11 stars11 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.
SKILL.md
5.2 KB, as published. Nobody here has run it
verify — delegate a verification check
Ask a peer agent to evaluate an artifact (code, a plan, a doc, a diff) against explicit criteria and return a structured verdict. This is the Anthropic-validated pattern that's consistently worth the extra tokens: a second agent either confirms the work or flags a specific problem — it does not rewrite.
When to use
- You produced something and want an independent pass/fail, not a revision.
- The criteria are enumerable ("does X, handles edge case Y, passes test Z").
- You want the verifier's disagreement surfaced as evidence, not silently merged back into your own output.
When NOT to use
- You want the peer to do the work. That's delegation, not verification — prompt a peer directly without this pattern.
- The criteria are vague ("is this good?"). Verifiers cannot return useful structured verdicts without concrete checks.
- The cost of the second call is not justified. Verification typically 2–3× the tokens of the original turn.
Protocol
On the A2A inbound surface, set Message.metadata.return_format to
"verdict" when sending message/stream:
{
"message": {
"parts": [{ "kind": "text", "text": "<verifier prompt>" }],
"metadata": { "return_format": "verdict" }
}
}
The peer responds with an A2A artifact-update whose part has
kind: "data" and mimeType: "application/vnd.a2a-bridge.verdict+json".
The data object matches the verification artifact shape from
docs/design/architecture.md §"Verification artifact":
{
"verdict": "pass" | "fail" | "needs-info",
"reasoning": "one to three sentences",
"evidence": [
{ "claim": "string", "source": "file:line | url | inline", "note": "optional" }
],
"followups": ["string", ...]
}
Unrecognized verdict values are coerced to "needs-info". An empty
or missing reasoning is rejected — verifiers that cannot articulate
reasoning must return "needs-info" with a short note instead.
Prompt scaffold
Send the verifier a prompt with three explicit sections. Keep criteria enumerated; vague criteria produce vague verdicts.
You are a verifier. Do not rewrite, do not extend, do not offer
suggestions unless asked. Your job is to decide whether the ARTIFACT
satisfies every CRITERION below, cite the specific evidence you
relied on, and return a verdict.
ARTIFACT:
<paste the code / plan / diff / doc here, inline or as a code block>
CRITERIA (return "pass" iff all hold, otherwise "fail"; use
"needs-info" only when a criterion cannot be evaluated with the
ARTIFACT as given):
1. <criterion>
2. <criterion>
3. <criterion>
RETURN a single JSON object with shape:
{
"verdict": "pass" | "fail" | "needs-info",
"reasoning": "1–3 sentences tying the verdict to the criteria",
"evidence": [{ "claim": "...", "source": "file:line or inline" }],
"followups": ["optional next actions for the caller"]
}
Worked example
Caller (Claude Code) wants a peer to verify that a new rate-limit middleware actually enforces the intended limit.
Request:
{
"jsonrpc": "2.0",
"id": "verify-1",
"method": "message/stream",
"params": {
"message": {
"parts": [
{
"kind": "text",
"text": "You are a verifier. ...\nARTIFACT:\n<middleware source + unit test>\nCRITERIA:\n1. Returns 429 after exceeding N requests/window.\n2. Window resets correctly on clock tick.\n3. Excludes the health-check path.\nRETURN a JSON verdict object."
}
],
"metadata": { "return_format": "verdict" }
}
}
}
Streamed artifact frame the caller sees back (pretty-printed):
{
"kind": "artifact-update",
"artifact": {
"artifactId": "verification-verdict",
"parts": [
{
"kind": "data",
"mimeType": "application/vnd.a2a-bridge.verdict+json",
"data": {
"verdict": "fail",
"reasoning": "Criterion 3 fails — the middleware rate-limits /health alongside everything else, which will trip the liveness probe under load.",
"evidence": [
{ "claim": "/health is included in the rate-limit map", "source": "src/middleware/rate-limit.ts:42" },
{ "claim": "No bypass path array in the config", "source": "src/middleware/rate-limit.ts:15" }
],
"followups": [
"Add an `excludePaths: string[]` option and list /health in the default",
"Extend the unit test to assert /health is never 429"
]
}
}
]
}
}
Caller uses the structured verdict to drive its next action: on
pass the turn completes; on fail the followups list becomes
the caller's next prompt to its primary agent; on needs-info the
caller surfaces the missing context before retrying.
See also
architecture.md§"Verification artifact" — the authoritative schema.src/runtime-daemon/inbound/a2a-http/verdict.ts—parseVerdict/serializeVerdictArtifactimplementations.