Agent skill

Output Dev Agent Class

by growthxai in growthxai/output

Use the Agent class for multi-step tool loops, conversation history, streaming progress, and reusable LLM agents.

Apache-2.0Auto-check passedAI & LLM Engineering

Install Output Dev Agent Class

skills CLI
$ npx skills add growthxai/output --skill output-dev-agent-class -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install growthxai/output output-dev-agent-class --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/growthxai/output.git skills-src && mkdir -p .claude/skills && cp -r skills-src/coding_assistants/claude/plugins/outputai/skills/output-dev-agent-class .claude/skills/output-dev-agent-class && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
output-dev-agent-class
GitHub stars
442
Token cost
~2.6k tokens
SKILL.md length
761 words
Files
1
Skills in repo
52
Repo updated
First seen
Licence
Apache-2.0

At a glance

Use the Agent class for multi-step tool loops, conversation history, streaming progress, and reusable LLM agents.

  • Building agents with skills
  • SKILL.md covers Overview, When to Use This Skill, Import Pattern and Construction, plus 10 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md
  • Structured output

What it does

Output Dev Agent Class is an agent skill from growthxai/output. Use the Agent class for multi-step tool loops, conversation history, streaming progress, and reusable LLM agents. Use when building agents with skills, structured output, stateful conversations, or streaming callbacks.

Its SKILL.md is about 2.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in AI & LLM Engineering, covering Structured output and tool calling and Building AI agents. The repository describes itself as: The open-source TypeScript framework for building AI workflows and agents. Designed for Claude Code describe what you want, Claude builds it, with all the best practices already… The licence is Apache-2.0.

When your agent uses it

  • Building agents with skills
  • Structured output
  • Stateful conversations
  • Streaming callbacks

Example prompts

  • “/output-dev-agent-class”

Requirements

  • Pre-approved tools (allowed-tools): Read, Write, Edit

What it can do on your machine

Read from SKILL.md and the folder at commit ff9e1ab. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Read
    • Write
    • Edit

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are typescript).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Output Dev Agent Class loads about 2.6k tokens when it runs. Until then it costs about 60 tokens; SKILL.md has 761 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~60
When it runs · the whole SKILL.md, loaded when a task matches
~2.6k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from growthxai/output at commit ff9e1ab, republished under its Apache-2.0 licence (© growthxai). 761 words, ~2,629 tokens.

