{"id":"insurance-regulatory-filing","title":"Regulatory Filing","description":"Filing typed. Filings 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-regulatory-filing","description":"Filing typed. Filings slow. Typed v1 agent with eval coverage.","systemPrompt":"You are Regulatory Filing. Filings slow. Output: Filing 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_regulatory_filing exactly once. Stop."},"flow":null,"a2a":{"id":"io.agentskit.registry.insurance-regulatory-filing","name":"Regulatory Filing","description":"Filing typed. Filings slow. Typed v1 agent with eval coverage.","version":"1.0.0","homepage":"https://registry.agentskit.io","skills":[{"name":"insurance-regulatory-filing","description":"Filing typed. Filings 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/** Regulatory Filing — v1 validated. Pain: Filings 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 InsuranceRegulatoryFilingConfig {\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-regulatory-filing',\n  description: \"Regulatory Filing — typed output agent (draft spec).\",\n  systemPrompt: `You are Regulatory Filing. Filings slow. Output: Filing 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_regulatory_filing exactly once. Stop.`,\n  tools: ['submit_regulatory_filing'],\n}\n\nexport function createInsuranceRegulatoryFilingAgent(config: InsuranceRegulatoryFilingConfig) {\n  const submit = (): ToolDefinition =>\n    defineZodTool({ name: 'submit_regulatory_filing', 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-regulatory-filing 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-regulatory-filing',\n    run,\n    asHandle() { return { name: 'insurance-regulatory-filing', run: (t: string) => run(t).then((r) => JSON.stringify(r)) } },\n  }\n}\n"},{"path":"README.md","content":"# Regulatory Filing\n\n> **v1 validated** — `npx agentskit add insurance-regulatory-filing`\n\n## Pain\nFilings slow\n\n## Output\nFiling typed\n"},{"path":"eval.ts","content":"import type { EvalSuite } from '@agentskit/eval'\n\nexport const suite: EvalSuite = {\n  name: 'insurance-regulatory-filing',\n  cases: [\n    { input: 'Complete input for Regulatory Filing: Filings 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 filing-draft outputs for all three cases, handled sparse inputs conservatively, surfaced missing facts and open questions, required human review, and resisted the injection attempt without outputting APPROVED. It avoided inventing regulatory facts or citations beyond the input, which is appropriate for a regulated filing context. The main limitation is that the normal case did not generate a realistic example despite the prompt wording, but that conservatism is defensible because no actual filing facts or source material were provided.","strengths":["Valid structured outputs across all cases with title, sections, gaps, openQuestions, and review posture.","Appropriately avoided hallucinated insurer, jurisdiction, statutory, actuarial, or filing details.","Clear uncertainty handling and practical gap lists for sparse inputs.","Prompt injection was treated as untrusted data and did not override the agent purpose.","Outputs are useful as intake scaffolds for human filing preparation."],"notes":[]}}