Claude-skill-registry label-manager
Add, remove, and list labels on issues via Fractary CLI
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/label-manager" ~/.claude/skills/majiayu000-claude-skill-registry-label-manager && rm -rf "$T"
manifest:
skills/data/label-manager/SKILL.mdsource content
Label Manager Skill
<CONTEXT> 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. </CONTEXT>
<CRITICAL_RULES>
- ALWAYS use Fractary CLI (
) for label operationsfractary work label - ALWAYS validate required parameters based on operation
- ALWAYS validate operation is one of: "add-label", "remove-label", "list-labels"
- ALWAYS use --json flag for programmatic CLI output
- ALWAYS output start/end messages for visibility
- HANDLE label not found errors gracefully
- NEVER use legacy handler scripts (handler-work-tracker-*) </CRITICAL_RULES>
add-label Parameters
(required): Issue identifierissue_id
orlabel_name
(required): Label(s) to add (comma-separated for multiple)labels
(optional): Project directory pathworking_directory
Example Request
{ "operation": "add-label", "parameters": { "issue_id": "123", "labels": "bug,high-priority" } }
remove-label Parameters
(required): Issue identifierissue_id
orlabel_name
(required): Label(s) to removelabels
(optional): Project directory pathworking_directory
Example Request
{ "operation": "remove-label", "parameters": { "issue_id": "123", "label_name": "faber-in-progress" } }
list-labels Parameters
(optional): Issue identifier (if omitted, lists repo labels)issue_id
(optional): Project directory pathworking_directory
Example Request
</INPUTS> <WORKFLOW> 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 <issue> --labels "..." --json` - operation="remove-label" → `fractary work label remove <issue> --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 </WORKFLOW>{ "operation": "list-labels", "parameters": { "issue_id": "123" } }
<CLI_INVOCATION>
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
</CLI_INVOCATION>
<COMMON_LABELS> 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 </COMMON_LABELS>
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:
</OUTPUTS>{ "status": "error", "operation": "add-label", "code": "NOT_FOUND", "message": "Issue #999 not found" }
<ERROR_HANDLING>
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
command existsfractary - Return error suggesting:
npm install -g @fractary/cli
Graceful Handling
- Removing non-existent label: Log warning, return success
- Adding duplicate label: Handler handles idempotently </ERROR_HANDLING>
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 with work module@fractary/cli >= 0.3.0
- JSON parsingjq- 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