Agent infrastructure, without the agent runtime

Coordinate AI providers. Verify what comes back.

OAT runs declarative workflows across model, search, retrieval and developer APIs — with retries, fallbacks and timeouts handled — then checks every output against criteria you define and records the evidence.

Product

Three steps, every run recorded

Workflows are data, not code. Each step calls one provider capability; dependencies decide what runs in parallel. No model decides control flow.

  1. Define

    Describe steps, inputs and dependencies as JSON. Validation catches cycles, missing references and unsafe schemas before anything runs.

  2. Run

    The coordinator executes the DAG with bounded parallelism, per-attempt timeouts, retries with backoff and fallback between compatible providers.

  3. Verify

    Outputs are checked against JSON Schema and explicit criteria, with evidence stored per check — and an honest note on what was not verified.

Capabilities

Built for work you need to trust

Orchestration

Dependency-ordered steps, parallel stages, templated inputs between steps, cancellation and execution timeouts — with per-step status, attempts and duration persisted.

  • Up to 50 steps per workflow
  • continueOnError and dependency skipping
  • Interrupted runs flagged on restart

Verification

JSON Schema plus criteria such as min_items, contains and urls_in_step, which traces cited URLs back to the search results they came from.

  • Evidence recorded for every check
  • Structure and citations — never “facts verified”
  • Optional: fail the step on failure

Observability

Structured, redacted logs with request IDs; provider latency, errors, tokens and estimated cost where reported; execution history and an audit trail.

  • Liveness and readiness checks
  • Secrets scrubbed before logging
  • Per-provider error breakdown

Provider integrations

Adapters for Anthropic Claude, Google Gemini, Jina AI, Tavily, Exa and GitHub, behind one contract per capability. Each stays disabled until its key is configured on the server.

  • Keys never leave the server
  • Fallback only between compatible providers
  • SSRF guard on URL inputs

Console

One place to see every run

The console shows providers, workflows, executions, verification evidence and metrics — read straight from your server.

Illustrative example · sample data, not live

Execution · Research brief

ex_8c41f2a0

Succeeded
  1. searchweb.search

    tavily → exa (fallback) · 2 attempts · 1.4 s

  2. repogithub.repo

    github · 1 attempt · 0.3 s · ran in parallel with search

  3. summaryllm.generate

    anthropic · 1 attempt · 6.2 s

    Verification passed · 4/4 cited URLs traced to search results · facts not independently verified

Providers

  • AnthropicHealthy
  • TavilyDegraded
  • ExaHealthy
  • Jina AIDisabled

p95 latency by route

Sample values for illustration only. The console reads real data from your server — nothing there is simulated. See your live data

Developers

A small, predictable API

Versioned under /api/v1, bearer-token auth, one response envelope, request IDs on every response.

  • Success: { data, meta: { requestId } }
  • Errors: { error: { code, message, details } }
  • Executions start with 202; poll until finished
  • Records are scoped to their owner
Create a workflow, then run it
export OAT=http://localhost:3000/api/v1
export TOKEN=oat_your_token_here

# 1. Create the workflow (see "Workflow JSON")
curl -s "$OAT/workflows" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d @workflow.json

# 2. Start an execution (returns 202 with an id)
curl -s "$OAT/workflows/wf_.../executions" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"input":{"topic":"vector databases"}}'

# 3. Poll the execution until it finishes
curl -s "$OAT/executions/ex_..." \
  -H "Authorization: Bearer $TOKEN"

Documentation

Get started in four steps

Everything runs locally with Node 22.13 or newer. Provider keys are optional — each integration stays off until configured.

  1. 1Install

    shell
    npm install
    cp .env.example .env
  2. 2Create a token

    shell
    npm run token:create -- alice admin

    Add the printed alice:admin:<hash> entry to AUTH_TOKENS. Only the hash is stored.

  3. 3Configure providers

    Set any of ANTHROPIC_API_KEY, JINA_API_KEY, TAVILY_API_KEY, EXA_API_KEY, GITHUB_TOKEN. For a dry run, set ENABLE_MOCK_PROVIDERS=true — output is clearly labelled [MOCK].

  4. 4Build and run

    shell
    npm run build
    npm start

    Then open the console and paste your token.

API reference

/api/v1
RouteAccessPurpose
GET /health, /health/readyPublicLiveness and database/migration readiness
GET /meAny tokenYour user id, role and permissions
GET /providers, /providers/healthUserProviders, capabilities with JSON Schemas, passive health
POST /providers/health/probeAdminActive probes where they cost no paid quota
POST /workflows/validateUserValidate a draft: errors, parallel stages, readiness
POST /workflows, GET /workflows[/:id]OwnerCreate, list and read workflows
POST /workflows/:id/executionsOwnerStart a run (202); input checked against inputSchema
GET /executions[/:id], POST …/cancelOwnerHistory, per-step detail, cancellation
GET /verifications/:idOwnerChecks, evidence and assessment
GET /metrics, /audit-eventsAdminHTTP and provider metrics, audit trail

Ready to run your first workflow?

Sign in to the console with your API token, pick a template, validate it and run it.