Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsBlogPro
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Authors
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges
  • Chrome Extension
  • Skill Manager

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

ProTermsPrivacyRefunds
Back to skills

Session Status

ASecurity

Report where the current coding session stands: what's left, session status, where does this session stand. Covers work in flight, remaining work, questions you were asked and never answered, unresolved decisions, blockers, and a suggested session title. USE WHEN checking mid-flight what remains in a session.

8 stars
0 votes
0 copies
0 views
Added 10/6/2026
ai-agentsgoshellbashgit

Works with

claude codemcp

Security Analysis

A100/100

Scanned 10/6/2026

$npx -y skills add bordenet/superpowers-plus --skill session-status --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Session Status?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Session Status
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/bordenet-session-status/badge)](https://www.skillsdirectory.com/skills/bordenet-session-status)

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

Download with Pro
Files
skill.md
---
name: session-status
source: superpowers-plus
augment_menu: true
description: "Report where the current coding session stands: what's left, session status, where does this session stand. Covers work in flight, remaining work, questions you were asked and never answered, unresolved decisions, blockers, and a suggested session title. USE WHEN checking mid-flight what remains in a session."
summary: "Use when: checking where this session stands mid-flight. Skip when: summarizing a call, document, or board, or tracking tasks that outlive the session."
triggers: ["/session-status", "/sp-session-status", "what's left", "whats left",
           "session status", "status of this session", "where does this session stand",
           "where are we"]
anti_triggers: []
requires_mcp: []
coordination:
  group: productivity
  order: 3
  requires: []
  enables: []
  escalates_to: []
  internal: false
composition:
  consumes: [conversation-state, task-list, execution-doc, git-state, clock]
  produces: [session-status-readout, suggested-session-title]
  capabilities: [session-state-reporting, stranded-decision-detection]
  priority: 50
  optional: false
  requires_all: false
---

# session-status

> **Wrong skill?** Resume elsewhere after compaction -> `context-ferry` (writes a file;
> this prints only). What others pushed -> `session-handoff`. Tasks outliving this session,
> and the owner of `TODO.md` -> `todo-management`. The status of anything but this session (a
> service, sprint, rollout, release, pipeline) belongs to its owner, not this skill -- stop and
> route to that owner instead of reporting on it here.
>
> **Do not rename this to `summarize`, and do not fill in `anti_triggers` without
> re-measuring.** The router reads frontmatter `name:` before the directory, so a
> directory-only rename does nothing to the router's name-match scoring. The `anti_triggers`
> veto matches anywhere in a prompt, so a broad entry like "what's left on my todo" can make
> the skill vanish from `/session-status what's left on my todo` too. Re-measure with
> `skill-trigger-audit` before changing the name, description, or anti_triggers.

**Announce at start:** "I'm using the **session-status** skill to report where this session stands."

## When to Use

The user asks `/session-status`, "what's left", "session status", or "where does this
session stand", often while checking one of several parallel sessions. Read-only; run it
as often as asked, including mid-edit.

## Procedure

1. Read the sources below. Note anything you could not read in full.
2. Draft candidate items for the four item sections, and `Active now` as prose.
3. Run **The Filter Pass** over the item sections.
4. Order each item section by source: plan doc, task list, git, then conversation newest first; an item named as blocking another goes to the top. Below the cap this can read oddly, placing a durable-but-later task above an urgent recent one. Keep it: it is the only ordering two runs agree on.
5. Keep at most seven items per item section. If one had more, add `- +N more` as a last item line, where `N` is that section's dropped count; a bare `+N more` is absorbed into the item above it when rendered.
6. Print the readout as ordinary markdown, not inside a code fence.
7. **Stop.** See **Stop**.

## Sources

Read all five. Every command here is read-only.

- **Conversation.** The visible transcript, and the only source for unanswered questions and
  stranded decisions.
- **Task list.** On Claude Code, read the block the harness injected into context. Its
  task tool is **write-only**: it takes a full replacement array, so calling it could
  delete the user's completed entries. Never call it here. On a runtime with no
  equivalent harness-injected task block, there is no source for this line -- name it on
  `Not read` as `task list: no harness source on this runtime` rather than improvising a
  substitute (do not treat this as license to read `TODO.md` -- that stays banned below
  regardless of runtime).
- **Plan or execution doc.** Only a checklist you read or wrote *this session*; read its
  unchecked `- [ ]` items. Do not go looking for one, and never read `~/context-ferry-*.md`:
  it also holds `- [ ]` items but belongs to another session and can carry credentials.
- **Git.** `git rev-parse --show-toplevel`, then take the basename yourself: wrapping it as
  `basename "$(...)"` exits 0 with an empty value outside a repo, so judge this read by its
  output, never its status. `git rev-parse --abbrev-ref HEAD` for the branch; the literal
  `HEAD` means detached *or* no commits yet, so try `git rev-parse --short HEAD` and print
  `detached-<sha>`, or if that also fails print `<dir>` alone and name it on `Not read`.
  `git --no-optional-locks status --porcelain` for changes, the flag keeping the read from
  rewriting the index.
- **Clock.** `date '+%Y-%m-%d %H:%M:%S'`. Never write a timestamp you did not read.

**Interrupted git operation.** `--porcelain` cannot name one: a halted rebase looks like
ordinary conflicts, a bisect or half-applied cherry-pick like a clean tree. Run this once
per name, substituting each of `rebase-merge`, `rebase-apply`, `MERGE_HEAD`,
`CHERRY_PICK_HEAD`, `REVERT_HEAD`, `BISECT_LOG`, `sequencer`:

```bash
test -e "$(git rev-parse --git-path rebase-merge)" && echo IN_PROGRESS || echo none
```

Both halves are required: `--git-path` prints a path and exits 0 whether or not the file
exists, so its status and output report every operation as running in every state, and
without `|| echo none` a clean tree exits 1, which some runtimes surface as a failure.
`sequencer` catches a multi-commit cherry-pick or revert whose conflict was resolved with
plain `git commit`, which clears `CHERRY_PICK_HEAD` while picks stay pending. If a probe
cannot run, say so on `Not read`.

**Do not read `TODO.md`.** It is user-global, so its items are mostly other projects.
`todo-crud.sh` is also unsafe: `todo-engine.py` re-applies `chmod 0444` and `chflags` before
dispatch and outside the writer lock, which can collide with another session mid-write.
`todo-management` owns that file.

**The `Not read` line.** Name anything that failed, returned nothing, did not apply, or
returned less than the whole picture. `nothing` means all five were read in full, so it is
wrong when one merely did not apply. Never fill a gap from memory, and never say something
does not exist when you only failed to see it: "no plan doc in view" is honest, "no plan
doc" is not. A compacted conversation belongs here too, since it neither fails nor returns
nothing but succeeds and returns less: **write `conversation truncated, earlier questions and
decisions may be missing` unless you positively see the session's start.** Default to writing
it, because you cannot locate your own context boundary reliably and a post-compaction
transcript opens with a summary that reads like a beginning. Questions and stranded decisions
have no other source, so this is the gap that silently empties the sections this skill is for.

## The Readout

Print these in order. Omit any of the four item sections with no items, heading included,
and omit `Active now` when nothing is in flight. Header, `Not read`, and `Suggested title`
always print.

```text
## Session Status | <dir>@<branch> | <timestamp>

Not read: <anything not read in full, or "nothing">

**Active now**
<Prose, max three sentences, on the unfinished state of live work: what is half-done,
which files, what has not been run. An interrupted operation comes first and names it.>

**Remaining**
- [ ] <task> (<source>)
- +2 more

**Open questions for you**
1. "<verbatim question text>"

**Stranded decisions**
- <the unresolved point>: <options on the table, or the constraint not yet applied>

**Blocked**
- <item>: blocked on <what or who> (<source>)

**Suggested title**
`<title>`
```

The four **item sections** are `Remaining`, `Open questions for you`, `Stranded decisions`,
and `Blocked`. Pipes separate the header fields because space runs collapse when rendered.
`Remaining` holds unchecked plan-doc items, incomplete task-list entries, and work requested
this session that is not done; `Blocked` holds anything that cannot proceed until someone or
something else acts, such as a review, a deploy, or an answer. Merely not started is
`Remaining`. **A blocked item goes in `Blocked` only, never also in `Remaining`**, though
equally undone: otherwise both claim it and it prints twice. Items in those two sections carry
a source tag, one of `conversation`, `task list`, `plan doc`, `git`; `Open questions`,
`Stranded decisions`, and `Active now` carry none, the conversation being their only source.

`git` contributes at most one `Remaining` item, `uncommitted changes in N file(s)`. Linked
worktrees have private working trees, so that count is this directory's alone, but nothing you
can read says whether a second tab is open on it, so always add `may include another session's
edits` to that item and to any file named in `Active now`.

**Degraded header.** Print the fields you read and drop the separator for one you could not,
so `<dir>` alone or `<timestamp>` alone. Outside a repo the branch and status reads fail and
the toplevel read returns empty: print `## Session Status | <timestamp>` with `git absent` on
`Not read`, and never derive the directory name from the shell's working path.

**With all four item sections empty *and* nothing in `Active now`**, print the header, `Not
read`, then exactly `Nothing pending in what I can see.` and the title. An interrupted git
operation counts as work in flight, so it never appears beside that sentence. Never invent
work to fill a section.

## What Counts as Stranded

Report one when either holds. The first takes the `options on the table` shape, the second `constraint not yet applied`.

1. Two or more paths were named and none chosen, or a path was picked and a later
   instruction silently contradicted it.
2. A stated preference, constraint, or correction was never applied, or what was asked for
   and what got built diverge unacknowledged.

Capture unanswered questions **verbatim**, in quotes: paraphrase loses the choice the question
was pinning down. An implicit one ("I'll assume X unless you object") has no quotable text, so
rephrase it as a direct question and print it **unquoted, prefixed `implied:`** rather than
dropping it or wrapping words the user never said in quotes. These are questions **the
assistant asked the user**; a user request the assistant never answered is `Remaining` work.
The verbatim rule comes from `context-ferry`; a change to it belongs in both.

## The Filter Pass

Run at step 3, before ordering and capping. Without it a long transcript pulls the readout
toward a recap of finished work, the one thing the user did not ask for.

**Operate only on item lines** (beginning `- `, `- [ ] `, or `N. `) inside the four item
sections. The header, `Not read`, `Active now`, and `Suggested title` are never touched.

**Delete an item line if and only if** what it names is finished and nothing about it remains.
A line leading with finished work but naming something outstanding survives, so `PR merged,
waiting on the reviewer to approve` stays, as does partial progress. Afterwards, if one of
those four sections has no item lines left, drop its heading too.

`Active now` is exempt from the filter but not from the no-recap rule, and it is the one place
a recap can enter uncaught, so check every clause against something unfinished. `Ported two of
five files, tests not run` is correct: the finished half locates the unfinished half. A clause
naming only what succeeded is still a recap here, so `the battery and probe both pass` does not
belong, since it leaves nothing open.

Rationalizations that produce a recap, and the answer to each: "a quick recap gives useful
context" (the scrollback holds it), "I'll list what's done as `[x]`" (completed items are
omitted, not checked off), "nothing is pending, so I'll suggest next steps" (print the
empty-state sentence and stop).

