← Chitragupta The roster

A team,
not a chat box.

Each agent keeps its own tools, its own permissions and its own way of working — and every one of them reads the same brain. Tell one of them something and you have told all of them.

Definition

What an agent actually is

A named, domain-scoped worker with its own system prompt, its own tool set, its own conversation history and its own model binding — sharing one brain with every other agent, so what one learns makes the rest smarter.

They are data, not code. Presets ship with the app; the ones you make live in your own database. One is pinned as the lead.

The rosterThe agent rail, each with its generated face, beside an open conversation
The loop

A turn, start to finish

run_turn(agent, text, effort)
  │
  ├─ resolve model        a stale binding is re-checked and repaired
  ├─ effort profile       Low | Medium | High → every budget below
  ├─ runtime identity     so "what model are you?" is answered truthfully
  ├─ the date, twice      small models ignore mid-context notes
  ├─ auto-recall          the brain, BEFORE the model chooses anything
  ├─ open tasks           an authoritative list, so it cannot invent them
  ├─ history              recent verbatim + a summary of older turns
  │
  ├─ LOOP, up to N rounds ─────────────────────────────────────────────┐
  │    stream                 text emitted as it is written            │
  │    tool calls?            run in PARALLEL, deduped per turn        │
  │    re-state the plan                                               │
  │    nudge if a call failed                                          │
  │    two rounds that learn nothing ──► stop, ask it to answer        │
  │    budget spent ──► one more call, tools withheld                  │
  │  ──────────────────────────────────────────────────────────────────┘
  │
  ├─ plan check           steps never ticked off ──► told ONCE, with tools
  ├─ auto-learn           durable facts → memory + curation
  └─ TurnResult           reply, trace, plan, effort, steps used
Recall happens before the model chooses anything — it does not get to decide whether to look.
Effort

One gear selector, not a vague “try harder”

LowMediumHigh
Tool rounds51224
Parallel calls246
Verbatim history61016
One control sets every budget in the loop, so the cost of a turn is something you choose rather than discover.
Guardrails

The parts that are about honesty

01

An agent cannot see the tools it lacks

So it cannot tell “never granted” from “does not exist”. One asked about posting to a site and invented a settings path. Withheld capabilities are now named out loud, as yours to grant, with the real route.

02

Asking is a panel of switches, not a Confirm

Each switch is its own decision — the only shape that can say “allow two of these three”. The agent asks; it never grants, and the endpoint refuses a key the request never named.

03

It may not answer as though it did what it skipped

A plan was advisory, which meant it could write four steps, do two, and reply in a way that reads identically either way. A turn ending on undone steps is told so — once, with both ways out.

04

A turn belongs to its agent, not the window

You can walk away mid-reply. The answer lands in the conversation it belongs to, and the rail flags it rather than drawing it somewhere you are not.

Delegation

When one agent is not enough

An agent can hand a sub-task to another and get the result back. The guards that make that safe live in a context variable: one copy per call, and the chain is left on every exit path — so a delegated turn cannot quietly inherit a permission it was not given, and a crash cannot strand the chain open.

Want it on your Mac?

Free while it is in beta. Bring your own model — or run a local one and never leave the machine.

Join the waitlist→