Skip to content

rowbit status and the review page's Setup view - #52

Merged
Ermag merged 16 commits into
mainfrom
ux/status
Nov 7, 2026
Merged

Ermag merged 16 commits into
mainfrom
ux/status

Conversation

@Ermag

@Ermag Ermag commented Nov 7, 2026 •

Copy link
Copy Markdown
Owner

Stacked on #51 (which is on #49): it uses #49's per-connection tokens as the record of where each agent is connected. Retarget to main once those merge.

Before: Nothing told you which database Rowbit is guarding. The review page only listed changes, and the CLI had no overview. To find out which setups exist, what each one points at and which projects are connected, you had to read files in ~/.rowbit.

After:

  • rowbit status: lists every setup on the machine (those in ~/.rowbit and the demo), or with --dir just that one. For each it shows:
    • the database: name, host, port, user and TLS, never the password;
    • the review page address, whether it's running, and how many changes are held;
    • each agent's rules in brief;
    • where each agent is connected ("Claude Code in ~/projects/app", last used …).
      It reads files only, so it works when the database is down.
    demo  ~/rowbit-demo
          database: shop on 127.0.0.1:33070 as rowbit, no TLS
          review page: http://127.0.0.1:8080/, running, nothing held
          agent coding-agent: 2 rules, else holds
            Claude Code in ~/projects/app (last used 2026-11-07T14:02:11Z)
    
  • Review page: the header says "Guarding shop on 127.0.0.1:33070 as rowbit" and links to a new Setup view. That view shows the database, Rowbit's folder, the review page and MCP addresses, sign-in, notification targets, the number held and the version. It also lists each agent with its rules and connections, including when each was made and last used. It is served by /api/setup, behind sign-in. No passwords are shown.
  • Engine: a new rowbit_engine::overview builds the database summary (from the URL, without its password) and the agent summaries. The CLI and the web share it.
  • Smaller fix: inside the demo's folder, commands now read the database URL from the demo's marker, so rowbit serve there no longer needs ROWBIT_DATABASE_URL exported.
  • Docs: a spec section "What Rowbit is connected to", plus a quickstart note pointing to rowbit status, the Setup view and connecting more projects.

How:

  • Unit tests check that the database summary carries no password and that agent summaries list rules and connections.
  • The web test checks that /api/setup needs sign-in and lists the agents.
  • The CLI integration test checks that rowbit status shows the database without the password, the review page state and the connection label.
  • Checked by hand: ran rowbit serve on a copy of a v0.2.2 demo, signed in, and looked at the header and the Setup view.

Review fixes (v0.2.3 review):

  • Read-only status: rowbit status opens each rowbit.db read-only (new Store::open_read_only). A state file it can't read is reported as an error, never as "not connected". It says "a Rowbit answers there" only when the Rowbit sign-in page answers at that address. (Store changes and a hash-chained audit log in SQLite #7)

  • What reviewers see: the spec (setup.md and server.md) now says everyone who can review sees the Setup view, and lists what that includes. I kept the content, since a reviewer should know which database a change writes to. (Take a proposed change from statement to policy decision #8)

  • Connection ids: status and the Setup view show each connection's id and the command that signs it out. The view now keys rows by id, which fixes the duplicate-label nit.

  • Tests cover the new behaviour

  • docs/spec/ is updated if this changes the change lifecycle or rowbit.yml

Ermag added 3 commits November 7, 2026 15:47
Without --dir and with no Rowbit files in the current folder, commands
now look at every setup in ~/.rowbit and the demo (linked as
~/.rowbit/demo), use the only one and say which, list them when there
are several, and say to run rowbit setup when there are none. So
`cd my-app && rowbit connect claude-code` works.

Each client entry gets a token of its own, labelled with the client and
project, so connecting a second project no longer signs out the first;
rowbit agents lists them.

Signed-off-by: Ermag <ermag.bg@gmail.com>
Review page addresses and docs links are OSC 8 links in terminals known
to show them (Ghostty, iTerm2, WezTerm, kitty, VS Code, ...), plain
elsewhere; ROWBIT_HYPERLINKS overrides. rowbit demo opens the review
page in the browser once it answers (--no-open skips). The MCP
instructions and the skill ask agents to give the review link as a
Markdown link.

Signed-off-by: Ermag <ermag.bg@gmail.com>
rowbit status lists every setup on the machine: the database each guards
(never the password), whether its review page is up and how many changes
are held, each agent's rules in brief and where it is connected. The
review page says which database it guards in its header and gets a
Setup view with the same for its own setup, from /api/setup.

Signed-off-by: Ermag <ermag.bg@gmail.com>
@Ermag Ermag added the feature New behaviour; release notes: New label Nov 7, 2026
Ermag added 12 commits November 7, 2026 15:59
…ew is written

- rowbit agents lists each token with an id; rowbit agents revoke
  <agent> --connection <id> signs out one, --single only the token from
  before 0.2.3.
- A reconnect's old token is revoked only once the client entry holding
  the new one is written, so a failed connect leaves the old entry working.
- Printed tokens are labelled with their time, so they don't replace
  one another.
- --new-token revokes the single token from before 0.2.3; without it,
  connect says the agent still has one.
- Marking a token used can't bring back a revoked connection's row.
- needs_files finds connect's arguments wherever it sits; "here"
  compares canonical paths; a setup named demo isn't called the demo.

Signed-off-by: Ermag <ermag.bg@gmail.com>
- Agents give the review link with the URL as its text, so people see
  where it goes.
- rowbit demo opens the browser once its own server has bound, never
  another left on the port; not over SSH or on Linux without a display.
- Control characters are removed from OSC 8 links.

Signed-off-by: Ermag <ermag.bg@gmail.com>
Signed-off-by: Ermag <ermag.bg@gmail.com>

# Conflicts:
#	crates/rowbit-cli/src/main.rs
#	crates/rowbit-cli/tests/connect.rs
#	crates/rowbit-cli/tests/serve.rs
- rowbit status opens each rowbit.db read-only and reports one it can't
  read instead of showing nobody connected; it says a Rowbit answers at
  the address only when its sign-in page does.
- Connections show their id in status and the Setup view, with the
  command that signs one out; the view keys rows by id.
- The spec says what every reviewer sees in the Setup view.

Signed-off-by: Ermag <ermag.bg@gmail.com>
Signed-off-by: Ermag <ermag.bg@gmail.com>
Signed-off-by: Ermag <ermag.bg@gmail.com>
@Ermag
Ermag changed the base branch from ux/links to main November 7, 2026 21:26
@Ermag
Ermag merged commit bfabc37 into main Nov 7, 2026
14 checks passed
@Ermag
Ermag deleted the ux/status branch November 7, 2026 21:37
@Ermag Ermag mentioned this pull request Nov 7, 2026
2 tasks done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature New behaviour; release notes: New

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant