원클릭으로
pf-ux-tandem
Live UX review tandem — spawn a UX designer to watch a tmux pane and suggest improvements in real time
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Live UX review tandem — spawn a UX designer to watch a tmux pane and suggest improvements in real time
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Interactive playtest — full-stack (UI + Playwright + UX Designer) or headless (API-only + Python driver). Coordinates cross-workspace bug reporting via ping-pong file with FIXER.
LLM cost and cache forensics — reconcile server-log narrator costs against the Anthropic Admin API, attribute per-model spend, detect dead caching and invisible callers. Use when analyzing API costs, auditing cache efficiency, or when the Console bill doesn't match expectations.
Create epic or story context documents. Reads sprint YAML for epic/story data, reads context-schema.yaml for required sections, populates templates, and writes output to sprint/context/. Epic context is a single-agent operation (no tandem). Story context uses PM + tandem partner for domain-specific observations.
Jira CLI commands for sprint management. Use when viewing, assigning, or updating Jira issues from the command line.
Sprint status, backlog, and story management for Pennyfarthing. Use when checking current sprint status, finding available stories, reviewing backlog, or understanding story context and history. IMPORTANT: Always use `pf sprint` CLI commands - never manually edit sprint YAML.
List available workflows, show current workflow details, and switch workflows mid-session. Use when checking available workflow types (TDD, trivial, agent-docs), viewing current workflow phase, switching to a different workflow pattern, or managing BikeLane stepped workflows.
| name | pf-ux-tandem |
| description | Live UX review tandem — spawn a UX designer to watch a tmux pane and suggest improvements in real time |
This is NOT the standard tandem-backseat protocol (observation files + PostToolUse injection). This uses native Agent Teams with SendMessage for real-time two-way collaboration, and tmux capture-pane for visual observation.
Find the tmux pane to observe:
tmux list-panes -a -F '#{session_name}:#{window_index}.#{pane_index} #{pane_title} #{pane_current_command} [#{pane_width}x#{pane_height}]'
Pick the pane running the target UI (e.g., a TUI, dev server output, or running application). Note the pane address in {session}:{window}.{pane} format.
If the user specified a pane, use that. If not, choose the pane that most likely contains the UI under review.
Read the active theme to get the UX designer character:
THEME=$(yq '.theme' .pennyfarthing/config.local.yaml 2>/dev/null || echo "discworld")
Then read the theme file to find the UX designer character name.
TeamCreate:
team_name: "ux-tandem"
description: "Live UX review — observer watches tmux pane and suggests improvements"
Create two tasks:
Use the Task tool to spawn the observer teammate:
Task:
subagent_type: "general-purpose"
model: "sonnet"
team_name: "ux-tandem"
name: "ux-observer"
prompt: |
You are a UX designer reviewing a live terminal UI. Your role is to watch a tmux pane
and send usability suggestions to the lead agent.
CHARACTER: {resolved character name from theme}
TARGET_PANE: {session}:{window}.{pane}
## Your Workflow
**Loop** (repeat until told to stop):
1. **Capture** the current pane state:
```bash
tmux capture-pane -t '{TARGET_PANE}' -p
```
2. **Analyze** what you see. Focus on:
- Layout and visual hierarchy — is the information easy to scan?
- Alignment and spacing — are elements consistently aligned?
- Color usage and contrast — is text readable? Are colors meaningful?
- Information density — too cluttered or too sparse?
- Labels and terminology — clear and consistent?
- Navigation cues — can the user tell where they are and what they can do?
- Error states — are errors visible and actionable?
- Empty states — what shows when there's no data?
3. **Send suggestions** via SendMessage to the lead:
- One suggestion per message
- Be specific: reference exact text, positions, or elements you see
- Categorize as [LAYOUT], [COLOR], [COPY], [INTERACTION], or [ACCESSIBILITY]
- Include a concrete fix, not just the problem
- Priority: focus on high-impact issues first
4. **Wait** for the lead to confirm implementation or ask questions, then re-capture
to verify the change and continue.
## Communication Protocol
- Use `SendMessage` with `type: "message"` to send suggestions
- Keep messages concise — one issue per message
- If you see no issues, say so and wait before re-capturing
- If the lead sends you a message, respond via SendMessage
- When told to wrap up, acknowledge and stop
## Example Message
```
[LAYOUT] The status indicators in the top-right are misaligned — "Sprint: 4"
sits 2 chars higher than "Stories: 12/15". Suggestion: pad the Sprint label
with a leading space or align both to the same row baseline.
```
Stay in character as {CHARACTER}. Begin by capturing the pane and sending
your first observation.
As the lead agent, receive suggestions via automatic message delivery. For each suggestion:
SendMessage)When the review session is complete:
Send a shutdown request to the observer:
SendMessage:
type: "shutdown_request"
recipient: "ux-observer"
content: "UX review complete, shutting down"
After the observer confirms, delete the team:
TeamDelete
/pf-code-reviewThe observer doesn't have to be a UX designer. Swap the role and analysis criteria:
| Observer Role | Focus Areas |
|---|---|
| UX Designer (default) | Layout, color, copy, interaction, accessibility |
| Architect | Component structure, separation of concerns, data flow visible in UI |
| TEA | Error states, edge cases, missing validation feedback |
| PM | Feature completeness, user story coverage, workflow gaps |
To use a different observer, modify the spawn prompt's analysis criteria and character resolution to match the desired role.
The tmux capture-pane command can be replaced with other observation methods:
| Target | Capture Method |
|---|---|
| tmux pane (default) | tmux capture-pane -t '{pane}' -p |
| Browser | Screenshot via Playwright MCP / browser_take_screenshot |
| Log file | tail -n 50 /path/to/logfile |
| API response | curl -s http://localhost:3000/api/status |
| Aspect | Tandem-Backseat | UX Tandem (this skill) |
|---|---|---|
| Communication | One-way (observation file + hook injection) | Two-way (SendMessage) |
| Infrastructure | PostToolUse hook, observation files | Agent Teams (TeamCreate/SendMessage) |
| Model | Haiku (background) | Sonnet (teammate) |
| Observation | git diff, file reads | tmux capture-pane (visual) |
| Lifecycle | Background task, auto-injected | Interactive team, manual confirm/reject |
| Use case | Code-level observation during workflow | Visual/UX review of running UI |