@c3-oss/codexcw
v0.5.1
Published
Run Codex, Claude Code, or Grok Build non-interactively from Node.js, backed by a Rust core.
Maintainers
Readme
@c3-oss/codexcw
Run Codex, Claude Code, or Grok Build non-interactively from Node.js. The Codex
agent wraps codex exec --json; Claude wraps
claude -p --output-format stream-json; Grok uses --no-auto-update and
streaming-messages-json. All expose results, live event
streams, callbacks, typed usage, and typed errors through the same API. A
native addon backed by a Rust core (napi-rs) provides prebuilt binaries for
macOS, Linux (gnu + musl), and Windows.
Install
npm install @c3-oss/codexcwThe selected agent executable must be on PATH and authenticated. Codex must
support codex exec --json; Claude must support --output-format stream-json;
Grok must support streaming-messages-json.
The Claude agent is selected with new Runner({ agent: 'claude' }); its
events are normalized into the same event model, with model selection via the
haiku/sonnet/opus aliases (ClaudeModel).
Select Grok with new Runner({ agent: 'grok' }). New runs use read-only
sandboxing and dontAsk permissions; Grok sessions are always persisted.
Usage
The API is async-only: every call returns a Promise, and event streams are
AsyncIterables consumed with for await.
import { Runner } from '@c3-oss/codexcw'
const runner = new Runner()
const result = await runner.run({ prompt: 'say hi' })
console.log(result.finalMessage)
console.log(result.usage.totalTokens)
console.log(result.usage.totalCostUsd)import {
getAccountUsage,
getClaudeAccountUsage,
} from '@c3-oss/codexcw'
const usage = await getAccountUsage({
env: { CODEX_HOME: '/tmp/codex-home' },
})
console.log(usage.rateLimits.primary?.usedPercent)
console.log(usage.tokenUsage?.summary.lifetimeTokens)
const claudeUsage = await getClaudeAccountUsage()
console.log(claudeUsage.windows)Full recipes — streaming, resume, sandbox/approval, batches, structured output,
account usage, and error handling — are in
docs/examples/typescript.md.
License
CC0-1.0
