Skip to main content

Live Dashboard

Rampart provides two ways to monitor agent activity in real time:
  1. TUI (Terminal UI) โ€” Colored event stream in your terminal
  2. Web Dashboard โ€” Browser-based UI with filtering, approval buttons, and command testing

Terminal UI (TUI)

Watch live events as they happen:
rampart watch
Output:
โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
โ•‘  RAMPART โ€” enforce โ€” 3 policies                             โ•‘
โ• โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฃ
โ•‘  โœ… 21:03:42 exec  "git push origin main"     [allow-git]   โ•‘
โ•‘  โœ… 21:03:41 read  ~/project/src/main.go      [default]     โ•‘
โ•‘  ๐Ÿ”ด 21:03:38 exec  "rm -rf /tmp/*"            [protect-sys] โ•‘
โ•‘  โœ… 21:03:35 exec  "npm test"                 [allow-dev]   โ•‘
โ•‘  ๐ŸŸก 21:03:33 exec  "curl https://api.io"      [log-http]    โ•‘
โ• โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฃ
โ•‘  1,247 total โ”‚ 1,201 allow โ”‚ 12 deny โ”‚ 34 watch             โ•‘
โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•

Event Indicators

IconDecisionColorMeaning
โœ…allowgreenCommand allowed and executed
๐Ÿ”ดdenyredCommand blocked by policy
๐ŸŸกwatchyellowCommand logged but allowed
๐Ÿ‘คaskblueApproval required

TUI Features

  • Live streaming: New events appear instantly
  • Auto-scroll: Latest events always visible
  • Color coding: Quickly identify denies and approvals
  • Summary stats: Total events, breakdown by decision
  • Lightweight: Runs in any terminal, minimal resource usage

Keyboard Controls

KeyAction
qQuit
SpacePause/Resume auto-scroll
โ†‘/โ†“Scroll through history
rRefresh

Web Dashboard

When rampart serve is running, access the web dashboard at:
http://localhost:9090/dashboard/

Dashboard Tabs

1. Active โ€” Live Event Stream

Real-time view of tool calls as they happen:
  • Live updates: Events appear instantly without page refresh
  • Filtering: Filter by tool, decision, agent, session
  • Approve/Deny: Click buttons to resolve pending approvals
  • Copy commands: Click to copy command text for inspection

2. History โ€” Past Events

Browse and search historical audit logs:
  • Time range: Select date range with calendar picker
  • Tool filter: Show only exec, read, write, fetch, or mcp
  • Decision filter: Filter by allow, deny, watch, ask
  • Session filter: Show events from specific git repos/branches
  • Export: Download filtered results as JSON or CSV

3. Policy โ€” Loaded Rules

View and test your active policy:
  • Rule list: See all loaded policies and their priorities
  • Try a command: REPL-style command tester
    • Type a command: rm -rf /tmp/build
    • See the decision: deny (matched: block-destructive)
    • No execution โ€” pure dry-run evaluation
  • Policy reload: Manually reload after editing policy files

Dark and Light Themes

The dashboard automatically matches your system theme. Toggle manually:
  • Dark mode: Click moon icon
  • Light mode: Click sun icon

Starting the Dashboard

1
Start as Background Service
2
rampart serve install
3
Installs to systemd (Linux) or launchd (macOS). Starts automatically on boot.
4
Start in Foreground
5
rampart serve
6
Runs in the foreground. Press Ctrl+C to stop.
7
Start in Background (No Service Manager)
8
rampart serve --background
9
Runs in the background without systemd/launchd. Stop with:
10
rampart serve stop
11
Custom Port
12
rampart serve --port 8080
13
Dashboard available at http://localhost:8080/dashboard/.

Approval Workflow in Dashboard

When an action: ask rule triggers:
  1. Event appears in Active tab with status pending
  2. Approve or Deny buttons are enabled
  3. Click Approve: Command executes immediately
  4. Click Deny: Command is blocked, error returned to agent
  5. Event updates to show resolution time and user

