Skip to main content

Sync local planning files to GitHub Issues.

Project description

Planhub

Planhub is a CLI app that syncs local planning artifacts (plans, issues, milestones written as .md files) to GitHub Issues via the API.

Goals

  • Keep planning artifacts in git and reviewable.
  • Generate/update GitHub issues and milestones from local files.
  • Make planning conversational: we can edit .md files and sync later.

How It Works

Planhub keeps planning data next to the code it describes. Each repository gets a .plan/ folder containing milestones and issues as Markdown files with YAML front matter. You edit these files like normal docs, then planhub sync maps them to GitHub issues and milestones.

Installation

Global install from PyPI (recommended for CLI usage). pipx gives you a clean CLI install without polluting your system Python, and puts planhub on your PATH:

pipx install planhub

Project-local install with uv (inside your repo). This keeps the tool in a virtual environment for that repo:

uv venv
uv pip install planhub

Commands

  • planhub init
    • Creates the standard .plan/ structure in the current repo.
    • Use --dry-run to preview the folders that would be created.
  • planhub sync
    • Reads .plan/ files and creates or updates GitHub issues and milestones.
    • Writes the GitHub number back into each file after creation.
    • Sync runs in three phases: parse files, build a sync plan, then apply it.
    • Use --dry-run to validate files without writing changes.
    • Use --import-existing to pull existing GitHub issues into .plan/. This requires credentials and a GitHub remote.origin.url.
    • Creating issues or milestones also requires credentials and a GitHub remote.origin.url.
    • Sync never deletes local files. If something can’t be identified, it reports an error and skips removal.

Credentials

Planhub can reuse your GitHub CLI session or a token stored in the environment. The simplest path is to authenticate once with gh, and the CLI will fetch a token automatically.

gh auth login

Alternatively, create a personal access token and export it:

  1. GitHub → Settings → Developer settings → Personal access tokens.
  2. Create a fine-grained token for the target repo(s).
  3. Grant Issues: Read (and Write if you will push updates later).
export GITHUB_TOKEN=ghp_your_token_here

Suggested Data Repo Layout

.plan/
  issues/
    20260127-backlog-issue.md
  milestones/
    stage-1/
      milestone.md
      issues/
        issue-001.md
      assets/
        diagram.png

Front Matter Tips

  • milestone can be a title or a number; use milestone: null to clear it.
  • Use labels: [] or assignees: [] to remove them on GitHub.
  • state_reason requires state: "closed".

Next Steps

  • Implement the parsing + GitHub sync logic.
  • Add CI to validate file formats.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

planhub-0.1.0.tar.gz (80.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

planhub-0.1.0-py3-none-any.whl (29.4 kB view details)

Uploaded Python 3

File details

Details for the file planhub-0.1.0.tar.gz.

File metadata

  • Download URL: planhub-0.1.0.tar.gz
  • Upload date:
  • Size: 80.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for planhub-0.1.0.tar.gz
Algorithm Hash digest
SHA256 67920b0d1de8221d456d00981a0815d37b93401eeba9dc3d0f34e904de94efd3
MD5 3e05b75cdfd2cf50ce66acab6f1bca29
BLAKE2b-256 c3f88d49f39386b9b1fe6dc04c96771bec1b482a4cdc60c532d862e9dda57205

See more details on using hashes here.

File details

Details for the file planhub-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: planhub-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 29.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for planhub-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 aa45184b710f2ad831d6fef966ef473cf64f358a6c02212acf1d5e2d71972c93
MD5 132d224106907ba4466cdb0a7a42a765
BLAKE2b-256 0396c9250cba9f1c6bd6bfe61e4749f9776b897a196cb3ff58fe6b2af8e37e61

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page