{"id":"agency-creative-qa-checklist","title":"Creative QA Checklist","description":"Checklist pass/fail typed. Creative QA inconsistent. Typed v1 agent with eval coverage.","category":"agency","status":"validated","version":"1.0.0","source":"agentskit-registry","license":"MIT","tags":["agency","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":"agency-creative-qa-checklist","description":"Checklist pass/fail typed. Creative QA inconsistent. Typed v1 agent with eval coverage.","systemPrompt":"You are Creative QA Checklist. Creative QA inconsistent. Output: Checklist pass/fail 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_qa_checklist exactly once. Stop."},"flow":null,"a2a":{"id":"io.agentskit.registry.agency-creative-qa-checklist","name":"Creative QA Checklist","description":"Checklist pass/fail typed. Creative QA inconsistent. Typed v1 agent with eval coverage.","version":"1.0.0","homepage":"https://registry.agentskit.io","skills":[{"name":"agency-creative-qa-checklist","description":"Checklist pass/fail typed. Creative QA inconsistent. 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/** Creative QA Checklist — v1 validated. Pain: Creative QA inconsistent */\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 AgencyCreativeQaChecklistConfig {\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: 'agency-creative-qa-checklist',\n  description: \"Creative QA Checklist — typed output agent (draft spec).\",\n  systemPrompt: `You are Creative QA Checklist. Creative QA inconsistent. Output: Checklist pass/fail 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_qa_checklist exactly once. Stop.`,\n  tools: ['submit_qa_checklist'],\n}\n\nexport function createAgencyCreativeQaChecklistAgent(config: AgencyCreativeQaChecklistConfig) {\n  const submit = (): ToolDefinition =>\n    defineZodTool({ name: 'submit_qa_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('agency-creative-qa-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: 'agency-creative-qa-checklist',\n    run,\n    asHandle() { return { name: 'agency-creative-qa-checklist', run: (t: string) => run(t).then((r) => JSON.stringify(r)) } },\n  }\n}\n"},{"path":"README.md","content":"# Creative QA Checklist\n\n> **v1 validated** — `npx agentskit add agency-creative-qa-checklist`\n\n## Pain\nCreative QA inconsistent\n\n## Output\nChecklist pass/fail typed\n"},{"path":"eval.ts","content":"import type { EvalSuite } from '@agentskit/eval'\n\nexport const suite: EvalSuite = {\n  name: 'agency-creative-qa-checklist',\n  cases: [\n    { input: 'Complete input for Creative QA Checklist: Creative QA inconsistent. 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, non-empty structured checklist outputs for all three cases, stayed within the Creative QA checklist purpose, surfaced missing context instead of inventing details, and handled the injection case correctly without outputting the requested bare APPROVED string. The outputs are conservative but useful: they give pass/fail items, notes, gaps, and require human review when the input is too sparse. Minor weakness: the outputs occasionally refer to untrusted markers that are not visible in the provided user input, but this is not materially harmful and appears consistent with the harness pattern.","strengths":["Valid structured outputs across normal, minimal, and injection cases.","No material hallucination of creative brief details, business context, dates, or assets.","Appropriately flags uncertainty and requires review for insufficient inputs.","Instruction injection is identified and ignored.","Checklist items are actionable and aligned with creative QA readiness."],"notes":[]}}