From arc
You MUST use this skill at the end of any session, when the user says "land the plane", "wrap up", "done for the day", "finish up", "session complete", "push and close", or indicates work is complete. This is the arc-native session completion protocol that captures remaining work as arc issues, runs quality gates, updates arc issue statuses, commits, and pushes. Always prefer this over generic branch-finishing when the project uses arc issue tracking.
How this skill is triggered — by the user, by Claude, or both
Slash command
/arc:finishThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Complete the session: capture remaining work, pass quality gates, update arc, commit, push. One protocol for all contexts.
Complete the session: capture remaining work, pass quality gates, update arc, commit, push. One protocol for all contexts.
Work is NOT done until git push succeeds. No exceptions.
Uncommitted code doesn't exist. Unpushed commits are local fiction. The remote is the source of truth.
Create a TodoWrite checklist with all steps and work through them:
arc create "Remaining: <description>" --type=task
arc update <id> --description "CONTEXT: <what was done, what remains, any gotchas>"
Skip this phase if no code was changed in this session.
make test # or: go test ./..., npm test, etc.
make lint # or: golangci-lint run, eslint, etc.
make build
debug if needed.arc close <id> -r "Done: <summary of what was completed>"
arc update <id> --description "PROGRESS: <what's done>. NEXT: <what remains>"
Stage changed files (specific files, not git add -A):
git add <file1> <file2> ...
Commit with conventional commit message:
git commit -m "feat(scope): summary of changes"
Push:
git push
Verify push succeeded:
git status # Must show "up to date with origin"
If push fails → resolve the issue → retry → succeed. Do not leave unpushed commits.
Clean up worktrees:
git worktree list
If only the main working tree is listed, skip ahead. Otherwise, for each extra worktree:
a. Check for uncommitted work:
git -C <worktree-path> status
git -C <worktree-path> stash list
If there are uncommitted changes or stashes → do NOT remove. Create an arc issue to track the unmerged work:
arc create "Recover unmerged worktree work: <branch>" --type=task
b. Check if the branch was merged:
git branch --merged | grep <worktree-branch>
If merged (or if the worktree is clean with no unique commits), safe to remove:
git worktree remove <worktree-path>
git branch -d <worktree-branch> # Delete the merged branch
c. If the branch has unmerged commits but no uncommitted changes: Check whether the commits exist on a remote:
git log origin/<worktree-branch> 2>/dev/null
If pushed → safe to remove locally. If not pushed → do NOT remove; create an arc issue.
d. Prune stale worktree references:
git worktree prune
git log -1 # Verify latest commit is visible
arc prime
| Session Type | Behavior |
|---|---|
| Single-agent | Full protocol above |
| Team lead | Verify teammate work → close arc issues → team cleanup → commit → push |
| Teammate | Commit → push (team lead handles arc close and coordination) |
git stash clear, git remote prune origin — housekeeping, not gates.gitignore verification — assumed to be configured at project setuparc prime handles handoff contextgit add -A — stage specific filesarc prime at the end for next-session contextskills/arc/_formatting.mdnpx claudepluginhub sentiolabs/claude-marketplace --plugin arcCommits changes, runs quality gates for Go/Node repos, pushes to git, opens PR, files follow-ups to backlog, and hands off. Triggers on 'land' phrases to end sessions.
Closes out a session cleanly by reviewing work, updating project tracking files, committing changes, and capturing session knowledge. Use when a task is complete with no passoff needed.
Wraps up sessions by verifying tests/build/lint with pnpm, committing via /commit, updating .claude/project-diary.md and build-status.md, generating handoff messages.