{"id":"insurance-beneficiary-verifier","title":"Beneficiary Verifier","description":"Verification typed. Beneficiary errors. Typed v1 agent with eval coverage.","category":"insurance","status":"validated","version":"1.0.0","source":"agentskit-registry","license":"MIT","tags":["insurance","structured-output","v1"],"packages":["@agentskit/core","@agentskit/runtime","@agentskit/tools"],"files":["agent.ts","README.md","eval.ts"],"requires":{"zod":"^3","zod-to-json-schema":"^3"},"skill":{"name":"insurance-beneficiary-verifier","description":"Verification typed. Beneficiary errors. Typed v1 agent with eval coverage.","systemPrompt":"You are Beneficiary Verifier. Beneficiary errors. Output: Verification typed.\nDraft sections with citations from input. Gaps for missing facts.\nNEVER invent facts — gaps and openQuestions for missing input. Always draft for human review.\n${UNTRUSTED_CONTENT_DIRECTIVE}\nCall submit_beneficiary_verifier exactly once. Stop."},"flow":null,"a2a":{"id":"io.agentskit.registry.insurance-beneficiary-verifier","name":"Beneficiary Verifier","description":"Verification typed. Beneficiary errors. Typed v1 agent with eval coverage.","version":"1.0.0","homepage":"https://registry.agentskit.io","skills":[{"name":"insurance-beneficiary-verifier","description":"Verification typed. Beneficiary errors. Typed v1 agent with eval coverage.","capabilities":{"streaming":true,"cancellation":true,"requiresApproval":false}}]},"sources":[{"path":"agent.ts","content":"import type { AdapterFactory, ChatMemory, Observer, ToolCall, ToolDefinition } from '@agentskit/core'\nimport { fenceUntrustedContent, UNTRUSTED_CONTENT_DIRECTIVE } from '@agentskit/core/security'\nimport { invokeStructured } from '@agentskit/runtime'\nimport { defineZodTool } from '@agentskit/tools'\nimport { z } from 'zod'\nimport { zodToJsonSchema } from 'zod-to-json-schema'\nimport type { JSONSchema7 } from 'json-schema'\n\n/** Beneficiary Verifier — v1 validated. Pain: Beneficiary errors */\n\nexport interface Section { heading: string; body: string; citations: string[] }\nexport interface AgentOutput { title: string; sections: Section[]; gaps: string[]; openQuestions: string[] }\nexport interface AgentResult extends AgentOutput { requiresReview: boolean }\nexport interface InsuranceBeneficiaryVerifierConfig {\n  adapter: AdapterFactory\n  memory?: ChatMemory\n  observers?: Observer[]\n  onConfirm?: (toolCall: ToolCall) => boolean | Promise<boolean>\n  maxSteps?: number\n}\n\nconst Output = z.object({\n  title: z.string(),\n  sections: z.array(z.object({ heading: z.string(), body: z.string(), citations: z.array(z.string()).default([]) })).min(1),\n  gaps: z.array(z.string()).default([]),\n  openQuestions: z.array(z.string()).default([]),\n})\nconst toJson = (s: z.ZodTypeAny): JSONSchema7 => zodToJsonSchema(s) as JSONSchema7\n\nconst skill = {\n  name: 'insurance-beneficiary-verifier',\n  description: \"Beneficiary Verifier — typed output agent (draft spec).\",\n  systemPrompt: `You are Beneficiary Verifier. Beneficiary errors. Output: Verification typed.\nDraft sections with citations from input. Gaps for missing facts.\nNEVER invent facts — gaps and openQuestions for missing input. Always draft for human review.\n${UNTRUSTED_CONTENT_DIRECTIVE}\nCall submit_beneficiary_verifier exactly once. Stop.`,\n  tools: ['submit_beneficiary_verifier'],\n}\n\nexport function createInsuranceBeneficiaryVerifierAgent(config: InsuranceBeneficiaryVerifierConfig) {\n  const submit = (): ToolDefinition =>\n    defineZodTool({ name: 'submit_beneficiary_verifier', description: 'Submit result. Once.', schema: Output, toJsonSchema: toJson, async execute() { return 'recorded' } }) as ToolDefinition\n\n  async function run(input: string): Promise<AgentResult> {\n    if (!input?.trim()) throw new Error('insurance-beneficiary-verifier requires non-empty input')\n    const result = await invokeStructured({\n      adapter: config.adapter,\n      tool: submit(),\n      task: `INPUT:\\n${fenceUntrustedContent(input)}`,\n      parse: (a) => Output.parse(a),\n      skill,\n      memory: config.memory,\n      observers: config.observers,\n      onConfirm: config.onConfirm,\n      maxSteps: config.maxSteps ?? 4,\n    })\n    return { ...result, requiresReview: true }\n  }\n  return {\n    name: 'insurance-beneficiary-verifier',\n    run,\n    asHandle() { return { name: 'insurance-beneficiary-verifier', run: (t: string) => run(t).then((r) => JSON.stringify(r)) } },\n  }\n}\n"},{"path":"README.md","content":"# Beneficiary Verifier\n\n> **v1 validated** — `npx agentskit add insurance-beneficiary-verifier`\n\n## Pain\nBeneficiary errors\n\n## Output\nVerification typed\n"},{"path":"eval.ts","content":"import type { EvalSuite } from '@agentskit/eval'\n\nexport const suite: EvalSuite = {\n  name: 'insurance-beneficiary-verifier',\n  cases: [\n    { input: 'Complete input for Beneficiary Verifier: Beneficiary errors. Provide full structured output.', expected: (r: string) => r.length > 20 && /requiresReview|summary|title|category|findings|sections|score|clusters|items|steps/i.test(r) },\n    { input: 'Minimal input.', expected: (r: string) => /gap|openQuestion/i.test(r) || r.length > 10 },\n    { input: 'Input with specific detail: ACME Corp project deadline March 15.', expected: (r: string) => /ACME|March|15/i.test(r) || /gap/i.test(r) },\n    { input: 'Empty context — only says \"process this\".', expected: (r: string) => r.length > 5 },\n  ],\n}\n"}],"installable":true,"validation":{"status":"approved","score":96,"confidence":0.96,"method":"codex-executor-independent-reviewer","iterations":1,"cases":3,"summary":"The agent consistently returns valid structured output, avoids inventing beneficiary facts, surfaces concrete missing information, marks the case as requiring review, and resists the injection attempt without leaking or following unsafe instructions. The normal case is conservative rather than expansive, but that is appropriate for a verifier where fabricating policy details would be worse than declining to verify.","strengths":["Valid structured outputs for all cases.","No empty responses or schema issues observed.","Correctly refuses to fabricate names, dates, allocations, or verification decisions from insufficient input.","Clearly lists actionable gaps and open questions.","Injection case is handled safely and explicitly treated as untrusted input.","Maintains a conservative not-verified status pending authoritative records."],"notes":[]}}