home / skills / lanej / dotfiles / phab

phab skill

/claude/skills/phab

npx playbooks add skill lanej/dotfiles --skill phab

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
20.3 KB
---
name: phab
description: Use phab CLI for Phabricator task management, code review workflows, revision creation and updates, with Git integration and auto-detection features.
---
# Phabricator CLI Skill

You are a Phabricator workflow specialist using the `phab` CLI tool. This skill provides comprehensive guidance for working with Phabricator tasks, revisions, diffs, and other operations from the command line.

## Core Capabilities

The `phab` CLI provides comprehensive Phabricator integration:

1. **Tasks**: Create, search, edit, comment, view task trees and edges (relationships)
2. **Revisions**: Create, update, search, view diffs and comments
3. **Projects**: Search and edit projects
4. **Users**: Search users and view current user info
5. **Repositories**: Search, edit, and manage repository URIs
6. **Diffs**: Search and view diff details
7. **MCP Server**: Integration with Model Context Protocol
8. **LSP**: Language Server Protocol for editor integration

## Task Operations

### Searching Tasks

```bash
# Search all tasks
phab task search

# Search specific task IDs
phab task search --ids T123,T456

# Filter by author
phab task search --author username

# Filter by assignee
phab task search --assigned username

# Filter by status
phab task search --status open
phab task search --status resolved

# Filter by priority
phab task search --priority high
phab task search --priority 100

# Filter by project
phab task search --project project-slug

# Full-text search
phab task search --query "bug in login"

# Date filters
phab task search --created-start 2025-01-01
phab task search --modified-end 2025-01-31

# Combine filters
phab task search --assigned myusername --status open --project backend

# Sort order
phab task search --order priority
phab task search --order updated
phab task search --order newest

# Limit results
phab task search --limit 20

# Output formats
phab task search --output json
phab task search --output jsonl
phab task search --output table
phab task search --output markdown  # Default

# Include attachments
phab task search --attach-projects
phab task search --attach-subscribers
```

### Creating Tasks

```bash
# Basic task creation
phab task create --title "Fix login bug"

# With description
phab task create --title "Add feature" --description "Detailed description here"

# With priority (default: 50)
phab task create --title "Urgent fix" --priority 100

# Assign owner
phab task create --title "New task" --owner username

# Set status
phab task create --title "Task" --status open

# Add to projects
phab task create --title "Task" --projects "backend,frontend"

# Complete example
phab task create \
  --title "Implement user authentication" \
  --description "Add OAuth2 support for user login" \
  --priority 80 \
  --owner developer \
  --projects "backend,security" \
  --status open
```

### Editing Tasks

```bash
# Edit task title
phab task edit T123 --title "New title"

# Edit description
phab task edit T123 --description "Updated description"

# Change priority
phab task edit T123 --priority 90

# Reassign owner
phab task edit T123 --owner newuser

# Change status
phab task edit T123 --status resolved

# Add projects
phab task edit T123 --add-projects "qa,testing"

# Remove projects
phab task edit T123 --remove-projects "deprecated"

# Multiple changes at once
phab task edit T123 \
  --title "Updated title" \
  --priority 100 \
  --status "in progress" \
  --add-projects "urgent"
```

### Viewing Tasks

```bash
# View task as markdown with YAML front matter
phab task view T123

# Without front matter
phab task view T123 --no-front-matter

# Show only transaction history
phab task view T123 --transactions-only

# Output as JSON
phab task view T123 --output-json
```

### Commenting on Tasks

```bash
# Add comment to task
phab task comment T123 --comment "This is fixed in D456"

# Multi-line comments (using heredoc)
phab task comment T123 --comment "$(cat <<'EOF'
This has been resolved.

Testing notes:
- Verified on staging
- All tests pass
EOF
)"
```

### Viewing Task Comments

```bash
# Get all comments for a task
phab task get-comments T123

# Output as JSON
phab task get-comments T123 --json
```

### Task Edges (Relationships)

Task edges represent relationships between tasks, such as parent/child, blocking/blocked by, and related tasks.

```bash
# View all edges (relationships) for a task
phab task edges T123

# Output as JSON for programmatic access
phab task edges T123 --json

# Common edge types returned:
# - parent: Tasks that this task is a subtask of
# - subtask: Child tasks under this task
# - depends-on: Tasks that must be completed before this task
# - blocks: Tasks that are blocked by this task
# - related: Related tasks
# - duplicate: Duplicate tasks
# - merged-into: Tasks this was merged into
```

**Use Cases:**

