Agent skill

Output Error HTTP Client

by growthxai in growthxai/output

Fix HTTP client misuse in Output SDK steps. An agent skill from growthxai/output.

Apache-2.0Auto-check: notesBackend & APIs

Install Output Error HTTP Client

skills CLI
$ npx skills add growthxai/output --skill output-error-http-client -a claude-code

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

GitHub CLI
$ gh skill install growthxai/output output-error-http-client --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-http-client .claude/skills/output-error-http-client && 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-http-client
GitHub stars
440
Token cost
~2.3k tokens
SKILL.md length
521 words
Files
1
Skills in repo
52
Repo updated
First seen
Licence
Apache-2.0

At a glance

Fix HTTP client misuse in Output SDK steps. An agent skill from growthxai/output.

  • Works in 5 steps: Tracing: Requests appear in workflow… → Automatic Retries: Configurable retry… → Consistent Errors: Standardized error… → …
  • Seeing untraced requests
  • SKILL.md covers Overview, When to Use This Skill, Root Cause and Symptoms, plus 10 more sections
  • Calls npx; reaches api.service.com; needs API_KEY

What it does

Output Error HTTP Client is an agent skill from growthxai/output. Fix HTTP client misuse in Output SDK steps. Use when seeing untraced requests, missing error details, axios-related errors, HTTP calls aren't being properly logged and retried, or paid API costs are missing from cost reports.

Its SKILL.md is about 2.3k 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 Third-party API integration. 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

  • Seeing untraced requests
  • Missing error details
  • Axios-related errors
  • HTTP calls arent being properly logged and retried

Example prompts

  • “/output-error-http-client”

Requirements

  • Node.js
  • A credential in API_KEY
  • Pre-approved tools (allowed-tools): Bash, Read

Workflow steps

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

  1. Tracing: Requests appear in workflow traces with timing
  2. Automatic Retries: Configurable retry logic for transient failures
  3. Consistent Errors: Standardized error format across all requests
  4. Timeout Integration: Works with step and workflow timeouts
  5. Type Safety: Full TypeScript support

What it can do on your machine

Read from SKILL.md and the folder at commit 52b51ac. 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

    Hosts in commands or code, which the agent is likely to contact:

    • api.service.com

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

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • API_KEY

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

Context cost

Output Error HTTP Client loads about 2.3k tokens when it runs. Until then it costs about 63 tokens; SKILL.md has 521 words of instructions outside code blocks.

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

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 52b51ac, republished under its Apache-2.0 licence (© growthxai). 521 words, ~2,317 tokens.

Download SKILL.mdSave it as .claude/skills/output-error-http-client/SKILL.md (or your agent's skills folder).
name
output-error-http-client
description
Fix HTTP client misuse in Output SDK steps. Use when seeing untraced requests, missing error details, axios-related errors, HTTP calls aren't being properly logged and retried, or paid API costs are missing from cost reports.
allowed-tools
Bash, Read

Fix HTTP Client Misuse

Overview

This skill helps diagnose and fix issues caused by using axios, fetch, or other HTTP clients directly instead of Output SDK's createKyClient from @outputai/http. The Output SDK client provides tracing, automatic retries, and better error handling.

When to Use This Skill

You're seeing:

  • Untraced HTTP requests (not appearing in workflow traces)
  • Missing error details for failed requests
  • axios-related errors or import issues
  • Retries not working for HTTP failures
  • Inconsistent timeout behavior

Root Cause

Using axios, fetch, or other HTTP clients directly bypasses Output SDK's:

  • Request/response tracing: Calls aren't logged in workflow traces
  • Automatic retries: Failed requests aren't retried
  • Error standardization: Error formats may be inconsistent
  • Timeout handling: Timeouts may not integrate with step timeouts

Symptoms

Using axios Directly
typescript
// WRONG: Using axios
import axios from 'axios';

export const fetchData = step( {
  name: 'fetchData',
  fn: async input => {
    const response = await axios.get( 'https://api.example.com/data' );
    return response.data;
  }
} );
Using fetch Directly
typescript
// WRONG: Using fetch
export const fetchData = step( {
  name: 'fetchData',
  fn: async input => {
    const response = await fetch( 'https://api.example.com/data' );
    return response.json();
  }
} );

Solution

Use createKyClient from @outputai/http:

Basic Usage
typescript
import { z, step } from '@outputai/core';
import { createKyClient } from '@outputai/http';

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 };
  }
} );
With Full Configuration
typescript
import { createKyClient } from '@outputai/http';

const client = createKyClient( {
  prefix: 'https://api.example.com',
  timeout: 30000,  // 30 second timeout
  retry: {
    limit: 3,      // Retry up to 3 times
    methods: [ 'GET', 'POST' ],  // Which methods to retry
    statusCodes: [ 408, 500, 502, 503, 504 ]  // Which status codes trigger retry
  },
  headers: {
    'Authorization': `Bearer ${apiKey}`,
    'Content-Type': 'application/json'
  }
} );

HTTP Methods

