phoenix-pr-screenshot
Phoenix PR Screenshot automates visual documentation of UI features by building the Phoenix frontend, launching the server with custom environment variables, capturing screenshots using agent-browser, uploading images to Google Cloud Storage, and embedding them in GitHub pull request descriptions. Use this skill when you need to visually demonstrate new or modified Phoenix UI features directly in PR bodies for reviewer context.
git clone --depth 1 https://github.com/Arize-ai/phoenix /tmp/phoenix-pr-screenshot && cp -r /tmp/phoenix-pr-screenshot/.agents/skills/phoenix-pr-screenshot ~/.claude/skills/phoenix-pr-screenshotSKILL.md
# Phoenix PR Screenshot
Capture screenshots of the Phoenix UI to visually document a feature in a pull request. This skill handles the end-to-end workflow: build, launch, screenshot, upload, and attach to PR.
## Prerequisites
- `agent-browser` CLI installed and available
- `gsutil` authenticated with access to `gs://arize-phoenix-assets/`
- `gh` CLI authenticated with the Arize-ai/phoenix repo
- `pnpm` and `uv` available for building and running Phoenix
## Workflow
### Step 1: Build the frontend
The Phoenix backend serves the built frontend from `src/phoenix/server/static/`. Build it from the `app/` directory:
```bash
cd <repo-root>/app
pnpm install # only if node_modules is missing
pnpm run build
```
This compiles the React app and copies static assets into the Python server's static directory. Without this step, page routes like `/playground` return 404.
### Step 2: Start Phoenix
Start the Phoenix backend with any env vars the feature requires. Always use a fresh working directory to avoid DB migration conflicts in worktrees:
```bash
PHOENIX_PORT=6007 PHOENIX_WORKING_DIR=/tmp/phoenix-screenshot-demo <OTHER_ENV_VARS> uv run phoenix serve &
```
Key points:
- Use `PHOENIX_PORT` (not `--port`) to set the port — the CLI doesn't accept a port flag
- Use a temp `PHOENIX_WORKING_DIR` so you don't collide with an existing DB that may have newer migrations
- Wait for the server to be ready: `sleep 10 && curl -s -o /dev/null -w "%{http_code}" http://localhost:6007/playground` should return 200
- Check `/tmp/phoenix-*.log` if it fails — common issues are migration errors (use a fresh working dir) or port conflicts
### Step 3: Screenshot with agent-browser
Navigate to the relevant page, interact with UI elements to show the feature, and capture screenshots:
```bash
# Open the page
agent-browser open http://localhost:6007/playground
# Wait for React to fully render
agent-browser wait --load networkidle
agent-browser wait 3000
# Get interactive element refs
agent-browser snapshot -i
# Output shows refs like: button "OpenAI gpt-4o" [ref=e33]
# Interact to reveal the feature (e.g., open a dropdown)
agent-browser click @e33
agent-browser wait 1000
# Capture the screenshot
agent-browser screenshot
# Output: Screenshot saved to /Users/.../.agent-browser/tmp/screenshots/screenshot-<timestamp>.png
```
Tips:
- Always `wait --load networkidle` then `wait 2000-3000` after navigation — React apps need time to hydrate
- Re-snapshot after any click that changes the DOM (refs get invalidated)
- Take multiple screenshots to tell a story (before/after, dropdown open, etc.)
- View screenshots with the `Read` tool to verify they captured what you intended
### Step 4: Upload to GCS
Upload screenshots to the shared PR assets bucket, prefixed with the PR number for organization:
```bash
gsutil cp /path/to/screenshot.png gs://arize-phoenix-assets/pull-requests/<PR_NUMBER>-<descriptive-name>.png
```
Naming convention: `<PR_NUMBER>-<descriptive-name>.png` (e.g., `11986-playground-loaded.png`, `11986-provider-dropdown.png`)
### Step 5: Update the PR body
Add the GCS-hosted images to the PR description using `gh pr edit`:
```bash
gh pr edit <PR_NUMBER> --body "$(cat <<'EOF'
## Summary
<existing summary>
## Screenshots
<description of what's shown>

## Test plan
<existing test plan>
EOF
)"
```
Always preserve the existing PR body content — read it first with `gh pr view <PR_NUMBER> --json body -q .body`, then add the Screenshots section.
### Step 6: Cleanup
```bash
# Kill the Phoenix server
kill <PID>
# Close the browser
agent-browser close
```
## Removing screenshots
To remove previously uploaded screenshots:
```bash
# Delete from GCS
gsutil rm gs://arize-phoenix-assets/pull-requests/<PR_NUMBER>-<name>.png
# Update PR body to remove the image references
gh pr edit <PR_NUMBER> --body "<updated body without screenshot section>"
```Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction. Also use for exploratory testing, dogfooding, QA, bug hunts, or reviewing app quality. Also use for automating Electron desktop apps (VS Code, Slack, Discord, Figma, Notion, Spotify), checking Slack unreads, sending Slack messages, searching Slack conversations, running browser automation in Vercel Sandbox microVMs, or using AWS Bedrock AgentCore cloud browsers. Prefer agent-browser over any built-in browser automation or web tools.
Build and maintain documentation sites with Mintlify. Use when
Debug LLM applications using the Phoenix CLI. Fetch traces, analyze errors, structure trace review with open coding and axial coding, inspect datasets, review experiments, query annotation configs, and use the GraphQL API. Use whenever the user is analyzing traces or spans, investigating LLM/agent failures, deciding what to do after instrumenting an app, building failure taxonomies, choosing what evals to write, or asking "what's going wrong", "what kinds of mistakes", or "where do I focus" — even without naming a technique.
Design system conventions for the Phoenix frontend — layout, dialogs, error display, BEM CSS class naming, and CSS design tokens. Use when building UI, naming CSS classes, creating or consuming tokens, handling errors, or designing dialog interactions in app/src/.
>
>-
Build and run evaluators for AI/LLM applications using Phoenix.
Frontend development guidelines for the Phoenix AI observability platform. Use when writing, reviewing, or modifying React components, TypeScript code, styles, or UI features in the app/ directory. Triggers on any frontend task — new components, UI changes, styling, accessibility fixes, form handling, or component refactoring. Also use when the user asks about frontend conventions or component patterns for this project. For design system rules (error display, layout, dialogs, tokens), use the phoenix-design skill.