```bash
# Understanding task dependencies
phab task edges T123

# Finding all subtasks for planning
phab task edges T123 | grep "subtask"

# Checking blocking relationships
phab task edges T123 | grep "blocks\|depends-on"

# Programmatic processing
phab task edges T123 --json | jq '.edges[] | select(.type == "subtask")'

# Finding parent tasks in a hierarchy
phab task edges T123 --json | jq '.edges[] | select(.type == "parent")'

# Tracing duplicate relationships
phab task edges T123 --json | jq '.edges[] | select(.type == "duplicate")'
```

**Integration with Task Trees:**

Use `phab task edges` to see raw relationship data, while `phab task tree` provides a formatted hierarchical view:

```bash
# Raw relationship data (all edge types)
phab task edges T123

# Formatted tree view (parent/child only)
phab task tree T123
```

### Task Trees

```bash
# Display task tree (parent/child relationships)
phab task tree T123

# Shows hierarchy of related tasks
```

## Revision Operations

### Creating Revisions

```bash
# Create revision from current branch (auto-detects changes)
phab revision create

# Specify commit range
phab revision create HEAD~3..HEAD

# With explicit title
phab revision create --title "Add new feature"

# With summary/description
phab revision create --summary "This adds support for X"

# With test plan
phab revision create --test-plan "Tested manually on local dev"

# Add reviewers
phab revision create --reviewers "user1,user2,team-name"

# Create as draft (default)
phab revision create --draft

# Publish immediately
phab revision create --publish

# Specify base branch for fork-point detection
phab revision create --base origin/develop

# Open in browser after creating
phab revision create --browse

# Complete example
phab revision create \
  --title "Implement user authentication" \
  --summary "Adds OAuth2 support with token refresh" \
  --test-plan "Unit tests added, manual testing completed" \
  --reviewers "security-team,backend-lead" \
  --publish \
  --browse
```

### Updating Revisions

```bash
# Update revision (auto-detects from git config or commit message)
phab revision update

# Explicit revision ID
phab revision update D123
phab revision update 123

# Update title
phab revision update D123 --title "Updated title"

# Update summary
phab revision update D123 --summary "New description"

# Update test plan
phab revision update D123 --test-plan "Additional tests added"

# Replace reviewers (completely replaces the list)
phab revision update D123 --reviewers "user1,user2"

# Publish draft
phab revision update D123 --publish

# Specify base branch
phab revision update D123 --base origin/main

# Open in browser
phab revision update D123 --browse

# Complete example
phab revision update D123 \
  --title "Updated implementation" \
  --summary "Addressed review feedback" \
  --test-plan "All edge cases now covered" \
  --publish \
  --browse
```

### Searching Revisions

```bash
# Search all revisions
phab revision search

# Search specific revision IDs
phab revision search --ids D123,D456

# Filter by author
phab revision search --author username

# Filter by reviewer
phab revision search --reviewer username

# Filter by status
phab revision search --status "needs-review"
phab revision search --status accepted
phab revision search --status published

# Filter by repository
phab revision search --repository repo-name

# Date filters
phab revision search --created-start 2025-01-01
phab revision search --modified-end 2025-01-31

# Combine filters
phab revision search --author me --status "needs-review"

# Sort order
phab revision search --order updated
phab revision search --order newest
phab revision search --order created

# Limit results
phab revision search --limit 10

# Output formats
phab revision search --output markdown  # Default
phab revision search --output json
phab revision search --output table

# Include attachments
phab revision search --attach-projects
phab revision search --attach-reviewers
phab revision search --attach-subscribers
```

### Viewing Revision Diffs

```bash
# Get diff for a revision
phab revision diff D123

# Output as JSON
phab revision diff D123 --json
```

### Viewing Revision Comments

```bash
# Get all comments on a revision
phab revision comments D123

# Output as JSON
phab revision comments D123 --json
```

### Editing Revisions

```bash
# Edit revision metadata
phab revision edit D123 --title "New title"
phab revision edit D123 --summary "Updated description"

# Change status
phab revision edit D123 --status accepted
phab revision edit D123 --status abandoned

# Update reviewers
phab revision edit D123 --reviewers "user1,user2"
```

## Project Operations

### Searching Projects

```bash
# Search all projects
phab project search

# Search by name
phab project search --query "backend"

# Output as JSON
phab project search --json
```

### Editing Projects

```bash
# Edit project details
phab project edit PROJECT-SLUG --name "New Name"

# Output as JSON
phab project edit PROJECT-SLUG --json
```

## User Operations

### Searching Users

```bash
# Search all users
phab user search

# Search by username
phab user search --usernames "user1,user2"

# Output as JSON
phab user search --json
```

### Current User Info

```bash
# Get information about authenticated user
phab user whoami

# Output as JSON
phab user whoami --json
```

## Repository Operations

### Searching Repositories

```bash
# Search all repositories
phab repository search

# Search by name
phab repository search --query "backend"

# Output as JSON
phab repository search --json
```

### Repository URIs

