nxs-gh-create-task
Create GitHub issues from TASK-???.md files. Use when you need to bulk-create GitHub issues from task markdown files with frontmatter containing title, label, parent, and project attributes. Automatically extracts frontmatter, creates issues via gh CLI, links parent issues, and adds to specified projects.
When & Why to Use This Skill
The nxs-gh-create-task skill is a specialized automation tool designed to bulk-create GitHub issues directly from local markdown files. By leveraging the GitHub CLI and parsing YAML frontmatter, it allows users to seamlessly sync local task planning—including labels, parent-child relationships, and project board assignments—into the GitHub ecosystem, significantly reducing manual entry time for developers and project managers.
Use Cases
- Batch Task Migration: Quickly move a large volume of tasks from local markdown-based planning documents or notes into GitHub issues.
- Project Initialization: Automatically populate a new repository with a standardized set of boilerplate tasks, milestones, and labels during the kickoff phase.
- AI-to-GitHub Workflow: Seamlessly upload structured task lists generated by AI agents in markdown format to GitHub project boards for execution.
- Hierarchical Issue Tracking: Maintain complex task structures by defining parent issue links within markdown files to ensure proper traceability in GitHub.
| name | nxs-gh-create-task |
|---|---|
| description | Create GitHub issues from TASK-???.md files. Use when you need to bulk-create GitHub issues from task markdown files with frontmatter containing title, label, parent, and project attributes. Automatically extracts frontmatter, creates issues via gh CLI, links parent issues, and adds to specified projects. |
NXS GitHub Create Task
Create GitHub issues from TASK-???.md files in a target folder.
Usage
python ./scripts/create_gh_issues.py <target_folder> [--dry-run] [--no-project]
Arguments:
target_folder- Directory containing TASK-???.md files--dry-run- Preview what would be created without making API calls--no-project- Skip adding issues to any project
Task File Format
Each TASK-???.md file should have YAML frontmatter:
---
title: Implement user authentication
labels: [enhancement, backend]
parent: #42
project: "acme-corp/backend-roadmap"
---
## Description
Task body content goes here. This becomes the issue body.
Frontmatter fields:
| Field | Required | Description |
|---|---|---|
title |
Yes | Issue title |
labels |
No | Array of GitHub labels: [label1, label2, ...] |
parent |
No | Parent issue reference (#42 or full URL) |
project |
No | GitHub project to add the issue to. Supports: owner/number (e.g., my-org/1), number (uses current repo's owner), or project title. If omitted, auto-discovers from repository. |
Workflow
- Script finds all
TASK-???.mdfiles matching the pattern - For each file:
- Parses YAML frontmatter to extract title, labels, parent, project
- Creates temp file with body content (frontmatter stripped)
- Runs
gh issue create --title <title> --label <label1> --label <label2> ... --body-file <temp> - Adds issue to the specified project (or auto-discovered project from repo)
- If parent specified, creates sub-issue relationship via
gh api - Deletes temp file
Project Resolution
The script determines which project to use in this order:
- Frontmatter
projectattribute - If specified in the task file, use this project - Repository project - If no
projectattribute, auto-discover from the repository's linked projects - No project - If neither is found (or
--no-projectflag is set), skip project assignment
Prerequisites
ghCLI installed and authenticated- For project integration:
gh auth login --scopes 'project' - Repository context (run from within a git repo or use
gh repo set-default)
Examples
# Preview what will be created
python ./scripts/create_gh_issues.py ./tasks --dry-run
# Create the issues (uses project from frontmatter or auto-discovers)
python ./scripts/create_gh_issues.py ./tasks
# Create issues without adding to any project
python ./scripts/create_gh_issues.py ./tasks --no-project