馃寛 ~khtdr/

home / agents: features

Authoring and versioning

FeatureWhat it doesWhy you want it
Agents as rowsName, prompt, tier, tools, and an optional pipeline. Edit from the browser, the CLI, or the APIChange a prompt or add a step without a deploy
Built-in authoringagent new interviews you and drafts an agent. Or install a skill so your coding agent canGo from install to a working agent without writing JSON
Versions and replayEvery save keeps a version. Any run can be replayed against another version or different toolsA/B test a prompt or a tool description on the same input
Swap models globallyAgents ask for fast, default, or reasoning. You decide what those point atMove every agent to a new or cheaper model in one place
Cost trackingTokens and tool spend down to the microdollar, added up across the whole runSee what a pipeline cost, not just the first call

Pipelines

FeatureWhat it doesWhy you want it
Agents as toolsAn agent can list other agents alongside its toolsBuild pipelines out of agents you already have
Pipelines (DAG)Ordered steps, explicit connections, parallel branches, mergesFixed sequences are cheaper and faster, and a failure points at one step
Visual composerDrag to connect, click to edit, validation as you typeBuild and fix a pipeline without hand-editing config
Conditional routingA connection can carry a condition on the previous step’s outputOne classifier, four handlers, only one branch runs
MergesJoin branches by concatenating, listing, summarizing, or picking the bestFan out to several agents and get one answer back
GatesA step that checks the work and either passes it on or sends it backRetry the step that produced bad output, with the complaint attached
Checked at save timeLoops, missing steps, and conditions that do not parse are rejected on saveThe pipeline fails in the editor, not three steps into a run

Getting a better answer

FeatureWhat it doesWhy you want it
Reflection loopsDraft, critique, revise, until a critic signs offQuality passes that do not need you in the loop
Quality gateA critic reviews the finished output and flags the run if it is not goodCatch bad answers without anything silently rewriting them
Debate and consensusRun it N times or ask a panel, then pick by vote, weight, or judgeBetter answers on questions where one sample is a coin flip
Plan then executeThe model writes the pipeline before anything runs, and you can approve it firstReview the plan while it is still free to change
Guaranteed JSONPut a schema on an agent and its output is validated against itRoute on a field, or hand the value to the next step as data

People in the loop

FeatureWhat it doesWhy you want it
Human in the loopA step can stop and ask a person, with typed optionsApprovals and sign-offs inside an otherwise automatic run
Multi-turn interviewsA conversation where each question depends on the last answerGather requirements from a person mid-run
Durable pausesA paused run keeps its place with no process waiting on it, and picks itself back up if the server restarts while the answer is coming inA webhook, a build, or a person can answer hours later, and a deploy in the middle of it does not lose the run
A pending inboxOne list of every run waiting on somebody, in the UI and the CLINothing sits parked because you forgot about it

State and memory

FeatureWhat it doesWhy you want it
Shared scratchpadSteps read and write a shared key/value store for the runParallel branches contribute to one result without threading it through every step
Long-term memoryNamespaced values that outlive the run, safe when two runs raceJobs that pick up where the last run stopped
Agents that talkAgents running in parallel can message each otherNegotiation and critique between siblings, with stalls detected

Tools and integration

FeatureWhat it doesWhy you want it
Tool config and A/BTool descriptions and settings are editable data on top of the codeTest two wordings of a tool, or point two copies at different accounts
Encrypted secretsCredentials are stored encrypted and referenced by namePoint a tool at your account without pasting a key into config
Call any HTTP APIA step can fetch a URL, or be pinned to one API with the key stored encrypted and hidden from the modelConnect to a service you already pay for without writing a tool
Run code it wroteA step can write Node, Python, or shell and run it in a capped subprocess with none of your keys in itArithmetic, parsing, and charts get computed instead of guessed at
Filesystem limitsTools get scoped paths instead of raw disk accessA run writes in its own directory and cannot reach outside it
Bring your own toolsDrop a file in a tools folder, install a tool package, or connect an MCP serverAdd a tool without forking or rebuilding anything

Operations

FeatureWhat it doesWhy you want it
Storage that fitsSQLite, Postgres, plain files, or memoryStart on a laptop, move to a real database when it matters
Nothing gets stuckRuns check in, dead ones get cleaned up, answered ones that never got restarted are picked back up, and cancel stops the runNo run sits waiting forever because something crashed at the wrong moment
Web UI, CLI, APIOne engine, three ways to use itClick through it, script it, or call it from your own app
Embed the runtimeagent bundle puts the runtime in your tree and runAgent becomes a function callShip agents inside your product with no separate service to run

The control panel

An agent detail page showing the system prompt, model tier, a rendered graph pipeline, and version history
An agent: its prompt, model tier, step limit, and the pipeline that says what it does. Every save keeps a version, and each run links back to the version that produced it.
Run history as a collapsible tree, with sub-agent runs nested under their parents and per-run tokens, cost, and duration
Run history, like a git log. Sub-agent calls nest under the run that made them, each with its own tokens, cost, and time. A pipeline's total is the sum of its parts.
A single run's detail page with duration, steps, model, tokens, cost, and a pipeline diagram of its child runs
One run in full: what it cost, what it called, and what each part said.
A paused run showing a 'waiting on you' panel with a question and checkboxes for staging, prod-eu and prod-us
When a run needs a person it pauses and waits. No process is held open. The form is built from the question, so a step that offers three choices cannot get a fourth.
The models settings page, binding the default, fast and reasoning tiers to model ids with per-million-token prices
Agents ask for fast, default, or reasoning. You decide what those point at, prices included. Every agent picks up the change on its next run.
The tools page listing versioned tool definitions above the code implementations they point at
Tools are code, but their descriptions and settings are editable data on top. Two entries can share one implementation with different wording or different accounts.
The memory page showing namespaced durable keys with their values and when they were last written
What agents wrote down to remember between runs. A watermark, a last-seen id, a decision that should not get made twice.
The dashboard showing 24-hour run counts, cost, tokens, average duration, recent errors and recent activity
Runs, cost, tokens, average duration, and recent errors for the last 24 hours.

Under the hood

  • TypeScript throughout. A small HTTP server, a React UI, and a runner you can embed in your own app.
  • One key, every provider. Models come through OpenRouter. Switching from Claude to GPT to Gemini is a setting, not an integration.
  • Laptop or cluster. SQLite by default with nothing to install. Postgres when you need more than one machine. Every storage option passes the same test suite, so behavior does not change with the backend.
  • Conditions are parsed, not evaluated. The expression language in routing conditions is a fixed whitelist. Nothing arriving over the API can reach past it.
  • Your tools are not second class. A tool you write in the tools folder gets the same schema handling, the same validation, the same catalog entry, and the same settings-on-top-of-code as one that shipped.