Is Coryphaeus production-ready at 1.0.0?
Yes. 93 tests pass under Vitest 4 with 98% coverage; TypeScript 6 maximum strict mode is clean; Biome 2.5
lint is clean; publint and @arethetypeswrong/cli are clean across all twelve
subpaths. The suite and the distribution smoke test are run on the Node 20, 22, and 24 matrix. Every
published release carries SLSA provenance produced by GitHub Actions.
Why not just send the task to one model?
Because no single model is best at everything; different providers lead on programming, mathematics,
security, and long context. Composing several as a team raises the ceiling on a hard task. For an easy
task, Coryphaeus agrees with you: the Regent picks the single-worker topology and answers directly, the
lowest-latency, lowest-cost path. You only pay for composition when the task warrants it.
Why not hand-wire a graph in a framework?
You can, and many do. The cost is a fixed graph in code that you rewrite when you change providers or
roles, and that you must instrument yourself for cost and audit. Coryphaeus moves the arrangement decision
into a pluggable Regent, exposes it as a graph, and builds the cost forecast, the budget ceiling, and the
audit trail in, so the orchestration adapts per task instead of being frozen at authoring time.
Does Coryphaeus call any model itself?
No. The core is orchestration logic over an injectable client. You provide the model caller, an
OpenAI-style chat function, a Vercel AI SDK call, a local model, or a deterministic mock, and the
orchestrator drives it. That keeps the package provider-agnostic, dependency-free, and testable with no
network, and it means your provider keys live in your client, never in Coryphaeus.
Does this work in Cloudflare Workers, Vercel Edge, Bun, or Deno?
Yes. The core is node-free; the audit seal uses the Web Crypto API, not node:crypto. Import
@takk/coryphaeus or @takk/coryphaeus/edge on any runtime with Web Crypto. Only
@takk/coryphaeus/node, the JSON and CSV loaders, requires the Node standard library.
How does Coryphaeus handle my data?
Coryphaeus holds the agent descriptors you register, the task text you pass, and the run results it builds,
nothing else. It makes no outbound network calls of its own; the only model calls are the ones your injected
client makes to your chosen providers. With the file loaders, only the roster, task, or run files you point
it at are read from disk, and no provider credentials are ever held by Coryphaeus.
What does the Regent actually decide?
Per task, the Regent estimates complexity, reads your latency preference, and chooses a topology and a cast
of agents, assigning each a role. The 1.0 Regent is a transparent heuristic, and every choice is explained
in the arrangement's rationale. You can force a topology, swap in your own strategy behind the same seam, or
simply read the rationale to see why it composed the team it did.
Is the audit trail a digital signature?
No, and the docs are explicit about it. Each entry is chained to the previous one through a SHA-256 hash of
its canonical form, so any later edit breaks the chain. It is an integrity seal, not a signature: it does
not prove who produced the log. Signed and timestamped seals for stronger third-party evidence are on the
roadmap.
Which providers does it support?
Any of them. Because you inject the client, Coryphaeus composes OpenAI, Anthropic, Google, a local model,
or a mix, treated uniformly as black-box agents. Adapters are included for an OpenAI-style chat function and
the Vercel AI SDK, so wrapping your existing call is two lines.
Where does the state live?
In-process memory by default, with portable JSON snapshots via snapshot() and
fromSnapshot(), the agent pool and the scalar configuration. For disk-backed input, load an
agent roster, a task, or a saved run from JSON with @takk/coryphaeus/node. For an edge runtime,
snapshot to your own KV store between invocations.
How does it keep cost under control?
Each agent carries a cost profile. Coryphaeus forecasts the dollar cost of an arrangement before any call,
and a budget tracker refuses any step that would breach the ceiling you set, raising a typed
BUDGET_EXCEEDED. A cascade topology further tries the cheapest capable agent first and
escalates only when a tier is not confident enough.
How do I verify a published version's provenance?
Every release is published with npm publish --provenance. Check the attestations with
npm view @takk/coryphaeus@<version> --json | jq .dist.attestations. The attestation
links the tarball you installed to the GitHub Actions workflow that built it from a specific source commit.
What is the policy on breaking changes?
Strict SemVer 2.0.0, starting from 1.0.0. The binding stability surface is documented in SPEC.md section
5. Major bumps require a deprecation cycle; security fixes follow the disclosure flow in SECURITY.md.