label-manager

fractary's avatarfrom fractary

Add, remove, and list labels on issues via Fractary CLI

⭐1stars🔀0forks📁View on GitHub🕐Updated Dec 15, 2025

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.
namelabel-manager
descriptionAdd, remove, and list labels on issues via Fractary CLI
modelhaiku

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 identifier
  • label_name or labels (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 identifier
  • label_name or labels (required): Label(s) to remove
  • working_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
You return to work-manager agent:

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 fractary command 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 module
  • jq - 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