一键导入
end-session
Canonical session close — commit, push, PR, release_task, reflection blocks, handover. Use /dump for emergency bail (no commit/PR/reflection).
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Canonical session close — commit, push, PR, release_task, reflection blocks, handover. Use /dump for emergency bail (no commit/PR/reflection).
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
Daily note lifecycle — compose and maintain a factual daily note. Reports the state of the day; does not prioritise or recommend. SSoT for daily note structure.
Unified memory skill: immediate mode (/remember) persists knowledge via PKB MCP; maintenance mode (/sleep, GHA cron) runs periodic consolidation — transcript mining, knowledge synthesis, data quality, brain sync.
Unified multi-agent review of any artifact — a document, plan, proposal, or pull request. The calling agent deploys rbg, pauli, and marsha in parallel, then @james reconciles their findings into one verdict. Pass `comment` and/or `fix` to write the result back to the review surface. Use `--critic` for a fast pauli-only pre-hoc critique.
Instruction quality gate — reviews agent instructions (task bodies, workflow steps, skill procedures, self-test protocols) for shallow-execution vulnerabilities before deployment. Two modes: author (pre-hoc review) and audit (trace a failure back to the instruction gap). The bar is excellence, not compliance.
Strategic planning agent — graph structure ownership, task decomposition, knowledge-building, and PKM maintenance. Works on WHAT exists and HOW it relates.
Survey a corpus, classify, and dispatch outputs. Three modes: retro (transcript review → issues), trend (longitudinal performance analysis), sweep (GitHub issue triage → fix-epics). Delegates execution to pauli (retro/trend) or jr (sweep) to keep main context clean.
| name | end_session |
| alias | end-session |
| type | skill |
| category | instruction |
| description | Canonical session close — commit, push, PR, release_task, reflection blocks, handover. Use /dump for emergency bail (no commit/PR/reflection). |
| triggers | ["save work","handover","session end","close session","wrap up","session complete","task complete","stop hook blocked"] |
| modifies_files | true |
| needs_task | true |
| mode | execution |
| domain | ["operations"] |
| permalink | skills/end-session |
Close a session cleanly by committing/pushing changes, filing PRs, resolving tasks, and providing reflections. For mid-flight bails without task completion, use /dump instead.
release_task.Determine if session was Read-only (no mutating tools used, no tasks modified/created) or Full-form (modifying).
Output: none — read-only Q&A.Identify the active task:
$AOPS_TASK_ID environment variable (populated automatically in the session context — this is the authoritative source). If it is unset or empty, fall back to the git branch name, which encodes the task ID as the segment after the last / (e.g. polecat/aops-1f9ec7b0 → aops-1f9ec7b0). Do not read or synthesise a filesystem-state file.release_task will auto-create an ad-hoc task.Run TaskList() and reconcile mirrored tasks. For each native task marked completed carrying PKB <id> (excluding the bound parent task), if the PKB task is not terminal, call mcp__pkb__complete_task.
If files changed, commit, push, and open a PR against this repo's default working branch. For academicOps that branch is dev — gh pr create --fill --base dev (main is publish-only). For any other repo, target its own default branch (most use main) — do not copy academicOps's dev convention onto a repo that has no dev branch.
The PR body describes the change for its reviewer. Do not add merge-gate / do-not-merge / "awaiting Nic" banners — branch protection is the real gate, so a banner warns nobody who can act on it. Canonical rule: [[framework-conventions-summary#pr-body-conventions]].
Resolve the parent epic and project node from the bound task. Append to the project file's Active Epics section:
mcp__plugin_aops-core_pkb__append(
id="<project-id-or-permalink>",
section="Active Epics",
content="- [[<epic-id>]] — <epic title> (task [[<bound-task-id>]], PR <url-or-'none'>)"
)
Verify all child tasks are in terminal states (done, cancelled, superseded, archived) before closing the parent.
Call release_task:
mcp__plugin_aops-core_pkb__release_task(
id="<bound-task-id>",
status="merge_ready" | "review" | "done" | "blocked",
session_id="$AOPS_SESSION_ID",
pr_url="<pr-url>",
branch="<branch-name>",
issue_url="<issue-url>",
follow_up_tasks=["task-xxxx"],
release_summary="<concrete, result-oriented summary, <= 500 chars>"
)
status: merge_ready vs status: review deliberately (they are not interchangeable — see the canonical protocol in [[taxonomy#status-values-and-transitions]]). Use status: merge_ready when you opened a PR and the task is now parked on that PR's review/merge — set pr_url. Use status: review only when the task is parked on a human decision (it needs Nic's or an agent's judgment/direction before it can proceed) — not merely because a PR is open. A reconcile sweep may auto-close a merged status: merge_ready task, but it will never auto-close a status: review task; mis-tagging a PR-parked task as status: review leaves it stuck, and mis-tagging a decision-parked task as status: merge_ready invites a wrong auto-close.release_summary must be result-oriented, self-contained, and name specific resources/issues (org/repo#NNN).Include these three markdown headers in your response before the handover block:
## Output
- [Artefact Link] (Description)
## Tasks worked
- <task-id> (< precis >) — <created | updated | completed | cancelled | referenced>
## Framework Reflection
**Outcome**: success | partial | failure
**Accomplishments**: <what you completed — comma list, or `-` bullets, or `none`>
**Friction points**: <issue/task URLs filed via /learn; no description prose — or `none`>
**Proposed changes**: <one concrete instruction or tool improvement — or `none`>
**Field**:). These four labels are the parse contract: the deterministic parser in transcript_parser.py buckets the reflection by matching them verbatim. Plain-bullet labels (- Friction points:), renamed labels (Proposed improvement:), or free-form prose match nothing — the whole body then falls through to the unstructured fallback and gets dumped into accomplishments, leaving friction_points empty. **Outcome**, **Accomplishments**, **Friction points**, and **Proposed changes** are the only labels the pipeline reads. The exact grammar is the SSoT in transcript-metadata-schema.md.task-acba1234 ( precis )).transcript-metadata-schema.md for the field/warning contract. ## Output must carry a real artefact link (PR/commit URL); if there genuinely is none, write Output: none — <reason>. No link and no explicit "none" → end-session does not pass.Emit exactly this markdown block:
### Session Handover
- **Session ID**: `$AOPS_SESSION_ID`
- **Primary Task**: `<task-id>` (<short title>)
- **PR**: <url>
- **Branch**: `<branch>`
- **Issue**: <url or "none">
- **Follow-ups**: `<task-id> (<short title>)` (or "none")
- **What you asked**: <original user instruction, including deliverables and constraints.>
- **Summary**: <release_summary value>
Omit lines for PR, Issue, and Follow-ups if they do not exist.
If leaving multiple distinct follow-up threads, append:
### Thread Pickup: what next?
- **Thread A**: <action for next session>
- **Thread B**: <action / dependency>
Terminate execution immediately after the handover or thread pickup blocks. Do not add trailing text.