Skip to content

s4wave/ocpipe

Repository files navigation

ocpipe

Build LLM pipelines with Oh My Pi, OpenCode, Claude Code, Codex, Pi, and Zod.

Inspired by DSPy.

npm Build status


  • Type-safe Define inputs and outputs with Zod schemas
  • Modular Compose modules into complex pipelines
  • Checkpoints Resume from any step
  • Multi-backend Choose between Oh My Pi, OpenCode, Claude Code SDK, Codex SDK, or Pi
  • Auto-correction Fixes schema mismatches automatically

Quick Start

bun add ocpipe
import { signature, field, module, Pipeline, createBaseState } from 'ocpipe'

const Greet = signature({
  doc: 'Generate a friendly greeting for the given name.',
  inputs: { name: field.string('The name of the person to greet') },
  outputs: { greeting: field.string('A friendly greeting message') },
})

const pipeline = new Pipeline(
  {
    name: 'hello-world',
    defaultModel: { backend: 'omp', modelID: 'gpt-5.5' },
    checkpointDir: './ckpt',
    logDir: './logs',
  },
  createBaseState,
)

const result = await pipeline.run(module(Greet), { name: 'World' })
console.log(result.data.greeting)

// Extract types from signatures
import { InferInputs, InferOutputs } from 'ocpipe'
type GreetIn = InferInputs<typeof Greet> // { name: string }
type GreetOut = InferOutputs<typeof Greet> // { greeting: string }

Backends

ocpipe supports five backends for running LLM prompts:

Oh My Pi (default) - Uses the omp CLI in headless JSON print mode.

const pipeline = new Pipeline(
  {
    name: 'my-pipeline',
    defaultModel: { backend: 'omp', modelID: 'gpt-5.5' },
    omp: { command: 'omp', approvalMode: 'yolo', thinking: 'high' },
  },
  createBaseState,
)

OpenCode - Uses the opencode CLI. ocpipe passes prompt files directly and does not create or reference .opencode/agents definitions.

defaultModel: { backend: 'opencode', providerID: 'anthropic', modelID: 'claude-sonnet-4' },
opencode: { command: 'opencode' },

Claude Code - Uses @anthropic-ai/claude-agent-sdk. Install as a peer dependency.

// modelID: 'opus', 'sonnet', or 'haiku'
defaultModel: { backend: 'claude-code', modelID: 'sonnet' },
// permissionMode: 'default' | 'acceptEdits' | 'bypassPermissions' | 'plan'
claudeCode: { permissionMode: 'acceptEdits' },

Codex - Uses @openai/codex-sdk. Install as a peer dependency.

defaultModel: { backend: 'codex', modelID: 'gpt-5.4' },
codex: { sandbox: 'read-only', reasoningEffort: 'high' },

Pi - Uses the pi coding-agent CLI JSONL RPC mode.

defaultModel: { backend: 'pi', modelID: 'gemma' },
pi: { command: 'pi' },

Requirements

For Oh My Pi: Install the omp CLI and authenticate the models it uses.

For OpenCode backend: Install the opencode CLI and authenticate the providers it uses. ocpipe does not require a .opencode directory.

For Claude Code backend: Install the SDK as a peer dependency:

bun add @anthropic-ai/claude-agent-sdk

For Codex backend: Install the Codex SDK package as a peer dependency:

bun add @openai/codex-sdk

Documentation


Oh My Pi · OpenCode

An Aperture Robotics project.

About

structured prompts ft. Zod

Topics

Resources

License

Contributing

Stars

5 stars

Watchers

1 watching

Forks

Contributors