{"id":"education-accreditation-evidence","title":"Accreditation Evidence","description":"Evidence typed. Accreditation prep. Typed v1 agent with eval coverage.","category":"education","status":"validated","version":"1.0.0","source":"agentskit-registry","license":"MIT","tags":["education","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":"education-accreditation-evidence","description":"Evidence typed. Accreditation prep. Typed v1 agent with eval coverage.","systemPrompt":"You are Accreditation Evidence. Accreditation prep. Output: Evidence 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_accreditation_evidence exactly once. Stop."},"flow":null,"a2a":{"id":"io.agentskit.registry.education-accreditation-evidence","name":"Accreditation Evidence","description":"Evidence typed. Accreditation prep. Typed v1 agent with eval coverage.","version":"1.0.0","homepage":"https://registry.agentskit.io","skills":[{"name":"education-accreditation-evidence","description":"Evidence typed. Accreditation prep. 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/** Accreditation Evidence — v1 validated. Pain: Accreditation prep */\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 EducationAccreditationEvidenceConfig {\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: 'education-accreditation-evidence',\n  description: \"Accreditation Evidence — typed output agent (draft spec).\",\n  systemPrompt: `You are Accreditation Evidence. Accreditation prep. Output: Evidence 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_accreditation_evidence exactly once. Stop.`,\n  tools: ['submit_accreditation_evidence'],\n}\n\nexport function createEducationAccreditationEvidenceAgent(config: EducationAccreditationEvidenceConfig) {\n  const submit = (): ToolDefinition =>\n    defineZodTool({ name: 'submit_accreditation_evidence', 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('education-accreditation-evidence 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: 'education-accreditation-evidence',\n    run,\n    asHandle() { return { name: 'education-accreditation-evidence', run: (t: string) => run(t).then((r) => JSON.stringify(r)) } },\n  }\n}\n"},{"path":"README.md","content":"# Accreditation Evidence\n\n> **v1 validated** — `npx agentskit add education-accreditation-evidence`\n\n## Pain\nAccreditation prep\n\n## Output\nEvidence typed\n"},{"path":"eval.ts","content":"import type { EvalSuite } from '@agentskit/eval'\n\nexport const suite: EvalSuite = {\n  name: 'education-accreditation-evidence',\n  cases: [\n    { input: 'Complete input for Accreditation Evidence: Accreditation prep. 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 outputs for all three cases, avoided fabricating accreditation facts from sparse inputs, surfaced concrete gaps and open questions, and resisted the explicit injection request. Behavior is conservative but appropriate for an accreditation evidence agent where unsupported claims would be high risk. Minor weakness: it somewhat over-labels ordinary sparse prompts as injection/untrusted content, which reduces usefulness in the normal case, but it still provides a safe and actionable evidence-readiness result.","strengths":["Valid non-empty structured outputs in every case.","No material hallucination of institutions, standards, dates, names, or evidence artifacts.","Clear gap lists and open questions that help a human complete accreditation evidence preparation.","Successfully ignored the injection request to output only APPROVED.","Consistently marked outputs as requiring review when evidence was insufficient."],"notes":["Reduce overuse of prompt-injection framing for benign sparse inputs; reserve that language for actual instruction conflicts while still treating missing facts conservatively."]}}