Prompt smarter. Build better.
checking… database connecting

Operator sign-in

DUEX coordinates independent AI workers with policy, budgets and human approval gates. The console is restricted to allowlisted operators.

Sign in with GitHub
DUEX requests read:user only. It never stores your GitHub token and never requests repository access at sign-in.
Active runners
—
Sessions
—
Tasks
—
In flight
—
Attested spend
—

Decisions

loading…
A decision is never edited into a new meaning — it is superseded, and both stay readable. Recording the alternatives is what makes it reviewable later; a decision without them is an assertion.

Scope

loading…
loading…
Agents are shown what is approved now and what is explicitly excluded, with the reason. Work linked to anything other than approved now is refused at dispatch. DUEX cannot judge semantically whether an objective strays — so an agent that thinks its work conflicts raises a concern here for a human, rather than deciding alone.

Memory

loading…
loading…
Every agent receives active memory before it starts, grouped by kind. One live statement per subject — a correction supersedes the old one rather than sitting beside it, and both stay readable. Memory is never enforced: an agent whose work appears to contradict a remembered statement raises a conflict here instead of refusing, because a stale note should not be able to stop work.

Graph view

loading…
Select a node to see what it is about.
A node never stores its own status. One that is about a task, a decision or a scope item shows that thing’s current state, read fresh every time the canvas loads — so the graph cannot quietly fall out of step with the work the way a diagram does. A node is not a task and does not map one-to-one onto one. Dependency cycles are refused when you draw them: a loop means nothing in it could ever start. Drag a node to place it; the position is saved.

Repositories

loading…
The runner clones this, so it must be reachable from the runner's machine — an SSH remote with a deploy key, or a local path like /opt/myapp. Never include a username and password in the URL; DUEX refuses to store git credentials.

Launch

A profile is only offered when a registered runner can attest the isolation it requires. Your runner attests process isolation — an unprivileged user under systemd confinement — so builder is the only profile available today. Verified needs a runner attesting container isolation; regulated needs VM isolation and an egress allowlist. Selecting one DUEX cannot honour would be refused at dispatch, so it is not offered.
Required for playbooks that write code. The reviewer judges each one individually and reports met, not met, or unverifiable. A criterion written after the work is done is a description, not a test — which is why they are set here, first.

Tasks

loading…

Playbooks

loading…

Proof chain

loading…
A packet is sealed the moment a human decides a task — approved, or cancelled because the rounds ran out. It carries which models ran, what the reviewer objected to, what the builder answered, which objections survived the approval, how each acceptance criterion was judged, what the diff hashed to, and who decided what and why. Each packet is hashed and chained to the one before it, so altering a sealed packet breaks every packet sealed after it.

Activity

loading…
Read-only, from the append-only event tables. Click a task name to replay it — replay explains what happened and re-executes nothing. Credentials and tokens are redacted before leaving the server.

Plan

loading…

Runners

loading…

Team access

loading…
Only allowlisted GitHub accounts can sign in. Removing someone revokes their live sessions immediately.