5.0 KiB
/finish-up Skill Implementation Plan
For Claude: REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
Goal: Create a /finish-up Claude Code slash command that scans all projects for uncommitted/unpushed changes, reports findings, then dispatches parallel subagents to commit and push.
Architecture: A bash scan script (git-status-check.sh) outputs structured CSV-like results. The skill file (finish-up.md) instructs Claude to run the script, parse results, present a report, confirm with the user, then spawn one Bash subagent per project for autonomous commit/push.
Tech Stack: Bash (scan script), Claude Code skill markdown (command file)
Task 1: Create the git-status-check.sh scan script
Files:
- Create:
C:/Users/aisaacs/Desktop/Projects/project-scripts/git-status-check.sh
Step 1: Write the scan script
#!/usr/bin/env bash
# git-status-check.sh - Scan git repos for uncommitted changes and unpushed commits
# Usage: git-status-check.sh [directory]
# directory: path to scan (default: parent of script directory)
# Output: TAB-separated lines: project_name \t uncommitted_count \t unpushed_count \t branch
set -euo pipefail
SCAN_DIR="${1:-$(dirname "$(dirname "$(readlink -f "$0")")")}"
for dir in "$SCAN_DIR"/*/; do
[ -d "$dir/.git" ] || continue
name=$(basename "$dir")
branch=$(git -C "$dir" rev-parse --abbrev-ref HEAD 2>/dev/null || echo "unknown")
# Count uncommitted changes
uncommitted=$(git -C "$dir" status --porcelain 2>/dev/null | wc -l | tr -d ' ')
# Count unpushed commits (0 if no upstream)
unpushed=$(git -C "$dir" log @{u}..HEAD --oneline 2>/dev/null | wc -l | tr -d ' ' || echo "0")
echo -e "${name}\t${uncommitted}\t${unpushed}\t${branch}"
done
Step 2: Make it executable and test
Run: chmod +x C:/Users/aisaacs/Desktop/Projects/project-scripts/git-status-check.sh
Run: bash C:/Users/aisaacs/Desktop/Projects/project-scripts/git-status-check.sh C:/Users/aisaacs/Desktop/Projects
Expected: TAB-separated output with one line per git repo, showing project name, uncommitted count, unpushed count, and branch.
Step 3: Verify edge cases
Run the script and confirm:
- Non-git directories (like loose
.py/.csfiles) are skipped - Repos with no upstream tracking show
0for unpushed (not an error)
Step 4: Commit
cd C:/Users/aisaacs/Desktop/Projects/project-scripts
git add git-status-check.sh
git commit -m "feat: add git-status-check.sh scan script
Scans all git repos in a directory for uncommitted changes and
unpushed commits. Outputs structured TAB-separated results.
Replaces check_uncommitted.py with additional unpushed detection.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>"
Task 2: Create the /finish-up skill file
Files:
- Create:
C:/Users/aisaacs/.claude/commands/finish-up.md
Step 1: Write the skill file
The skill markdown instructs Claude on how to execute the /finish-up workflow:
- Detect context (all projects vs single project)
- Run
git-status-check.shand parse output - Present report table
- Ask user which projects to process
- Spawn parallel Bash subagents for commit/push
- Collect results and present summary
Key instructions for the skill:
- Use
Tasktool withsubagent_type="Bash"for parallel work - Each subagent:
git add -A && git diff --cached --statto review, craft commit message, commit, push with retry - Handle Gitea cold-start (retry push after 5s on first failure)
- Never commit
.env,credentials,secretsfiles - Use conventional commit format
- Include
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Step 2: Test the skill
Run /finish-up in a Claude Code session from C:\Users\aisaacs\Desktop\Projects and verify:
- Script runs and output is parsed correctly
- Report is presented clearly
- Subagents are dispatched for selected projects
Step 3: Commit
cd C:/Users/aisaacs/Desktop/Projects/project-scripts
git add C:/Users/aisaacs/.claude/commands/finish-up.md
git commit -m "feat: add /finish-up Claude Code slash command
Scans projects for uncommitted/unpushed changes, reports findings,
then dispatches parallel subagents to commit and push.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>"
Task 3: Clean up old check_uncommitted.py
Files:
- Delete:
C:/Users/aisaacs/Desktop/Projects/check_uncommitted.py(loose copy in Projects root) - Delete:
C:/Users/aisaacs/Desktop/Projects/project-scripts/check_uncommitted.py
Step 1: Remove old scripts
rm C:/Users/aisaacs/Desktop/Projects/check_uncommitted.py
cd C:/Users/aisaacs/Desktop/Projects/project-scripts
git rm check_uncommitted.py
Step 2: Commit
git commit -m "chore: remove check_uncommitted.py (replaced by git-status-check.sh)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>"
Task 4: Push project-scripts to remote
Step 1: Push
cd C:/Users/aisaacs/Desktop/Projects/project-scripts
git push
If push fails (Gitea cold-start), wait 5 seconds and retry.