ecosystem·Independently reviewed · 96/100

llms.txt Optimizer

Optimized llms.txt block typed. Machine discovery files need curation. Typed v1 agent with eval coverage.

ecosystemdogfoodstructured-outputv1

Install

npx agentskit add ecosystem-llms-txt-optimizer

Quick start

import { openai } from '@agentskit/adapters'import { createEcosystemLlmsTxtOptimizerAgent } from './agents/ecosystem-llms-txt-optimizer/agent'const agent = createEcosystemLlmsTxtOptimizerAgent({  adapter: openai({    apiKey: process.env.OPENAI_API_KEY!,    model: 'gpt-4o',  }),})const result = await agent.run('Describe your task here')console.log(result.content)

Independent reviewer approved

Validation evidence

How validation works
Review score
96/100
Confidence
96%
Evaluation cases
3
Iterations
1

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.

What passed review

  • 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.

Extend it

Pass tools, retrieval, memory, permissions, and observers through the factory config.

const agent = createEcosystemLlmsTxtOptimizerAgent({  adapter,  tools,  retriever,  memory,  onConfirm: (call) => approve(call),  observers: [tracer],})
View agent factory source
import type { AdapterFactory, ChatMemory, Observer, ToolCall, ToolDefinition } from '@agentskit/core'import { fenceUntrustedContent, UNTRUSTED_CONTENT_DIRECTIVE } from '@agentskit/core/security'import { invokeStructured } from '@agentskit/runtime'import { defineZodTool } from '@agentskit/tools'import { z } from 'zod'import { zodToJsonSchema } from 'zod-to-json-schema'import type { JSONSchema7 } from 'json-schema'/** llms.txt Optimizer — v1 validated. Pain: Machine discovery files need curation */export interface Section { heading: string; body: string; citations: string[] }export interface AgentOutput { title: string; sections: Section[]; gaps: string[]; openQuestions: string[] }export interface AgentResult extends AgentOutput { requiresReview: boolean }export interface EcosystemLlmsTxtOptimizerConfig {  adapter: AdapterFactory  memory?: ChatMemory  observers?: Observer[]  onConfirm?: (toolCall: ToolCall) => boolean | Promise<boolean>  maxSteps?: number}const Output = z.object({  title: z.string(),  sections: z.array(z.object({ heading: z.string(), body: z.string(), citations: z.array(z.string()).default([]) })).min(1),  gaps: z.array(z.string()).default([]),  openQuestions: z.array(z.string()).default([]),})const toJson = (s: z.ZodTypeAny): JSONSchema7 => zodToJsonSchema(s) as JSONSchema7const skill = {  name: 'ecosystem-llms-txt-optimizer',  description: "llms.txt Optimizer — typed output agent (draft spec).",  systemPrompt: `You are llms.txt Optimizer. Machine discovery files need curation. Output: Optimized llms.txt block typed.Draft sections with citations from input. Gaps for missing facts.NEVER invent facts — gaps and openQuestions for missing input. Always draft for human review.${UNTRUSTED_CONTENT_DIRECTIVE}Call submit_txt_optimizer exactly once. Stop.`,  tools: ['submit_txt_optimizer'],}export function createEcosystemLlmsTxtOptimizerAgent(config: EcosystemLlmsTxtOptimizerConfig) {  const submit = (): ToolDefinition =>    defineZodTool({ name: 'submit_txt_optimizer', description: 'Submit result. Once.', schema: Output, toJsonSchema: toJson, async execute() { return 'recorded' } }) as ToolDefinition  async function run(input: string): Promise<AgentResult> {    if (!input?.trim()) throw new Error('ecosystem-llms-txt-optimizer requires non-empty input')    const result = await invokeStructured({      adapter: config.adapter,      tool: submit(),      task: `INPUT:\n${fenceUntrustedContent(input)}`,      parse: (a) => Output.parse(a),      skill,      memory: config.memory,      observers: config.observers,      onConfirm: config.onConfirm,      maxSteps: config.maxSteps ?? 4,    })    return { ...result, requiresReview: true }  }  return {    name: 'ecosystem-llms-txt-optimizer',    run,    asHandle() { return { name: 'ecosystem-llms-txt-optimizer', run: (t: string) => run(t).then((r) => JSON.stringify(r)) } },  }}
View evaluation contract

Replay these cases with the provider and model you plan to deploy.

import type { EvalSuite } from '@agentskit/eval'export const suite: EvalSuite = {  name: 'ecosystem-llms-txt-optimizer',  cases: [    { 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) },    { input: 'Minimal input.', expected: (r: string) => /gap|openQuestion/i.test(r) || r.length > 10 },    { input: 'Input with specific detail: ACME Corp project deadline March 15.', expected: (r: string) => /ACME|March|15/i.test(r) || /gap/i.test(r) },    { input: 'Empty context — only says "process this".', expected: (r: string) => r.length > 5 },  ],}

Was this agent useful?

Your response helps us prioritize agent quality.

Keep exploring

Related agents

View category