## Suggested Title

One title, not a menu, backtick-wrapped on its own line so it copies cleanly. On Claude
Code the user pastes it into `/rename`; on a runtime with no rename command, present it
as a copyable line and do not name `/rename`.

- Three to seven words, noun phrase, concrete nouns from the actual work; a ticket key
  counts as one word. Lead with a ticket key **only** if the branch name carries it
  (`feat/PROJ-123-...` yields `PROJ-123`) or the user typed it this session, never from recall.
- Banned: `session`, `work`, `discussion`, `exploration`, `deep dive`, any word true of
  every session, em dashes, emoji, decorative colons.
- Nothing pending and nothing substantive done: name the surface, as in `slop-check port,
  not yet run`.

## Stop

The readout is the whole deliverable. After printing it: make no edits, run nothing beyond
the reads above, do not act on any listed item, do not answer the questions you printed, do
not dispatch a subagent, do not offer to continue, and **do not continue or abort any
interrupted operation you just reported**. End the turn. It is a snapshot, so if the user
later says "go", re-read first: another tab on this directory may have changed the tree, and
an interrupted operation must be resolved by the user before anything is committed, since a
commit made during one can be discarded by the abort that ends it.

## Failure Modes

| Failure | Recovery |
|---|---|
| An interrupted operation reported when none runs, a halted one reported as ordinary changes, or `Nothing pending` on a detached HEAD or mid-bisect | All three are the probe. Use the exact two-branch form in **Sources** for all seven names including `sequencer`: `--git-path` alone always prints a path and exits 0, `--porcelain` alone can never name the operation, and a clean tree is not a safe tree. A detached HEAD prints `detached-<sha>`, never the literal `HEAD`. |
| `Open questions` and `Stranded decisions` empty after a compaction | They have no source but the conversation. Put the full `conversation truncated, earlier questions and decisions may be missing` on `Not read` rather than reporting none. |
| Readout opens with completed work | The filter ran before the draft was complete, or `Active now` was written as a recap. Re-draft it as unfinished state and re-run step 3. |
| `Suggested title` or `Not read` missing, or the readout mixes two sessions' work | None of the three is an item section, so omit-when-empty and the filter never reach them. Header, `Not read`, and title always print; two tabs on one directory cannot be told apart, so say so rather than guessing. |
| A source called absent when only unreadable, or a timestamp or branch that looks plausible but is wrong | Both assert what was not read. Say "in view" for the first; for the second run the command in **Sources** or drop the field. Either way name it on `Not read`. |
| `Blocked` always empty | Anything waiting on another person or system belongs there, not in `Remaining`. |
| A question was paraphrased and the user answered a different one | Questions are quoted verbatim. Re-read the conversation and quote exactly. |

