Finishing a Development Branch
obra/superpowers
Walks the last step of a branch: confirm tests pass, detect the git environment, ask how to integrate, carry out your choice and clean up the worktree.
Use the grit CLI for version control in Git repositories — status, diffs, commits, branches, merges, cherry-picks, fetch/pull/push and tags — with JSON output for scripts and agents.
$ npx skills add gitbutlerapp/grit --skill grit -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install gitbutlerapp/grit grit --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/gitbutlerapp/grit.git skills-src && mkdir -p .claude/skills && cp -r skills-src/grit-cli/src/commands .claude/skills/grit && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "grit" agent skill from https://github.com/gitbutlerapp/grit/tree/main/grit-cli/src/commands into .claude/skills/grit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "grit", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/gitbutlerapp/grit/tree/main/grit-cli/src/commandsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add gitbutlerapp/grit --skill grit -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install gitbutlerapp/grit grit --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/gitbutlerapp/grit.git skills-src && mkdir -p .agents/skills && cp -r skills-src/grit-cli/src/commands .agents/skills/grit && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "grit" agent skill from https://github.com/gitbutlerapp/grit/tree/main/grit-cli/src/commands into .agents/skills/grit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "grit", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add gitbutlerapp/grit --skill grit -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install gitbutlerapp/grit grit --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/gitbutlerapp/grit.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/grit-cli/src/commands .cursor/skills/grit && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "grit" agent skill from https://github.com/gitbutlerapp/grit/tree/main/grit-cli/src/commands into .cursor/skills/grit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "grit", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/gitbutlerapp/grit.git --path grit-cli/src/commands--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add gitbutlerapp/grit --skill grit -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install gitbutlerapp/grit grit --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/gitbutlerapp/grit.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/grit-cli/src/commands .gemini/skills/grit && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "grit" agent skill from https://github.com/gitbutlerapp/grit/tree/main/grit-cli/src/commands into .gemini/skills/grit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "grit", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install gitbutlerapp/grit gritInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add gitbutlerapp/grit --skill grit -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/gitbutlerapp/grit.git skills-src && mkdir -p .github/skills && cp -r skills-src/grit-cli/src/commands .github/skills/grit && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "grit" agent skill from https://github.com/gitbutlerapp/grit/tree/main/grit-cli/src/commands into .github/skills/grit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "grit", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add gitbutlerapp/grit --skill grit -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install gitbutlerapp/grit grit --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/gitbutlerapp/grit.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/grit-cli/src/commands .opencode/skills/grit && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "grit" agent skill from https://github.com/gitbutlerapp/grit/tree/main/grit-cli/src/commands into .opencode/skills/grit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "grit", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
gritUse the grit CLI for version control in Git repositories — status, diffs, commits, branches, merges, cherry-picks, fetch/pull/push and tags — with JSON output for scripts and agents.
Grit is an agent skill from gitbutlerapp/grit. Use the grit CLI for version control in Git repositories — status, diffs, commits, branches, merges, cherry-picks, fetch/pull/push and tags — with JSON output for scripts and agents. Use when a task involves committing, branching, syncing with a remote or reading history and grit is installed.
Its SKILL.md is about 1.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 26 other files.
It sits in Development, covering Git workflow. It works with Git. The repository describes itself as: Reimplementing Git in Rust. Like a boss. The licence is MIT.
Read from SKILL.md and the folder at commit 5429f7c. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships script files (Rust, from the files we listed), which the agent can run.
Shell commands in SKILL.md call:
gitFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
grit-scm.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Grit loads about 1.5k tokens when it runs. Until then it costs about 75 tokens; SKILL.md has 837 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from gitbutlerapp/grit at commit 5429f7c, republished under its MIT licence (© gitbutlerapp). 837 words, ~1,510 tokens.
.claude/skills/grit/SKILL.md (or your agent's skills folder). This skill also uses 26 other files; get the full folder from GitHub.grit is a small, opinionated Git client. It reads and writes ordinary Git repositories, so git and grit can be used on the same repository. It does not mirror Git's commands or flags: there is usually one obvious way to do each thing, and every command can answer in JSON.
This skill was generated by grit {version}. Run grit <command> --help for the exact options of the installed version.
--json whenever you will read the result. stdout then holds exactly one JSON object; progress and prompts go to stderr.--filter '<jq-like expr>' (with --json) to keep only what you need: grit status --json --filter '{branch, clean}'.{"error": "…"}. Exit code 2 is a usage error (unknown flag or command) and has no JSON.grit commit a message. It never opens an editor.grit commit -a, git add -p, rebase, stash, reset and --amend don't exist here; see "What grit doesn't do".$ grit status --jsonPlain grit is the same as grit status. Keys: branch, detached, head, target (the branch your work is headed for), ahead, commits (up to ten not on the target), staged, unstaged, untracked, clean.
The target branch is the first that exists of: the target.branch config value, origin/master, origin/main, master, main. Change it with grit config target.branch origin/develop.
| Task | Command |
|---|---|
| Uncommitted changes as a diff | grit diff |
| The change one commit made | grit diff <commit> |
| A commit's message and file summary | grit show [<commit-or-branch-or-tag>] |
| Recent history, ten at a time | grit log, then grit log --before <next> using the next value |
| Commits on this branch not on the target | grit shortlog |
Revisions can be full or short ids, branch or tag names, or expressions like HEAD~2.
$ grit commit -m "Explain what changed and why"grit commit stages every change first (modified, deleted and untracked files) and then commits. There is no way to commit only some files: if only part of the work belongs in this commit, finish or move the rest aside first. grit add [<path>…] stages files so you can review them in grit status, but it doesn't limit what grit commit records.
grit commit fails with "nothing to commit" on a clean tree and refuses a detached HEAD.
| Task | Command |
|---|---|
| List branches | grit branch |
| Create a branch at the current commit (no switch) | grit branch <name> |
| Create and switch | grit switch -c <name> |
| Switch | grit switch <name> (also grit checkout, grit co) |
| Delete a merged branch | grit branch -d <name> |
| Delete regardless | grit branch -D <name> |
grit switch, grit merge, grit pick and grit pull refuse to run with uncommitted changes. Commit first. They also refuse rather than overwrite an untracked file.
grit merge <branch> fast-forwards when it can, otherwise records a merge commit. <branch> can be local or remote-tracking (origin/main).grit pick <commit> applies one non-merge commit to the current branch as a new commit, keeping its author and message.git merge <branch> (or git cherry-pick <commit>), fix the files and commit.| Task | Command |
|---|---|
| Copy a repository | grit clone <url> [<dir>] |
| List or add remotes | grit remote, grit remote add <name> <url> |
| Download without changing your branch | grit fetch [<remote>] |
| Fetch and merge the remote copy of this branch | grit pull |
Publish this branch to origin under the same name | grit push |
| Publish all local tags | grit push --tags |
grit push never force-pushes. If the remote has commits you don't, the push is rejected (exit 1, "rejected": true); run grit pull, then push again.
URLs can be https://, ssh://, user@host:path, git://, file:// or a local path.
grit tag lists tags, grit tag <name> creates a lightweight tag at the current commit, grit tag -d <name> deletes one.grit config <key> reads, grit config <key> <value> sets, grit config --unset <key> removes, grit config --list lists. Add --global for the per-user file.grit auth once in an interactive session (it uses a browser device flow). After that, fetch, pull and push use the stored token. When stdin isn't a terminal, grit won't prompt to sign in; it fails with a hint instead.GIT_SSH_COMMAND='ssh -o BatchMode=yes' so a missing key or unknown host fails fast instead of waiting for input.grit update in automation; it reinstalls the binary.grit manager, grit upload-pack and grit receive-pack are plumbing that speaks Git protocols on stdin/stdout. Don't call them directly.grit has no equivalent of rebase, stash, reset, revert, commit --amend, partial staging, interactive commands, annotated or signed tags, or conflict resolution. When a task needs one of these, use git on the same repository and come back to grit afterwards.
© gitbutlerapp, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 26 other files in grit-cli/src/commands of gitbutlerapp/grit.
Open the folder on GitHubat commit 5429f7c
Grit next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Grit this skillgitbutlerapp/grit | 539 | — | ~1.5k | Automated safety check: Pass | MIT | |
| Finishing a Development Branchobra/superpowers | 297k | 5 repos | ~1.9k | Automated safety check: Pass | MIT | |
| Code Design Rationale Investigatorcursor/plugins | 11k | 9 repos | ~2.6k | Automated safety check: Pass | None | |
| Contributor-First PR MergeHKUDS/OpenHarness | 16k | 1 repos | ~847 | Automated safety check: Pass | MIT | |
| Migrate Internal Package into GhostTryGhost/Ghost | 56k | — | ~3.8k | Automated safety check: Pass | MIT | |
| Create Pull Requestcline/cline | 70k | 1 repos | ~1.6k | Automated safety check: Pass | Apache-2.0 |
obra/superpowers
Walks the last step of a branch: confirm tests pass, detect the git environment, ask how to integrate, carry out your choice and clean up the worktree.
cursor/plugins
Digs into why code is shaped the way it is by checking git history, pull requests and connected tools in parallel, then reporting a cited read on the tradeoffs.
HKUDS/OpenHarness
Merges external GitHub pull requests while keeping the original author credited, and fixes conflicts after the merge instead of rewriting the contribution.
TryGhost/Ghost
Moves a package from another TryGhost repository into Ghost as an internal workspace package while keeping its Git history, with checkpoints for the steps that need an administrator.
cline/cline
Opens a GitHub pull request from your current branch with the gh CLI, after reviewing the commits and diff and gathering the details the PR needs.
tailcallhq/forgecode
Resolves Git merge conflicts with a plan-first workflow that keeps both sides' intent, regenerates lock files and backs up deleted-but-modified files.
gitbutlerapp/grit
Commit, push, branch, and manage version control with GitButler.
Works with
Categories
Use the grit CLI for version control in Git repositories — status, diffs, commits, branches, merges, cherry-picks, fetch/pull/push and tags — with JSON output for scripts and agents. Grit is an agent skill from gitbutlerapp/grit. Use the grit CLI for version control in Git repositories — status, diffs, commits, branches, merges, cherry-picks, fetch/pull/push and tags — with JSON output for scripts and agents.
Grit fits situations like: A task involves committing; syncing with a remote; reading history and grit is installed.
Run `npx skills add gitbutlerapp/grit --skill grit -a claude-code`. Or copy the skill folder (grit-cli/src/commands in gitbutlerapp/grit) into .claude/skills/grit in your project. Claude Code loads it when a task matches its description.
Run `npx skills add gitbutlerapp/grit --skill grit -a codex`. Or copy the skill folder (grit-cli/src/commands in gitbutlerapp/grit) into .agents/skills/grit in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add gitbutlerapp/grit --skill grit -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/grit, .gemini/skills/grit, .github/skills/grit and .opencode/skills/grit in your project.
Going by SKILL.md and its folder, Grit needs Rust for the scripts in its folder and the command-line tools its instructions call (git).
SKILL.md names 1 domain. As links in the text: grit-scm.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Grit is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.5k tokens (SKILL.md is roughly 6k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Grit: Finishing a Development Branch (obra/superpowers, 297k stars), Code Design Rationale Investigator (cursor/plugins, 11k stars), Contributor-First PR Merge (HKUDS/OpenHarness, 16k stars) and Migrate Internal Package into Ghost (TryGhost/Ghost, 56k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
gitbutlerapp (a GitHub organization) maintains it in gitbutlerapp/grit, which has 539 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on October 10, 2026.
Source: gitbutlerapp/grit on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.