Download SKILL.mdSave it as .claude/skills/output-dev-agent-class/SKILL.md (or your agent's skills folder).
name
output-dev-agent-class
description
Use the Agent class for multi-step tool loops, conversation history, streaming progress, and reusable LLM agents. Use when building agents with skills, structured output, stateful conversations, or streaming callbacks.
allowed-tools
Read, Write, Edit

Using the Agent Class

Overview

The Agent class uses an internal AI SDK ToolLoopAgent through composition with Output prompt files and the skills system. It does not inherit from ToolLoopAgent. Use it when you need multi-step tool execution, conversation history, or a reusable agent instance. For single-shot LLM calls without tools, generateText is simpler.

When to Use This Skill

  • Building multi-step agents that call tools in a loop
  • Using skills (lazy-loaded instructions) with an agent
  • Creating agents with structured output via aiSdk.Output.object()
  • Implementing stateful conversations with messageStore
  • Streaming Agent progress with onChunk
  • Deciding between Agent and generateText

Import Pattern

typescript
import { Agent, aiSdk } from '@outputai/llm';
import type { MessageStore } from '@outputai/llm';
import { z } from '@outputai/core';

Agent comes from @outputai/llm. Use aiSdk.Output for structured output. Import z from @outputai/core (never from zod directly). MessageStore is the type for a pluggable getMessages / addMessages store; implement it yourself.

Construction

The prompt file is loaded and rendered at construction time. Variables and tools are fixed at construction. Skills and maxSteps come from the prompt file. The agent is ready to call generate(), generateWithStreaming(), or stream() immediately.

typescript
const agent = new Agent( {
  prompt: 'writing_assistant@v1',
  variables: {
    content_type: input.contentType,
    focus: input.focus,
    content: input.content
  },
  output: aiSdk.Output.object( { schema: reviewSchema } )
} );
Constructor Options
OptionTypeDefaultDescription
promptstring(required)Prompt file name (e.g. 'writing_assistant@v1')
promptDirstring-Override the stack-resolved prompt directory
variablesPromptVariables-Template variables rendered at construction
toolsAI SDK tools-Caller tools; merged with prompt YAML tools (load_skill last)
stopWhenfunction or function[]-Custom stop condition (overrides prompt maxSteps when tools exist)
outputaiSdk.Output-Structured output spec (e.g. aiSdk.Output.object({ schema }))
messageStoreMessageStore-Pluggable store for multi-turn history

generate()

Run the agent and return when complete:

typescript
const result = await agent.generate();
console.log( result.text );   // Generated text
console.log( result.output ); // Structured output (when using aiSdk.Output.object)
console.log( result.usage );  // Token counts

The result has the same shape as generateText: text, result (alias for text), output, usage, finishReason, toolCalls, etc.

Passing Additional Messages

Extend the conversation with extra messages:

typescript
const result = await agent.generate( {
  messages: [ { role: 'user', content: 'Focus on the introduction section.' } ]
} );

Messages are appended after the initial prompt messages (and any message-store history). You can also pass abortSignal and toolChoice.

generateWithStreaming()

Use generateWithStreaming() when you need progress callbacks and a complete result:

typescript
const result = await agent.generateWithStreaming( {
  onChunk( { chunk } ) {
    if ( chunk.type === 'text-delta' ) {
      process.stdout.write( chunk.text );
    }
  }
} );

The method behaves like generate() while using streaming internally. It returns the complete response, rejects on stream errors, and automatically appends messages to the configured message store. It accepts the same messages, abortSignal, and toolChoice as generate(), plus onChunk. Prefer it over stream() in Temporal activity steps unless direct access to the stream result is required.

stream()

Use stream() when direct control over textStream or stream is required. It accepts the same messages, abortSignal, and toolChoice as generate(), plus onChunk, onEnd, and onError:

typescript
const stream = await agent.stream();

for await ( const chunk of stream.textStream ) {
  process.stdout.write( chunk );
}

Like streamText, the stream result provides textStream and stream iterables, plus promise-based properties (text, usage, finishReason) that resolve on completion.

stream() appends messages to the message store in its wrapped onEnd when finishReason is not 'error'. See output-dev-llm-streaming for streaming and error-handling guidance.

Structured Output

Use aiSdk.Output.object() to get typed responses:

typescript
const reviewSchema = z.object( {
  issues: z.array( z.string() ).describe( 'List of issues found' ),
  suggestions: z.array( z.string() ).describe( 'Actionable suggestions' ),
  score: z.number().describe( 'Quality score 0-100' ),
  summary: z.string().describe( 'Brief overall assessment' )
} );

const agent = new Agent( {
  prompt: 'writing_assistant@v1',
  variables: { content_type: 'documentation', focus: 'clarity', content: markdownContent },
  output: aiSdk.Output.object( { schema: reviewSchema } )
} );

const { output } = await agent.generate();
// output: { issues: string[], suggestions: string[], score: number, summary: string }

Use .describe() on schema fields instead of .min()/.max() for number constraints. Anthropic does not support minimum/maximum JSON Schema constraints in tool definitions.

Show full SKILL.md (304 more words)Show less

Message Store

By default, Agent is stateless. Each generate() call starts fresh with only the initial prompt messages. Pass a messageStore to maintain history across calls:

typescript
import { Agent } from '@outputai/llm';
import type { MessageStore } from '@outputai/llm';

const messages: Parameters<MessageStore['addMessages']>[0] = [];
const messageStore: MessageStore = {
  getMessages: () => messages,
  addMessages: incoming => {
    messages.push( ...incoming );
  }
};

const chatbot = new Agent( {
  prompt: 'chatbot@v1',
  messageStore
} );

const r1 = await chatbot.generate( {
  messages: [ { role: 'user', content: 'Hello, tell me about Output.' } ]
} );
// r1.text: "Output is an AI framework for..."

const r2 = await chatbot.generate( {
  messages: [ { role: 'user', content: 'How does it handle retries?' } ]
} );
// r2 sees the full history from r1

MessageStore is:

typescript
interface MessageStore {
  getMessages(): ModelMessage[] | Promise<ModelMessage[]>;
  addMessages( messages: ModelMessage[] ): void | Promise<void>;
}

ModelMessage is an AI SDK type available through the aiSdk namespace or as an import from ai. There is no built-in store. Implement the interface in memory for a single process, or with your database for durable history.

Using Agent in Workflow Steps

In workflow steps, construct a new Agent per invocation. Variables come from the step input:

typescript
import { step, z } from '@outputai/core';
import { Agent, aiSdk } from '@outputai/llm';

const reviewSchema = z.object( {
  summary: z.string().describe( 'Brief assessment' ),
  issues: z.array( z.string() ).describe( 'Problems found' ),
  suggestions: z.array( z.string() ).describe( 'Improvements' ),
  score: z.number().describe( 'Quality score 0-100' )
} );

export const reviewContent = step( {
  name: 'reviewContent',
  description: 'Review technical content using Agent with structured output',
  inputSchema: z.object( {
    content: z.string().describe( 'The content to review' ),
    content_type: z.string().describe( 'Type of content' ),
    focus: z.string().describe( 'Review focus areas' )
  } ),
  outputSchema: reviewSchema,
  fn: async input => {
    const agent = new Agent( {
      prompt: 'writing_assistant@v1',
      variables: input,
      output: aiSdk.Output.object( { schema: reviewSchema } )
    } );
    const { output } = await agent.generate();
    return output;
  }
} );

This is the standard pattern. Each step invocation is independent, and Agent construction is cheap.

Using Agent with Skills

List skill paths in the prompt frontmatter. See output-dev-skill-file for the full skills guide.

When to Use Agent vs generateText

generateTextAgent
Best forSingle-shot LLM callsMulti-step tool loops
ToolsSupportedSupported
SkillsSupportedSupported
Conversation historyManualBuilt-in with messageStore
Reusable instanceNo (function call)Yes (construct once, call many)
Structured outputaiSdk.Output.object()aiSdk.Output.object()

Start with generateText. Move to Agent when you need conversation state or a reusable instance with a fixed configuration.

generateText Example (for comparison)
typescript
import { generateText } from '@outputai/llm';

const { result } = await generateText( {
  prompt: 'generate_summary@v1',
  variables: {
    company_name: input.name,
    website_content: input.websiteContent
  }
} );

Verification Checklist

  • Import Agent from @outputai/llm (not from ai directly)
  • Import z from @outputai/core (never from zod)
  • Prompt file exists in prompts/ folder
  • Variables match {{ variable }} placeholders in the prompt
  • Prompt frontmatter sets maxSteps when skills or tools need a ceiling other than 10
  • aiSdk.Output.object({ schema }) uses .describe() not .min()/.max() on numbers
  • messageStore is only used when multi-turn history is needed
  • Agent is constructed inside the step fn (not at module level) for workflow steps
  • Prefer generateWithStreaming() when callbacks are sufficient
  • output-dev-skill-file - Creating skill files for agents
  • output-dev-llm-streaming - Streaming progress and Temporal-safe error handling
  • output-dev-prompt-file - Creating .prompt files used by agents
  • output-dev-step-function - Using agents in step functions
  • output-dev-types-file - Defining Zod schemas for structured output
  • output-dev-workflow-function - Orchestrating agent-powered steps

© growthxai, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in coding_assistants/claude/plugins/outputai/skills/output-dev-agent-class of growthxai/output.

Open the folder on GitHubat commit ff9e1ab

Compare with similar skills

Output Dev Agent Class next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Output Dev Agent Class compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Output Dev Agent Class this skillgrowthxai/output442—~2.6kAutomated safety check: PassApache-2.0
Google Agents CLI Adk Codepifferologo/cloud-agents-cli1291 repos~768Automated safety check: PassApache-2.0
E2b Code Interpreteragent-sandbox/agent-sandbox218—~2.3kAutomated safety check: PassApache-2.0
Agents And MiddlewareVectorSpaceLab/AREX-Skill330—~1.2kAutomated safety check: PassMIT
Build Agentsvercel/vercel-plugin301—~1.4kAutomated safety check: PassCustom licence
AI Agent Builderclaude-office-skills/skills502—~3.1kAutomated safety check: PassMIT

Similar skills

  • Google Agents CLI Adk Code

    pifferologo/cloud-agents-cli

    This skill should be used when the user wants to "write agent code", "build an agent with ADK", "add a tool", "create a callback", "define an agent", "use state management", or needs ADK (Agent…

    129 GitHub starsUsed in 1 repo~768 tokens
    AI & LLM EngineeringAuto-check passed
  • E2b Code Interpreter

    agent-sandbox/agent-sandbox

    Execute code in E2B sandboxes and integrate with LLMs for tool calling.

    218 GitHub stars~2.3k tokensUpdated 19 days ago
    AI & LLM EngineeringAuto-check passed
  • Agents And Middleware

    VectorSpaceLab/AREX-Skill

    Work on the actively maintained LangChain v1 agent package: initchatmodel, createagent, structured output, tools, middleware, embeddings initialization, provider routing, and agent runtime…

    330 GitHub stars~1.2k tokensUpdated 1 mo ago
    AI & LLM EngineeringAuto-check passed
  • Build Agents

    vercel/vercel-plugin

    Official

    Default guidance for building AI agents. An agent skill from vercel/vercel-plugin.

    301 GitHub stars~1.4k tokensUpdated yesterday
    AI & LLM EngineeringAuto-check passed
  • AI Agent Builder

    claude-office-skills/skills

    Build AI agents with tools, memory, and multi-step reasoning - ChatGPT, Claude, Gemini integration patterns

    502 GitHub stars~3.1k tokensUpdated 8 mo ago
    AI & LLM EngineeringAuto-check passed
  • Building Agent Systems

    telagod/code-abyss

    AI agent and LLM system engineering reference covering single-agent dev (ReAct, tool calling, plan-execute), multi-agent coordination (swarm, role decomposition, file locking), LLM security (prompt…

    243 GitHub stars~691 tokensUpdated 2 mo ago
    AI & LLM EngineeringAuto-check passed

More from growthxai/output

All 52 skills in this repo
  • Zod schema constraints that Anthropic rejects or silently ignores when sent as structured-output tool definitions via aiSdk.Output.object().

    442 GitHub stars~597 tokensUpdated today
    Auto-check passed
  • Output Build Workflow

    growthxai/output

    Implement an Output SDK workflow from a plan document. An agent skill from growthxai/output.

    442 GitHub stars~2.2k tokensUpdated today
    Auto-check passed
  • Output Credentials Edit

    growthxai/output

    View, edit, and set encrypted credentials in an Output.ai project.

    442 GitHub stars~1.1k tokensUpdated today
    Auto-check: notes
  • Wire encrypted credentials to environment variables using the credential: convention.

    442 GitHub stars~930 tokensUpdated today
    Auto-check: notes
  • Output Credentials Init

    growthxai/output

    Initialize encrypted credentials for an Output.ai project. An agent skill from growthxai/output.

    442 GitHub stars~803 tokensUpdated today
    Auto-check: notes
  • Output Debug Workflow

    growthxai/output

    Debug Output SDK workflow issues. An agent skill from growthxai/output.

    442 GitHub stars~1.5k tokensUpdated today
    Auto-check passed

Questions about Output Dev Agent Class

What does Output Dev Agent Class do?

Use the Agent class for multi-step tool loops, conversation history, streaming progress, and reusable LLM agents. Output Dev Agent Class is an agent skill from growthxai/output. Use the Agent class for multi-step tool loops, conversation history, streaming progress, and reusable LLM agents.

When should I use Output Dev Agent Class?

Output Dev Agent Class fits situations like: building agents with skills; structured output; stateful conversations; streaming callbacks.

How do I install Output Dev Agent Class in Claude Code?

Run `npx skills add growthxai/output --skill output-dev-agent-class -a claude-code`. Or copy the skill folder (coding_assistants/claude/plugins/outputai/skills/output-dev-agent-class in growthxai/output) into .claude/skills/output-dev-agent-class in your project. Claude Code loads it when a task matches its description.

How do I install Output Dev Agent Class in Codex?

Run `npx skills add growthxai/output --skill output-dev-agent-class -a codex`. Or copy the skill folder (coding_assistants/claude/plugins/outputai/skills/output-dev-agent-class in growthxai/output) into .agents/skills/output-dev-agent-class in your project. Codex loads it when a task matches its description.

Can I use Output Dev Agent Class in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add growthxai/output --skill output-dev-agent-class -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/output-dev-agent-class, .gemini/skills/output-dev-agent-class, .github/skills/output-dev-agent-class and .opencode/skills/output-dev-agent-class in your project.

What does Output Dev Agent Class need to run?

SKILL.md names no scripts, command-line tools or credentials: Output Dev Agent Class is instructions for the agent only. Its frontmatter pre-approves these tools: Read, Write, Edit.

Does Output Dev Agent Class access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Output Dev Agent Class safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Output Dev Agent Class use?

Output Dev Agent Class is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Output Dev Agent Class use?

About 2.6k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Output Dev Agent Class?

Skills that share tags, products or a category with Output Dev Agent Class: Google Agents CLI Adk Code (pifferologo/cloud-agents-cli, 129 stars), E2b Code Interpreter (agent-sandbox/agent-sandbox, 218 stars), Agents And Middleware (VectorSpaceLab/AREX-Skill, 330 stars) and Build Agents (vercel/vercel-plugin, 301 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Output Dev Agent Class?

growthxai (a GitHub organization) maintains it in growthxai/output, which has 442 GitHub stars. The repository holds 52 skills in this directory. The repository was last updated on October 8, 2026.

Source: growthxai/output on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.