5.3 KiB
Agent Browser Testing Guide for C-Relay
This document explains how to use the agent-browser CLI tool to test the c-relay admin web UI from an AI agent context (no physical display required).
Prerequisites
- agent-browser installed globally:
npm install -g agent-browser - Binary location:
/home/user/.nvm/versions/node/v24.14.1/bin/agent-browser - The relay must be running locally (default port 8888)
- Test keys configured in
.test_keys
Starting the Relay for Local Testing
./make_and_restart_relay.sh -t
This reads .test_keys and starts the relay with:
ADMIN_PUBKEY— the hex public key of the admin accountADMIN_PRIVKEY— the hex secret key (used for browser login, not by the relay itself)SERVER_PRIVKEY— the relay's own private key
Key URLs
| URL | Purpose |
|---|---|
http://127.0.0.1:8888/api/index.html |
Admin web UI (the correct entry point) |
http://127.0.0.1:8888/ |
Returns 406 without NIP-11 Accept header — do not use for browser testing |
http://127.0.0.1:8888/ with Accept: application/nostr+json |
NIP-11 relay info JSON |
Important: The root URL / is a WebSocket/NIP-11 endpoint, not an HTML page. Always use /api/index.html for browser testing.
Admin Login Credentials
The admin nsec for the current .test_keys configuration:
nsec: nsec1zkn0hlt4jvcvn9yt5p7ea4m7f82pf3ph0gj3d4rlcz4s64x5z86satv9qm
hex: 15a6fbfd759330c9948ba07d9ed77e49d414c4377a2516d47fc0ab0d54d411f5
npub: npub1tlyzk6slzt8d989f4pn3synk98fea64ea3jmrdc7dtd0kw8uxlas9a9fwr
hex pubkey: 5fc82b6a1f12ced29ca9a86718127629d39eeab9ec65b1b71e6adafb38fc37fb
Complete Login Flow with agent-browser
Step 1: Open the admin UI
agent-browser open http://127.0.0.1:8888/api/index.html
agent-browser wait --load networkidle
Step 2: Take an interactive snapshot to see what is on screen
agent-browser snapshot -i
You will see a login modal with buttons like:
"Browser Extension"— skip this"Local Key"— use this one"Seed Phrase"— skip"Nostr Connect"— skip"Read Only"— skip
Step 3: Click "Local Key"
agent-browser click @e15
(The ref number may vary — use the ref from the snapshot output for the "Local Key" button.)
After clicking, a text input appears asking for the secret key.
Step 4: Enter the admin nsec
agent-browser fill @e14 "nsec1zkn0hlt4jvcvn9yt5p7ea4m7f82pf3ph0gj3d4rlcz4s64x5z86satv9qm"
(Use the ref from the snapshot for the textbox element.)
Step 5: Click "Import Key"
agent-browser snapshot -i
Check the snapshot — the "Import Key" button should now be enabled. Click it:
agent-browser click @e15
Step 6: Click "Continue" on the success screen
After import, a success screen appears with "Continue" button:
agent-browser wait 800
agent-browser snapshot -i
agent-browser click @e19
(Use the ref from the snapshot for the "Continue" button.)
Step 7: Wait for admin UI to load
agent-browser wait 5000
agent-browser snapshot -i
You should now see the admin dashboard with:
- Statistics table (Database Size, Total Events, PID, etc.)
- Navigation buttons (Statistics, Subscriptions, Configuration, Authorization, etc.)
- Admin profile area showing "admin" label
Navigating Admin Sections
After login, use the sidebar navigation buttons:
# View configuration
agent-browser click @e8 # Configuration button ref
# View authorization rules
agent-browser click @e9 # Authorization button ref
# View statistics
agent-browser click @e6 # Statistics button ref
# Always snapshot after navigation to see results
agent-browser wait 2500
agent-browser snapshot -i
Checking for Errors
# View browser console logs
agent-browser console
# View JavaScript errors
agent-browser errors
# View relay server logs
tail -n 100 relay.log
Chained Command Example (Full Login in One Shot)
agent-browser open http://127.0.0.1:8888/api/index.html && \
agent-browser wait --load networkidle && \
agent-browser snapshot -i
Then use refs from the snapshot to complete login steps.
Tips for AI Agents
- Always use
/api/index.html— never the root URL - Use
snapshot -iafter every action to see the current interactive elements and their refs - Refs change between snapshots — always re-snapshot before clicking
- Wait after clicks — use
agent-browser wait 2000(milliseconds) between actions that trigger async operations - The login flow has 3 screens: method selection → key input → success confirmation
- Console logs are cumulative — they show all logs since page load, which is useful for debugging admin API responses
- The relay log at
relay.logshows server-side processing of admin commands - Command chaining with
&&works — the browser daemon persists between commands
Verifying Admin API is Working
After login, the statistics page should show populated data:
- Database Size (e.g., "4 KB")
- Process ID (the relay PID)
- WebSocket Connections count
- Memory Usage
If these show "-" or "Loading...", check:
relay.logfor errorsagent-browser consolefor JavaScript errorsagent-browser errorsfor page-level errors
Closing the Browser
agent-browser close --all