Update the session log for today's work. This is the report-writing half
of the session lifecycle — it records what happened. No build gating and
no worktree finalization. /session-end invokes this skill as one of its
phases; you can also run it standalone to checkpoint mid-session.
Project configuration
The manifest is this skill's configuration. If
$(git rev-parse --show-toplevel)/.claude/lifecycle-manifest.md does not exist, the
project has not adopted the kit: say so, offer to create it, and stop. Never infer
the keys and run anyway. The kit ships the template as
lifecycle-manifest.template.md; locate the installed copy with
find ~/.claude/plugins -path '*lifecycle-kit*' -name lifecycle-manifest.template.md | head -1.
The marketplace's ADOPTING.md carries a repo-inspecting setup prompt.
Read .claude/lifecycle-manifest.md first (resolve via
$(git rev-parse --show-toplevel)/.claude/lifecycle-manifest.md). Where a
step names a manifest key in code font (log_dir, log_pattern,
branch_pattern, docs_log_branch, build_commands, test_commands), use
that key's value. The suffix examples (_audio, _api) are illustrative.
- Determine the session number
N and the log filename from the branch, never by minting a new number. /session-start is the sole authority that mints N (it bakes it into the branch name at branch birth); this skill only consumes it.
- Normal case, on a
branch_pattern branch (feature/session-<N>-<topic> for Untype): N is that number and <suffix> is the topic slug (or a _audio/_api-style workstream suffix when several agents log in parallel). Parse both from git branch --show-current.
- Log-only exception, on a
docs_log_branch (docs/session-<N>-log) branch: N is that number, no suffix.
- Standalone on
main with no session branch (rare): do not invent a number from filenames. If today already has a session log, update it; otherwise ask the caller for N.
- The log file follows
log_pattern under log_dir (sessions/YYYY-MM-DD_session_<N>[_<suffix>].md for Untype) for the current date. The identity is the pair (N, suffix): a suffixed log and a bare-N log are distinct files, so worktree agents each get their own log and never collide. If it exists, update it (step 5); if not, create it from the pattern in the most recent existing log.
- Read the current session file and the previous one for format reference.
- Update the session file with:
## Context — 1-paragraph framing
## What happened — numbered sections with details
## Files changed — table: file | change
## Build status — the build_commands/test_commands result. If the caller (e.g. /session-end) passed pre-computed output via $ARGUMENTS, fold it in verbatim rather than re-running the commands. Otherwise mark as "not re-run this session" — do not run build/test from this skill.
## Decisions worth remembering — non-obvious calls made
## What's next — immediate + deferred
## Commits — this session's commits as <short-sha> <title>, newest last; /session-start reads the last entry as its "shipped since" anchor, so keep it current
- The header block at the top, in the format
/session-start parses: an H1 # Session <N>: <theme> title, then **Date**:, **Branch**: (the branch_pattern branch, feature/session-<N>-<topic> for Untype, with worktree path if any), and **Type**: lines
- Keep the format consistent with existing session logs in
log_dir.
- Do not remove existing content — append or update sections as needed.
- No emojis.
Arguments
$ARGUMENTS is optional. If the caller (typically /session-end) passes
pre-computed build/test output, fold it into ## Build status verbatim.
1---2name: session-report3description: Update or create today's session log in the session-log folder4---56Update the session log for today's work. This is the report-writing half7of the session lifecycle — it records what happened. No build gating and8no worktree finalization. `/session-end` invokes this skill as one of its9phases; you can also run it standalone to checkpoint mid-session.1011## Project configuration1213The manifest is this skill's configuration. If14`$(git rev-parse --show-toplevel)/.claude/lifecycle-manifest.md` does not exist, the15project has not adopted the kit: say so, offer to create it, and stop. Never infer16the keys and run anyway. The kit ships the template as17`lifecycle-manifest.template.md`; locate the installed copy with18`find ~/.claude/plugins -path '*lifecycle-kit*' -name lifecycle-manifest.template.md | head -1`.19The marketplace's `ADOPTING.md` carries a repo-inspecting setup prompt.2021Read `.claude/lifecycle-manifest.md` first (resolve via22`$(git rev-parse --show-toplevel)/.claude/lifecycle-manifest.md`). Where a23step names a manifest key in `code font` (`log_dir`, `log_pattern`,24`branch_pattern`, `docs_log_branch`, `build_commands`, `test_commands`), use25that key's value. The suffix examples (`_audio`, `_api`) are illustrative.26271. Determine the session number `N` and the log filename from the branch, never by minting a new number. `/session-start` is the sole authority that mints `N` (it bakes it into the branch name at branch birth); this skill only consumes it.28 - Normal case, on a `branch_pattern` branch (`feature/session-<N>-<topic>` for Untype): `N` is that number and `<suffix>` is the topic slug (or a `_audio`/`_api`-style workstream suffix when several agents log in parallel). Parse both from `git branch --show-current`.29 - Log-only exception, on a `docs_log_branch` (`docs/session-<N>-log`) branch: `N` is that number, no suffix.30 - Standalone on `main` with no session branch (rare): do not invent a number from filenames. If today already has a session log, update it; otherwise ask the caller for `N`.31 - The log file follows `log_pattern` under `log_dir` (`sessions/YYYY-MM-DD_session_<N>[_<suffix>].md` for Untype) for the current date. The identity is the pair `(N, suffix)`: a suffixed log and a bare-`N` log are distinct files, so worktree agents each get their own log and never collide. If it exists, update it (step 5); if not, create it from the pattern in the most recent existing log.322. Read the current session file and the previous one for format reference.333. Update the session file with:34 - `## Context` — 1-paragraph framing35 - `## What happened` — numbered sections with details36 - `## Files changed` — table: file | change37 - `## Build status` — the `build_commands`/`test_commands` result. If the caller (e.g. `/session-end`) passed pre-computed output via `$ARGUMENTS`, fold it in verbatim rather than re-running the commands. Otherwise mark as "not re-run this session" — do not run build/test from this skill.38 - `## Decisions worth remembering` — non-obvious calls made39 - `## What's next` — immediate + deferred40 - `## Commits` — this session's commits as `<short-sha> <title>`, newest last; `/session-start` reads the last entry as its "shipped since" anchor, so keep it current41 - The header block at the top, in the format `/session-start` parses: an H1 `# Session <N>: <theme>` title, then `**Date**:`, `**Branch**:` (the `branch_pattern` branch, `feature/session-<N>-<topic>` for Untype, with worktree path if any), and `**Type**:` lines424. Keep the format consistent with existing session logs in `log_dir`.435. Do not remove existing content — append or update sections as needed.446. No emojis.4546## Arguments4748`$ARGUMENTS` is optional. If the caller (typically `/session-end`) passes49pre-computed build/test output, fold it into `## Build status` verbatim.