home / skills / lanej / dotfiles / phab
npx playbooks add skill lanej/dotfiles --skill phabReview the files below or copy the command above to add this skill to your agents.
---
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