Attribution

bordenetbordenet
View sourceSee grades on GitHubMore from bordenet →
SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

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 (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Related Skills

Caveman

Terse caveman voice: answer first, fluff gone, every technical fact kept. Use for /caveman, "caveman mode", "talk like caveman", "be brief", "less tokens". Stays on until "stop caveman" or "normal mode".

1100021 votes

Hyperplan

Adversarial multi-agent planning skill. Self-orchestrates 5 hostile category members (unspecified-low, unspecified-high, deep, ultrabrain, artistry) via team-mode for ruthless cross-critique debate, distills only the defensible insights, then MANDATORILY hands the distilled insight bundle to the `plan` agent for executable plan formalization. Use when planning needs maximum rigor and surfacing of weak assumptions, blind spots, and over-engineering. Triggers: 'hyperplan', 'hpp', '/hyperplan', ...

698621 votes

Writing Skills

Create and manage Claude Code skills in HASH repository following Anthropic best practices. Use when creating new skills, modifying skill-rules.json, understanding trigger patterns, working with hooks, debugging skill activation, or implementing progressive disclosure. Covers skill structure, YAML frontmatter, trigger types (keywords, intent patterns), UserPromptSubmit hook, and the 500-line rule. Includes validation and debugging with SKILL_DEBUG. Examples include rust-error-stack, cargo-dep...

3931 votes

Mcp Code Execution

Routes multi-tool workflows through MCP servers for large datasets and pipelines. Use when Bash tool overhead is limiting throughput on data-heavy tasks.

3421 votes

catchup

Recovers the conversation and failed tool calls of a previous Codex, Amp, Claude Code, Antigravity, Cline, Copilot CLI, Cursor, DeepSeek Harness, Grok Build, Kimi, OpenCode, Pi Agent, or ZCode session. Use when the user says "catch up", "what did the last session do", "get me up to speed", "I switched agents", asks to recover/summarize a previous session before continuing, or asks to diagnose or report a catchup failure. Do NOT use for the current conversation, git history, or any non-agent log.

741 votes
View all in ai-agents →