Agent skill

Output Error Direct Io

by growthxai in growthxai/output

Fix direct I/O in Output SDK workflow functions. An agent skill from growthxai/output.

Apache-2.0Auto-check: notesBackend & APIs

Install Output Error Direct Io

skills CLI
$ npx skills add growthxai/output --skill output-error-direct-io -a claude-code

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

GitHub CLI
$ gh skill install growthxai/output output-error-direct-io --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-error-direct-io .claude/skills/output-error-direct-io && 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-error-direct-io
GitHub stars
442
Token cost
~1.6k tokens
SKILL.md length
372 words
Files
1
Skills in repo
50
Repo updated
First seen
Licence
Apache-2.0

At a glance

Fix direct I/O in Output SDK workflow functions. An agent skill from growthxai/output.

  • Works in 4 steps: Hangs: The workflow may hang because I/O… → Determinism violations: Temporal replays… → No retry logic: Direct calls bypass… → …
  • Returns undefined
  • SKILL.md covers Overview, When to Use This Skill, Root Cause and Symptoms, plus 7 more sections
  • Calls npx

What it does

Output Error Direct Io is an agent skill from growthxai/output. Fix direct I/O in Output SDK workflow functions. Use when workflow hangs, returns undefined, shows "workflow must be deterministic" errors, or when HTTP/API calls are made directly in workflow code.

Its SKILL.md is about 1.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 Backend & APIs, covering REST APIs. 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

  • Returns undefined
  • Shows workflow must be deterministic errors
  • HTTP/API calls are made directly in workflow code

Example prompts

  • “workflow must be deterministic”
  • “/output-error-direct-io”

Requirements

  • Node.js
  • Pre-approved tools (allowed-tools): Bash, Read

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. Hangs: The workflow may hang because I/O isn't properly handled
  2. Determinism violations: Temporal replays workflows, and I/O results differ
  3. No retry logic: Direct calls bypass Output SDK's retry mechanisms
  4. No tracing: Operations aren't recorded in the workflow trace

What it can do on your machine

Read from SKILL.md and the folder at commit 99ee298. 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:

    • Bash
    • Read

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • npx

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

  • Network

    No URLs in SKILL.md. Its commands use npx, which can reach the network depending on how they are called.

    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 Error Direct Io loads about 1.6k tokens when it runs. Until then it costs about 55 tokens; SKILL.md has 372 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~55
When it runs · the whole SKILL.md, loaded when a task matches
~1.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: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NotePre-approves every shell command (allowed-tools: Bash)SKILL.md
    allowed-tools: Bash, Read

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 99ee298, republished under its Apache-2.0 licence (© growthxai). 372 words, ~1,642 tokens.

