Session Wrap-Up
Run these checks in parallel, then deliver a single consolidated report.
Preflight — is this a git repo?
Run
git rev-parse --git-dir 2>/dev/null
. If it fails (the current folder is not a git repository), skip the git, harness, and commit-and-push sections entirely. Run only checks 2 and 3 below, deliver a short report, and end with the line:
ℹ️ Not a git repo — git, harness, and commit checks skipped.
Checks to run
1. Git status
Run
and
git log --oneline "@{u}.." 2>/dev/null
.
Report: uncommitted files (count + list), unpushed commits (count + list).
If both are clean, state that clearly.
1b. Test harness (project-aware)
If
exists in the repo root AND there is at least one uncommitted text file (any file the harness might care about: markdown, code, config), run
python tests/run_tests.py
and include the result. If the harness passes, report
. If it fails, list each failure as
and recommend
for full detail. If
does not exist, skip this check silently — most repos have no MEL harness.
2. Recent errors
Scan this conversation for any error messages, failed commands, or unresolved issues that were identified but not fixed. Look for: stack traces, "error:", "failed", "TODO", explicit "I'll fix this later" statements.
3. Pending actions
Identify anything Ane said she would do or that was left open:
- Files to review or send
- Follow-up tasks mentioned
- Decisions deferred
- Any explicit "next steps" not yet taken
4. Uncommitted changes risk
If there are uncommitted files, run
to assess what is at risk of being lost.
Report format
Deliver as a tight checklist. One line per item. No preamble.
SESSION WRAP-UP — [date]
GIT
✅ Nothing uncommitted OR ⚠️ N file(s) uncommitted: [list]
✅ All pushed OR ⚠️ N commit(s) not pushed: [list]
HARNESS (only when relevant files were touched)
✅ N/M checks passed OR ⚠️ N harness check(s) failing — /test for detail
ERRORS
✅ No unresolved errors OR ⚠️ [description of unresolved issue]
PENDING ACTIONS
✅ Nothing open OR ⚠️ [action]: [what Ane committed to]
RECOMMENDATION
[One sentence: either "Safe to close" or specific action to take first]
Commit and push
After delivering the report, if there are uncommitted files or unpushed commits, finish the work block by committing and pushing. Ane has a standing instruction to always commit and push at the end of a work block. Do not ask for permission — execute.
Gate 1 — Harness must pass (if it ran).
If check 1b ran and reported any
line, STOP. Do not commit. Tell Ane the harness is red and recommend
for detail. The wrap-up ends here.
Gate 2 — Sensitive-file scan.
Before staging, scan the uncommitted file list against these patterns:
,
,
,
,
,
,
,
,
. If any uncommitted file matches, list the matches and ask Ane explicitly which (if any) to include before proceeding. Otherwise continue silently.
Gate 3 — WIP exclusion.
If any uncommitted file is unrelated to the current session's work and looks mid-edit (a single file the user was clearly developing in another window, e.g. a
marker or
placeholder added inline), exclude it from the commit. List excluded files in the report so Ane sees what was left behind.
Stage explicitly.
Add files by name (
git add path/to/file path/to/other
). Never use
or
— these sweep gitignored runtime state, OS metadata, and unrelated WIP into commits.
Draft the message.
Match recent style: run
and use the same conventional-commit prefix scheme (
,
,
,
,
, with optional scope like
). One-line title under 72 chars; one or two body sentences only when the why is non-obvious. Do not include a generated-by footer unless the project's CLAUDE.md asks for one.
Commit.
Pass the message via a single-quoted HEREDOC so PowerShell/bash do not expand
or backticks:
git commit -m "$(cat <<'EOF'
<title>
<optional body>
EOF
)"
Push.
Run
. If the branch has no upstream, set it:
git push -u origin <branch>
. If push is rejected because the remote is ahead, run
then
— never
from this skill.
Confirm in the report.
Append a final line to the wrap-up report:
COMMIT & PUSH
✅ Committed <short-SHA> "<title>"
✅ Pushed to <remote>/<branch>
Or, if a gate stopped the commit:
COMMIT & PUSH
⚠️ Skipped — <reason>: [files]
If the working tree was already clean and there were no unpushed commits, omit this section entirely.