Example: Pending Approval

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ ๐ŸŸฆ 14:23:10  exec  "kubectl apply -f prod.yaml"           โ”‚
โ”‚ Policy: production-deploys                                โ”‚
โ”‚ Message: Production deployment requires approval          โ”‚
โ”‚ Agent: claude-code  Session: myapp/main                   โ”‚
โ”‚                                                            โ”‚
โ”‚ [Approve] [Deny]                                          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Example: Resolved Approval

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ โœ… 14:23:10  exec  "kubectl apply -f prod.yaml"           โ”‚
โ”‚ Policy: production-deploys                                โ”‚
โ”‚ Resolved: approved by user@localhost at 14:23:15          โ”‚
โ”‚ Agent: claude-code  Session: myapp/main                   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Command Testing REPL

Test commands against your policy before they run:
โ”Œโ”€ Try a command โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                                                            โ”‚
โ”‚ > rm -rf /tmp/build                                       โ”‚
โ”‚                                                            โ”‚
โ”‚ Decision: allow                                           โ”‚
โ”‚ Matched: (default)                                        โ”‚
โ”‚ Message: Allowed by default_action                        โ”‚
โ”‚ Eval time: 4ยตs                                            โ”‚
โ”‚                                                            โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                            โ”‚
โ”‚ > rm -rf /                                                โ”‚
โ”‚                                                            โ”‚
โ”‚ Decision: deny                                            โ”‚
โ”‚ Matched: block-destructive                                โ”‚
โ”‚ Message: Destructive command blocked                      โ”‚
โ”‚ Eval time: 8ยตs                                            โ”‚
โ”‚                                                            โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
No commands are executed โ€” pure policy evaluation.

Filtering Events

By Tool

Show only exec commands:
Tool: [All] [exec] [read] [write] [fetch] [mcp]
      ^^^^^

By Decision

Show only denies:
Decision: [All] [allow] [deny] [watch] [ask]
                        ^^^^^^

By Session

Show events from a specific repo/branch:
Session: [All] [myapp/main] [myapp/dev] [otherproject/staging]
               ^^^^^^^^^^^^

Exporting Dashboard Data

Export filtered events:
  1. Apply filters (tool, decision, time range)
  2. Click Export
  3. Choose format: JSON or CSV
  4. File downloads with filtered events
Example CSV:
timestamp,id,tool,agent,session,action,command,message,policies
2026-03-03T14:23:05Z,evt_def456,exec,claude-code,myapp/main,deny,"rm -rf /tmp/*",Destructive command blocked,block-destructive

Real-Time Updates

The dashboard uses Server-Sent Events (SSE) for live updates:
  • No polling: Events pushed from server instantly
  • Low latency: Sub-100ms from policy decision to dashboard
  • Auto-reconnect: Dashboard reconnects if connection drops

Authentication

By default, the dashboard runs on localhost with no authentication. For remote access, use authentication:
rampart serve --auth-token $(rampart token)
The dashboard requires the bearer token in the Authorization header.

Accessing from Remote Host

Use SSH port forwarding:
ssh -L 9090:localhost:9090 your-server
Then open http://localhost:9090/dashboard/ on your local machine.

Performance

  • Event latency: < 50ms from decision to dashboard
  • Max throughput: 1,000+ events/sec
  • Resource usage: < 10 MB RAM, < 1% CPU
  • Browser support: Chrome, Firefox, Safari, Edge (evergreen)

Mobile Support

The dashboard is responsive and works on mobile browsers:
  • Portrait mode: Single-column layout
  • Landscape mode: Desktop-like layout
  • Touch support: Swipe to scroll, tap to approve/deny

Accessibility

  • Keyboard navigation: Tab through interactive elements
  • Screen reader support: Semantic HTML, ARIA labels
  • High contrast: Meets WCAG AA standards

Dashboard API

The dashboard consumes the same HTTP API available to all clients:
EndpointMethodPurpose
/v1/events/streamGETSSE stream of live events
/v1/approvalsGETList pending approvals
/v1/approvals/{id}/resolvePOSTApprove or deny
/v1/preflight/execPOSTDry-run command test
/v1/policy/reloadPOSTReload policy files
See the HTTP API reference for full details.

Troubleshooting

Dashboard Not Loading

Check that rampart serve is running:
rampart status
Expected output:
Service: running
Port: 9090
Policies: 3 loaded
Audit: /home/user/.rampart/audit/

Events Not Appearing

Verify agent integration:
rampart doctor
Check that hooks are installed and the agent can reach the service.

Slow Updates

Check network latency:
curl -s http://localhost:9090/healthz
Should return {"status":"ok"} in < 10ms.

See Also

Build docs developers (and LLMs) love