Skip to main content

Gitscaffold – Generate GitHub Issues from Markdown Roadmaps

CI

Gitscaffold is a command-line tool and GitHub Action that converts Markdown-based roadmaps into GitHub issues and milestones using AI-driven extraction and enrichment.

Key Features

  • AI-Powered Issue Extraction: Convert free-form Markdown documents into structured GitHub issues using OpenAI.
  • Roadmap Synchronization (sync): Compare your Markdown roadmap with an existing GitHub repository and interactively create missing issues to keep them aligned.
  • Bulk Delete Closed Issues (delete-closed): Clean up your repository by permanently removing all closed issues, with dry-run and confirmation steps.
  • Cleanup Issue Titles (sanitize): Strip leading Markdown header characters from existing GitHub issue titles, with preview and confirmation.
  • Deduplicate Issues (deduplicate): Find and close duplicate open issues based on their title.
  • AI Enrichment: Enhance issue descriptions with AI-generated content for clarity and context.
  • Show Next Action Items (next): Display open issues for the earliest active milestone.
  • Show Next Task (next-task): Display or select your next open task for the current roadmap phase, with optional random pick and browser opening.
  • Diff Local Roadmap vs GitHub Issues (diff): Compare your local Markdown roadmap file against your repository’s open and closed issues.
  • Flexible Authentication: Supports GitHub tokens and OpenAI keys via environment variables, .env files, or command-line options.

Installation

pip install gitscaffold

Authentication and API Keys

gitscaffold requires a GitHub Personal Access Token (PAT) for interacting with GitHub and an OpenAI API key for AI-driven features.

You can provide these keys in a few ways:

  1. Environment Variables: Set GITHUB_TOKEN and OPENAI_API_KEY in your shell.
  2. .env file: Create a .env file in your project's root directory. gitscaffold will automatically load it.
    GITHUB_TOKEN="your_github_personal_access_token"
    OPENAI_API_KEY="your_openai_api_key"
    
    • GitHub Token (GITHUB_TOKEN):
      • You'll need a Personal Access Token (PAT).
      • For operations on existing repositories (e.g., gitscaffold create, gitscaffold import-md), the token primarily needs the issues:write permission.
      • If you use commands that create new repositories (e.g., gitscaffold setup-repository from the scaffold.cli or ./gitscaffold.py setup), your PAT will need the repo scope (which includes public_repo and repo:status).
    • OpenAI API Key (OPENAI_API_KEY): This is your standard API key from OpenAI.
    • Important: Add your .env file to your .gitignore to prevent accidentally committing your secret keys.
  3. Command-line Options: Pass them directly, e.g., --token YOUR_GITHUB_TOKEN.

If a token/key is provided via a command-line option, it will take precedence over environment variables or .env file settings. If not provided via an option, environment variables are checked next, followed by the .env file. Some commands like gitscaffold create may prompt for the GitHub token if it's not found.

Getting Started: A Basic Workflow

Here's how to use gitscaffold to populate a new repository with issues from a roadmap:

  1. Create a Roadmap File

    Create a file named docs/ROADMAP.md and add your project structure. You can start with a simple structured format like this:

    {
        "name": "My New Project",
        "milestones": [
            {
                "name": "v1.0: Launch",
                "due_date": "2025-12-31"
            }
        ],
        "features": [
            {
                "title": "Setup initial project structure",
                "milestone": "v1.0: Launch",
                "labels": ["setup", "chore"]
            },
            {
                "title": "Implement user authentication",
                "milestone": "v1.0: Launch",
                "labels": ["feature", "auth"],
                "tasks": [
                    { "title": "Add login page" },
                    { "title": "Add registration page" }
                ]
            }
        ]
    }
    
  2. Sync with GitHub

    Run the sync command to create the milestones and issues in your repository. gitscaffold will show you a plan and ask for confirmation before making any changes.

    # Make sure you have set GITHUB_TOKEN
    gitscaffold sync docs/ROADMAP.md --repo your-github-name/your-repo
    

    That's it! Your repository is now populated based on your roadmap.

Example: Running Gitscaffold on Itself

You can run gitscaffold on its own repository to see it in action. The diff command is a great way to compare the docs/ROADMAP.md file with the current state of GitHub issues.

This is a process often called "dogfooding"—using your own product.

  1. Install from source: Make sure you have installed gitscaffold in editable mode from your local clone as described in the "From the source checkout" section.

  2. Set your GitHub Token: Ensure you have set your GITHUB_TOKEN environment variable.

  3. Run the diff command:

    # From the root of the gitscaffold repository:
    gitscaffold diff docs/ROADMAP.md --repo josephinedward/gitscaffold
    

Interpreting the Output

The command will analyze the repository and produce a report. If the roadmap and issues are perfectly aligned, you'll see:

✅ Roadmap and GitHub issues are perfectly in sync. No differences found.

Or, if there are discrepancies, the output will look something like this:

⚠️ Found differences between docs/ROADMAP.md and GitHub issues for josephinedward/gitscaffold.

Items in docs/ROADMAP.md but not in GitHub:
- [ ] A new task that was just added to the roadmap

Issues on GitHub but not in docs/ROADMAP.md:
- #99: A bug report filed directly on GitHub

This provides a clear overview of the alignment between your plan and the work being tracked in GitHub.

CLI Usage

