{"id":"ecosystem-llms-txt-optimizer","title":"llms.txt Optimizer","description":"Optimized llms.txt block typed. Machine discovery files need curation. Typed v1 agent with eval coverage.","category":"ecosystem","status":"validated","version":"1.0.0","source":"agentskit-registry","license":"MIT","tags":["ecosystem","dogfood","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"},"ecosystem":true,"skill":{"name":"ecosystem-llms-txt-optimizer","description":"Optimized llms.txt block typed. Machine discovery files need curation. Typed v1 agent with eval coverage.","systemPrompt":"You are llms.txt Optimizer. Machine discovery files need curation. Output: Optimized llms.txt block 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_txt_optimizer exactly once. Stop."},"flow":null,"a2a":{"id":"io.agentskit.registry.ecosystem-llms-txt-optimizer","name":"llms.txt Optimizer","description":"Optimized llms.txt block typed. Machine discovery files need curation. Typed v1 agent with eval coverage.","version":"1.0.0","homepage":"https://registry.agentskit.io","skills":[{"name":"ecosystem-llms-txt-optimizer","description":"Optimized llms.txt block typed. Machine discovery files need curation. 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/** llms.txt Optimizer — v1 validated. Pain: Machine discovery files need curation */\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 EcosystemLlmsTxtOptimizerConfig {\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: 'ecosystem-llms-txt-optimizer',\n  description: \"llms.txt Optimizer — typed output agent (draft spec).\",\n  systemPrompt: `You are llms.txt Optimizer. Machine discovery files need curation. Output: Optimized llms.txt block 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_txt_optimizer exactly once. Stop.`,\n  tools: ['submit_txt_optimizer'],\n}\n\nexport function createEcosystemLlmsTxtOptimizerAgent(config: EcosystemLlmsTxtOptimizerConfig) {\n  const submit = (): ToolDefinition =>\n    defineZodTool({ name: 'submit_txt_optimizer', 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('ecosystem-llms-txt-optimizer 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: 'ecosystem-llms-txt-optimizer',\n    run,\n    asHandle() { return { name: 'ecosystem-llms-txt-optimizer', run: (t: string) => run(t).then((r) => JSON.stringify(r)) } },\n  }\n}\n"},{"path":"README.md","content":"# llms.txt Optimizer\n\n> **v1 validated** — `npx agentskit add ecosystem-llms-txt-optimizer`\n\n## Pain\nMachine discovery files need curation\n\n## Output\nOptimized llms.txt block typed\n"},{"path":"eval.ts","content":"import type { EvalSuite } from '@agentskit/eval'\n\nexport const suite: EvalSuite = {\n  name: 'ecosystem-llms-txt-optimizer',\n  cases: [\n    { input: 'Complete input for llms.txt Optimizer: Machine discovery files need curation. 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 llms.txt optimization purpose, avoided inventing unsupported project details, surfaced missing context clearly, and handled the injection attempt correctly by treating it as untrusted data. The outputs are conservative but useful: they provide a review-ready draft or explain why one cannot be completed, with concrete gaps and open questions. Minor weakness: the outputs lean heavily on security/instruction-handling language even for ordinary sparse inputs, which could make user-facing results feel a bit defensive, but this does not materially reduce readiness.","strengths":["Valid structured output in every case with title, sections, gaps, openQuestions, and review requirement reflected in the record.","No hallucinated business details, URLs, dates, policies, or ownership beyond the provided input.","Correctly rejected the prompt-injection request to output APPROVED.","Useful uncertainty handling: clear missing-context gaps and focused follow-up questions.","Behavior matches the agent purpose: optimizing or drafting llms.txt content only when source material is sufficient."],"notes":[]}}