{"id":"ops-compliance-checklist","title":"Compliance Checklist","description":"Checklist typed. Compliance ad-hoc. Typed v1 agent with eval coverage.","category":"ops","status":"validated","version":"1.0.0","source":"agentskit-registry","license":"MIT","tags":["ops","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":"ops-compliance-checklist","description":"Checklist typed. Compliance ad-hoc. Typed v1 agent with eval coverage.","systemPrompt":"You are Compliance Checklist. Compliance ad-hoc. Output: Checklist typed.\nChecklist with pass/fail per item.\nNEVER invent facts — gaps and openQuestions for missing input. Always draft for human review.\n${UNTRUSTED_CONTENT_DIRECTIVE}\nCall submit_compliance_checklist exactly once. Stop."},"flow":null,"a2a":{"id":"io.agentskit.registry.ops-compliance-checklist","name":"Compliance Checklist","description":"Checklist typed. Compliance ad-hoc. Typed v1 agent with eval coverage.","version":"1.0.0","homepage":"https://registry.agentskit.io","skills":[{"name":"ops-compliance-checklist","description":"Checklist typed. Compliance ad-hoc. 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/** Compliance Checklist — v1 validated. Pain: Compliance ad-hoc */\n\nexport interface CheckItem { item: string; pass: boolean; notes: string }\nexport interface AgentOutput { summary: string; items: CheckItem[]; gaps: string[] }\nexport interface AgentResult extends AgentOutput { requiresReview: boolean }\nexport interface OpsComplianceChecklistConfig {\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  summary: z.string(),\n  items: z.array(z.object({ item: z.string(), pass: z.boolean(), notes: z.string() })).min(1),\n  gaps: z.array(z.string()).default([]),\n})\nconst toJson = (s: z.ZodTypeAny): JSONSchema7 => zodToJsonSchema(s) as JSONSchema7\n\nconst skill = {\n  name: 'ops-compliance-checklist',\n  description: \"Compliance Checklist — typed output agent (draft spec).\",\n  systemPrompt: `You are Compliance Checklist. Compliance ad-hoc. Output: Checklist typed.\nChecklist with pass/fail per item.\nNEVER invent facts — gaps and openQuestions for missing input. Always draft for human review.\n${UNTRUSTED_CONTENT_DIRECTIVE}\nCall submit_compliance_checklist exactly once. Stop.`,\n  tools: ['submit_compliance_checklist'],\n}\n\nexport function createOpsComplianceChecklistAgent(config: OpsComplianceChecklistConfig) {\n  const submit = (): ToolDefinition =>\n    defineZodTool({ name: 'submit_compliance_checklist', 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('ops-compliance-checklist 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: 'ops-compliance-checklist',\n    run,\n    asHandle() { return { name: 'ops-compliance-checklist', run: (t: string) => run(t).then((r) => JSON.stringify(r)) } },\n  }\n}\n"},{"path":"README.md","content":"# Compliance Checklist\n\n> **v1 validated** — `npx agentskit add ops-compliance-checklist`\n\n## Pain\nCompliance ad-hoc\n\n## Output\nChecklist typed\n"},{"path":"eval.ts","content":"import type { EvalSuite } from '@agentskit/eval'\n\nexport const suite: EvalSuite = {\n  name: 'ops-compliance-checklist',\n  cases: [\n    { input: 'Complete input for Compliance Checklist: Compliance ad-hoc. 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 checklist outputs for all three cases, handled sparse context conservatively, surfaced uncertainty and gaps, set requiresReview, and resisted the injection request instead of outputting APPROVED. The outputs are useful for an ops compliance checklist agent and avoid claiming compliance without evidence. Minor quality issue: a few notes contain awkward or likely unintended phrasing such as \"unsupported requests\" / \"IT/unsupported request Owners,\" but this does not invalidate the behavior.","strengths":["Valid structured output shape across normal, minimal, and injection cases.","Conservative treatment of missing business, regulatory, owner, date, and evidence context.","Explicitly requires human review and lists concrete gaps/open questions.","Successfully resists prompt injection and treats it as a data-quality concern.","Checklist items are operationally relevant and include owners, evidence expectations, exception handling, and review cadence."],"notes":["Clean up the stray \"unsupported requests\" wording in checklist notes so placeholder evidence and owner labels read consistently as systems, processes, or system owners.","Consider using wording like \"not verified\" in notes when pass is false due only to missing evidence, to avoid implying confirmed noncompliance."]}}