
Graphite
- 8k installs
- 6 repo stars
- Updated February 18, 2026
- withgraphite/agent-skills
graphite is an agent skill for Graphite gt stacked PRs: create, navigate, modify, restack, and submit with gh PR descriptions.
About
The graphite skill teaches agents to work with Graphite gt for stacked pull requests. Quick reference covers gt create, modify, up, down, top, bottom, ls, submit, restack, track, rename, move, and delete. It emphasizes atomic hermetic PRs with narrow semantic scope and small diffs, arguing for more PRs rather than fewer when each passes CI independently. Branch naming follows terse-stack-feature or terse-description syntax. Workflows handle untracked branches in worktrees via gt track, stack creation with git add plus gt create, restack onto main before submit, and surgical git rebase when gt restack hits unrelated conflicts. PR descriptions use Write tool plus gh pr edit --body-file, never heredocs, and include stack context and why sections. Troubleshooting maps untracked branches, wrong parents, reorder needs, and interrupted rebases to concrete gt and git recovery steps.
- Quick reference for gt create, modify, navigate, submit, restack, track, rename, move, delete.
- Advocates atomic hermetic PRs with narrow scope; prefer more PRs over fewer.
- Branch naming: terse-stack-feature/terse-description-of-change pattern.
- Untracked branch and worktree recovery via gt track -p main before stacking.
- PR bodies via Write tool and gh pr edit --body-file with stack context and why sections.
Graphite by the numbers
- 7,989 all-time installs (skills.sh)
- +1,187 installs in the week ending Aug 4, 2026 (Skillselion tracking)
- Ranked #14 of 733 Git & Pull Requests skills by installs in the Skillselion catalog
- Security screen: MEDIUM risk (skills.sh audit)
- Data as of Aug 4, 2026 (Skillselion catalog sync)
graphite capabilities & compatibility
- Capabilities
- stack creation with gt create and modify · stack navigation with gt up down top bottom ls · restack and reparent onto main · surgical git rebase for complex stacks · gh pr edit body file pr description workflow
- Works with
- github
- Use cases
- code review · planning
What graphite says it does
Never use Bash heredocs for PR descriptions - shell escaping breaks markdown tables, code blocks, etc.
npx skills add https://github.com/withgraphite/agent-skills --skill graphiteAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 8k |
|---|---|
| repo stars | ★ 6 |
| Security audit | 3 / 3 scanners passed |
| Last updated | February 18, 2026 |
| Repository | withgraphite/agent-skills ↗ |
How do I create and manage stacked pull requests with Graphite gt without breaking tracking or review flow?
Create, navigate, modify, and submit stacked pull requests with Graphite gt commands and gh PR descriptions.
Who is it for?
Teams using Graphite gt for stacked PRs who want agent-guided stack creation and submission.
Skip if: Skip when the repo uses plain git feature branches without Graphite stacking.
When should I use this skill?
User asks about gt commands, stacked PRs, gt submit, gt restack, or Graphite branch navigation.
What you get
Submitted PR stack rooted on main with atomic branches, clean restack, and structured PR descriptions.
- Stacked PR branches
- Submitted PR stack
- Stack-aware PR descriptions
By the numbers
- gt create modify submit restack commands
- Atomic hermetic PR guidance
- PR bodies via --body-file not heredocs
Files
Graphite Skill
Work with Graphite (gt) for creating, navigating, and managing stacked pull requests.
Quick Reference
| I want to... | Command |
|---|---|
| Create a new branch/PR | gt create branch-name -m "message" |
| Amend current branch | gt modify -m "message" |
| Navigate up the stack | gt up |
| Navigate down the stack | gt down |
| Jump to top of stack | gt top |
| Jump to bottom of stack | gt bottom |
| View stack structure | gt ls |
| Submit stack for review | gt submit --no-interactive |
| Rebase stack on trunk | gt restack |
| Change branch parent | gt track --parent <branch> |
| Rename current branch | gt rename <new-name> |
| Move branch in stack | gt move |
---
What Makes a Good PR?
In roughly descending order of importance:
- Atomic/hermetic - independent of other changes; will pass CI and be safe to deploy on its own
- Narrow semantic scope - changes only to module X, or the same change across modules X, Y, Z
- Small diff - (heuristic) small total diff line count
Do NOT worry about creating TOO MANY pull requests. It is always preferable to create more pull requests than fewer.
NO CHANGE IS TOO SMALL: tiny PRs allow for the medium/larger-sized PRs to have more clarity.
Always argue in favor of creating more PRs, as long as they independently pass build.
---
Branch Naming Conventions
When naming PRs in a stack, follow this syntax:
terse-stack-feature-name/terse-description-of-change
For example, a 4 PR stack:
auth-bugfix/reorder-args
auth-bugfix/improve-logging
auth-bugfix/improve-documentation
auth-bugfix/handle-401-status-codes---
Creating a Stack
Basic Workflow
1. Make changes to files 2. Stage changes: git add <files> 3. Create branch: gt create branch-name -m "commit message" 4. Repeat for each PR in the stack 5. Submit: gt submit --no-interactive
Handle Untracked Branches (common with worktrees)
Before creating branches, check if the current branch is tracked:
gt branch infoIf you see "ERROR: Cannot perform this operation on untracked branch":
Option A (Recommended): Track temporarily, then re-parent 1. Track current branch: gt track -p main 2. Create your stack normally with gt create 3. After creating ALL branches, re-parent your first new branch onto main:
gt checkout <first-branch-of-your-stack>
gt track -p main
gt restackOption B: Stash changes and start from main 1. git stash 2. git checkout main && git pull 3. Create new branch and unstash: git checkout -b temp-working && git stash pop 4. Proceed with gt track -p main and gt create
---
Navigating a Stack
# Move up one branch (toward top of stack)
gt up
# Move down one branch (toward trunk)
gt down
# Jump to top of stack
gt top
# Jump to bottom of stack (first branch above trunk)
gt bottom
# View the full stack structure
gt ls---
Modifying a Stack
Amend Current Branch
git add <files>
gt modify -m "updated commit message"Reorder Branches
Use gt move to reorder branches in the stack. This is simpler than trying to use gt create --insert.
Re-parent a Stack
If you created a stack on top of a feature branch but want it based on main:
# Go to first branch of your stack
gt checkout <first-branch>
# Change its parent to main
gt track --parent main
# Rebase the entire stack
gt restackRename a Branch
gt rename new-branch-name---
Resetting Commits to Unstaged Changes
If changes are already committed but you want to re-stack them differently:
# Reset the last commit, keeping changes unstaged
git reset HEAD^
# Reset multiple commits (e.g., last 2 commits)
git reset HEAD~2
# View the diff to understand what you're working with
git diff HEAD---
Before Submitting
Verify Stack is Rooted on Main
Before running gt submit, verify the first PR is parented on main:
gt lsIf the first branch has a parent other than main:
gt checkout <first-branch>
gt track -p main
gt restackRun Validation
After creating each PR, run appropriate linting, building, and testing:
1. Refer to the project's CLAUDE.md for specific commands 2. If validation fails, fix the issue, stage changes, and use gt modify
---
Submitting and Updating PRs
Submit the Stack
gt submit --no-interactiveUpdate PR Descriptions
After submitting, use gh pr edit to set proper titles and descriptions.
IMPORTANT: Never use Bash heredocs for PR descriptions - shell escaping breaks markdown tables, code blocks, etc. Instead:
1. Use the Write tool to create /tmp/pr-body.md with the full markdown content 2. Use gh pr edit with --body-file:
gh pr edit <PR_NUMBER> --title "stack-name: description" --body-file /tmp/pr-body.mdPR descriptions must include:
- Stack Context: What is the bigger goal of this stack?
- What? (optional for small changes): Super terse, focus on what not why
- Why?: What prompted the change? Why this solution? How does it fit into the stack?
Example (for a PR in a 3-PR stack adding a warning feature):
## Stack Context
This stack adds a warning on the merge button when users are bypassing GitHub rulesets.
## Why?
Users who can bypass rulesets (via org admin or team membership) currently see no indication
they're circumventing branch protection. This PR threads the bypass data from the server to
enable the frontend warning (PR 2) to display it.---
Troubleshooting
| Problem | Solution |
|---|---|
| "Cannot perform this operation on untracked branch" | Run gt track -p main first |
| Stack parented on wrong branch | Use gt track -p main then gt restack |
| Need to reorder PRs | Use gt move |
| Conflicts during restack | Resolve conflicts, then git rebase --continue |
| Want to split a PR | Reset commits (git reset HEAD^), re-stage selectively, create new branches |
| Need to delete a branch (non-interactive) | gt delete <branch> -f -q |
gt restack hitting unrelated conflicts | Use targeted git rebase <target> instead (see below) |
| Rebase interrupted mid-conflict | Check if files are resolved but unstaged, then git add + git rebase --continue |
---
Advanced: Surgical Rebasing in Complex Stacks
In deeply nested stacks with many sibling branches, gt restack can be problematic:
- It restacks ALL branches that need it, not just your stack
- Can hit conflicts in completely unrelated branches
- Is all-or-nothing - hard to be surgical
When to Use git rebase Instead of gt restack
Use direct git rebase when:
- You only want to update specific branches in your stack
gt restackis hitting conflicts in unrelated branches- You need to skip obsolete commits during the rebase
Targeted Rebase Workflow
# 1. Checkout the branch you want to rebase
git checkout my-feature-branch
# 2. Rebase onto the target (e.g., updated parent branch)
git rebase target-branch
# 3. If you hit conflicts:
# - Resolve the conflict in the file
# - Stage it: git add <file>
# - Continue: git rebase --continue
# 4. If a commit is obsolete and should be skipped:
git rebase --skip
# 5. After rebase, use gt modify to sync graphite's tracking
gt modify --no-editRecovering from Interrupted Rebase (Context Reset)
If a rebase was interrupted (e.g., Claude session ran out of context):
1. Check status:
git status
# Look for "interactive rebase in progress" and "Unmerged paths"2. Read the "unmerged" files - they may already be resolved (no conflict markers)
3. If already resolved, just stage and continue:
git add <resolved-files>
git rebase --continue4. If still has conflict markers, resolve them first, then stage and continue
Deleting Branches from a Stack
# Delete a branch (non-interactive, even if not merged)
gt delete branch-to-delete -f -q
# Also delete all children (upstack)
gt delete branch-to-delete -f -q --upstack
# Also delete all ancestors (downstack)
gt delete branch-to-delete -f -q --downstackFlags:
-f/--force: Delete even if not merged or closed-q/--quiet: Implies--no-interactive, minimizes output
After deleting intermediate branches, children are automatically restacked onto the parent. If you need to manually update tracking:
gt checkout child-branch
gt track --parent new-parent-branchRelated skills
Forks & variants (1)
Graphite has 1 known copy in the catalog totaling 11 installs. They canonicalize to this original listing.
- dagster-io - 11 installs
How it compares
graphite guides Graphite gt stacked PR workflows, not generic single-branch git tutorials.
FAQ
Who is graphite for?
Developers using Graphite gt to create, navigate, and submit stacked pull requests.
When should I use graphite?
When stacking PRs, restacking on main, fixing untracked branches, or writing stack-aware PR descriptions.
Is graphite safe to install?
Review the Security Audits panel on this page before installing in production.