mcpField
S
skill-system-github

skill-system-github

github.com/arthur0824haoDevelopment45 installs
Repository

About skill-system-github

skill-system-github provides structured guidance for GitHub operations through `gh`, with explicit checks around changes that write workflows. It is intended for agents handling issues, labels, pull requests, templates, and workflows.

Key features

  1. 01Issue and duplicate management
  2. 02Label lifecycle operations
  3. 03Pull request listing and creation
  4. 04Workflow scope safety checks
  5. 05Issue template file guidance
  6. 06Structured operation results

Use cases

  1. 01Check for duplicate issues before creating one
  2. 02Confirm before deleting a repository label
  3. 03Review workflow token scope before changes

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/arthur0824hao/skills --skill skill-system-github

After installing, type/skill-system-githubin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

SKILL.behavior.yaml
SKILL.spec.yaml
scripts/
github.py
manage-issues.md
manage-labels.md
manage-templates.md
manage-workflows.md
safety-check.md
test_github.py

Details

From the project README

Skill System GitHub

Run consistent GitHub operations through gh with explicit safety checks for workflow writes and predictable return shapes.

Decision Matrix

Task IntentOperationPrimary BackendNotes
Create/list/comment/close/reopen issuesmanage-issuesgh issueCheck duplicates before creating new issues
Create/update/delete labels, apply labels to issuemanage-labelsgh label, gh issue editConfirm destructive delete before execution
List/create pull requestsmanage-prsgh prWarn on force-push to main/master
Bootstrap/update issue templatesmanage-templatesfile read/write toolsEdit .github/ISSUE_TEMPLATE/* directly
List/check/create/update workflowsmanage-workflowsgh workflow, file read/write toolsRun safety-check before pushing workflow changes
Decide workflow push path based on token scopesafety-checkgh auth status, gh apiUse API fallback when workflow scope is missing

Core Patterns

Pattern 1: Resolve repository and perform issue operation
gh issue list --repo <owner/repo> --state open --limit 50
gh issue create --repo <owner/repo> --title "<title>" --body "<body>"
Pattern 2: Label lifecycle and issue label application
gh label create "<name>" --repo <owner/repo> --description "<desc>" --color "<hex>"
gh label edit "<name>" --repo <owner/repo> --new-name "<new>" --description "<desc>" --color "<hex>"
gh issue edit --repo <owner/repo> <number> --add-label "<label1>,<label2>"
Pattern 3: Workflow visibility and recent run checks
gh workflow list --repo <owner/repo>
gh run list --repo <owner/repo> --workflow "<name>" --limit 5
Pattern 4: Workflow scope gate before writing .github/workflows/*
gh auth status
gh api repos/<owner>/<repo>/contents/.github/workflows/<file> \
  --method PUT \
  -f message="update workflow via api" \
  -f content="<base64-content>" \
  -f branch="<branch>"

Guidelines

  • Always resolve owner/repo first; infer from git remote get-url origin when not provided.
  • Always check duplicate issue titles before issue creation.
  • Always ask for explicit confirmation before label deletion.
  • Always run safety-check before workflow writes that require push permissions.
  • Always use file tools for .github/ISSUE_TEMPLATE/* and .github/workflows/* edits.
  • Never include secrets in issue/comment/template/workflow bodies.
  • Return structured output with status, url, and error fields for all operations.
{
  "schema_version": "2.0",
  "id": "skill-system-github",
  "version": "1.0.0",
  "capabilities": ["github-issue", "github-label", "github-template", "github-workflow", "github-pr", "github-safety"],
  "effects": ["net.fetch", "proc.exec", "git.read", "fs.read", "fs.write"],
  "operations": {
    "manage-issues": {
      "description": "Create, list, comment on, close, or reopen GitHub issues with duplicate detection before create.",
      "input": {
        "action": { "type": "string", "required": true, "description": "One of: create, list, comment, close, reopen" },
        "repo": { "type": "string", "required": false, "description": "Target repo in owner/repo format" },
        "title": { "type": "string", "required": false, "description": "Issue title for create" },
        "body": { "type": "string", "required": false, "description": "Issue body for create or comment body" },
        "number": { "type": "number", "required": false, "description": "Issue number for comment/close/reopen" },
        "state": { "type": "string", "required": false, "description": "Issue listing state: open, closed, all" },
        "limit": { "type": "number", "required": false, "description": "List limit" },
        "label": { "type": "string", "required": false, "description": "Optional label filter for listing" }
      },
      "output": {
        "description": "Operation status and issue URL when applicable.",
        "fields": { "status": "string", "url": "string", "error": "string" }
      },
      "entrypoints": {
        "agent": "scripts/manage-issues.md"
      }
    },
    "manage-labels": {
      "description": "Create, update, delete labels, and apply labels to issues in a GitHub repository.",
      "input": {
        "action": { "type": "string", "required": true, "description": "One of: create, update, delete, apply" },
        "repo": { "type": "string", "required": false, "description": "Target repo in owner/repo format" },
        "name": { "type": "string", "required": false, "description": "Label name for create/update/delete" },
        "new_name": { "type": "string", "required": false, "description": "New label name for update" },
        "description": { "type": "string", "required": false, "description": "Label description for create/update" },
        "color": { "type": "string", "required": false, "description": "Hex color without #, for create/update" },
        "number": { "type": "number", "required": false, "description": "Issue number for apply" },
        "labels": { "type": "string", "required": false, "description": "Comma-separated labels for apply" },
        "confirm_delete": { "type": "boolean", "required": false, "description": "Explicit confirmation for delete" }
      },
      "output": {
        "description": "Operation status and optional resource URL.",
        "fields": { "status": "string", "url": "string", "error": "string" }
      },
      "entrypoints": {
        "agent": "scripts/manage-labels.md"
      }
    },
    "manage-templates": {
      "description": "Bootstrap and update repository issue templates under .github/ISSUE_TEMPLATE.",
      "input": {
        "action": { "type": "string", "required": true, "description": "One of: bootstrap, update" },
        "repo": { "type": "string", "required": false, "description": "Target repo in owner/repo format" },
        "template_type": { "type": "string", "required": false, "description": "Template selector: bug_report, feature_request, config" },
        "content": { "type": "string", "required": false, "description": "Updated YAML content for update action" }
      },
      "output": {
        "description": "Operation status and changed path details.",
        "fields": { "status": "string", "url": "string", "error": "string" }
      },
      "entrypoints": {
        "agent": "scripts/manage-templates.md"
      }
    },
    "manage-workflows": {
      "description": "List or check workflow runs and create/update workflow YAML files safely.",
      "input": {
        "action": { "type": "string", "required": true, "description": "One of: list, check, create, update" },
        "repo": { "type": "string", "required": false, "description": "Target repo in owner/repo format" },
        "workflow_name": { "type": "string", "required": false, "description": "Workflow display name or filename for check/update" },
        "workflow_file": { "type": "string", "required": false, "description": "Workflow filename under .github/workflows" },
        "content": { "type": "string", "required": false, "description": "Workflow YAML content for create/update" },
        "branch": { "type": "string", "required": false, "description": "Branch for API fallback updates" }
      },
      "output": {
        "description": "Operation status and workflow URL when available.",
        "fields": { "status": "string", "url": "string", "error": "string" }
      },
      "entrypoints": {
        "agent": "scripts/manage-workflows.md"
      }
    },
    "manage-prs": {
      "description": "List or create GitHub pull requests with branch safety checks.",
      "input": {
        "action": { "type": "string", "required": true, "description": "One of: list, create" },
        "repo": { "type": "string", "required": false, "description": "Target repo in owner/repo format" },
        "title": { "type": "string", "required": false, "description": "PR title for create" },
        "body": { "type": "string", "required": false, "description": "PR body for create" },
        "base": { "type": "string", "required": false, "description": "Base branch" },
        "head": { "type": "string", "required": false, "description": "Head branch" },
        "limit": { "type": "number", "required": false, "description": "List limit" }
      },
      "output": {
        "description": "PR operation result",
        "fields": { "status": "string", "url": "string", "error": "string", "warnings": "array" }
      },
      "entrypoints": {
        "unix": ["python3", "{skill_dir}/scripts/github.py", "prs"],
        "agent": "Use scripts/github.py prs for list/create operations"
      }
    },
    "safety-check": {
      "description": "Check gh auth token scopes for workflow writes and choose push or gh api fallback path.",
      "input": {
        "repo": { "type": "string", "required": false, "description": "Target repo in owner/repo format" },
        "workflow_file": { "type": "string", "required": false, "description": "Workflow filename to write under .github/workflows" },
        "workflow_content": { "type": "string", "required": false, "description": "Workflow YAML content used for API fallback" },
        "branch": { "type": "string", "required": false, "description": "Target branch name" },
        "commit_message": { "type": "string", "required": false, "description": "Commit message for API fallback" }
      },
      "output": {
        "description": "Decision and recommended write path.",
        "fields": { "status": "string", "url": "string", "error": "string" }
      },
      "entrypoints": {
        "agent": "scripts/safety-check.md"
      }
    }
  },
  "stdout_contract": {
    "last_line_json": false,
    "note": "Agent-executed operations; procedures are defined in markdown entrypoint scripts."
  }
}

Comments

Markdown supported