Skip to content
Back to skills

Log Session

ASecurity

Append a structured entry to the project's session log (`docs/LOGS.md`): what was done this session, files touched, decisions taken, and the next step — so the next session (or another person) can pick up the thread without re-reading git history. Run it before `/clear`, before closing your agent session, or at any natural stopping point. Model-agnostic: the skill inherits whatever model and effort your agent session is already using. Triggers: "log this session", "log-session", "write a sess...

  • 21 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 2, 2026
ai-agentsgorailsgitdocumentation

Works with

  • claude code

Security analysis

A100/100

Scanned September 29, 2026

npx -y skills add gtrabanco/agentic-workflow --skill log-session --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Log Session?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Log Session
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/gtrabanco-log-session-agentic-workflow/badge)](https://www.skillsdirectory.com/skills/gtrabanco-log-session-agentic-workflow)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: log-session
user-invocable: true
version: 2.2.1
argument-hint: "[note to prepend to the entry]"
author: "Gabriel Trabanco <1969593+gtrabanco@users.noreply.github.com>"
license: MIT
description: >
  Append a structured entry to the project's session log (`docs/LOGS.md`):
  what was done this session, files touched, decisions taken, and the next
  step — so the next session (or another person) can pick up the thread
  without re-reading git history. Run it before `/clear`, before closing your
  agent session, or at any natural stopping point. Model-agnostic: the skill
  inherits whatever model and effort your agent session is already using.
  Triggers: "log this
  session", "log-session", "write a session log", "journal what we did",
  "record this session before I clear", "save the session summary".
---

# Log Session

Capture the *why* and the *what-next* of a working session — the context that
git history alone never records. A commit says what changed; a session log says
what you were trying to do, what you decided, and where to resume.

Deliberately cheap (`qwen3.6`/`reasoning_config: none` — unlimited; the NaN
cluster models carry **no token counter**, so this skill pays in bytes, not
quota): structured summarization, not judgment. It must never reach for an
expensive model.

## Turn contract — verify before ending the turn

```
✓ The entry was APPENDED to docs/LOGS.md (file edited, not just drafted) with accurate git facts
✓ `bun scripts/session-close.mjs close` RAN and exited 0 (or 2, with the leftover paths named) — the entry is committed, not left riding along
✓ No past entry was edited
✓ Artifact language: explicit user instruction > the project's declared docs language > English. The CONVERSATION language never decides — a Spanish prompt still produces English PRs/issues/commits/SPECs unless one of the first two says otherwise
✓ The closing `→ Next:` block is printed as the ABSOLUTE last output
```

About to end the turn with any box unchecked? The turn is NOT done — complete
the missing box first (weak models drop end-of-document duties; this list is
first on purpose).

## When to use

- **Before `/clear`** (or your agent's context-reset equivalent) — you're about
  to wipe context; capture it first.
- **Before closing your agent** for the day.
- **At a natural stopping point** — a feature paused mid-way, a thread you want
  to be able to resume cold.
- **After a long session** with several decisions worth remembering.

This is the *manual, rich* counterpart to the lightweight auto-logging hooks
the `template/` ships (see `template/.claude/`). The hooks capture the
mechanical facts for free on every exit; this skill writes the thoughtful
entry when you want one.

## Step 0 — Discover the project (always first)

Per the agent guide's **Workflow conventions** + **documentation map**, locate
the session log. Default path: `docs/LOGS.md`. If the documentation map names a
different location, use that. If no log file exists yet, create it from the
shape in `template/docs/LOGS.md` (a short header + the entry format below) and
say so.

If a session-start marker exists (`.claude/.session-*.start`, written by the
template's SessionStart hook), read it to bound the session precisely — it holds
the HEAD sha and start time at session open.

## Process

1. **Establish the session boundary.**
   - If a marker is present, the session spans `marker_sha..HEAD` plus any
     uncommitted work.
   - Otherwise, use your own conversation context as the source of truth for
     what happened this session, and corroborate with `git log` of the recent
     commits and `git status` / `git diff --stat` for uncommitted changes.

2. **Gather the mechanical facts** (cheaply, with git):
   - branch (`git branch --show-current`),
   - commits this session (`git log --oneline <since>..HEAD`),
   - files touched (`git diff --stat <since>..HEAD` + uncommitted).

3. **Write the narrative** — the part only you can add:
   - **Summary:** 1–3 sentences on what this session set out to do and what
     actually got done.
   - **Decisions:** the non-obvious choices made and *why* (the rationale that
     would otherwise be lost). Link related docs/issues.
   - **Next:** the concrete next step(s) — the command to run, the unfinished
     thread, the open question. Write it so a cold reader knows exactly where to
     resume.
   - **Status words are forge-verified.** `merged`, `closed`, `approved` — any
     claim about a PR/issue state is checked with the forge in the same turn
     (`gh pr view <N> --json state,mergedAt`) before it is written. A log that
     records a state the forge contradicts is a false record that the next
     review must chase (fix #157's F14). Write the actual state: "PR #N open,
     awaiting the human merge".

4. **Render the entry** — the mechanical facts (timestamp, branch, commit count
   and range, files touched) are computed for you:

   ```
   bun scripts/session-close.mjs render --summary "<what this session did>" \
     --decisions "<key choices + why>" --next "<the concrete next step>"
   ```

   It writes nothing: append its output to the **end** of `docs/LOGS.md`
   (append-only, chronological) with your editing tool. Omit `--decisions` /
   `--next` when there is nothing real to record — the script drops the line
   rather than emitting an empty one. A user-supplied note is prepended to the
   Summary.

5. **Close the session** — commit the entry and prove the tree is clean:

   ```
   bun scripts/session-close.mjs close
   ```

   It refuses unless `docs/LOGS.md` was **appended to** (a rewritten or truncated
   log is not a session entry), commits that one file as
   `docs(log): <the appended summary>`, and reports every path still uncommitted:
   exit `0` clean, `2` the named leftovers are still dirty, `1` refused. Do not
   open a PR just for a log entry, and never `git add -A` here — a concurrent
   conversation's work must not be swept into a log commit.

## Guardrails

- **Never use an expensive model for this.** It's summarization; `qwen3.6`
  (`reasoning_config: none` → zero thinking tokens) is the natural ceiling on
  the cluster plan, and the hooks do the free mechanical version.
- **Don't invent facts.** Decisions and next steps come from the actual session
  (your context + git), not plausible-sounding filler. If a section has nothing
  real, omit its line rather than padding.
- **Append, never rewrite.** Past entries are a historical record — don't edit
  or "tidy" them. Same reasoning as not rewriting a delivered feature's planning
  artifacts.
- **One file, append-only.** Don't fan session logs across files.

## Portability (agents other than Claude Code)

The workflow is the contract; Claude Code features are conveniences. On an
agent that lacks one, apply the fallback — never skip the step the feature
enables:

- **No Claude Code hooks** — the template's auto-logging hooks (SessionStart
  marker, SessionEnd entry) don't run on other agents, so there is no marker
  file and no free mechanical entry: this skill is the **only** journal writer.
  Run it before ending every session, and bound the session with git alone
  (Process step 1's no-marker path).
- **No `/clear`** — read it as your agent's context-reset / new-conversation
  equivalent, in the triggers and in the closing block alike.
- **No per-skill `model:`/`effort:`** — the intent stands: use the cheapest
  available model for this. It's summarization, never judgment. On NaN the
  cluster models (qwen3.6, gemma4) carry no token counter — set
  `reasoning_config: none` so the append pays zero thinking tokens.

## Relationship to other skills

- Complements the `template/`'s **SessionEnd hook** (free, mechanical, automatic
  on `/clear` and exit) and the **opt-in SessionStart restore hook** (re-injects
  the last entry to resume context). This skill is the rich, manual entry.
- Pairs with `execute-phase`'s per-feature `progress.md`: that tracks progress
  *within* a feature; the session log is *cross-cutting* — whatever you touched
  this session, across features/fixes.
- Not part of the PR gate — it's a working-memory aid, not a merge artifact.

## Done when

- A new entry is appended to `docs/LOGS.md` with at least Summary and Next.
- The mechanical facts (branch, commits, files) are accurate to git.
- **The closing `→ Next:` block is printed:**

  ```
  → Next: /clear (or your agent's context reset) is now safe — the session is captured
    · resume later → the command named in the entry's **Next** line
  ```

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.