Pre-Flight & Hard Boundaries
Before creating any branch or worktree, verify the current working repository against the following boundaries:
- Git Exclusivity:
- Must be a Git repository (
git rev-parse --is-inside-work-tree). - If not using Git, stop immediately and alert the user.
- Must be a Git repository (
- Repository Location (Must be under
~/github):- Check the absolute file path of the repository root.
- Repositories must reside under
~/github(arbitrarily deep, such as~/github/kevmoo/kevmoo_skillsor~/github/repo). - Hard Block: If the repository is located anywhere else, stop and issue a warning asking for explicit human confirmation before proceeding. This prevents mutating internal corporate repositories or bare-repo dotfiles.
- Dart SDK Exception:
- Check if the repository maps to the Dart SDK
(
https://github.com/dart-lang/sdk, e.g., located at~/github/dart-sdk). - Hard Block: If operating in the Dart SDK repository, stop immediately
and ask if the user wants to use their specialized Dart SDK flow instead
(e.g.,
dart-sdk-bootstrap). Do not proceed without clarification. The Dart SDK relies on specialized toolchains,gclientcheckouts, and dedicated bootstrap workflows that standard Git worktree operations break.
- Check if the repository maps to the Dart SDK
(
Location & Naming Conventions
When creating a worktree, observe strict placement and naming rules:
- Location: Place the new worktree directory right next to the source repository directory (as a direct sibling in the parent folder).
- Worktree Naming: Format the folder name as
_[original repo folder name]-[branch-name]. - Branch Naming: Derive a clean, hyphen-separated branch name from the user
request (e.g.,
issue-12345orfix-auth-crash).
Examples
- In
~/github/flutter, invoking/new-worktree to fix flutter issue #12345:- Creates branch:
issue-12345 - Creates worktree at:
~/github/_flutter-issue-12345
- Creates branch:
- In
~/github/kevmoo/kevmoo_skills, invoking/new-worktree add lint check:- Creates branch:
add-lint-check - Creates worktree at:
~/github/kevmoo/_kevmoo_skills-add-lint-check
- Creates branch:
Execution Steps
- Verify Pre-Flight Boundaries: Confirm location under
~/github, confirm Git repository status, and ensure the repo is not the Dart SDK. Do not require a clean working directory; worktrees allow branching safely from a dirty tree. - Fetch Latest Remote State & Resolve Base Branch: Prefer
upstreamoveroriginwhen anupstreamremote exists so fork repositories never branch from a laggingorigin/main, then dynamically resolve the remote default branch (<remote>/HEAD,<remote>/main, or<remote>/master):REMOTE=$(git remote | grep -qx upstream && echo "upstream" || echo "origin") git fetch "${REMOTE}" TARGET_BASE=$(git symbolic-ref "refs/remotes/${REMOTE}/HEAD" 2>/dev/null || (git show-ref --verify --quiet "refs/remotes/${REMOTE}/main" && echo "${REMOTE}/main") || echo "${REMOTE}/master") - Formulate Target Names: Determine
{branch_name}and sibling directory path{sibling_worktree_path}based on naming rules. - Collision Pre-Flight & Stale Worktree Pruning:
- Check if
{sibling_worktree_path}or local{branch_name}already exists. - If previous worktrees were removed manually, run
git worktree pruneto clear stale metadata.
- Check if
- Execute Worktree Creation:
git worktree add -b {branch_name} {sibling_worktree_path} ${TARGET_BASE} - Configure Default GitHub Repository (
gh repo set-default):- Inside the newly created worktree directory (
{sibling_worktree_path}), configureghto use theoriginremote as the default repository so subsequentgh prandgh runcommands work without requiring-R:cd {sibling_worktree_path} && gh repo set-default origin
- Inside the newly created worktree directory (
- Output Clickable Link: Provide the user with a clickable link to the new
worktree using the precise scheme
[link text](file:///absolute/path/to/worktree). Never wrap link text or syntax in backticks.