Use sync to create and update GitHub issues from a structured roadmap file. It compares the roadmap with the repository and creates any missing milestones or issues.

# Sync with a structured roadmap file (e.g., docs/ROADMAP.md containing JSON)
gitscaffold sync docs/ROADMAP.md --repo owner/repo

# To enrich descriptions of new issues with AI during sync
gitscaffold sync docs/ROADMAP.md --repo owner/repo --ai-enrich

# Simulate the sync operation without making changes
gitscaffold sync docs/ROADMAP.md --repo owner/repo --dry-run

Delete closed issues

Use delete-closed to permanently remove all closed issues from a specified repository. This action is irreversible and requires confirmation.

# List closed issues that would be deleted (dry run)
gitscaffold delete-closed --repo owner/repo --token $GITHUB_TOKEN --dry-run

# Delete all closed issues (will prompt for confirmation)
gitscaffold delete-closed --repo owner/repo --token $GITHUB_TOKEN

Sanitize Issue Titles

Use sanitize to remove leading Markdown header markers (e.g., #) from existing issue titles in a repository.

# Dry-run: list titles that need cleanup
gitscaffold sanitize --repo owner/repo --token $GITHUB_TOKEN --dry-run

# Apply fixes (will prompt for confirmation)
gitscaffold sanitize --repo owner/repo --token $GITHUB_TOKEN

Show Next Action Items

Use next to view open issues from the earliest active milestone in your repository. If there are no active milestones but open issues exist on GitHub, next will pick one at random. Only if there are no open issues will it fall back to your local roadmap tasks (from docs/ROADMAP.md by default).

# List open issues for the next milestone:
gitscaffold next --repo owner/repo --token $GITHUB_TOKEN

# If no milestones, pick a random open issue:
gitscaffold next --repo owner/repo --token $GITHUB_TOKEN

# If no open issues at all, fall back to local roadmap tasks:
gitscaffold next --repo owner/repo --token $GITHUB_TOKEN --roadmap-file docs/ROADMAP.md

Show Next Task for Current Phase

Use next-task to pick your next open task for the current roadmap phase. By default, the oldest task is shown; use --pick to choose randomly and --browse to open it in your browser.

gitscaffold next-task ROADMAP_FILE --repo owner/repo --token $GITHUB_TOKEN [--pick] [--browse]

Diff Roadmap and GitHub Issues

Use diff to compare a local roadmap file against GitHub issues. It lists items present in your roadmap but missing on GitHub, and issues on GitHub not in your roadmap.

For unstructured Markdown roadmaps, AI extraction is prompted by default; disable with the --no-ai flag.

# Compare a structured roadmap file
gitscaffold diff docs/ROADMAP.md --repo owner/repo

# Compare an unstructured roadmap file using AI
gitscaffold diff docs/brainstorm.md --repo owner/repo --ai

From the source checkout

Clone this repository, install it in editable mode, and use the gitscaffold CLI:

# Clone and install
git clone https://github.com/josephedward/gitscaffold.git
cd gitscaffold
pip install -e .

# Now any command is available via `gitscaffold`:
gitscaffold setup
gitscaffold sync docs/ROADMAP.md --repo owner/repo
gitscaffold import-md markdown_roadmap.md --repo owner/repo
gitscaffold delete-closed --repo owner/repo
gitscaffold enrich batch --repo owner/repo --path docs/ROADMAP.md --apply

Audit Repository (cleanup, deduplicate, diff)

Use the provided scripts/audit.sh to run cleanup, deduplicate, and diff in one go. It will prompt for your GitHub repo, token, and local roadmap file.

bash scripts/audit.sh

GitHub Action Usage

name: Sync Roadmap to Issues
on: workflow_dispatch
jobs:
  scaffold:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Run Gitscaffold CLI
        uses: your-org/gitscaffold-action@vX.Y.Z
        with:
          roadmap-file: docs/example_roadmap.md
          repo: ${{ github.repository }}
          github-token: ${{ secrets.GITHUB_TOKEN }}
          dry-run: 'true'

Metadata

Release files for gitscaffold 0.1.17

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for gitscaffold 0.1.17
File Size Uploaded Provenance
gitscaffold-0.1.17.tar.gz 49.0 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for gitscaffold 0.1.17
File Interpreter ABI Platform
gitscaffold-0.1.17-py3-none-any.whl Python 3 none any Details

Total release size: 87.3 kB

Release files / gitscaffold-0.1.17.tar.gz

Download URL gitscaffold-0.1.17.tar.gz
Size 49.0 kB
Tags Source
SHA-256 checksum
How to use checksums
4679a71179bb5be31fa57409de23f3f8561a7c6a99ecfb6cbb9deae8df715b75
BLAKE2b-256 checksum
How to use checksums
7877255b099d924909da3beb9878adc20feae59b51a0ca8c63543216b420728d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.0

Release files / gitscaffold-0.1.17-py3-none-any.whl

Download URL gitscaffold-0.1.17-py3-none-any.whl
Size 38.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
abc8d71bdd041d6c2a4b0257fc67955aa647868237d3bf127cb3f15f756e0fb3
BLAKE2b-256 checksum
How to use checksums
aff91a74663c7a24b03b5610f3c6ce7a788b043188f314b5f53b08dd36ec92fb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.0

Security for gitscaffold 0.1.17

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page