Skip to content
cccskills
FreePublished on GitHub

worktree-status

Audit all git worktrees in the current project. Use when the user asks about worktree status, which branches are merged, which have uncommitted changes, or which worktrees can be safely cleaned up.

The English summary is being prepared. Showing the original description.

See how to install

Files included (1)

  • SKILL.md3.8 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

worktree-status

Report the status of every git worktree for the current project, covering dirty state and merge status.

When to use

  • User asks "which worktrees can I clean up?"
  • User asks "what's the status of my worktrees / branches?"
  • Before batch-cleaning worktrees, to avoid losing uncommitted work

Procedure

1. Pull latest main (MANDATORY)

You MUST pull latest main before any status checks. Without this, merge detection (both ancestry and content diff) will produce stale results and you may mistakenly conclude a branch is not merged.

cd "$(git rev-parse --show-toplevel)" && git pull origin main

2. Collect worktree info

PROJECT_DIR="$(git rev-parse --show-toplevel)"

for wt in $(git worktree list --porcelain | grep "^worktree " | sed 's/^worktree //' | grep -v "$PROJECT_DIR$"); do
  branch=$(git -C "$wt" branch --show-current 2>/dev/null)
  [ -z "$branch" ] && branch="(detached)"
  name=$(basename "$wt")

  # dirty?
  if [ -z "$(git -C "$wt" status --short 2>/dev/null)" ]; then
    dirty="clean"
  else
    dirty="DIRTY"
  fi

  # merged into origin/main?
  # NOTE: `git merge-base --is-ancestor` does NOT detect squash-merged
  # branches. Always follow up with a content diff (step 3) for branches
  # that appear "not merged".
  if [ "$branch" != "(detached)" ]; then
    if git merge-base --is-ancestor "$branch" origin/main 2>/dev/null; then
      merged="merged"
    else
      merged="not merged (verify with content diff)"
    fi
  else
    merged="n/a"
  fi

  echo ""
  echo "[$name]  branch=$branch  $dirty  $merged"
  if [ "$dirty" = "DIRTY" ]; then
    git -C "$wt" status --short 2>/dev/null | sed 's/^/  /'
  fi
done

3. Detect squash-merged branches (content diff)

For any branch that shows "not merged", check whether the branch's changes are already in main. The correct method is:

  1. Find the files the branch actually changed (relative to merge-base).
  2. For each changed file, compare the branch version with main. If all files are identical, the branch was squash-merged.

⚠️ Do NOT use git diff origin/main <branch> — that compares the two tips directly, so commits added to main after the branch diverged will show up as false differences.

BRANCH="<branch>"
BASE=$(git merge-base origin/main "$BRANCH")

# List files the branch touched
FILES=$(git diff --name-only "$BASE" "$BRANCH")

# Compare each file between branch and current main
for f in $FILES; do
  d=$(git diff "$BRANCH" origin/main -- "$f" | wc -l)
  if [ "$d" != "0" ]; then
    echo "❌ $f — differs"
  else
    echo "✅ $f — identical in main"
  fi
done
# All ✅ = squash-merged

4. Present results

Always present results as a Markdown table. Every worktree must appear as a row. Never use abbreviated or prose-only summaries.

WorktreeBranchDirtyMergedCan clean?
example-wtfeat-foo✅ clean✅ squash-merged✅
another-wtfix-bar⚠️ 3 files❌ not merged❌ dirty + not merged
detached-wt(detached)⚠️ 14 filesn/a❌ has uncommitted changes

Column definitions:

  • Dirty: ✅ clean or ⚠️ N files
  • Merged: ✅ merged / ✅ squash-merged (confirmed via content diff) / ❌ not merged / n/a
  • Can clean?: ✅ only when merged (or squash-merged) AND clean

Add extra columns (e.g. notes) only when relevant.

5. Cleanup (only when asked)

Only clean worktrees the user explicitly approves. For each:

NAME="<worktree-name>"
git worktree remove "/path/to/$NAME"
git branch -D "<branch>"  # only if the branch is no longer needed

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction.

The English summary is being prepared. Showing the original description.

PyModel/pythinker-code29Updated Oct 18, 2026

Use when developing in packages/agent-core-v2 (the DI × Scope agent engine) — adding or modifying a domain Service, choosing a LifecycleScope, wiring DI dependencies, splitting a domain across scopes, owning or migrating a config section, gating behavior behind an experimental flag, raising coded errors, working on the permission system, writing DI/Scope tests, porting business logic from agent-core (v1) to v2, triaging a main-branch commit against v2, or exposing a v2 domain over server-v2 while keeping the /api/v1 wire contract compatible with released clients. Self-contained guide organized by development stage (orient → design → implement → test → verify) plus align workflows for v1→v2 migration, main-branch commit triage, and server-v2 wire exposure; each file carries the rules, examples, and red lines for its step.

The English summary is being prepared. Showing the original description.

PyModel/pythinker-code29Updated Oct 18, 2026

Apply an approved sub-skill grouping by moving user-specified skills into a parent bundle, with timestamped backups of every modified directory.

The English summary is being prepared. Showing the original description.

PyModel/pythinker-code29Updated Oct 18, 2026

Systematically explore and test a web application to find bugs, UX issues, and other problems. Use when asked to "dogfood", "QA", "exploratory test", "find issues", "bug hunt", "test this app/site/platform", or review the quality of a web application. Produces a structured report with full reproduction evidence -- step-by-step screenshots, repro videos, and detailed repro steps for every issue -- so findings can be handed directly to the responsible teams.

The English summary is being prepared. Showing the original description.

PyModel/pythinker-code29Updated Oct 18, 2026

Automate Electron desktop apps (VS Code, Slack, Discord, Figma, Notion, Spotify, etc.) using agent-browser via Chrome DevTools Protocol. Use when the user needs to interact with an Electron app, automate a desktop app, connect to a running app, control a native app, or test an Electron application. Triggers include "automate Slack app", "control VS Code", "interact with Discord app", "test this Electron app", "connect to desktop app", or any task requiring automation of a native Electron application.

The English summary is being prepared. Showing the original description.

PyModel/pythinker-code29Updated Oct 18, 2026

Use when generating changesets in the pythinker-code repository — deciding whether to write one, which package to list, the bump level, the wording, and the confirmation workflow.

The English summary is being prepared. Showing the original description.

PyModel/pythinker-code29Updated Oct 18, 2026

See all skills by PyModel

Report a problem with this skill