session-closeout

Enumerates unresolved session work from git and GitHub sources before final reporting.

Updated Jul 19, 2026
One-click install
npx skills add https://github.com/forhas/pure-dev --skill session-closeout-forhas
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: session-closeout
Source: https://github.com/forhas/pure-dev/tree/main/plugins/notion-dev/skills/session-closeout
Command: npx skills add https://github.com/forhas/pure-dev --skill session-closeout-forhas

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? AI coding sessions often end with loose ends — uncommitted changes, unpushed branches, stale worktrees, unfiled follow-ups — that get mentioned in a final summary instead of actually resolved. This skill forces every outstanding item into a resolved, tracked, or blocked state before a session is reported as finished. ## Core Features & Use Cases - Source-based enumeration: Queries git status, worktrees, upstream tracking, pull requests, filed issues, deferred trailers, and test suites instead of relying on memory. - Two-pass lifecycle: Runs a completion pass before merging and a workspace pass after cleanup, so defects are caught while they can still enter the pull request. - Three-state resolution: Every tail must end as resolved (with evidence), tracked (with a real ticket URL), or blocked (with a named external cause) — vague phrases like "left for later" are rejected. - Use Case: Before reporting a feature branch as done, run the closeout to discover an unpushed commit and a stale worktree, resolve both, then emit a CLOSEOUT block showing zero remaining tails. ## Quick Start Before writing your final session summary, run the session-closeout skill to enumerate and resolve every outstanding tail.

Frequently Asked Questions about session-closeout

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I make sure nothing is left unfinished before ending a coding session?

Run a closeout pass that queries git status, worktrees, unpushed commits, open pull requests, and filed issues rather than relying on memory. Each item found must be resolved with evidence, tracked with a ticket URL, or blocked with a named external cause.

How do I detect stale branches after a squash merge?

Do not use git branch --merged, since squashed commits are not ancestors of the squash commit. Instead check whether the branch's pull request state is MERGED using gh pr list, and treat CLOSED-without-merge as unfinished work that must not be deleted.

Why does git rev-list @{upstream} fail on some branches?

The @{upstream} ref fails when a branch has no tracking ref, which happens with fork pull request checkouts that set branch remote and merge config without a tracking ref. Fetch the configured remote ref directly and compare SHAs with merge-base to determine push state.

When should the closeout run relative to merging a pull request?

Run a completion pass before the merge covering uncommitted work, unpushed commits, deferred items, and a fresh test run, then a workspace pass after cleanup covering leftover worktrees, open PRs, ticket URLs, and the draft report itself.

What counts as a legitimately blocked item versus an excuse?

Blocked requires a named external cause such as a missing credential, third-party outage, or a decision only the user can make, plus what would unblock it. Work that is merely long, tedious, or unreviewed does not qualify, and time constraints are never a blocker.