Download SKILL.mdSave it as .claude/skills/output-error-direct-io/SKILL.md (or your agent's skills folder).
name
output-error-direct-io
description
Fix direct I/O in Output SDK workflow functions. Use when workflow hangs, returns undefined, shows "workflow must be deterministic" errors, or when HTTP/API calls are made directly in workflow code.
allowed-tools
Bash, Read

Fix Direct I/O in Workflow Functions

Overview

This skill helps diagnose and fix a critical error pattern where I/O operations (HTTP calls, database queries, file operations) are performed directly in workflow functions instead of in steps. This violates Temporal's determinism requirements.

When to Use This Skill

You're seeing:

  • Workflow hangs indefinitely
  • Undefined or empty responses
  • "workflow must be deterministic" errors
  • Network operations failing silently
  • Timeouts without clear cause

Root Cause

Workflow functions must be deterministic - they should only orchestrate steps, not perform I/O directly. When you make HTTP calls, database queries, or any external operations directly in a workflow function:

  1. Hangs: The workflow may hang because I/O isn't properly handled
  2. Determinism violations: Temporal replays workflows, and I/O results differ
  3. No retry logic: Direct calls bypass Output SDK's retry mechanisms
  4. No tracing: Operations aren't recorded in the workflow trace

Symptoms

Direct fetch/axios in Workflow
typescript
// WRONG: I/O directly in workflow
export default workflow( {
  fn: async input => {
    const response = await fetch( 'https://api.example.com/data' );  // BAD!
    const data = await response.json();
    return { data };
  }
} );
Direct Database Calls
typescript
// WRONG: Database I/O in workflow
export default workflow( {
  fn: async input => {
    const user = await db.users.findById( input.userId );  // BAD!
    return { user };
  }
} );
File System Operations
typescript
// WRONG: File I/O in workflow
import fs from 'fs/promises';

export default workflow( {
  fn: async input => {
    const data = await fs.readFile( input.path, 'utf-8' );  // BAD!
    return { data };
  }
} );

Solution

Move ALL I/O operations to step functions. Steps are designed to handle non-deterministic operations.

Before (Wrong)
typescript
export default workflow( {
  fn: async input => {
    const response = await fetch( 'https://api.example.com/data' );
    const data = await response.json();
    return { data };
  }
} );
After (Correct)
typescript
import { z, step, workflow } from '@outputai/core';
import { createKyClient } from '@outputai/http';

// Create a step for the I/O operation
export const fetchData = step( {
  name: 'fetchData',
  inputSchema: z.object( {
    endpoint: z.string()
  } ),
  outputSchema: z.object( {
    data: z.unknown()
  } ),
  fn: async input => {
    const client = createKyClient( { prefix: 'https://api.example.com' } );
    const data = await client.get( input.endpoint ).json();
    return { data };
  }
} );

// Workflow only orchestrates steps
export default workflow( {
  inputSchema: z.object( {} ),
  outputSchema: z.object( { data: z.unknown() } ),
  fn: async input => {
    const result = await fetchData( { endpoint: 'data' } );
    return result;
  }
} );

Complete Example: Database Operation

Before (Wrong)
typescript
export default workflow( {
  fn: async input => {
    const user = await prisma.user.findUnique( {
      where: { id: input.userId }
    } );
    const orders = await prisma.order.findMany( {
      where: { userId: input.userId }
    } );
    return { user, orders };
  }
} );
After (Correct)
typescript
import { z, step, workflow } from '@outputai/core';
import { prisma } from '../lib/db';

export const fetchUser = step( {
  name: 'fetchUser',
  inputSchema: z.object( { userId: z.string() } ),
  outputSchema: z.object( {
    user: z.object( {
      id: z.string(),
      name: z.string(),
      email: z.string()
    } ).nullable()
  } ),
  fn: async input => {
    const user = await prisma.user.findUnique( {
      where: { id: input.userId }
    } );
    return { user };
  }
} );

export const fetchOrders = step( {
  name: 'fetchOrders',
  inputSchema: z.object( { userId: z.string() } ),
  outputSchema: z.object( {
    orders: z.array( z.object( {
      id: z.string(),
      total: z.number()
    } ) )
  } ),
  fn: async input => {
    const orders = await prisma.order.findMany( {
      where: { userId: input.userId }
    } );
    return { orders };
  }
} );

export default workflow( {
  inputSchema: z.object( { userId: z.string() } ),
  outputSchema: z.object( {
    user: z.unknown(),
    orders: z.array( z.unknown() )
  } ),
  fn: async input => {
    const { user } = await fetchUser( { userId: input.userId } );
    const { orders } = await fetchOrders( { userId: input.userId } );
    return { user, orders };
  }
} );

Finding Direct I/O in Workflows

Search for common I/O patterns in workflow files:

bash
# Find fetch calls
grep -rn "await fetch" src/workflows/

# Find axios calls
grep -rn "axios\." src/workflows/

# Find database operations
grep -rn "prisma\.\|db\.\|mongoose\." src/workflows/

# Find file system operations
grep -rn "fs\.\|readFile\|writeFile" src/workflows/

Then review each match to see if it's in a workflow function vs a step function.

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

What CAN Be in Workflow Functions

Workflow functions should contain:

  • Step calls: await myStep( input )
  • Orchestration logic: conditionals, loops (over step calls)
  • Data transformation: Pure functions on step results
  • Constants: Static values and configuration

Workflow functions should NOT contain:

  • HTTP/API calls
  • Database operations
  • File system operations
  • External service calls
  • Anything that talks to the network or filesystem

Verification

After moving I/O to steps:

  1. Run the workflow: npx output workflow run <name> --input '<input>'
  2. Check the trace: npx output workflow debug <id> --json
  3. Verify steps appear: Look for your I/O steps in the trace
  4. Confirm no errors: No determinism warnings or hangs

Benefits of Steps for I/O

  1. Retry logic: Steps can be retried on failure
  2. Tracing: I/O operations appear in workflow traces
  3. Timeouts: Steps can have individual timeouts
  4. Determinism: Replays use recorded results
  5. Debugging: Clear visibility into what happened
  • For HTTP client best practices, see output-error-http-client
  • For non-determinism from other causes, see output-error-nondeterminism

© 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-error-direct-io of growthxai/output.

Open the folder on GitHubat commit 99ee298

Compare with similar skills

Output Error Direct Io 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 Error Direct Io compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Output Error Direct Io this skillgrowthxai/output442—~1.6kAutomated safety check: NotesApache-2.0
Paperclippaperclipai/paperclip100k—~9.6kAutomated safety check: PassMIT
Nodejs Backend Patternsever-works/ever-works16218 repos~4kAutomated safety check: PassAGPL-3.0
OpenAPI to MCP Servermcp-use/mcp-use11k—~5.2kAutomated safety check: PassApache-2.0
Use Yaakmountain-loop/yaak19k—~1.9kAutomated safety check: PassMIT
API DesignerJeffallan/claude-skills12k1 repos~2kAutomated safety check: PassMIT

Similar skills

  • Paperclip

    paperclipai/paperclip

    Interact with the Paperclip control plane API for task coordination and governance.

    100k GitHub stars~9.6k tokensUpdated today
    Backend & APIsAuto-check passed
  • Nodejs Backend Patterns

    ever-works/ever-works

    Build production-ready Node.js backend services with Express/Fastify, implementing middleware patterns, error handling, authentication, database integration, and API design best practices.

    162 GitHub starsUsed in 18 repos~4k tokens
    Backend & APIsAuto-check passed
  • OpenAPI to MCP Server

    mcp-use/mcp-use

    Turns an OpenAPI or Swagger spec into an MCP server with the mcp-use TypeScript SDK, mapping each operation to a tool, wiring auth, testing and deploying.

    11k GitHub stars~5.2k tokensUpdated 2 days ago
    Backend & APIsAuto-check passed
  • Use Yaak

    mountain-loop/yaak

    A skill your agent uses when the user mentions Yaak, a Yaak workspace, or the yaak command, or asks to call, hit, or smoke test HTTP/REST endpoints, save or organize API requests for reuse or manual…

    19k GitHub stars~1.9k tokensUpdated today
    Backend & APIsAuto-check passed
  • API Designer

    Jeffallan/claude-skills

    Designs REST and GraphQL APIs from resource modeling to an OpenAPI 3.1 contract, with versioning, pagination and RFC 7807 error handling.

    12k GitHub starsUsed in 1 repo~2k tokens
    Backend & APIsAuto-check passed
  • Covers the RuView `wifi-densepose` command line binary, its Axum REST API and the WebAssembly builds for browsers and ESP32, for embedding or scripting RuView.

    97k GitHub stars~1.2k tokensUpdated today
    Backend & APIsAuto-check: notes

More from growthxai/output

All 50 skills in this repo
  • 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 yesterday
    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 yesterday
    Auto-check: notes
  • Wire encrypted credentials to environment variables using the credential: convention.

    442 GitHub stars~930 tokensUpdated yesterday
    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 yesterday
    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 yesterday
    Auto-check passed
  • Output Dev Agent Class

    growthxai/output

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

    442 GitHub stars~2.6k tokensUpdated yesterday
    Auto-check passed

Categories

Questions about Output Error Direct Io

What does Output Error Direct Io do?

Fix direct I/O in Output SDK workflow functions. An agent skill from growthxai/output. Output Error Direct Io is an agent skill from growthxai/output. Fix direct I/O in Output SDK workflow functions.

When should I use Output Error Direct Io?

Output Error Direct Io fits situations like: returns undefined; shows workflow must be deterministic errors; HTTP/API calls are made directly in workflow code.

How do I install Output Error Direct Io in Claude Code?

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

How do I install Output Error Direct Io in Codex?

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

Can I use Output Error Direct Io 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-error-direct-io -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-error-direct-io, .gemini/skills/output-error-direct-io, .github/skills/output-error-direct-io and .opencode/skills/output-error-direct-io in your project.

What does Output Error Direct Io need to run?

Going by SKILL.md and its folder, Output Error Direct Io needs the command-line tools its instructions call (npx). Our summary lists: Node.js. Its frontmatter pre-approves these tools: Bash, Read.

Does Output Error Direct Io access the network?

SKILL.md contains no URLs. Its commands use npx, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Output Error Direct Io safe to install?

Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Output Error Direct Io use?

Output Error Direct Io 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 Error Direct Io use?

About 1.6k tokens (SKILL.md is roughly 6.6k 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 Error Direct Io?

Skills that share tags, products or a category with Output Error Direct Io: Paperclip (paperclipai/paperclip, 100k stars), Nodejs Backend Patterns (ever-works/ever-works, 162 stars), OpenAPI to MCP Server (mcp-use/mcp-use, 11k stars) and Use Yaak (mountain-loop/yaak, 19k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Output Error Direct Io?

growthxai (a GitHub organization) maintains it in growthxai/output, which has 442 GitHub stars. The repository holds 50 skills in this directory. The repository was last updated on October 9, 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.