Skip to content

feat(web): real Tools, Rooms, and Permissions panels on agent detail - #104

Merged
jusso-dev merged 1 commit into
mainfrom
feat/agent-profile-panels
Jul 30, 2026
Merged

feat(web): real Tools, Rooms, and Permissions panels on agent detail#104
jusso-dev merged 1 commit into
mainfrom
feat/agent-profile-panels

Conversation

@jusso-dev

Copy link
Copy Markdown
Owner

Task 17. Follows #101, which removed these tabs because they silently rendered Overview and the underlying data was never exposed. This adds the API layer and brings them back backed entirely by stored state.

New API

GET /api/v1/agents/[id]/profile — requires agents.read, organisation-scoped on every read.

Tools

The declared envelope joined with what the agent has actually called, aggregated from agent_tool_calls through that agent's own runs. Registry metadata from agentToolRegistry marks each tool read-only or mutating and names its approval action.

Two disagreements are surfaced rather than hidden, because both matter:

  • A tool called but no longer declared still appears. A call outside the envelope is exactly what an operator needs to see.
  • A declared tool the runtime registry does not implement is flagged unregistered.

Rooms

Allow-listed rooms and real membership rows, plus Slack exposure per installation. Where the allow-list and actual membership disagree, the panel says so rather than quietly reconciling them.

Permissions

Declared requirements against actual grants:

  • missing — required but not held. This is the governance-critical one: a run touching such a capability fails with a capability error, and nothing else in the product surfaced it. Rendered as an alert, not a list item.
  • surplus — held beyond the declaration, for least-privilege review.
  • unknown — declared requirements that are not capabilities this build knows about. This is the same class of drift that hid agents.handoff and brolga.context.read earlier in this series.

Execution ceilings (runtime, tokens, cost) are shown alongside, since they are the other half of what bounds a run.

Read-only by construction

Grants and allow-lists stay server-controlled. A test asserts the panel file contains no apiPost and no useMutation, so a future edit cannot quietly turn a governance view into a grant surface.

Still unbuilt

Instructions, Runs, Evaluations, Versions, and Audit remain absent rather than falling through to Overview. Runs and Audit are the most tractable next — both have APIs already.

🤖 Generated with Claude Code

Those tabs were removed in #101 because they silently rendered Overview
and the data was not exposed. This adds the API layer and brings them
back backed entirely by stored state.

New GET /api/v1/agents/[id]/profile (agents.read) returns:

- Tools: the declared envelope joined with what the agent has actually
  called, from agent_tool_calls through its own runs. Registry metadata
  marks each tool read-only or mutating and names its approval action.
  Tools called but no longer declared are surfaced rather than hidden —
  a call outside the envelope is exactly what an operator needs to see,
  as is a declared tool the runtime registry does not implement.
- Rooms: allow-listed rooms and real memberships, with Slack exposure
  per installation. The two disagreeing is shown, not reconciled.
- Permissions: declared requirements against actual grants. 'missing'
  is the governance-critical one — an agent required to hold a
  capability it does not have fails at run time, and nothing else in
  the product surfaced that. 'surplus' supports least-privilege review;
  'unknown' catches requirements that are not capabilities at all.

The panels are strictly read-only. Grants and allow-lists stay
server-controlled, and a test asserts the UI has no mutation path.

Instructions, Runs, Evaluations, Versions, and Audit remain unbuilt and
stay absent rather than falling through to Overview.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@jusso-dev, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 22 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 3a5f4e93-b6ad-4d18-8764-a0663b8d5f0a

📥 Commits

Reviewing files that changed from the base of the PR and between 2d38633 and 4bb4841.

📒 Files selected for processing (5)
  • apps/web/app/api/v1/agents/[id]/profile/route.ts
  • apps/web/components/agent-profile-panels.tsx
  • apps/web/components/agent-surfaces.test.ts
  • apps/web/components/agents-view.tsx
  • apps/web/lib/agent-profile-domain.ts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@jusso-dev
jusso-dev merged commit 3b96c9a into main Jul 30, 2026
8 checks passed
@jusso-dev
jusso-dev deleted the feat/agent-profile-panels branch July 30, 2026 06:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant