id: ops-dashboard
title: A human can see what their agents are doing and stop them
status: blocked
crates: [didbot-serve]
dependsOn: [scope-policy, app-allowlist, write-policy, e-stop]
exitCriterion: >
An owner signs in with their own atproto account and can see, for one agent,
every scope it was refused and which rule refused it. #
Served by this server, about this server. It shows live state — agents, grants,
refusals — and carries the emergency stop. It owns no policy: everything it can
change is operational, and everything it reports about itself is only as
trustworthy as the host it runs on.
Sign-in is atproto OAuth against the owner's own server, requesting the
atproto scope and nothing else. The owner loads the page here and stays on it;
the approval happens in a popup, somewhere we do not run.