GET Request
typescript
const data = await client.get( 'users/123' ).json();
POST Request
typescript
const result = await client.post( 'users', {
  json: {
    name: 'John',
    email: 'john@example.com'
  }
} ).json();
PUT Request
typescript
const updated = await client.put( 'users/123', {
  json: {
    name: 'John Updated'
  }
} ).json();
DELETE Request
typescript
await client.delete( 'users/123' );
With Query Parameters
typescript
const data = await client.get( 'search', {
  searchParams: {
    q: 'query',
    limit: 10
  }
} ).json();
Metadata-Only Responses

When code only reads metadata from a non-HEAD response, such as response.url, response.status, or headers, cancel the unused body. Reading a body with .json(), .text(), etc. already consumes it.

typescript
const response = await client.get( url );

try {
  return response.url;
} finally {
  await response.body?.cancel();
}

Complete Migration Example

Before (Wrong - using axios)
typescript
import axios from 'axios';
import { step } from '@outputai/core';

export const createUser = step( {
  name: 'createUser',
  fn: async input => {
    try {
      const response = await axios.post(
        'https://api.example.com/users',
        { name: input.name, email: input.email },
        {
          headers: { 'Authorization': `Bearer ${process.env.API_KEY}` },
          timeout: 30000
        }
      );
      return response.data;
    } catch ( error ) {
      if ( axios.isAxiosError( error ) ) {
        throw new Error( `API Error: ${error.response?.data?.message}` );
      }
      throw error;
    }
  }
} );
After (Correct - using createKyClient)
typescript
import { z, step } from '@outputai/core';
import { createKyClient } from '@outputai/http';
import { credentials } from '@outputai/core/credentials';

export const createUser = step( {
  name: 'createUser',
  inputSchema: z.object( {
    name: z.string(),
    email: z.string().email()
  } ),
  outputSchema: z.object( {
    id: z.string(),
    name: z.string(),
    email: z.string()
  } ),
  fn: async input => {
    const client = createKyClient( {
      prefix: 'https://api.example.com',
      timeout: 30000,
      retry: { limit: 3 },
      headers: {
        'Authorization': `Bearer ${credentials.require( 'service.api_key' )}`
      }
    } );

    const user = await client.post( 'users', {
      json: {
        name: input.name,
        email: input.email
      }
    } ).json();

    return user;
  }
} );

Error Handling

The Ky client provides structured error handling:

typescript
import { createKyClient, ky } from '@outputai/http';

export const fetchData = step( {
  name: 'fetchData',
  fn: async input => {
    const client = createKyClient( { prefix: 'https://api.example.com' } );

    try {
      return await client.get( 'data' ).json();
    } catch ( error ) {
      if ( error instanceof ky.HTTPError ) {
        // Access response details
        const status = error.response.status;
        const body = await error.response.json();
        throw new Error( `API returned ${status}: ${body.message}` );
      }
      throw error;
    }
  }
} );

Missing Cost Tracking for Paid APIs

Symptom

A client wraps a paid third-party API, but its calls never show up in the API Costs section of npx output workflow cost — they're traced (so tracing works), but their cost is always $0 or absent from the report.

Root Cause

npx output workflow cost only knows about HTTP spend that was explicitly attached with addRequestCost from @outputai/http. Tracing a request is automatic; costing it is not — a client that never calls addRequestCost will trace correctly and cost nothing, which is expected for free/internal services but a bug for paid ones.

Show full SKILL.md (223 more words)Show less
Solution

Attach cost inside an afterResponse hook on the client so every call is costed automatically, rather than at each call site. See output-dev-http-client-create (section "Attaching Request Cost (Paid APIs)") for the metered-response and flat-rate patterns, and output-dev-cost-hooks for forwarding those costs to an external observability system.

typescript
// WRONG: paid API, no cost tracking
const client = createKyClient( { prefix: 'https://api.service.com' } );

// CORRECT: cost attached automatically for every call
import { addRequestCost, createKyClient } from '@outputai/http';

const client = createKyClient( {
  prefix: 'https://api.service.com',
  hooks: {
    afterResponse: [
      ( _request, _options, response ) => {
        if ( !response.ok ) return;
        addRequestCost( response, 0.005 );
      }
    ]
  }
} );

Finding axios/fetch Usage

Search your codebase:

bash
# Find axios imports
grep -rn "from 'axios'\|from \"axios\"" src/

# Find fetch calls
grep -rn "await fetch(" src/

# Find other HTTP libraries
grep -rn "got\|node-fetch\|request\|superagent" src/

Benefits of createKyClient

  1. Tracing: Requests appear in workflow traces with timing
  2. Automatic Retries: Configurable retry logic for transient failures
  3. Consistent Errors: Standardized error format across all requests
  4. Timeout Integration: Works with step and workflow timeouts
  5. Type Safety: Full TypeScript support

Configuration Options

OptionDescriptionDefault
prefixBase URL for all requests(required)
timeoutRequest timeout in ms10000
retry.limitMax retry attempts2
retry.methodsHTTP methods to retry['GET', 'PUT', 'HEAD', 'DELETE', 'OPTIONS', 'TRACE']
retry.statusCodesStatus codes to retry[408, 413, 429, 500, 502, 503, 504]
headersDefault headers{}

