Skip to content
Back to skills

Progress

ASecurity

On-demand situational awareness — fresh git/PR snapshot plus continuation, distilled into one concrete "next action" suggestion. Use mid-session when you've lost track, after a compaction, or starting a new work block. Trigger on "where was I", "what's next", "progress", "what should I do now", "/progress".

  • 25 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added June 6, 2026
testingpythongobashgit

Security analysis

A100/100

Scanned June 6, 2026

npx -y skills add matteocervelli/llms --skill progress --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Progress?

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

Security grade badge for Progress
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/matteocervelli-progress/badge)](https://www.skillsdirectory.com/skills/matteocervelli-progress)

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: progress
description: On-demand situational awareness — fresh git/PR snapshot plus continuation, distilled into one concrete "next action" suggestion. Use mid-session when you've lost track, after a compaction, or starting a new work block. Trigger on "where was I", "what's next", "progress", "what should I do now", "/progress".
---

# Progress Skill

## Purpose

Fills the routing gap that SessionStart leaves open. SessionStart injects data; `/progress` interprets it and tells you what to do next.

Use mid-session when you've lost track, after a context compaction, or at the start of a new work block.

**What it does NOT do:** Re-fetch GitHub issues, CHANGELOG, or codebase map — those are already in session context from SessionStart. Running `/progress` will not flood your context window.

## Usage

```
/progress              # current repo only (default)
/progress --all        # cross-repo: show recent work from all projects
/progress --no-memory  # skip memory recall entirely (fastest, git-only)
```

No subcommands at v1. One command, one compact output.

## Workflow

### Step 0 — Memory context (skip if `--no-memory`)

Run the memory recall command with a hard 10-second timeout. If the command fails, times out, or returns empty or invalid JSON (`[]`, whitespace, non-JSON output), silently skip this step and proceed to Step 1 — this enrichment must never block the rest of `/progress`.

**Default (`/progress`):** scope to current repo only via `--project`.
**With `--all`:** query all repos (omit `--project`, use `--deep --since`).

```bash
# Detect current repo name (same logic as memory injection hook)
CURRENT_REPO=$(git remote get-url origin 2>/dev/null | sed 's/.*\///' | sed 's/\.git$//')
# Fallback: directory name
CURRENT_REPO=${CURRENT_REPO:-$(basename "$PWD")}

# Compute ISO date for 3 days ago (macOS: date -v-3d, Linux: date -d '3 days ago')
SINCE_DATE=$(date -v-3d +%Y-%m-%d 2>/dev/null || date -d '3 days ago' +%Y-%m-%d 2>/dev/null || echo "")

# Default: scope to current repo
# With --all: cross-repo (drop --project, add --deep --since)
if [[ "$FLAGS" == *"--all"* ]]; then
  RECALL_FLAGS="--deep ${SINCE_DATE:+--since "$SINCE_DATE"}"
else
  RECALL_FLAGS="--project "$CURRENT_REPO""
fi

timeout 10 uv run --project ~/.claude/skills/memory/recall \
  python ~/.claude/skills/memory/recall/scripts/memory_recall.py \
  "recent work" $RECALL_FLAGS --compact --limit 5 2>/dev/null
```

Parse the JSONL output (one JSON object per line). Each line has: `project`, `branch`, `date`, `summary`. Compact mode pre-filters short/empty summaries, so results are already clean.

**Filter out empty results** — discard any entry where `summary` is empty or where `project` is an empty string.

**Group by project** — keep only the most recent session per project (highest `date`). Cap at 3 entries total.

**Extract issue references** from each `summary` — look for bare `#N` and `owner/repo#N` patterns.

**Cross-reference** extracted issues. For each session with a non-empty `branch`, the branch name often encodes the project context. For the repo identity, run `git remote get-url origin` in the current directory and parse `owner/repo` from the URL. Bare `#N` references belong to that repo.

For each unique `owner/repo` identified (at most 3 across all sessions), fetch open issues:

```bash
gh issue view N -R owner/repo --json number,title,state,labels \
  --jq 'select(.state=="OPEN") | {number,title,labels}' 2>/dev/null
```

Use `labels` to extract priority. Priority inference: look for a label matching `P0`, `P1`, `P2`, `P3` (case-insensitive). If the title starts with `[P0]`/`[P1]`/`[P2]`/`[P3]` (following the project's naming convention), extract it from there. If no priority signal found, treat as P3.

Store these results — they feed the "Where you left off" section and the routing engine in Step 4.

### Step 1 — Fresh git snapshot

Run these commands to get current (not session-start) state:

```bash
git status --short
git log --oneline -3
git branch --show-current

# Release awareness
LAST_TAG=$(git describe --tags --abbrev=0 --match "v*" 2>/dev/null)
UNRELEASED_COUNT=$(git log --no-merges --oneline "${LAST_TAG:-$(git rev-list --max-parents=0 HEAD)}..HEAD" 2>/dev/null | wc -l)
RELEASE_TAG_AT_HEAD=$(git tag --points-at HEAD | grep '^v' | head -1)
```

### Step 2 — PR check

```bash
gh pr list --state open --json number,title,headRefName 2>/dev/null || echo "Not a GitHub repo or gh not configured"
```

### Step 3 — Continuation check

Read `.claude/memory/local/continuation.md` if it exists. Extract the first meaningful line (skip blank lines and the auto-header). This is fresher than what was auto-loaded at session start.

### Step 4 — Routing engine

Analyze the collected state and output the **Situation Report** (see format below) followed by one `→ Next Action` recommendation.

Apply these rules in priority order:

| State                                                         | Suggestion                                                            |
| ------------------------------------------------------------- | --------------------------------------------------------------------- |
| Staged files in git                                           | `/pre-commit` — staged changes ready for validation                   |
| Unstaged changes on `feature/*` or `fix/*`                    | `/review changes` — review before staging                             |
| On `feature/*`/`fix/*` with commits, no open PR               | `/pr-creator` — branch has unreleased work                            |
| Open PR exists                                                | `/review pr --pr N` then `/pr-merge` when ready                       |
| Continuation mentions specific in-progress task               | Resume that task (name it explicitly)                                 |
| Memory (Step 0) surfaces P0/P1 open issue from recent session | `/implementation --issue N` — resume highest-priority cross-repo work |
| HEAD tagged `v*` (just released)                              | Post-release: `/release verify tags`, close milestone, plan next      |
| On `main`, clean, >10 unreleased commits                      | Release candidate — run `/release plan` to scope a version            |
| On `main` with uncommitted changes                            | Unusual state — clarify before proceeding                             |
| Clean state, no continuation, no open PRs                     | `/story plan` or `/release plan` — what's next on the backlog?        |

If multiple rules match, apply the highest-priority one only.

## Output Format

Keep the total output under 25 lines.

```
## Situation
- Branch: <branch-name> (<N commits ahead of main> | clean)
- Working tree: <staged/unstaged summary, or "clean">
- Release: <last-tag> + <N> unreleased commits
- Open PRs: <"None" or "#N title">

## Last Session
<one-line summary from continuation.md, or "No continuation found">

### Where you left off (last 3 days)
- <project> (<YYYY-MM-DD>): <one-line summary of what was happening>
  → Open issue: <repo>#<N> — <title>
- <project> (<YYYY-MM-DD>): <one-line summary>
  → No open issues referenced

Suggested next: <repo>#<N> (<priority>, last touched N days ago)

## → Next Action
/<skill> — <one-sentence rationale>
```

**"Where you left off" rules:**

- Show at most 3 project entries, most recent first by `started_at`.
- Omit the entire section (including the header) if Step 0 produced no results.
- Each entry is exactly 2 lines: summary line + issue status line.
- Truncate the one-line summary to ~100 characters if needed.
- "Suggested next" picks the highest-priority open issue across all entries. Priority order: P0 > P1 > P2 > P3. Ties broken by recency (most recently active project wins). Omit if no open issues were found.

## Related Skills

- `/memory recall` — underlying retrieval engine powering Step 0
- `/pre-commit` — full validation before commit
- `/review changes` — companion review of uncommitted changes
- `/pr-creator` — create PR from current branch
- `/pr-merge` — merge an open PR
- `/story plan` — plan next sprint from backlog
- `/release plan` — scope next version release

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.