```bash
# List URIs for a repository
phab repository uri REPO-NAME

# Output as JSON
phab repository uri REPO-NAME --json
```

## Common Workflows

### Workflow 1: Create and Submit Code Review

```bash
# 1. Make changes on feature branch
git checkout -b feature/new-thing
# ... make changes ...
git add .
git commit -m "Add new feature"

# 2. Create revision
phab revision create \
  --title "Add new feature" \
  --summary "Implements X, Y, and Z" \
  --test-plan "Tested locally, unit tests added" \
  --reviewers "team-backend" \
  --browse

# 3. Address review feedback
# ... make more changes ...
git add .
git commit -m "Address review feedback"

# 4. Update revision
phab revision update --publish

# 5. After approval, land the revision
# (typically done through Phabricator UI or arc land)
```

### Workflow 2: Review Pending Revisions

```bash
# 1. Find revisions needing review
phab revision search --reviewer me --status "needs-review"

# 2. View specific revision diff
phab revision diff D123

# 3. View comments
phab revision comments D123

# 4. After reviewing (use web UI for acceptance)
```

### Workflow 3: Track Task Progress

```bash
# 1. Find your assigned tasks
phab task search --assigned me --status open

# 2. View task details
phab task view T123

# 3. Comment on progress
phab task comment T123 --comment "Working on this now"

# 4. Update status
phab task edit T123 --status "in progress"

# 5. When done
phab task edit T123 --status resolved --comment "Completed in D456"
```

### Workflow 4: Create Task from Bug Report

```bash
# 1. Create task
phab task create \
  --title "Bug: Login fails with special characters" \
  --description "Users report login failures when password contains @#$" \
  --priority 90 \
  --projects "bugs,backend,urgent" \
  --owner me

# 2. Get task ID (e.g., T789)

# 3. Create branch
git checkout -b fix/login-special-chars

# 4. Fix the bug and create revision
# ... make changes ...
phab revision create \
  --title "Fix login with special characters" \
  --summary "Fixes T789 - properly escape special characters" \
  --test-plan "Added unit tests for special character passwords"

# 5. Link revision to task
phab task comment T789 --comment "Fix available in D456"
```

### Workflow 5: Find Related Work

```bash
# 1. Search tasks in a project
phab task search --project backend --status open

# 2. Find recent revisions by author
phab revision search --author colleague --order updated --limit 5

# 3. View task tree to see related tasks
phab task tree T123

# 4. Check repository activity
phab revision search --repository main-repo --order updated --limit 10
```

### Workflow 6: Monitor Project Activity

```bash
# 1. Find recent tasks in project
phab task search \
  --project myproject \
  --order updated \
  --limit 20

# 2. Find active revisions
phab revision search \
  --repository myrepo \
  --status "needs-review" \
  --order updated

# 3. Check high-priority tasks
phab task search \
  --project myproject \
  --priority high \
  --status open
```

## Output Formats

### Markdown Format (Default)

Most commands default to markdown tables for human-readable output:

```bash
phab task search --assigned me
# Outputs nicely formatted markdown table
```

### JSON Format

For programmatic processing:

```bash
phab task search --assigned me --output json | jq '.data[].fields.name'
```

### JSON Lines Format

One JSON object per line:

```bash
phab revision search --output jsonl | while read line; do
  echo "$line" | jq '.id'
done
```

### Table Format

Compact table view:

```bash
phab task search --output table
```

## Best Practices

### Task Management

1. **Use descriptive titles**: Make tasks searchable
2. **Add to projects**: Organize work properly
3. **Set appropriate priority**: Default is 50
4. **Assign ownership**: Clear responsibility
5. **Update status**: Keep team informed
6. **Comment regularly**: Document progress

### Revision Workflow

1. **Create from feature branch**: Keep main clean
2. **Write good summaries**: Explain what and why
3. **Include test plan**: Help reviewers understand testing
4. **Add appropriate reviewers**: Get right expertise
5. **Use draft for WIP**: Publish when ready for review
6. **Update regularly**: Don't let reviews go stale

### Search Best Practices

1. **Use filters**: Narrow results with --status, --project, etc.
2. **Limit results**: Use --limit for large result sets
3. **Sort appropriately**: --order updated for recent work
4. **Attach data selectively**: Only use --attach-* when needed
5. **Use output formats**: JSON for scripts, markdown for viewing

## Integration with Git Workflow

### Typical Development Flow

```bash
# 1. Create feature branch
git checkout -b feature/new-thing

# 2. Make commits
git add .
git commit -m "Implement feature"

# 3. Create Phabricator revision
phab revision create \
  --title "Add new feature" \
  --reviewers "team-name"

# 4. Address feedback
git add .
git commit -m "Address review feedback"

# 5. Update revision
phab revision update

# 6. After approval, land via Phabricator
# (or use arc land if using Arcanist)
```

