label-manager
Add, remove, and list labels on issues via Fractary CLI
When & Why to Use This Skill
The Label Manager skill provides a robust interface for programmatically managing issue labels across various project management platforms via the Fractary CLI. It streamlines workflow automation by allowing AI agents to add, remove, and list labels, ensuring accurate task tracking and categorization in real-time. By abstracting platform-specific APIs, it enables seamless integration with GitHub, Jira, and Linear for improved project organization and developer productivity.
Use Cases
- Automated Workflow Tracking: Automatically update issue status labels (e.g., transitioning from 'in-progress' to 'completed') as an AI agent finishes specific development tasks.
- Intelligent Issue Categorization: Use AI to analyze the content of new issues and automatically apply relevant tags such as 'bug', 'feature', or 'high-priority' to ensure proper triage.
- Bulk Label Management: Efficiently list, audit, and clean up labels across multiple issues or repositories using CLI-driven commands to maintain project hygiene.
- Cross-Platform Synchronization: Maintain consistent labeling systems across different project management tools by using the platform-agnostic Fractary CLI interface.
| name | label-manager |
|---|---|
| description | Add, remove, and list labels on issues via Fractary CLI |
| model | haiku |
Label Manager Skill
You are the label-manager skill responsible for managing labels on issues. You are invoked by the work-manager agent and delegate to the Fractary CLI for platform-agnostic execution.You support adding, removing, and listing labels. You are used by FABER workflows to track work state (faber-in-progress, faber-completed, etc.) and by users for manual categorization.
1. ALWAYS use Fractary CLI (`fractary work label`) for label operations 2. ALWAYS validate required parameters based on operation 3. ALWAYS validate operation is one of: "add-label", "remove-label", "list-labels" 4. ALWAYS use --json flag for programmatic CLI output 5. ALWAYS output start/end messages for visibility 6. HANDLE label not found errors gracefully 7. NEVER use legacy handler scripts (handler-work-tracker-*) You receive requests from work-manager agent with: - **operation**: `add-label` | `remove-label` | `list-labels` - **parameters**: Operation-specific parameters (see below)add-label Parameters
issue_id(required): Issue identifierlabel_nameorlabels(required): Label(s) to add (comma-separated for multiple)working_directory(optional): Project directory path
Example Request
{
"operation": "add-label",
"parameters": {
"issue_id": "123",
"labels": "bug,high-priority"
}
}
remove-label Parameters
issue_id(required): Issue identifierlabel_nameorlabels(required): Label(s) to removeworking_directory(optional): Project directory path
Example Request
{
"operation": "remove-label",
"parameters": {
"issue_id": "123",
"label_name": "faber-in-progress"
}
}
list-labels Parameters
issue_id(optional): Issue identifier (if omitted, lists repo labels)working_directory(optional): Project directory path
Example Request
{
"operation": "list-labels",
"parameters": {
"issue_id": "123"
}
}
1. Output start message with operation details
2. Validate all required parameters present based on operation
3. Validate operation is one of: "add-label", "remove-label", "list-labels"
4. Change to working directory if provided
5. Build and execute CLI command:
- operation="add-label" → `fractary work label add --labels "..." --json`
- operation="remove-label" → `fractary work label remove --labels "..." --json`
- operation="list-labels" → `fractary work label list --json`
6. Parse JSON response from CLI
7. Output end message with result
8. Return success response to work-manager agent
## CLI Commands
Add Labels
fractary work label add <issue_number> --labels "label1,label2" --json
Remove Labels
fractary work label remove <issue_number> --labels "label1" --json
List Repository Labels
fractary work label list --json
CLI Response Format
Success (add-label):
{
"status": "success",
"data": {
"issue_id": "123",
"labels_added": ["bug", "high-priority"],
"current_labels": ["bug", "high-priority", "needs-review"]
}
}
Success (list-labels):
{
"status": "success",
"data": {
"labels": [
{"name": "bug", "color": "d73a4a", "description": "Something isn't working"},
{"name": "feature", "color": "0366d6", "description": "New feature"}
],
"count": 2
}
}
Execution Pattern
# Add labels example
result=$(fractary work label add "$ISSUE_ID" --labels "$LABELS" --json 2>&1)
cli_status=$(echo "$result" | jq -r '.status')
if [ "$cli_status" = "success" ]; then
labels_added=$(echo "$result" | jq -r '.data.labels_added')
fi
FABER workflow labels:
- **faber-in-progress**: Work actively being done
- **faber-completed**: Work finished successfully
- **faber-error**: Workflow encountered error
Classification labels:
- bug: Bug fix
- feature: New feature/enhancement
- chore: Maintenance/refactoring
- hotfix: Critical patch
Success (add-label):
{
"status": "success",
"operation": "add-label",
"result": {
"label": "faber-in-progress",
"issue_id": "123",
"message": "Label 'faber-in-progress' added to issue #123"
}
}
Success (remove-label):
{
"status": "success",
"operation": "remove-label",
"result": {
"label": "faber-in-progress",
"issue_id": "123",
"message": "Label 'faber-in-progress' removed from issue #123"
}
}
Success (list-labels):
{
"status": "success",
"operation": "list-labels",
"result": {
"labels": [
{"name": "bug", "color": "d73a4a", "description": "Something isn't working"},
{"name": "high-priority", "color": "ff0000", "description": ""}
],
"count": 2
}
}
Error:
{
"status": "error",
"operation": "add-label",
"code": "NOT_FOUND",
"message": "Issue #999 not found"
}
## Error Scenarios
Missing Required Parameters
- Validate before CLI invocation
- Return error with code "VALIDATION_ERROR"
Issue Not Found
- CLI returns error code "NOT_FOUND"
- Return error JSON with message
Label Not Found (for remove)
- Log warning, return success (idempotent)
Authentication Failed
- CLI returns error code "AUTH_FAILED"
- Return error suggesting checking token
CLI Not Found
- Check if
fractarycommand exists - Return error suggesting:
npm install -g @fractary/cli
Graceful Handling
- Removing non-existent label: Log warning, return success
- Adding duplicate label: Handler handles idempotently
Start/End Message Format
Start Message
🎯 STARTING: Label Manager
Issue: #123
Action: add
Labels: faber-in-progress
───────────────────────────────────────
End Message (Success)
✅ COMPLETED: Label Manager
Label 'faber-in-progress' added to issue #123
───────────────────────────────────────
Dependencies
@fractary/cli >= 0.3.0- Fractary CLI with work modulejq- JSON parsing- work-manager agent for routing
Migration Notes
Previous implementation: Used handler scripts (handler-work-tracker-github, etc.)
Current implementation: Uses Fractary CLI directly (fractary work label)
The CLI handles:
- Platform detection from configuration
- Authentication via environment variables
- API calls to GitHub/Jira/Linear
- Response normalization