Skip to content

t1k:projects

FieldValue
Modulegithub
Version0.7.3
Effortmedium
Tools

Keywords: add to project, backlog column, gh project, github project, item-edit, move card, project board, project v2, projectv2, set status on board, single-select

/t1k:projects

Drive GitHub Projects (V2) boards entirely through the gh CLI (gh project ...), falling back to gh api graphql only for the few ProjectV2 operations gh does not expose. No MCP — the GitHub MCP server has no ProjectV2 tools and we intentionally do not add one.

Projects V2 are owned by an org or user (not a repo). All commands take --owner <org-or-user> and a project number (the N in github.com/orgs/<org>/projects/N).

gh project requires the project scope on your token. Verify and refresh once:

Terminal window
gh auth status # look for "Token scopes:" — must include 'project' (and 'read:project')
gh auth refresh -s project # adds the scope if missing (opens browser/device flow)

Without it every gh project call fails with your token has not been granted the required scopes.

GoalCommandReference
Find a project’s numbergh project list --owner <org>references/discover.md
Read items / fieldsgh project item-list / field-listreferences/read.md
Add an existing issue/PRgh project item-addreferences/items.md
Add a draft notegh project item-createreferences/items.md
Set a text/number/date fieldgh project item-edit --text/--number/--datereferences/edit-fields.md
Move card to a Status columngh project item-edit --field-id … --single-select-option-id …references/edit-fields.md
Set an iteration (sprint)gh project item-edit --field-id … --iteration-id …references/edit-fields.md
Archive / delete an itemgh project item-archive / item-deletereferences/items.md
Add/remove a field; link a repogh project field-create / linkreferences/structure.md
Anything gh lacksgh api graphqlreferences/graphql.md

The one workflow you must understand — moving a card across columns

Section titled “The one workflow you must understand — moving a card across columns”

The Status column is a single-select field. To set it you need TWO ids that are NOT human-readable — get them from field-list --format json:

  1. The field id of the Status field (PVTSSF_…).
  2. The option id of the target column value, e.g. Done ().
Terminal window
# 1. Resolve the field id and the option id for the target column
gh project field-list <N> --owner <org> --format json \
| jq '.fields[] | select(.name=="Status") | {id, options}'
# 2. Resolve the item id (PVTI_…) for the issue/PR
gh project item-list <N> --owner <org> --format json \
| jq '.items[] | select(.content.number==123) | .id'
# 3. Move the card
gh project item-edit \
--project-id <PVT_…> \
--id <PVTI_…> \
--field-id <PVTSSF_…> \
--single-select-option-id <option-id>

item-edit requires the project node id (PVT_…), not the number — get it from gh project view <N> --owner <org> --format json | jq .id. Full id-plumbing and a copy-paste resolver script: references/edit-fields.md.

  • Add every open issue in a repo to a boardreferences/recipes.md § add-all-open-issues
  • Set Status=Done when a PR mergesreferences/recipes.md § status-on-merge
  • Bulk-move several itemsreferences/recipes.md § bulk-move

Boundary — what this skill does NOT do (SSOT)

Section titled “Boundary — what this skill does NOT do (SSOT)”

This skill is Projects-board-only. It complements, and never duplicates, these core skills:

For…Use instead
Git operations (commit, push, branch, PR create/merge)t1k-git
Filing skill/agent bugs against a kit repot1k-issue
Triaging issues / PRs (labeling, prioritizing, processing)t1k-triage
Watching a PR’s CI to greent1k-babysit-pr

Creating or editing the issues/PRs themselves is out of scope — this skill only places them on a board and moves them between columns.

  • gh project takes the project number; gh api graphql and item-edit --project-id take the node id (PVT_…). Mixing them up is the most common error — see references/edit-fields.md.
  • --owner is mandatory and is the org or user login, never a repo name.
  • item-add needs the issue/PR URL, not its number.
  • A draft created with item-create has no content — it cannot be converted to a real issue via gh; use the web UI or GraphQL.
  • Org projects may require SSO authorization on the token: gh auth refresh -s project then authorize the org if prompted.