Skip to content
Development
Skill

/session-observatory-live

Conversational guide for using tools/session-retro/observe.mjs to capture friction, wins, corrections, decisions, gaps, tool-use, and checkpoints as they happen during a session. Use at session start (to kick off the log), at inflection points (to record events), and at session

From plugin
gsd-skill-creator
71102 skills61 agents26 commands1 MCP

Claude Code

$ npx -y skills add Tibsfox/gsd-skill-creator --skill session-observatory-live --agent claude-code

SKILL.md

session-observatory-live.SKILL.md
name: session-observatory-live
description: "Conversational guide for using tools/session-retro/observe.mjs to capture friction, wins, corrections, decisions, gaps, tool-use, and checkpoints as they happen during a session. Use at session start (to kick off the log), at inflection points (to record events), and at session end (to archive and feed the retrospective generator)."
format: 2025-10-02
version: 1.1.0
status: ACTIVE
updated: 2026-04-17
version_history:
  - 1.0.0 (2026-04-17): initial
  - 1.1.0 (2026-04-17): document `event tokens` dual-write shortcut
triggers:
  - Conversational guide for using tools/session-retro/observe

Session Observatory — Live Event Logging

Most session retrospectives are written from memory at the end. Memory is lossy. This skill captures the habit of logging events as they happen, so the retrospective has real data to work with.

When to Activate

  • **At session start** — log `start <mission-name>` as one of the first

Bash tool calls, so the started_commit is recorded.

  • **When friction hits** — hook fired repeatedly, tool failed, command took

longer than expected, user corrected you.

  • **When something works unusually well** — a technique that you'd recommend

to future sessions.

  • **Before and after irreversible actions** — commits, pushes, destructive ops.
  • **On progress markers** — every ~10% through a long job.
  • **At session close** — log `end`, then run `generate.mjs` to produce the

SESSION-RETRO.md.

Commands

# Start
node tools/session-retro/observe.mjs start "<mission-name>"

# Log an event
node tools/session-retro/observe.mjs event <kind> "<label>" '<json-payload>'

# Check in on the log
node tools/session-retro/observe.mjs status

# End (archives current.jsonl to a dated file)
node tools/session-retro/observe.mjs end

Event Kinds (standard)

| Kind | When | Example label | |------|------|---------------| | `friction` | Something took more effort than it should have | `"read-before-edit hook fired N times"` | | `win` | Something worked notably well | `"idempotent pipeline saved 3 re-runs"` | | `correction` | User or hook corrected direction | `"user reminded: no Co-Authored-By"` | | `tool-use` | Notable tool invocation | `"installed better-sqlite3 as optional dep"` | | `decision` | Judgment call deserving review | `"committed 1,881 generated files"` | | `gap` | Missing skill/agent/chipset | `"no batch-rewriter for N-script cascade"` | | `checkpoint` | Progress marker for long-running work | `"Pass 2 chapters: 300/602"` | | `tokens` | Token consumption (dual-writes to token-budget) | `"pass-2-chapter-gen"` |

Free-form kinds are allowed but less useful for aggregation. Prefer the standard list.

Tokens event — special positional form

`tokens` is the one kind where positional args are reinterpreted to keep the call site short and to dual-write to `current.tokens.jsonl`:

# observe.mjs event tokens <in_tokens> <out_tokens> [label]
node tools/session-retro/observe.mjs event tokens 45000 3200 "pass-2-chapter-gen"

The entry lands in both `current.jsonl` (as a `tokens` event) and `current.tokens.jsonl` (as a budget entry), so `token-budget.mjs status` and the retrospective observations stay in sync without a second call.

Payload Conventions

Payloads are free-form JSON. Common fields:

  • `count` — numeric count of the occurrence
  • `file` / `files` — paths involved
  • `duration_min` — wall-clock time
  • `cost` / `tokens` — resource spend
  • `impact` — `"workflow"` | `"output"` | `"blocked"` | `"none"`
  • `opportunity` — what skill/agent would have helped

Retroactive Logging

If you didn't log live, you can backfill at session close by reviewing what happened and calling `observe event` for each remembered moment. Better than nothing. The timestamp will be session-end rather than event-time, but the kinds and labels are still useful.

Integration with Retrospective Generator

Events from `current.jsonl` are consumed by `tools/session-retro/generate.mjs` and rendered in the SESSION-RETRO.md under **Observations**, grouped by kind. The human-authored sections (`What Worked`, `What Could Be Better`) then reference specific events as evidence.

Example — This Skill's First Use

The release-history feature session logged 33 events retroactively:

  • 6 friction (read-before-edit fires, 11-script cascade, no checkpoint for

LLM run, ghost-seeding cascade, over-eager regex, hidden drift)

  • 4 wins (background Monitor, idempotent pipeline, recursive self-improvement,

fresh-repo demo)

  • 3 corrections (no Co-Authored-By, dev not main, link chapter files)
  • 4 decisions (publish full tree, SQLite default, allowlist gates, Commits column)
  • 4 gaps (batch-rewriter, portable-schema, decision-framework, session-token)
  • 3 tool-uses (better-sqlite3, claude -p, git tags)
  • 9 checkpoints (pass-by-pass progress)

Those 33 events became the concrete evidence for the retro's "What Worked" / "What Could Be Better" / "Recommendations" sections.

Anti-patterns

  • **Logging every command.** Too noisy. Log inflection points.
  • **Vague labels.** "Problem happened" is useless. "Retro extractor missed

H3 headings — 57 files hid as a result" is useful.

  • **Skipping at session close.** The log isn't useful if `end` never runs

and the JSONL never archives. Generate the retro before context dies.

Related

  • `tools/session-retro/observe.mjs` — the logger itself
  • `tools/session-retro/generate.mjs` — the retrospective generator
  • `decision-framework-invoker` — often co-fires with `decision` events
Read more
@tibsfox
Ships withgsd-skill-creator

An adaptive learning and coprocessor architecture for Claude Code, built as an extension to GSD (open-gsd)

71102 skills61 agents1 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
71
Star history of Tibsfox/gsd-skill-creator on GitHub, a chart by star-history.com

Other skills on gsd-skill-creator.

aminet-index

aminet-index

Manages Aminet INDEX infrastructure: fetch, parse, cache, and incremental update of ~84,000-entry package database. Use when…

aminet-mirror

aminet-mirror

Selective Aminet package mirroring: single-package fetch, integrity verification, mirror state tracking, bulk download, and sync…

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills2w309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc2w293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react5d252k
@facebook@facebookInstall Skill

Questions about session-observatory-live.

Which coding agents can use session-observatory-live?
session-observatory-live installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.