원클릭으로
bye
End the session — summarize work, persist context, capture lessons, close the active marker
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
End the session — summarize work, persist context, capture lessons, close the active marker
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Definitive reference for how Claude Code works — disambiguates skills vs hooks vs subagents vs MCPs vs slash commands vs memory vs settings. Use when asked "how does Claude Code X work", "what's the difference between X and Y", "where should this live", "build me a [skill|hook|agent|mcp|slash command]", "configure Claude Code", or when picking the right surface for a new capability.
Scribe — the project-documentation skill. Generate or maintain a project's Claude-facing documentation (CLAUDE.md, .claude/docs/*, project-context.md, README) from verified facts. Use when the user says "document this project", "write the docs for X", "the docs are stale", "fill in the .claude docs", or "/scribe". Detects existing doc state and routes between from-scratch and update. Verify-before-assert is the core discipline — confirmed facts go to committed docs, inferred/uncertain ones go to a separate hazards artifact, never silently into the repo.
Speak content aloud via Kokoro neural TTS (local, offline). Use when the user says "read it for me", "read it to me", "play it in audio", "say it", "speak it", "read that aloud", "/say-it", or asks to hear something spoken instead of reading it.
Install a local neural voice interface for Claude Code on macOS Apple Silicon. Wires mlx-whisper (STT) + Kokoro TTS (offline neural voices) into voice-claude and vtranscribe CLI scripts. Two voice contexts — personal (af_heart) and tech (af_bella). Multi-session safe — concurrent sessions speak in turn (global lock) and announce their name. No cloud APIs, no API keys.
Collect the user's daily work activity from Slack, Jira, Confluence, GitHub, and Google Drive with source links
Collect a team member's daily work activity from Slack, Jira, Confluence, and GitHub
| name | bye |
| description | End the session — summarize work, persist context, capture lessons, close the active marker |
| user_invocable | true |
You are wrapping up the current working session. Summarize, persist, and hand off. v2 paths assumed throughout; scope comes from the active session marker, never from cwd.
Resolve scope and find the session marker. The skill's base directory is <workspace>/.claude/skills/bye/; resolve <workspace> by walking up three directory levels and validate that <workspace>/.claude/.workspace exists.
Primary path — recall both session_id AND project_slug from conversation context (/hello logged both when it wrote the marker). Look up directly at the matching scope's sessions/active/<session_id>.md — scope is <workspace> if project_slug = workspace, else <workspace>/projects/<project_slug>. Deterministic — no scanning, no disambiguation.
If project_slug is lost from context but session_id is recalled, probe <workspace>/sessions/active/<session_id>.md first, then <workspace>/projects/*/sessions/active/<session_id>.md. Still deterministic since session_id is unique by construction; the probe is two open() calls, not a scan.
Fallback path — only if the session_id is unavailable from conversation context (e.g., compaction dropped it). Be honest with the user that the primary path failed; do not paper over the miss with broad scans. Then:
<scope>/sessions/active/*-<workstream-slug>-*.md (workstream-local only — no cross-scope scan, no cross-workstream scan).1 matches → list each with age + open item summary; ask user to pick.
<scope>/sessions/, and step 4 is skipped entirely.Summarize the session: Review the conversation and identify:
If the user signals during summary that this isn't actually a session close (mind changed, more work to do), abort /bye — return to the conversation. The marker stays in active/ untouched; no narrative is written, no promotion happens, no farewell prints. /bye can be re-invoked later when the session genuinely closes. There is no "paused" state in the system — active/ already represents an open session.
Write session narrative into the active marker: Read the marker file at <scope>/sessions/active/<filename> (frontmatter already there from /hello). Append the session narrative body below the frontmatter closing ---. No mtime-check — this is the session's own unique file; no other process writes to it.
# Session
**Date**: YYYY-MM-DD
**Duration**: ~Xh (estimate based on conversation length)
**Workstream**: <workstream_slug>
**Resumed at**: <ISO-8601> (include this line only if the marker has a `resumed_at` field; omit otherwise)
## Accomplished
- [list of completed items]
## Key Decisions
- [list of decisions and rationale]
## Open Items
- [ ] [next steps and pending work — grouped by workstream when listing across multiple]
## Problems & Resolutions
- [issues encountered and how they were fixed]
0-match case (no marker was selected at step 1): write the narrative directly to a fresh file at <scope>/sessions/<YYYY-MM-DD>-<workstream-slug>-<HHMMSS>-<6hex>.md instead — matches the filename format /hello step 14 uses. Skip step 4 entirely (the file is already at its final location).
Promote the session marker (critical state transition — must run immediately after step 3): Move <scope>/sessions/active/<filename> → <scope>/sessions/<filename> (directory move only — filename unchanged). Sessions accumulate in <scope>/sessions/ indefinitely by design — the workstream file is the system of record (status, decisions, open items, all promoted by step 5); session files are the per-session journal, kept for archaeology and not pruned automatically.
This step runs early — immediately after the narrative is written — so that failures in later steps (workstream update, lessons, MEMORY, cognee) do not leave an orphan marker in active/. The only orphan window is the fs operation between step 3's write and step 4's move; if /bye fails inside that window, the orphan retains its full narrative and is recoverable.
Skip case: 0-match — step 3 wrote the file directly to <scope>/sessions/; nothing to promote. (The user-abort branch at step 2 never reaches this step, so there's no other skip case.)
Update active workstream: Edit <scope>/workstreams/<workstream_slug>.md in place — surgical edits, not full rewrite. Use mtime-check. Status line → today's date + one-line current state. Open Items → mark closed [x] (with user confirmation), append new [ ]. Decisions → append today's with [YYYY-MM-DD] prefix. Long-form artifacts (drafts, comparison docs, design specs over ~15 lines) go to <scope>/artifacts/<workstream_slug>/<filename>.md; the workstream gets a one-line pointer.
Identify lessons: Review the session for:
Capture lessons: If any lessons were identified, invoke the /lessons skill with the identified lessons. Pass project_slug and session_id from the session marker as context — the marker is promoted before this step and /lessons cannot re-scan active/. /lessons uses these to resolve scope directly without scanning.
Curate MEMORY.md: First, read the full lessons inbox at both levels (skip the workspace read if scope = workspace — same file):
<scope>/.claude/memory/lessons-learned.md<workspace>/.claude/memory/lessons-learned.mdIdentify promotion candidates — either criterion qualifies:
For each candidate: promote into the MEMORY.md at the same scope as the lesson's source inbox (<scope>/.claude/memory/MEMORY.md for scope-level lessons; <workspace>/.claude/memory/MEMORY.md for workspace-level). Apply standard curation: edit to reflect current truth, don't just append, remove stale entries. Then remove the promoted entry from its source lessons-learned.md — that file is an inbox, not an archive.
Update personal workspace (<workspace>/me/ — never per-project, regardless of marker scope):
/setup-workspace init.Check project docs for staleness: If this session made structural changes (new dependency, changed data flow, new service interaction, renamed concept):
CLAUDE.md has one (the per-project surface→content mapping, per the doc-maintenance convention) and check each listed surface against what the session changed. If there's no table, fall back to the standard set: <scope>/.claude/memory/project-context.md and <scope>/.claude/docs/architecture.md (skip a file silently if it doesn't exist)./scribe is available, nudge: "these docs look stale — want to run /scribe --from-session?" If that skill isn't installed, just surface the stale surfaces and move on — never nudge toward a command that isn't there.Store in cognee (if available): If the cognee MCP is loaded, call cognee_add with the session summary text, then cognee_cognify to integrate it into the knowledge graph for future semantic retrieval.
Suggest contributions: If any lessons from this session seem broadly useful beyond this scope, mention that the user can run /contribute to generalize and stage them for Memnyx.
Output farewell:
Session Complete
================
Scope: [workspace | projects/<slug>]
Tasks completed: [count]
Lessons captured: [count]
Open items: [count]
Workstream: [name] — updated / none
Memory: updated / unchanged
Personal: brag-log updated / identity updated / unchanged
Cognee: synced / skipped
Marker: [path] — promoted to sessions/
See you next time! Run /hello to pick up where we left off.
For every shared-file write at steps 5, 8, 9 (not step 3 — the session file is the session's own unique file; no mtime-check needed):
On retry exhaustion (>3 conflicts), prompt the user.
When auto-memory is adopted (per v2-design-principles.md §Session lifecycle), step 7 routes through /memory-hygiene graduate instead of /lessons. Unused until adoption.