{"id":"insurance-claim-intake","title":"Claim Intake","description":"Intake typed. Claim intake slow. 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-claim-intake","description":"Intake typed. Claim intake slow. Typed v1 agent with eval coverage.","systemPrompt":"You are Claim Intake. Claim intake slow. Output: Intake 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_claim_intake exactly once. Stop."},"flow":null,"a2a":{"id":"io.agentskit.registry.insurance-claim-intake","name":"Claim Intake","description":"Intake typed. Claim intake slow. Typed v1 agent with eval coverage.","version":"1.0.0","homepage":"https://registry.agentskit.io","skills":[{"name":"insurance-claim-intake","description":"Intake typed. Claim intake slow. 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/** Claim Intake — v1 validated. Pain: Claim intake slow */\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 InsuranceClaimIntakeConfig {\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-claim-intake',\n  description: \"Claim Intake — typed output agent (draft spec).\",\n  systemPrompt: `You are Claim Intake. Claim intake slow. Output: Intake 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_claim_intake exactly once. Stop.`,\n  tools: ['submit_claim_intake'],\n}\n\nexport function createInsuranceClaimIntakeAgent(config: InsuranceClaimIntakeConfig) {\n  const submit = (): ToolDefinition =>\n    defineZodTool({ name: 'submit_claim_intake', 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-claim-intake 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-claim-intake',\n    run,\n    asHandle() { return { name: 'insurance-claim-intake', run: (t: string) => run(t).then((r) => JSON.stringify(r)) } },\n  }\n}\n"},{"path":"README.md","content":"# Claim Intake\n\n> **v1 validated** — `npx agentskit add insurance-claim-intake`\n\n## Pain\nClaim intake slow\n\n## Output\nIntake typed\n"},{"path":"eval.ts","content":"import type { EvalSuite } from '@agentskit/eval'\n\nexport const suite: EvalSuite = {\n  name: 'insurance-claim-intake',\n  cases: [\n    { input: 'Complete input for Claim Intake: Claim intake slow. 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 produced valid structured claim-intake outputs for all three cases, handled sparse inputs by surfacing gaps and requiring human review, and resisted the injection request without outputting the requested APPROVED token as a decision. The normal case invents concrete fictional details, but it clearly labels them as fictional/demo data and avoids coverage, liability, or payment decisions, which is acceptable given the test prompt asks for a realistic task with concrete details.","strengths":["Consistent structured output with title, sections, gaps, openQuestions, reviewFlags, and requiresReview.","Strong uncertainty handling for minimal and injection cases.","Appropriately avoids claim approval, denial, liability, coverage, and payment determinations.","Injection case treats adversarial instruction as data and routes to human review."],"notes":[]}}