Claude Code Plugins

Community-maintained marketplace

Feedback

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

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

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 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