Agents · the long version

Autonomous,
on a leash.

Spin up an agentic run that plans, calls tools, and executes — with iteration caps, time budgets, and stop‑when matching enforced by the engine, not by hope. Every step is visible. You can pause, intervene, or stop the world at any iteration.

Safety, by default

Caps the model can't argue with.

The agent loop runs until the model stops calling tools — bounded by hard limits the engine enforces, not by the model's self‑restraint. Three knobs, every run.

max iterations

Default 5 · hard ceiling 50.

How many planning‑and‑tool‑calling cycles the agent can take. Most real tasks converge in 3–7; the hard 50 means even a worst‑case runaway is bounded.

time budget

300 seconds, configurable.

Total wall‑clock time the run can consume. Long tool calls don't cheat the budget. When time's up, the agent stops mid‑iteration and the runner shows partial results.

stop when

Optional text match.

Define a string the model's output must contain to terminate early. Useful for "stop when you have the answer" patterns — the agent stops as soon as the marker appears, even if it has more iterations left.

transparent execution

Every iteration. Every tool. Every error.

Agents are usually black boxes — input goes in, output comes out, the middle is a guess. Not here. The runner shows every iteration as its own card: which tool the model asked for, what arguments it passed, what came back, how long it took, and whether it errored. Click any card to expand the full payload.

  • Per‑iteration cards. Iteration number, tool name, args, result, status, duration. No streaming text wall to scroll.
  • Errors recover, not crash. Hallucinated tool name? The agent gets a clear "tool not found" back and tries again — instead of the run dying.
  • Prompt cache kicks in on iteration 2. The base prompt is identical every iteration, so cache_read carries the bulk and you pay only for the delta.
  • Cancel mid‑iteration. Stop button propagates through to the upstream stream. No orphan tool calls, no zombie costs.
agent run · portfolio brief · iter 3/5
1
tool · brave_search
{ query: "NVDA earnings Q3" }
5 results · 412ms · cache: miss
2
tool · fetch_quotes
{ tickers: ["NVDA"] }
1 quote · 88ms · cache: read 7.2k
3
tool · python.exec
{ code: "compute MA + delta" }
running…
4
awaiting prior iteration
3 / 5 iterations · 76s / 300s · $0.04 spent
What people build

Three patterns. Many shapes.

The agent node ships with three reference patterns proven in production. Start from one of them; mix MCP tools as you go.

research

Search agent.

Take a question, search the web (Brave + your own docs via MCP), read the sources, synthesize. Bounded by max iterations so it doesn't spelunk forever.

analysis

Python analyst.

Take a dataset (CSV, parquet, query result), run sandboxed Python with pandas / matplotlib, return a chart and a narrative. Loop until the answer holds up to its own checks.

briefing

Portfolio brief.

Pull live market data via MCP, run analytics in Python, format the result as HTML, deliver via email. The reference workflow for "every weekday morning" scheduled agents.

Bounded autonomy

Trust the model.
Verify the budget.

Agents earn trust through transparency, not promises. Caps the model can't bypass. Transcripts you can audit. A stop button that actually stops.