Skip to content

warpdotdev/power-fixer

Repository files navigation

Power Fixer

A keyboard-driven TUI (Terminal User Interface) for high-velocity GitHub issue triage, powered by Warp's Cloud Agents.

🎨 Vibe coded by @zachlloyd

Quick Start

Quick setup guide: warpdotdev/power-fixer-setup

Prerequisites

  • Rust - Install via rustup
  • GitHub CLI - brew install gh then gh auth login
  • gcloud CLI - brew install google-cloud-sdk then gcloud auth login (for IAP-protected Cloud Run)
  • PowerFixer Server - Running locally or remotely and reachable from this client (production setup assumes Google Cloud / Cloud Run)

Install & Run

# Install the binary
cargo install --git https://github.com/warpdotdev/power-fixer.git

# Run it
power-fixer

By default, the client uses POWERFIXER_SERVER_URL (or http://localhost:3001 if unset). For GCP deployments, set POWERFIXER_SERVER_URL to your Cloud Run URL.

Updating

PowerFixer will notify you on the home screen when a new version is available. To update:

cargo install --git https://github.com/warpdotdev/power-fixer.git --force

Command Line Options

power-fixer              # Connect to POWERFIXER_SERVER_URL (or localhost default)
power-fixer --local      # Connect to localhost:3001 (for local dev)
power-fixer --help       # Show all options

Local Development Setup

If you want to run the server locally or contribute to PowerFixer:

Additional Prerequisites

  • PowerFixer Server - Run power-fixer-server locally or point to a deployed instance
  • (Optional) oz CLI - For local agent execution mode (POWERFIXER_LOCAL_AGENT_BIN, default: oz)

Build & Run from Source

# Clone and build
git clone https://github.com/warpdotdev/power-fixer.git
cd power-fixer

# Run with the helper script
./script/run --local

# Or build and run directly
cargo build --release
./target/release/power-fixer --local

Basic Usage

  1. The app loads untriaged issues from POWERFIXER_DEFAULT_REPO (default: owner/repo)
  2. Use ↑/↓ to select an action, Enter to execute
  3. Press / to open the command menu for global actions:
    • Filter - Change issue filter (untriaged, waiting-user, etc.)
    • Agents - View agent-assigned issues dashboard
    • Power Triage - Launch batch AI triage on multiple issues
  4. Press t to translate non-English issues
  5. Press q to quit

Key Actions

Key Action
/ Open command menu
t Translate current issue
j/k Scroll issue details
Enter Execute selected action
q Quit

Overview

Power Fixer is built for engineers who need to rapidly triage, investigate, and resolve large volumes of GitHub issues. It combines a fast terminal interface with AI-powered automation to help you:

  • Triage at scale: Process issues quickly with keyboard shortcuts and streamlined workflows
  • Automate fixes: Launch Oz Cloud Agents to investigate and fix issues automatically
  • Collaborate: Post to Slack channels and @mention team members directly from the TUI
  • Deduplicate: Use AI to identify and close duplicate issues
  • Track state: Label-based workflow keeps issues organized across triage states

Features

Issue Management

  • Filter views: Switch between Untriaged, Triaged, Waiting for User, Waiting for Warper, Agent Assigned, and Closed issues
  • Smart sorting: Issues sorted by last updated time
  • Full context: View issue body, labels, comments, and metadata in-app
  • Quick actions: Comment, close, label, and skip with minimal keystrokes

AI Agent Integration

  • Launch Cloud Agents: Assign Oz Cloud Agents to investigate and fix issues via the Warp Platform API
  • Custom prompts: Add additional context when launching agents
  • Real-time status: Poll agent task status (Queued → In Progress → Succeeded/Failed)
  • Session links: Direct links to agent sessions for monitoring
  • Retry failed tasks: Re-launch agents on failed issues with one keystroke
  • Agent dashboard: View all agent-assigned issues with their current status

Duplicate Detection (DeDupe)

  • AI-powered search: Launch an agent to find potential duplicates using semantic analysis
  • Review UI: Interactive interface to select canonical issue and mark duplicates
  • Bulk close: Close multiple duplicates with proper linking comments

Slack Integration

  • Post to channels: Share issues to feedback channels (#feedback-code-ux, #feedback-agents-ux, #feedback-quality, #feedback-revenue, #feedback-core-bugs, #feedback-warp-3)
  • Add context: Include comments when posting to Slack
  • User mentions: Autocomplete @mentions for Slack users
  • Agent metadata: Optionally include agent session links in Slack posts

Slack Setup

To enable Slack integration, you need a Slack bot token with the following scopes:

  • chat:write - Post messages to channels
  • users:read - Fetch user list for @mention autocomplete
  • channels:read - List available channels

Set the token as an environment variable:

export SLACK_BOT_TOKEN=xoxb-your-slack-bot-token

The bot must be invited to any channel you want to post to.

Workflow Automation

  • Post-action flow: After agent launch or other actions, optionally add labels, comments, or send to Slack
  • Team @mentions: Autocomplete for Warp team members when writing GitHub comments
  • Label management: Apply pf: labels to track triage state (pf:waiting-user, pf:waiting-warper)

Requirements

  • Rust - For building the application
  • GitHub CLI (gh) - Must be authenticated with access to your repo
  • PowerFixer Server - Reachable via POWERFIXER_SERVER_URL (or --server), with production deployments expected on Google Cloud (Cloud Run)
  • (Optional for IAP) POWERFIXER_IAP_AUDIENCE (and optionally POWERFIXER_IAP_SERVICE_ACCOUNT) for automatic gcloud identity-token auth
  • GitHub Token - GITHUB_TOKEN must be set
  • (Optional) Slack Bot Token - SLACK_BOT_TOKEN env var for Slack integration
  • (Optional) oz CLI - For local agent mode

Installation

cargo build --release
./target/release/power-fixer

Configuration

Create a .env file in the project directory (see .env.example):

# Required
GITHUB_TOKEN=ghp_...
POWERFIXER_DEFAULT_REPO=owner/repo
POWERFIXER_SERVER_URL=https://your-service-xyz-uc.a.run.app

# Optional auth token for server requests
POWERFIXER_AUTH_TOKEN=your_token_here

# Optional IAP auto-auth (recommended for IAP-protected Cloud Run)
POWERFIXER_IAP_AUDIENCE=/projects/123456789/global/backendServices/123456789
POWERFIXER_IAP_SERVICE_ACCOUNT=power-fixer-cli@your-project.iam.gserviceaccount.com
POWERFIXER_IAP_HOST_SUFFIX=.a.run.app

# Optional - enables Slack posting and @mentions
SLACK_BOT_TOKEN=xoxb-your-slack-bot-token

# Optional gcloud secret loading in ./script/run
POWERFIXER_GCP_PROJECT=your-gcp-project
POWERFIXER_SLACK_SECRET_NAME=powerfixer-slack-bot-token

# Optional update UI hints
POWERFIXER_UPDATE_REPO=warpdotdev/power-fixer
POWERFIXER_INSTALL_HINT="cargo install --git https://github.com/warpdotdev/power-fixer.git --force"

# Optional local agent binary
POWERFIXER_LOCAL_AGENT_BIN=oz

Usage

cargo run

The app starts by fetching untriaged issues from POWERFIXER_DEFAULT_REPO.

Key Bindings

Issue View:

  • ↑/↓ - Navigate actions
  • j/k - Scroll issue details
  • Enter - Execute selected action
  • f - Change filter (switch issue views)
  • a - View agent-assigned issues dashboard
  • q - Quit

Actions:

  • Next - Move to next issue (optionally apply label first)
  • Comment - Add comment with optional label (close, waiting-user, waiting-warper)
  • Agent - Launch Cloud Agent to fix the issue
  • DeDupe - Search for and close duplicate issues
  • Slack - Post issue to a feedback channel

Comment Input:

  • @ - Trigger team member autocomplete
  • Tab - Complete selected mention
  • ↑/↓ - Navigate suggestions
  • Enter - Submit comment
  • Esc - Cancel

Agent Dashboard:

  • ↑/↓ - Navigate issues
  • s - Sync/refresh task statuses from API
  • r - Retry failed agent task
  • c - Copy session URL to clipboard
  • t - Copy task ID to clipboard
  • Esc - Return to main view

DeDupe Review:

  • ↑/↓ - Navigate duplicate candidates
  • d - Toggle duplicate selection
  • c - Make selected issue the canonical (keep open)
  • Enter - Execute (close selected duplicates)
  • Esc - Cancel

Data Storage

The TUI client stores no persistent state locally. All agent and triage state is managed by the PowerFixer Server (see power-fixer-server repository) and synced via:

  • Initial HTTP fetch at startup (GET /api/v1/state)
  • Real-time WebSocket updates for state changes

The TUI maintains an in-memory cache for instant UI rendering.

User Flows

See userflows.md for comprehensive navigation diagrams showing all screens and transitions.

Architecture

src/
├── main.rs           # TUI app entry, CLI args, event loop
├── lib.rs            # Library crate exports
├── utils.rs          # Utilities (clipboard, logging)
├── app/
│   ├── state.rs      # Application state and data structures
│   ├── handlers.rs   # Keyboard input handlers
│   ├── ui.rs         # ratatui rendering
│   ├── background.rs # Background task spawning
│   └── theme.rs      # Color theme support (light/dark/auto)
├── server/
│   ├── client.rs     # HTTP client for PowerFixer Server API
│   ├── websocket.rs  # WebSocket client for real-time updates
│   ├── types.rs      # Request/response types for server API
│   └── ws_types.rs   # WebSocket message types (shared with server)
├── services/
│   ├── github.rs     # GitHub CLI wrapper (issues, comments, labels)
│   └── slack.rs      # Slack API integration
└── features/
    └── triage.rs     # Batch triage orchestration

Server Requirement

The TUI requires the PowerFixer Server to be running. The server handles:

  • Agent status callbacks from Oz cloud agents
  • Real-time WebSocket updates to all connected TUI clients
  • Persistent state storage in PostgreSQL

See the power-fixer-server repository for server setup and deployment.

Label Workflow

Power Fixer uses pf: prefixed labels on GitHub for visibility:

  • No pf: label → Untriaged (default view)
  • pf:waiting-user → Waiting for reporter response
  • pf:waiting-warper → Assigned to a Warp engineer
  • pf:triaged → Issue has been examined, possibly commented on, with no further action needed at this time

Agent assignment and other states are tracked in the database, not via GitHub labels.

Development Model

Internal development continues in private repositories. The open-source repository mirrors selected releases and changes.

About

No description, website, or topics provided.

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published