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.
Resolve conflicts and merges when several branches are open against one repo at the same time — the hotspot files every change must touch (registry manifests, a single version field, shared tool…
$ npx skills add kajisho5/ffmpeg-skill --skill concurrent-branches -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install kajisho5/ffmpeg-skill concurrent-branches --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/kajisho5/ffmpeg-skill.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/concurrent-branches .claude/skills/concurrent-branches && 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 "concurrent-branches" agent skill from https://github.com/kajisho5/ffmpeg-skill/tree/main/.claude/skills/concurrent-branches into .claude/skills/concurrent-branches/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "concurrent-branches", 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/kajisho5/ffmpeg-skill/tree/main/.claude/skills/concurrent-branchesType 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 kajisho5/ffmpeg-skill --skill concurrent-branches -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install kajisho5/ffmpeg-skill concurrent-branches --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kajisho5/ffmpeg-skill.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/concurrent-branches .agents/skills/concurrent-branches && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "concurrent-branches" agent skill from https://github.com/kajisho5/ffmpeg-skill/tree/main/.claude/skills/concurrent-branches into .agents/skills/concurrent-branches/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "concurrent-branches", 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 kajisho5/ffmpeg-skill --skill concurrent-branches -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install kajisho5/ffmpeg-skill concurrent-branches --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kajisho5/ffmpeg-skill.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/concurrent-branches .cursor/skills/concurrent-branches && 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 "concurrent-branches" agent skill from https://github.com/kajisho5/ffmpeg-skill/tree/main/.claude/skills/concurrent-branches into .cursor/skills/concurrent-branches/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "concurrent-branches", 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/kajisho5/ffmpeg-skill.git --path .claude/skills/concurrent-branches--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 kajisho5/ffmpeg-skill --skill concurrent-branches -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install kajisho5/ffmpeg-skill concurrent-branches --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kajisho5/ffmpeg-skill.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/concurrent-branches .gemini/skills/concurrent-branches && 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 "concurrent-branches" agent skill from https://github.com/kajisho5/ffmpeg-skill/tree/main/.claude/skills/concurrent-branches into .gemini/skills/concurrent-branches/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "concurrent-branches", 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 kajisho5/ffmpeg-skill concurrent-branchesInstalls 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 kajisho5/ffmpeg-skill --skill concurrent-branches -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/kajisho5/ffmpeg-skill.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/concurrent-branches .github/skills/concurrent-branches && 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 "concurrent-branches" agent skill from https://github.com/kajisho5/ffmpeg-skill/tree/main/.claude/skills/concurrent-branches into .github/skills/concurrent-branches/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "concurrent-branches", 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 kajisho5/ffmpeg-skill --skill concurrent-branches -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install kajisho5/ffmpeg-skill concurrent-branches --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kajisho5/ffmpeg-skill.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/concurrent-branches .opencode/skills/concurrent-branches && 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 "concurrent-branches" agent skill from https://github.com/kajisho5/ffmpeg-skill/tree/main/.claude/skills/concurrent-branches into .opencode/skills/concurrent-branches/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "concurrent-branches", 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.
concurrent-branchesResolve conflicts and merges when several branches are open against one repo at the same time — the hotspot files every change must touch (registry manifests, a single version field, shared tool…
Concurrent Branches is an agent skill from kajisho5/ffmpeg-skill. Resolve conflicts and merges when several branches are open against one repo at the same time — the hotspot files every change must touch (registry manifests, a single version field, shared tool config, one aggregated test module, tracked build output), union-vs-recompute-vs-rebuild as three different correct resolutions, generated artifacts that must never be merged, non-deterministic serialization that makes every branch conflict, renumbered identifiers that git cannot show you, and why a clean auto-merge is…
Its SKILL.md is about 2.8k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development. It works with Git. The licence is MIT.
Read from SKILL.md and the folder at commit 008333a. 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.
Shell commands in SKILL.md call:
gitjqmakeFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
github.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.
Concurrent Branches loads about 2.8k tokens when it runs. Until then it costs about 192 tokens; SKILL.md has 1,307 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 kajisho5/ffmpeg-skill at commit 008333a, republished under its MIT licence (© kajisho5). 1,307 words, ~2,809 tokens.
.claude/skills/concurrent-branches/SKILL.md (or your agent's skills folder).When several branches are open against the same repo at once, the conflicts do not land in the code you were thinking about. They land in a small, predictable set of hotspot files that nearly every change has to touch — a registry manifest, a version field, shared tool config, one aggregated test module, a tracked build output.
Each hotspot has exactly one correct resolution, and they are not the same rule. "Take ours" / "take theirs" is right for almost none of them. Worse, getting one wrong is silent: the dropped entry, the collided version, the stale bundle all merge green and are found later by someone who cannot reproduce them.
Files touched by nearly every commit are the files your branch will conflict on.
# the 15 files most commits touch — your hotspot list
git log --format= --name-only -n 200 | sort | uniq -c | sort -rn | head -15Write the resolution rule for each one into the contributing docs. Under conflict pressure, with a stale branch and a red CI run, nobody re-derives "the version field is recomputed, not merged" correctly.
A manifest that lists every component — plugin entries, module paths, exported names, a feature list. Two branches each append an entry, and the conflict spans both additions:
<<<<<<< HEAD
"./components/exporter",
"./components/importer" // theirs, already merged to main
=======
"./components/exporter",
"./components/validator" // yours
>>>>>>> feature/validatorBoth sides are correct and neither is a substitute for the other. Resolve by keeping every entry from both sides. Taking a side deletes a component that is still fully present in the tree — the code compiles, the tests pass, and the component is simply never registered or installed.
Nothing catches that unless you check the registry against the filesystem:
# every registered path exists
jq -r '.plugins[].components[]' manifest.json | while read -r p; do
[ -e "${p#./}" ] || echo "registered but missing: $p"
done
# every component on disk is registered
for d in components/*/; do
grep -q "\"./${d%/}\"" manifest.json || echo "present but unregistered: $d"
doneRun it as a repo test, not as a merge-day ritual. It is the only thing standing between a mis-resolved conflict and a component that quietly does not ship.
A version field, a sequence number, a "latest migration" pointer. Both branches
bumped 2.17.0 to 2.18.0; both are wrong now, because a third branch already
merged and main is at 2.18.0 too.
Union is meaningless here and picking a side reintroduces a collision. The rule is recompute from the current integration branch, not from either side of the conflict — every change that merged since you branched consumed one increment:
git fetch origin main
git show origin/main:manifest.json | jq -r '.metadata.version' # -> 2.18.0
# your branch takes 2.19.0, regardless of what your branch said beforeDo this as the last step before pushing, not during the merge. If another branch lands while you resolve, you redo only one line.
A committed minified bundle, a built PDF, a compiled schema, a checked-in snapshot. Git will happily produce a merge for the text ones and force a binary choice for the rest — and every such result is wrong, because a derived file's only correct content is whatever the merged sources generate.
Resolve the sources, then regenerate:
git checkout --merge -- src/ ui/app.jsx # resolve the real inputs first
make build # regenerate the artifact
git add dist/bundle.js docs/handbook.pdfTwo things make this reviewable rather than a leap of faith:
diff to
confirm the artifact matches the source. Unpinned, the artifact diff is a mix
of your change and a tool upgrade, and nobody can tell them apart.diff the rebuilt artifact against one built from the base
commit in the same environment, and say in the PR which regions changed and
why. Anything else that moved is your merge, not your edit.If a tracked file is written by iterating a map, set, or dict whose order is not stable, the whole file is rewritten on every run. Then every branch conflicts on every line, diffs are unreviewable, and real conflicts hide inside the churn.
Sort before writing:
# BAD — map iteration order; the file is rewritten differently every time
records = [to_record(k, v) for k, v in index.items()]
# GOOD — a stable key. ISO-8601 dates sort chronologically as plain strings,
# so no date parsing is needed to get a deterministic, reviewable file.
records = sorted((to_record(k, v) for k, v in index.items()), key=lambda r: r["date"])This applies to any code path that rebuilds a committed file from an unordered collection, including the ones added later. Once one path forgets, the file is churny again.
pyproject.toml, package.json, lint config, a CI workflow — files where your
branch added three lines and four other branches added their own. Reconciling
hunks by hand is where dev-dependency pins and tool sections get silently
dropped.
Take the integration branch's copy wholesale — it already carries everything that landed while you were away — then re-add only the lines your branch introduced:
git checkout origin/main -- pyproject.toml
# re-add just your delta, then confirm nothing else moved
git diff origin/main -- pyproject.tomlThat last git diff should show your addition and nothing else. If it shows a
pin reverting or a tool section disappearing, you took a side by accident.
Two branches append cases to the same test file. Union them — but a union can produce two tests with the same name, and in Python and JavaScript the later definition simply replaces the earlier one. The file looks longer, the suite count looks plausible, and one branch's case never runs.
grep -oE '^\s*(def test_[A-Za-z0-9_]+|it\(.[^,]*|test\(.[^,]*)' tests/test_thing.py \
| sort | uniq -dThe same shape bites production code: two branches independently add the same module-level helper, the resolution keeps both, and the second shadows the first.
Repos that carry stable identifiers cited from elsewhere — claim IDs in a source
ledger, migration numbers, fixture keys, snapshot names — break in a way conflict
markers cannot show you. Renumbering C7-C12 to make room is a clean,
conflict-free edit that invalidates every citation of those IDs in files your
merge never touched.
Add new identifiers by continuing the numbering past the highest one that exists
anywhere, and never reuse or renumber one. If two branches both claimed C17,
renumber yours and fix your own references; do not renumber the side that
already merged.
Two branches editing far-apart regions of one large file merge cleanly and can still be semantically wrong: one side's change depends on a helper the other removed, or both added equivalent logic under different names, or one side's edit now sits inside a branch the other made unreachable.
After any non-trivial merge, confirm both sides survived — grep the merged tree for a distinctive string from each:
git grep -n "computes the retry budget" # a phrase only their change added
git grep -n "REDACTION_PLACEHOLDER" # a symbol only yours addedPresent and consistent, not just present. Then read the two regions together.
git log --graph --oneline -20 # merge commits, or a linear rebased history?Follow whichever the history already uses. Then run the repo's actual CI commands locally before pushing: a resolved merge is code that has never existed anywhere before, and neither branch's CI run covered it. A green check on your branch and a green check on main say nothing about their union. See reproducing-ci-locally for deriving the commands the runner actually uses.
git log --name-only before branchingorigin/main, not taken from either sidegit diff shows only your linesThis is exactly the pattern seen across the PR #28-#37 merge cascade for the
0.10.0 release: CHANGELOG.md was the hotspot file nearly every PR touched,
and the correct resolution every time was "union both sides, never choose
one" (keep every bullet, verify no leftover conflict markers). package.json's
version field is the single-value-counter case: it should be recomputed
once, after all merges land, not carried through each individual merge.
.claude/skills/) —
running the runner's real commands on the merged treeSource: wdm0006/python-skills (MIT).
© kajisho5, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/concurrent-branches of kajisho5/ffmpeg-skill.
Open the folder on GitHubat commit 008333a
Concurrent Branches 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 |
|---|---|---|---|---|---|---|
| Concurrent Branches this skillkajisho5/ffmpeg-skill | 1.9k | — | ~2.8k | Automated safety check: Pass | MIT | |
| Finishing a Development Branchobra/superpowers | 296k | 5 repos | ~1.9k | Automated safety check: Pass | MIT | |
| Code Review ChecklistshareAI-lab/learn-claude-code | 78k | 5 repos | ~1.1k | Automated safety check: Pass | MIT | |
| Codebase Knowledge Graph Q&AEgonex-AI/Understand-Anything | 86k | 1 repos | ~1.2k | Automated safety check: Pass | MIT | |
| Code Design Rationale Investigatorcursor/plugins | 10k | 9 repos | ~2.6k | Automated safety check: Pass | None | |
| Understand Diff AnalysisEgonex-AI/Understand-Anything | 86k | 1 repos | ~1.4k | Automated safety check: Pass | MIT |
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.
shareAI-lab/learn-claude-code
Reviews code against a five-part checklist covering security, correctness, performance, maintainability and testing, and reports findings in a fixed format.
Egonex-AI/Understand-Anything
Answers questions about a codebase by searching a prebuilt knowledge graph of its files, functions, classes and dependencies, not by rereading every source file.
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.
Egonex-AI/Understand-Anything
Reads your git changes or a pull request against a prebuilt knowledge graph of the project to explain what changed, which components are affected and what is risky.
Egonex-AI/Understand-Anything
Gives an in-depth explanation of one file, function or module by reading the project's knowledge graph and checking that the graph is still fresh.
kajisho5/ffmpeg-skill
Edit video and audio with local FFmpeg from natural-language requests: cut, trim, join, resize/reframe (9:16, 1:1), speed change, captions and subtitles (SRT/ASS, animated, karaoke), logos and text…
kajisho5/ffmpeg-skill
Generate GitHub Actions CI/CD pipeline configurations for automated building and testing of library and package projects.
kajisho5/ffmpeg-skill
Review a change to the ffmpeg-skill repository for the failures its own contract makes possible — a claim in a result document that is true at one layer and false at the layer a caller reads, a new…
kajisho5/ffmpeg-skill
Builds robust Python MCP (Model Context Protocol) servers with FastMCP — tool design, error contracts, event-loop-safe blocking work, subprocess/CLI wrapping, single-file vs packaged distribution…
kajisho5/ffmpeg-skill
Add and review preconditions on operations that delete, overwrite, rewrite history, or resolve a caller-supplied name to a filesystem path — refusing instead of warning, placing the guard ahead of…
kajisho5/ffmpeg-skill
Prevents, detects, and remediates files that should never be committed — secrets (.env, API tokens, hardcoded credentials) and dev artifacts (build output, scratch databases, editor/OS files).
Works with
Categories
Resolve conflicts and merges when several branches are open against one repo at the same time — the hotspot files every change must touch (registry manifests, a single version field, shared tool…. Concurrent Branches is an agent skill from kajisho5/ffmpeg-skill.
Concurrent Branches fits situations like: merging a long-lived branch; resolving conflict markers; reviewing a merge commit; deciding what a repo should commit vs generate.
Run `npx skills add kajisho5/ffmpeg-skill --skill concurrent-branches -a claude-code`. Or copy the skill folder (.claude/skills/concurrent-branches in kajisho5/ffmpeg-skill) into .claude/skills/concurrent-branches in your project. Claude Code loads it when a task matches its description.
Run `npx skills add kajisho5/ffmpeg-skill --skill concurrent-branches -a codex`. Or copy the skill folder (.claude/skills/concurrent-branches in kajisho5/ffmpeg-skill) into .agents/skills/concurrent-branches 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 kajisho5/ffmpeg-skill --skill concurrent-branches -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/concurrent-branches, .gemini/skills/concurrent-branches, .github/skills/concurrent-branches and .opencode/skills/concurrent-branches in your project.
Going by SKILL.md and its folder, Concurrent Branches needs the command-line tools its instructions call (git, jq and make). Our summary lists: Python 3.
SKILL.md names 1 domain. As links in the text: github.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.
Concurrent Branches is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.8k tokens (SKILL.md is roughly 11k 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 Concurrent Branches: Finishing a Development Branch (obra/superpowers, 296k stars), Code Review Checklist (shareAI-lab/learn-claude-code, 78k stars), Codebase Knowledge Graph Q&A (Egonex-AI/Understand-Anything, 86k stars) and Code Design Rationale Investigator (cursor/plugins, 10k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
kajisho5 (a GitHub user) maintains it in kajisho5/ffmpeg-skill, which has 1,887 GitHub stars. The repository holds 14 skills in this directory. The repository was last updated on October 5, 2026.
Source: kajisho5/ffmpeg-skill on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.