Claude-skill-registry finish-task
Finish current task. Use when user says "dokonči task", "task hotový", "mergni do main", or runs /finish-task.
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/finish-task" ~/.claude/skills/majiayu000-claude-skill-registry-finish-task && rm -rf "$T"
skills/data/finish-task/SKILL.mdFinish Task
Complete the current task. Behavior depends on detected mode (MAIN, FEATURE_BRANCH, WORKTREE).
Usage
/finish-task # Complete current task (auto-detects mode) /finish-task --no-test # Complete without running tests
Current State
Current branch: !git branch --show-current
Uncommitted changes: !git status --porcelain
Is worktree: !test -f "$(git rev-parse --show-toplevel)/.git" && echo "YES - WORKTREE" || echo "NO - main repo"
Process
Step 1: Detect Mode
BRANCH=$(git branch --show-current) IS_WORKTREE=false if [[ -f "$(git rev-parse --show-toplevel)/.git" ]]; then IS_WORKTREE=true fi if [[ "$IS_WORKTREE" == "true" ]]; then MODE="WORKTREE" elif [[ "$BRANCH" != "main" && "$BRANCH" != "master" ]]; then MODE="FEATURE_BRANCH" else MODE="MAIN" fi
Step 2: Detect Current Task
MAIN mode: Find task from in_progress status in task files FEATURE_BRANCH/WORKTREE: Extract from branch name
phase-XX/task-YY-description
Step 3: Check Prerequisites
Before finishing:
- No uncommitted changes (or use
to override)--force - Task file exists and is readable
Step 4: Run Tests (optional)
Unless
--no-test is specified:
dotnet test EShopDemo.sln --filter "Category!=Integration"
If tests fail, the script stops and reports the error.
Step 5: Check Code Formatting
dotnet csharpier check .
If formatting check fails, suggest running
dotnet csharpier format . to fix.
Step 6: Mode-Specific Actions
MAIN Mode
Just update task status - no merge needed:
# Update task file: 🔵 in_progress → ✅ completed # Commit the status change git add <task-file> git commit -m "[XX-YY] docs: mark task as completed"
FEATURE_BRANCH Mode
Squash merge all commits to main:
# Switch to main git checkout main # Squash merge (combines all branch commits into one) git merge --squash <feature-branch> # Commit with task prefix git commit -m "[XX-YY] feat: <summary of all changes>" # Delete feature branch git branch -d <feature-branch>
WORKTREE Mode
Squash merge to main in the main repository:
# Get main repo path MAIN_REPO=$(cat "$(git rev-parse --show-toplevel)/.git" | sed 's/gitdir: //' | xargs dirname | xargs dirname) # In main repo: squash merge cd "$MAIN_REPO" git merge --squash <worktree-branch> git commit -m "[XX-YY] feat: <summary of all changes>" # Offer to remove worktree # Ask user: "Remove worktree directory?"
Arguments
- Skip running tests--no-test
- Continue even with uncommitted changes--force
Output
On success (MAIN mode):
Finishing task: task-02 - Shared Kernel Mode: MAIN Running unit tests... ✓ Checking code formatting... ✓ Task status updated to ✅ completed Task task-02 completed successfully!
On success (FEATURE_BRANCH mode):
Finishing task: task-02 - Shared Kernel Mode: FEATURE_BRANCH Branch: phase-01/task-02-shared-kernel Running unit tests... ✓ Checking code formatting... ✓ Squash merging to main... Committed: [01-02] feat: implement shared kernel with Entity and ValueObject base classes Deleted branch: phase-01/task-02-shared-kernel Task task-02 completed successfully!
On success (WORKTREE mode):
Finishing task: task-02 - Shared Kernel Mode: WORKTREE Branch: phase-01/task-02-shared-kernel Running unit tests... ✓ Checking code formatting... ✓ Squash merging to main (in main repo)... Committed: [01-02] feat: implement shared kernel with Entity and ValueObject base classes Remove worktree directory? [y/N]
On failure:
Error: Unit tests failed Fix the failing tests before completing the task.
Safety Rules
- NEVER merge with uncommitted changes (unless --force)
- ALWAYS run tests before marking complete (unless --no-test)
- ALWAYS check formatting before merge
- For squash merge, generate meaningful commit message summarizing all changes
- ALWAYS ask before removing worktree directory
Integration
This skill is part of the task lifecycle:
- see what's available/task-status
- begin working/start-task XX
- commit changes/commit
- complete (behavior depends on mode)/finish-task