Verification

After migrating to createKyClient:

  1. Run the workflow: npx output workflow run <name> --input '<input>'
  2. Check the trace: npx output workflow debug <id> --json
  3. Verify tracing: HTTP requests should appear in the step trace
  4. Test retries: Simulate failures to verify retry behavior
  • For I/O in workflow functions, see output-error-direct-io
  • For connection issues, see output-services-check
  • For encrypted secrets management, see output-dev-credentials
  • For attaching and forwarding request cost, see output-dev-http-client-create and output-dev-cost-hooks

© 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-http-client of growthxai/output.

Open the folder on GitHubat commit 52b51ac

Compare with similar skills

Output Error HTTP Client 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 HTTP Client compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Output Error HTTP Client this skillgrowthxai/output440—~2.3kAutomated safety check: NotesApache-2.0
Sub2API AdminWei-Shaw/sub2api43k1 repos~717Automated safety check: PassLGPL-3.0
Firecrawl Build Onboardingfirecrawl/firecrawl190k1 repos~1.4kAutomated safety check: NotesISC
ToolJet Marketplace Plugin BuilderToolJet/ToolJet41k—~2.1kAutomated safety check: PassAGPL-3.0
Firecrawl Search Integrationfirecrawl/firecrawl190k1 repos~1.1kAutomated safety check: PassISC
CoinGecko API Reference2025Emma/vibe-coding-cn23k2 repos~646Automated safety check: PassMIT

Similar skills

  • Sub2API Admin

    Wei-Shaw/sub2api

    Manages a Sub2API deployment from the command line: accounts, redeem and invitation codes, groups, proxies, imports, exports and raw admin API calls.

    43k GitHub starsUsed in 1 repo~717 tokens
    Backend & APIsAuto-check passed
  • Firecrawl Build Onboarding

    firecrawl/firecrawl

    Gets Firecrawl working in a project: signs you in through the browser, saves FIRECRAWL_API_KEY to .env and picks the first SDK or REST path.

    190k GitHub starsUsed in 1 repo~1.4k tokens
    Backend & APIsAuto-check: notes
  • Turns an API description, such as an OpenAPI file or a Postman collection, into a connector plugin for ToolJet's marketplace and checks it with the repo's validator.

    41k GitHub stars~2.1k tokensUpdated today
    Backend & APIsAuto-check passed
  • Firecrawl Search Integration

    firecrawl/firecrawl

    Guidance for adding Firecrawl's /search endpoint to product code and agent workflows when a feature starts from a query rather than a URL.

    190k GitHub starsUsed in 1 repo~1.1k tokens
    Backend & APIsAuto-check passed
  • CoinGecko API Reference

    2025Emma/vibe-coding-cn

    CoinGecko API documentation - cryptocurrency market data API, price feeds, market cap, volume, historical data. Use when integrating CoinGecko API, building…

    23k GitHub starsUsed in 2 repos~646 tokens
    Backend & APIsAuto-check passed
  • NEAR Intents Swap Integration

    internet-court/internet-court-skill

    Builds cross-chain token swaps and bridge flows with the NEAR Intents 1Click API: quotes, deposit addresses, per-chain deposits and status polling.

    6.4k GitHub starsUsed in 2 repos~939 tokens
    Backend & APIsAuto-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().

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

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

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

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

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

    growthxai/output

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

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

Categories

Questions about Output Error HTTP Client

What does Output Error HTTP Client do?

Fix HTTP client misuse in Output SDK steps. An agent skill from growthxai/output. Output Error HTTP Client is an agent skill from growthxai/output. Fix HTTP client misuse in Output SDK steps.

When should I use Output Error HTTP Client?

Output Error HTTP Client fits situations like: seeing untraced requests; missing error details; axios-related errors; HTTP calls arent being properly logged and retried.

How do I install Output Error HTTP Client in Claude Code?

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

How do I install Output Error HTTP Client in Codex?

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

Can I use Output Error HTTP Client 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-http-client -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-http-client, .gemini/skills/output-error-http-client, .github/skills/output-error-http-client and .opencode/skills/output-error-http-client in your project.

What does Output Error HTTP Client need to run?

Going by SKILL.md and its folder, Output Error HTTP Client needs the command-line tools its instructions call (npx) and credentials named API_KEY. Our summary lists: Node.js; A credential in API_KEY. Its frontmatter pre-approves these tools: Bash, Read.

Does Output Error HTTP Client access the network?

SKILL.md names 1 domain. In commands or code: api.service.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.

Is Output Error HTTP Client 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 HTTP Client use?

Output Error HTTP Client 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 HTTP Client use?

About 2.3k tokens (SKILL.md is roughly 9.3k 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 HTTP Client?

Skills that share tags, products or a category with Output Error HTTP Client: Sub2API Admin (Wei-Shaw/sub2api, 43k stars), Firecrawl Build Onboarding (firecrawl/firecrawl, 190k stars), ToolJet Marketplace Plugin Builder (ToolJet/ToolJet, 41k stars) and Firecrawl Search Integration (firecrawl/firecrawl, 190k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Output Error HTTP Client?

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