Examples
Copy-paste recipes for common hyper-pm CLI tasks.
Replace placeholders like <epic-id> with ids from epic read / story read / ticket read (JSON id fields, or the first column in --format text tables).
Bootstrap a repo
cd /path/to/your/git/repo
hyper-pm init
hyper-pm doctorCreate a full hierarchy (JSON ids)
# Create and capture ids with jq (default output is JSON)
EPIC_ID=$(hyper-pm epic create --title "Payments rollout" | jq -r '.id')
STORY_ID=$(hyper-pm story create --title "ACH refunds" --epic "$EPIC_ID" | jq -r '.id')
hyper-pm ticket create --title "Idempotent webhook handler" --story "$STORY_ID" \
--priority high --size m --label backend --label paymentsHuman-readable tables
hyper-pm --format text epic read
hyper-pm --format text story read --epic <epic-id>
hyper-pm --format text ticket read --story <story-id>Standalone ticket (no story)
hyper-pm ticket create --title "Chore: rotate CI token" --status backlogList and filter tickets
# Active work
hyper-pm --format text ticket read --status todo --status in_progress
# Everything under one epic (via story membership)
hyper-pm --format text ticket read --epic <epic-id>
# Triage: unlinked tickets only
hyper-pm --format text ticket read --without-story
# By label (repeat --label; ticket must have every listed label)
hyper-pm --format text ticket read --label bug --label customer
# Sorted by last update
hyper-pm --format text ticket read --sort-by updatedAt --sort-dir descStart work from a ticket
hyper-pm ticket work --id <ticket-id>
# optional: custom branch name or fork point
hyper-pm ticket work --id <ticket-id> --branch feature/my-fix --from origin/mainComments and status
hyper-pm ticket comment --id <ticket-id> --body "Verified on staging; ready for review."
hyper-pm ticket update --id <ticket-id> --status in_progress
hyper-pm ticket update --id <ticket-id> --status donePlanning fields patch
hyper-pm ticket update --id <ticket-id> \
--priority urgent \
--size s \
--estimate 3 \
--start-at "2026-04-14T09:00:00Z" \
--target-finish-at "2026-04-18T17:00:00Z"Clear planning fields when needed:
hyper-pm ticket update --id <ticket-id> --clear-priority --clear-estimateAudit trail (text)
hyper-pm --format text audit --limit 20
hyper-pm --format text audit --type TicketUpdated --entity-id <ticket-id>
hyper-pm --format text audit --text-style plain-links --limit 50Sync and import (GitHub)
export GITHUB_REPO="owner/repo"
hyper-pm sync
hyper-pm sync --with-githubImport issues as local tickets (requires issueMapping: "ticket" in config — see GitHub sync):
hyper-pm ticket import-github --dry-run
hyper-pm ticket import-github --story <story-id> --state open
hyper-pm ticket import-github --issue 120 --issue 121After a real import, run sync --with-github once so outbound sync can normalize GitHub bodies with the hyper-pm metadata fence.
Web UI: POST /api/run
With hyper-pm-web running (default http://127.0.0.1:3847), argv is only the subcommand tail — the server injects --repo, --temp-dir, and --format json (do not put those in argv).
curl -sS -X POST "http://127.0.0.1:3847/api/run" \
-H "Content-Type: application/json" \
-d '{"argv":["epic","read"]}' | jq .Bearer auth when HYPER_PM_WEB_TOKEN is set: add -H "Authorization: Bearer $HYPER_PM_WEB_TOKEN". More detail: Web UI.
MCP: hyper_pm_run
MCP clients call the hyper_pm_run tool with JSON like {"argv":["ticket","read","--id","…"]} and optional repo, sync, etc. See MCP server.
Point at another clone
hyper-pm --repo /path/to/other/checkout --format text epic read