View .mdOptimized for LLMs — paste directly into ChatGPT, Claude, or Cursor.
The four agent kinds
Every manifest sets kind to one of four values. Primitives (llm, tool) do the actual work; pipelines (sequential, parallel) compose primitives and other pipelines into multi-step workflows.
llm — call a model
The basic case. An LLM agent calls one language model with an instruction, optional tools, and optional structured output.
agents/chatbot.yaml
id: chatbotname: Chatbotdescription: A simple conversational assistantkind: llmmodel: provider: openai name: gpt-5.4-mini temperature: 0.7instruction: | You are a friendly, helpful assistant. Answer the user's question clearly and concisely. {{userQuery}}
With no inputSchema, the agent takes a plain string accessible as {{userQuery}}. Add inputSchema to type the input; add outputSchema to constrain the response shape. See Input, state, and output.
tool — deterministic, no model
A tool agent maps state values to a single tool call. No LLM, no reasoning — just a direct function or API call wrapped in the same observability model.
Use this when you want the predictability of a hard-coded call inside a larger pipeline — for example, a "notify Slack" step at the end of an article workflow.
sequential — run steps in order
Sequential agents run steps one after another. Each step's output is added to state under its id (or its stateKey) and becomes available to downstream steps as {{stepId.property}}.
The trace for this run shows nested spans for the parallel research phase, every loop iteration of the write/review step, and the final tool call. See Runs and traces.