Contributor-First PR Merge
HKUDS/OpenHarness
Merges external GitHub pull requests while keeping the original author credited, and fixes conflicts after the merge instead of rewriting the contribution.
Decides how verified work should reach main, directly, in a worktree or on an integration branch, while keeping contributor credit and respecting merge gates.
$ npx skills add codewhale-hq/Codewhale --skill cw-land -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install codewhale-hq/Codewhale cw-land --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/codewhale-hq/Codewhale.git skills-src && mkdir -p .claude/skills && cp -r skills-src/docs/skills/cw-land .claude/skills/cw-land && 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 "cw-land" agent skill from https://github.com/codewhale-hq/Codewhale/tree/main/docs/skills/cw-land into .claude/skills/cw-land/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cw-land", 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/codewhale-hq/Codewhale/tree/main/docs/skills/cw-landType 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 codewhale-hq/Codewhale --skill cw-land -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install codewhale-hq/Codewhale cw-land --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/codewhale-hq/Codewhale.git skills-src && mkdir -p .agents/skills && cp -r skills-src/docs/skills/cw-land .agents/skills/cw-land && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "cw-land" agent skill from https://github.com/codewhale-hq/Codewhale/tree/main/docs/skills/cw-land into .agents/skills/cw-land/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cw-land", 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 codewhale-hq/Codewhale --skill cw-land -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install codewhale-hq/Codewhale cw-land --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/codewhale-hq/Codewhale.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/docs/skills/cw-land .cursor/skills/cw-land && 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 "cw-land" agent skill from https://github.com/codewhale-hq/Codewhale/tree/main/docs/skills/cw-land into .cursor/skills/cw-land/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cw-land", 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/codewhale-hq/Codewhale.git --path docs/skills/cw-land--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 codewhale-hq/Codewhale --skill cw-land -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install codewhale-hq/Codewhale cw-land --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/codewhale-hq/Codewhale.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/docs/skills/cw-land .gemini/skills/cw-land && 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 "cw-land" agent skill from https://github.com/codewhale-hq/Codewhale/tree/main/docs/skills/cw-land into .gemini/skills/cw-land/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cw-land", 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 codewhale-hq/Codewhale cw-landInstalls 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 codewhale-hq/Codewhale --skill cw-land -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/codewhale-hq/Codewhale.git skills-src && mkdir -p .github/skills && cp -r skills-src/docs/skills/cw-land .github/skills/cw-land && 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 "cw-land" agent skill from https://github.com/codewhale-hq/Codewhale/tree/main/docs/skills/cw-land into .github/skills/cw-land/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cw-land", 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 codewhale-hq/Codewhale --skill cw-land -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install codewhale-hq/Codewhale cw-land --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/codewhale-hq/Codewhale.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/docs/skills/cw-land .opencode/skills/cw-land && 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 "cw-land" agent skill from https://github.com/codewhale-hq/Codewhale/tree/main/docs/skills/cw-land into .opencode/skills/cw-land/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cw-land", 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.
cw-landDecides how verified work should reach main, directly, in a worktree or on an integration branch, while keeping contributor credit and respecting merge gates.
This is the fifth stage of the Codewhale loop, after orienting, slicing, gates and dogfooding, and before handoff. The agent chooses a landing shape: a direct commit to main only for a small change when the checkout is current, clean and owns the affected files; a worktree for conflicting, dirty or independent work; or an integration branch for conflicts and several moving pull requests, which leaves the contributor's branch untouched.
Commits stay narrow and build-green, with real pass and fail counts in the message. Contributor credit is preserved mechanically: commits use the contributor's own GitHub-linked address, with a harvested-from line and a Co-authored-by trailer that lets automation close their pull request with credit. Local commit permission never implies push, merge, tag, release or deploy permission, and merging past a gate that has not passed is ruled out.
7 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 0ea319a. 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:
gitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.
From 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.
Codewhale Landing Workflow loads about 1.6k tokens when it runs. Until then it costs about 55 tokens; SKILL.md has 861 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 codewhale-hq/Codewhale at commit 0ea319a, republished under its MIT licence (© codewhale-hq). 861 words, ~1,610 tokens.
.claude/skills/cw-land/SKILL.md (or your agent's skills folder).Verified work still has to land without stepping on other writers, losing
contributor credit, or merging past a gate that has not actually passed. This
stage is about the boundary between "it works" and "it is in main" — and about
which of those steps you are allowed to take.
Stage 5 of the loop: cw-orient → cw-slice → cw-gates → cw-dogfood → land → cw-handoff.
main.main moving.Choose the landing shape.
main is
permitted for a small coherent change when that checkout is current and
owns the affected files; when several agents share it, partition by file,
stage only your paths, and retry a commit that fails on index.lock.
Local commit permission never implies push, merge, tag, release, or
deploy permission.AGENTS.md): verified slices land on
main directly and hosted CI runs there. PRs are for contributors.integration/<topic>-<pr>-<date>) is for
resolving a contributor PR that conflicts with a moving main when you
cannot push to their fork. It leaves their branch untouched.Commit narrow and build-green. One coherent change per commit; the tree builds at every commit. Put the real verification in the message — actual pass/fail counts, not "tests pass".
Preserve credit mechanically, not just politely. Commit authorship and
Co-authored-by: trailers must use the contributor's own GitHub-linked
address — GitHub reads neither .github/AUTHOR_MAP nor .mailmap for the
contribution graph; those are project conventions on top. When a
contributor's work lands as our commit, it carries both:
Harvested from PR #N by @handle
Co-authored-by: Name <github-linked-email>That trailer is what lets auto-close-harvested.yml close their PR with
credit. Canonical human identities live in .github/AUTHOR_MAP.
Whether a bot or agent also appears in a trailer no longer matters — the CI check that policed trailer identities was removed because it rejected ordinary agent commits. Give humans their credit; don't spend time scrubbing tool trailers.
Landing someone else's work: their time is more expensive than ours.
main moved, a maintainer resolves it.git diff $(git merge-base main <pr-head>)..<pr-head>maintainerCanModify does not guarantee push access to the fork. When the
push is refused, land the resolved merge on an integration branch here.action_required and never start,
so the PR looks abandoned when nobody has actually looked at it. Approve
the runs, then fix the cause: add them to .github/APPROVED_CONTRIBUTORS
(all:username), or comment /lgtm (PR scope) or /lgtmi (issue scope).Verify mergeability against the real head. A PR that is clean against
main can still conflict with a release branch:
git merge-tree $(git merge-base <base> <pr-head>) <base> <pr-head>Merging under a gate. AGENTS.md ("Merging under a gate") owns this:
the artifact must literally say PASS, the review thread outranks the check
rollup, and ambiguity blocks the merge — never the reverse.
Clean up your own lane. When a worktree you created lands on main,
remove it (git worktree remove <path>) and delete its merged branch.
Leave other writers' worktrees alone; git worktree list shows them.
Worktree sprawl was a 560 GB problem here once.
AGENTS.md / CLAUDE.md operator controls that live outside the
product repository into a public repo.© codewhale-hq, 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 docs/skills/cw-land of codewhale-hq/Codewhale.
Open the folder on GitHubat commit 0ea319a
Codewhale Landing Workflow 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 |
|---|---|---|---|---|---|---|
| Codewhale Landing Workflow this skillcodewhale-hq/Codewhale | 41k | — | ~1.6k | Automated safety check: Pass | MIT | |
| Contributor-First PR MergeHKUDS/OpenHarness | 16k | 1 repos | ~847 | Automated safety check: Pass | MIT | |
| React Router Pull Request Creatorremix-run/react-router | 57k | — | ~2.5k | Automated safety check: Pass | MIT | |
| Pre-Release PR Triagejamiepine/voicebox | 57k | — | ~3.1k | Automated safety check: Pass | MIT | |
| Ansible Backport Creatoransible/ansible | 71k | — | ~1.2k | Automated safety check: Pass | GPL-3.0 | |
| Draft Pull Request Creatorwordpress-mobile/WordPress-Android | 3.2k | — | ~881 | Automated safety check: Notes | GPL-2.0 |
HKUDS/OpenHarness
Merges external GitHub pull requests while keeping the original author credited, and fixes conflicts after the merge instead of rewriting the contribution.
remix-run/react-router
Packages finished React Router work into a draft pull request: branch, commit, push, a written PR body and the right GitHub labels.
jamiepine/voicebox
Sorts a backlog of open pull requests into must-merge, candidate, superseded and deferred, writes a triage doc and works the merge loop before a release.
ansible/ansible
Creates backports of a merged Ansible devel pull request onto the right stable branches by cherry-picking its merge commit onto new backport branches.
wordpress-mobile/WordPress-Android
Commits and pushes current changes, writes a pull request title and body from the branch history and template, and opens a draft PR on GitHub after you approve it.
jtenniswood/espcontrol
Clean up completed Git branches and worktrees for this repository both locally and on GitHub.
codewhale-hq/Codewhale
Proves a Codewhale change in the real product: a stamped release build, an atomic local install, fresh-shell verification and manual QA that automated gates cannot cover.
codewhale-hq/Codewhale
Writes a paste-ready handoff for the next agent session, opening with a state-check command block and separating done, suspected and blocked work.
codewhale-hq/Codewhale
Guides when and how to split multi-step coding, research or verification work into focused sub-agent runs while the parent keeps integration and final checks.
codewhale-hq/Codewhale
Triages and manages Codewhale fleet runs and workers with typed commands, classifying failures and choosing a safe restart, resume or escalation.
codewhale-hq/Codewhale
Moves a list of GitHub issues into a milestone or assigns them to owners with the gh CLI, checking each one before and after the change.
codewhale-hq/Codewhale
Turns a bug or idea into a single actionable Codewhale GitHub issue with evidence, a gap-naming title, acceptance criteria and related links.
Works with
Categories
Decides how verified work should reach main, directly, in a worktree or on an integration branch, while keeping contributor credit and respecting merge gates. This is the fifth stage of the Codewhale loop, after orienting, slicing, gates and dogfooding, and before handoff. The agent chooses a landing shape: a direct commit to main only for a small change when the checkout is current, clean and owns the affected files; a worktree for conflicting, dirty or independent work; or an integration branch for conflicts and several moving pull requests, which leaves the contributor's branch untouched.
Codewhale Landing Workflow fits situations like: turning verified work into a commit, branch or pull request; landing someone else's pull request while keeping their authorship; resolving conflicts caused by main moving while a pull request is open; deciding whether to commit directly or use a worktree.
Run `npx skills add codewhale-hq/Codewhale --skill cw-land -a claude-code`. Or copy the skill folder (docs/skills/cw-land in codewhale-hq/Codewhale) into .claude/skills/cw-land in your project. Claude Code loads it when a task matches its description.
Run `npx skills add codewhale-hq/Codewhale --skill cw-land -a codex`. Or copy the skill folder (docs/skills/cw-land in codewhale-hq/Codewhale) into .agents/skills/cw-land 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 codewhale-hq/Codewhale --skill cw-land -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/cw-land, .gemini/skills/cw-land, .github/skills/cw-land and .opencode/skills/cw-land in your project.
Going by SKILL.md and its folder, Codewhale Landing Workflow needs the command-line tools its instructions call (git).
SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. 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.
Codewhale Landing Workflow 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.6k tokens (SKILL.md is roughly 6.4k 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 Codewhale Landing Workflow: Contributor-First PR Merge (HKUDS/OpenHarness, 16k stars), React Router Pull Request Creator (remix-run/react-router, 57k stars), Pre-Release PR Triage (jamiepine/voicebox, 57k stars) and Ansible Backport Creator (ansible/ansible, 71k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
codewhale-hq (a GitHub organization) maintains it in codewhale-hq/Codewhale, which has 41,082 GitHub stars. The repository holds 63 skills in this directory. The repository was last updated on October 11, 2026.
Source: codewhale-hq/Codewhale on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.