feat: add the Control center and its decision registry - #9
Merged
Merged
Conversation
Bots that need the owner's call currently have nowhere to put the question: it goes into a terminal nobody is watching, and the answer — when it comes — lives in one bot's memory file, where the next bot cannot find it and the owner cannot remember giving it. The decision registry makes that exchange durable. A bot raises a decision, the owner rules on it in the Control center, and the ruling is delivered to every bot that needs it and kept as a searchable record. A ruling a bot heard at its own terminal can be filed back with `record_decision`, marked as relayed until the owner confirms the words are theirs. Daemon: the registry's schema, state machine, dedupe and publish step; MCP tools for bots; decision requests and `decision_update` pushes on the control plane; a tag taxonomy with rename, delete and usage counts. Desktop: the Control center view — a waiting list, a reading pane, a composer, a publish tray, a settled registry and a tags panel — plus its sidebar row and badge. `approve` becomes a real capability distinct from `control`: a credential that can run the fleet is not thereby the owner, and a ruling published from one would be indistinguishable from one they typed.
This was referenced Sep 13, 2026
ahilles107
added a commit
that referenced
this pull request
Sep 13, 2026
The decision registry shipped in #9 but the site still sold Gravity on persistence, handoffs and routines alone — nothing said what happens when a bot hits a call it cannot make. The new section makes that the closing argument before the download CTA. The screenshot is the real app against a disposable daemon: five Claude Code sessions across two example projects raised the four decisions themselves, so the waiting list, the via-chain and the deadlines are what the feature actually produces rather than a mock.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
A Control center in the desktop app, backed by a decision registry in the daemon.
raise_decision; the owner rules on it in the Control center; the ruling is delivered to every bot that needs it and kept as a searchable record.record_decision. It is marked as relayed until the owner confirms the words are theirs, and capped per bot so a bot cannot flood the record with rulings nobody has checked.retire_tag … into) and hard-delete, with usage counts and a last-used stamp.approvebecomes a real capability distinct fromcontrol, and devices can be granted it.Protocol and architecture docs are updated to the shipped shape.
Why
A bot that needs the owner's call has nowhere to put the question today: it goes into a terminal nobody is watching, and the answer — when it comes — lives in one bot's memory file, where the next bot cannot find it and the owner cannot remember giving it. The registry makes that exchange durable and legible on both ends.
approveis split out ofcontrolbecause the registry's whole premise is that authority is legible. A credential that can start bots and send messages is not thereby the owner, and a ruling published from one would be indistinguishable from one they typed.How tested
pnpm verifygreen on this branch:cargo fmt/clippy -D warnings/cargo test --workspace --all-targets, the 400-line file check, the notices check, desktop and marketing checks and build, the Tauri crate, and the Ladle visual-regression suite in the pinned Playwright container (72 passed).tests/decisions.rs,tests/decision_tags.rs,tests/decision_records.rs,tests/control_center.rs,tests/control_center_tags.rs,tests/decision_migration.rs— covering raise/publish/dedupe, relay confirmation and its cap, read-only vs control vs approve, cross-project refusals, and tag rename/delete.new-device-form--default, which now lists three capabilities becauseapproveis grantable.Notes
third-party/DESKTOP_NOTICES.txtandinventory.jsonwere regenerated under the pinned toolchain (rustc 1.98.1) for the two new dependencies,react-markdownand@tauri-apps/plugin-notification.mac-notification-sysships no license file in its crate, so its upstreamLICENSE-MIT/LICENSE-Apacheare added as pinned overrides.