### Auto-detection Features

The `phab` CLI includes smart auto-detection:

**For revisions:**
- Detects fork point from main/master branch
- Reads commit messages for title/summary
- Finds existing revision ID from git config or commit messages
- Auto-detects base branch (origin/master by default)

**For tasks:**
- Parses task IDs from commit messages
- Links revisions to tasks automatically

## Advanced Features

### Fork-Point Detection

```bash
# Auto-detects where your branch diverged from main
phab revision create

# Specify different base branch
phab revision create --base origin/develop

# Explicit commit range (overrides fork-point detection)
phab revision create HEAD~5..HEAD
```

### Browser Integration

```bash
# Open in browser after creating
phab revision create --browse

# Open after updating
phab revision update --browse
```

### Pagination

For large result sets:

```bash
# Get first page
phab task search --limit 100

# Get next page using cursor
phab task search --after <cursor-from-previous-response>

# Previous page
phab task search --before <cursor>
```

### Raw API Output

For debugging or advanced use:

```bash
# Get complete API response without trimming
phab task search --raw
```

## Common Patterns

### Pattern 1: Daily Standup Prep

```bash
# What I'm working on
phab task search --assigned me --status open --order priority

# My pending reviews
phab revision search --author me --status "needs-review"

# Reviews I need to do
phab revision search --reviewer me --status "needs-review"
```

### Pattern 2: Project Health Check

```bash
# Open tasks
phab task search --project myproject --status open --order priority

# Active revisions
phab revision search --repository myrepo --status "needs-review"

# Recent activity
phab task search --project myproject --order updated --limit 10
```

### Pattern 3: Bug Triage

```bash
# All open bugs
phab task search --project bugs --status open --order priority

# High priority bugs
phab task search --project bugs --priority high --status open

# Unassigned bugs
phab task search --project bugs --status open | grep "Unassigned"
```

### Pattern 4: Code Review Queue

```bash
# Find reviews awaiting my feedback
phab revision search --reviewer me --status "needs-review" --order updated

# My revisions needing updates
phab revision search --author me --status "needs-revision" --order updated

# Accepted but not landed
phab revision search --author me --status accepted --order updated
```

### Pattern 5: Linking Work

```bash
# Create task for feature
TASK_ID=$(phab task create --title "Feature X" --json | jq -r '.object.id')

# Create revision mentioning task
phab revision create --summary "Implements $TASK_ID"

# Comment on task with revision
phab task comment $TASK_ID --comment "Implementation in D123"
```

## Configuration

The `phab` CLI typically uses configuration from:
- `~/.arcrc` (Arcanist config)
- Environment variables
- Project-specific `.arcconfig`

### Required Configuration

Ensure you have:
1. Phabricator API token configured
2. Proper authentication set up
3. Repository callsign/PHID mapping (for revision operations)

## Troubleshooting

### Issue: "Not authenticated"

**Solution**: Configure API token in `~/.arcrc` or environment variables

### Issue: "Repository not found"

**Solution**: Ensure repository is configured in Phabricator and callsign is correct

### Issue: "Cannot detect fork point"

**Solution**: Specify explicit commit range or base branch:
```bash
phab revision create --base origin/main
phab revision create HEAD~3..HEAD
```

### Issue: "Revision not found when updating"

**Solution**: Specify explicit revision ID:
```bash
phab revision update D123
```

## Quick Reference

```bash
# Tasks
phab task search --assigned me --status open
phab task create --title "Title" --description "Desc"
phab task edit T123 --status resolved
phab task comment T123 --comment "Comment"
phab task view T123
phab task edges T123
phab task tree T123

# Revisions
phab revision create --title "Title" --reviewers "team"
phab revision update D123 --publish
phab revision search --author me --status "needs-review"
phab revision diff D123
phab revision comments D123

# Projects
phab project search --query "name"

# Users
phab user search
phab user whoami

# Repositories
phab repository search --query "name"
phab repository uri REPO-NAME
```

## Integration with Phabricator Ticket Writer Agent

When creating tasks programmatically, you can use the phabricator-ticket-writer agent for well-structured task creation with proper formatting.

## Summary

**Primary commands:**
- `phab task search` - Find tasks
- `phab task create` - Create new task
- `phab revision create` - Submit code for review
- `phab revision update` - Update existing review
- `phab revision search` - Find revisions

**Key features:**
- Auto-detection of branches and changes
- Multiple output formats (markdown, JSON, table)
- Rich filtering and search capabilities
- Git workflow integration
- Browser integration with --browse flag

**Best practices:**
- Use descriptive titles and summaries
- Include test plans in revisions
- Keep tasks organized in projects
- Update work regularly
- Link related tasks and revisions