Open-source agent harness · as a service

Invoke an agent. Get back a durable turn.

nvoken runs the whole agent turn for your app — streaming, checkpoints, durable waits, human-in-the-loop — while your app stays the source of truth. No agent runtime to provision, sync, or migrate.

invoke(spec, input)durable invocation

Works with Anthropic · OpenAI · Google · Grok · Mistral · Ollama

The problem

Every team shipping an agent builds a harness.

And the features a harness needs are not obvious up front — you discover them one incident at a time. Months later you have thousands of lines of plumbing, and an experience that still falls short of what users expect from Claude Code and the ChatGPT and Claude apps.

01A turn dies mid tool call
02A stream drops halfway through
03A conversation has to survive a deploy
04Token usage needs explaining and billing

The contract

One call. The whole turn.

Your app composes the agent spec from its own database and sends it with the input. nvoken resolves or creates the Session and admits the work durably — an API disconnect, process loss, or deploy can't erase what was accepted.

The answer is one read away: GET /v1/invocations/{id}/result.

Send Accept: text/event-stream to stream the same Invocation. Disconnecting never affects execution.

POST/v1/invocations
{
  "agent_key": "support-triage",
  "session_key": "thread-8813",
  "idempotency_key": "thread-8813:message-7",
  "input": "why was I charged twice?",
  "spec": {
    "instructions": "You are a billing support agent…",
    "model": { "provider": "anthropic", "id": "claude-sonnet-5" }
  }
}
202Accepted
{
  "invocation_id": "invk_…",
  "status": "queued",
  "deadline_at": "2026-07-23T16:30:00Z"
}

The boundary

Your app owns the state.

A multi-tenant app can't treat agents as fixed config — instructions, tools, and models vary by tenant, plan, and user. Register those into a runtime and every variation becomes a record to provision, every change a migration. nvoken avoids this by design.

Your app · source of truth

Composed from your database on every invocation.

  • Agent definitions & versions
  • Users, tenants & plans
  • Integrations & credentials
  • Orchestration & product data
invoke( ) →

nvoken · execution state

Nothing to register, sync, or migrate.

  • Sessions & message history
  • Running turns & checkpoints
  • Optional encrypted provider keys
  • Usage & traces

Depth

A harness runs deeper than a loop.

The distance between a working demo and an experience users actually like is a long list of features teams discover one at a time. nvoken covers them, built on Dive.

The loop

Multi-round generate-and-dispatch with iteration, time, and cost guardrails, parallel and background tool calls, and failure containment that returns usage and partial output.

Tools

Builtin, signed callback, and recoverable host tools with stable call IDs. Annotations, previews, live output, and rich text / image / audio results.

Human-in-the-loop

Suspend and resume for approvals or auth, an allow/ask/deny permission engine, lifecycle hooks, cancellation, steering, and ask-the-user mid-task.

Sessions & durability

Ordered history resolved by your session key, admission that survives crashes and deploys, a single-writer lease, and streams that reconnect without duplicating events.

Context engineering

Typed system reminders with authority tiers, mid-loop context injection, token-threshold compaction, and automatic prompt-cache breakpoints.

Provider portability

Anthropic, OpenAI, Google, Grok, Mistral, Ollama, and OpenRouter behind one interface — thinking signatures, tool-call IDs, and results round-trip, so a Session isn't welded to a vendor.

Usage & observability

Normalized per-invocation usage for rebilling, cost tracking priced by a per-model registry, and OpenTelemetry GenAI spans across the turn, each model call, and each tool call.

How it compares

Two decisions are hard to reverse.

Once agents are wired into your product, where the runtime runs and who owns your state are expensive to change. Compare on those. Only nvoken passes both.

ProjectRuns onFully open sourceYour app owns state
nvokenanywhere with a binary + Postgres
Claude Managed AgentsAnthropic's cloud only
AWS Bedrock AgentCoreAWS only
Cloudflare AgentsCloudflare only
Vercel Open AgentsVercel only
kagentany Kubernetes cluster
Lettayour infra or Letta Cloud

Bring-your-own-key and Apache-2.0 end to end. Runs on a laptop, your cloud account, or an air-gapped network.

Give your app a great agentic experience.

One binary plus Postgres. The first durable slice is live and the contract is being figured out in the open.

Early development, openly so. The design isn't set, so feedback right now genuinely changes it — open an issue.