en un clic
en un clic
Execute a list of tasks as a stack of PRs using Graphite (`gt`). Each task becomes one branch, one commit, one PR. Use when the project uses stacked PRs via Graphite and you have multiple tasks to ship.
Stacked PRs with Graphite CLI (gt)
Expert guidance on Neovim configuration, plugin management, lazy.nvim, LSP setup, and editor workflow optimization
Walk a Graphite stack bottom-to-top, fixing PR review comments on each branch
Distribute uncommitted changes across a Graphite stack using a backup branch
Generate feature documentation — PRDs, RFCs, ADRs, plans, technical docs, tasks, guides, testing docs, runbooks, and changelogs — individually or as a progressive pipeline covering a feature's full lifecycle
| name | charcoal |
| description | Stacked PRs with Charcoal CLI (charcoal) |
Manage development work as stacked pull requests using the Charcoal CLI
(charcoal). Charcoal is an open-source (MIT), local-only fork of Graphite for
managing stacked PRs without external services.
github.com/danerwilliams/charcoalbrew install danerwilliams/tap/charcoal| Term | Meaning |
|---|---|
| Trunk | Main branch (main/master) — base of all stacks |
| Stack | Chain of dependent branches, each building on the one below |
| Upstack | Branches above the current one (depend on current) |
| Downstack | Branches below the current one (current depends on) |
| Restack | Rebase all branches to maintain proper parent chain |
charcoal sync
charcoal checkout main
# Make changes, then:
charcoal create --all --message "feat(scope): description of first task"
# Push and create the PR
charcoal submit
# Already on first task's branch — make more changes, then:
charcoal create --all --message "feat(scope): description of next task"
# Push the entire stack
charcoal submit --stack
charcoal log short # Compact stack view
charcoal ls # Alias
charcoal pr # Open current PR in browser
charcoal up # Move to child branch (one step up)
charcoal down # Move to parent branch (one step down)
charcoal top # Jump to top of stack
charcoal bottom # Jump to bottom of stack
charcoal checkout # Interactive branch picker
charcoal checkout NAME # Jump to specific branch
# Stage and amend — auto-restacks upstack branches
charcoal modify --all
# or: charcoal modify -a
# Create a new commit on the branch instead
charcoal modify --all --commit --message "address review feedback"
# Push updates
charcoal submit --stack
charcoal checkout parent-branch
charcoal create --all --message "fix(scope): inserted fix"
charcoal restack
charcoal submit --stack
charcoal split # Split by commit, hunk, or file
charcoal fold # Merge current branch's changes into parent
charcoal sync
Handles: pulling trunk, rebasing stacks, cleaning up merged branches.
charcoal restack
# 1. Resolve conflicts in your editor
# 2. Stage resolved files
git add .
charcoal continue
# Or abort
charcoal abort
charcoal undo
# Submit current branch only
charcoal submit
# Submit entire stack
charcoal submit --stack
# Merge from CLI
charcoal merge
# After merging
charcoal sync
| Command | Purpose |
|---|---|
charcoal create -am "msg" | Create branch with all changes committed |
charcoal modify -a | Amend current commit, auto-restack upstack |
charcoal submit | Push and create/update PR |
charcoal submit --stack | Push and create/update all PRs in stack |
charcoal sync | Pull trunk, rebase stacks, clean merged |
| Command | Purpose |
|---|---|
charcoal up [steps] | Move to child branch |
charcoal down [steps] | Move to parent branch |
charcoal top | Jump to top of stack |
charcoal bottom | Jump to bottom of stack |
charcoal checkout [branch] | Interactive branch picker |
charcoal log short | View stack tree |
| Command | Purpose |
|---|---|
charcoal restack | Fix parent chain integrity |
charcoal split | Split branch by commit/hunk/file |
charcoal fold | Merge branch into parent |
charcoal rebase -i | Interactive rebase preserving children |
| Command | Purpose |
|---|---|
charcoal delete [name] | Delete branch, restack children |
charcoal rename [name] | Rename current branch |
charcoal track [branch] | Start tracking branch with Charcoal |
charcoal untrack [branch] | Stop tracking branch |
| Command | Purpose |
|---|---|
charcoal pr | Open PR in browser |
charcoal merge | Merge PR via Charcoal |
| Command | Purpose |
|---|---|
charcoal continue | Resume after conflict resolution |
charcoal abort | Cancel in-progress rebase |
charcoal undo | Undo last Charcoal operation |
charcoal sync — start from a clean, up-to-date trunkcharcoal create --all --message "type(scope): description" c.
charcoal submit --stackcharcoal sync if trunk has advancedcharcoal checkout branch, fix,
charcoal modify -a, charcoal submit --stackcharcoal sync to clean upFollow conventional commits:
feat(scope): add new feature
fix(scope): fix the bug
refactor(scope): restructure without behavior change
test(scope): add or update tests
docs(scope): documentation only
chore(scope): maintenance tasks