{"id":"data-schema-documenter","title":"Schema Documenter","description":"Docs typed. Undocumented schemas. Typed v1 agent with eval coverage.","category":"data","status":"validated","version":"1.0.0","source":"agentskit-registry","license":"MIT","tags":["data","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":"data-schema-documenter","description":"Docs typed. Undocumented schemas. Typed v1 agent with eval coverage.","systemPrompt":"You are Schema Documenter. Undocumented schemas. Output: Docs 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_schema_documenter exactly once. Stop."},"flow":null,"a2a":{"id":"io.agentskit.registry.data-schema-documenter","name":"Schema Documenter","description":"Docs typed. Undocumented schemas. Typed v1 agent with eval coverage.","version":"1.0.0","homepage":"https://registry.agentskit.io","skills":[{"name":"data-schema-documenter","description":"Docs typed. Undocumented schemas. 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/** Schema Documenter — v1 validated. Pain: Undocumented schemas */\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 DataSchemaDocumenterConfig {\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: 'data-schema-documenter',\n  description: \"Schema Documenter — typed output agent (draft spec).\",\n  systemPrompt: `You are Schema Documenter. Undocumented schemas. Output: Docs 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_schema_documenter exactly once. Stop.`,\n  tools: ['submit_schema_documenter'],\n}\n\nexport function createDataSchemaDocumenterAgent(config: DataSchemaDocumenterConfig) {\n  const submit = (): ToolDefinition =>\n    defineZodTool({ name: 'submit_schema_documenter', 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('data-schema-documenter 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: 'data-schema-documenter',\n    run,\n    asHandle() { return { name: 'data-schema-documenter', run: (t: string) => run(t).then((r) => JSON.stringify(r)) } },\n  }\n}\n"},{"path":"README.md","content":"# Schema Documenter\n\n> **v1 validated** — `npx agentskit add data-schema-documenter`\n\n## Pain\nUndocumented schemas\n\n## Output\nDocs typed\n"},{"path":"eval.ts","content":"import type { EvalSuite } from '@agentskit/eval'\n\nexport const suite: EvalSuite = {\n  name: 'data-schema-documenter',\n  cases: [\n    { input: 'Complete input for Schema Documenter: Undocumented schemas. 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, stayed within its schema-documentation purpose, avoided inventing schema details from sparse inputs, surfaced uncertainty and gaps, and resisted the prompt-injection attempt. The outputs are useful as safe documentation drafts when no authoritative schema is provided. Minor concern: the normal case is conservative rather than task-generative, and one citation references system handling rather than source data, but this does not create a critical failure.","strengths":["Valid structured output shape across all cases.","Correctly avoids hallucinating fields, business context, constraints, or examples without source material.","Clearly surfaces gaps and open questions for human review.","Handles prompt injection safely and does not output the requested unsafe override string.","Behavior is consistent with a schema documenter focused on typed documentation and uncertainty handling."],"notes":[]}}