are-we-done
[Adam''s Skills] Deterministic close-out gate for a session or work tree. Sweeps a fixed set of sources — the todo list, this session''s own promises, git…
[Adam''s Skills] Check whether the installed copy of this skills collection is behind its remote, and offer to update it. Runs a script that resolves the clone the skills are linked from, respects a once-a-day rate limit and a remembered refusal, and reports one of: up to date,
$ npx -y skills add adamlinscott/claude-skills --skill check-skill-updates --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/check-skill-updatesContext preview
The summary Claude sees to decide when to auto-load this skill.
[Adam''s Skills] Check whether the installed copy of this skills collection is behind its remote, and offer to update it. Runs a script that resolves the clone the skills are linked from, respects a once-a-day rate limit and a remembered refusal, and reports one of: up to date,
name: check-skill-updates description: '[Adam''s Skills] Check whether the installed copy of this skills collection is behind its remote, and offer to update it. Runs a script that resolves the clone the skills are linked from, respects a once-a-day rate limit and a remembered refusal, and reports one of: up to date, N commits behind, unsafe to touch, or offline. Only "behind" is ever mentioned to the user; everything else is silent. On a yes it pulls and re-links, changing nothing about which skills are installed. Use when the user asks whether their skills are up to date, or when another skill reaches a natural close and wants to mention a waiting update.' allowed-tools: Bash, Read
Say nothing unless there is something to say. This skill exists to mention a waiting update **once**, at a moment when the user is not busy — and to be invisible the rest of the time.
node <repo>/tools/freshness/check.mjs
`<repo>` is the clone the skills are linked from. Resolve it from **this file's real path**, not from the working directory: `~/.claude/skills/check-skill-updates` is a link, so its target's `../../tools/freshness/check.mjs` is the script. The working directory is whatever the user happens to be editing, which is usually a different repo entirely.
The script prints one line of JSON and nothing else. Flags: `--force` (the user asked directly, ignore the rate limit), `--update` (pull and re-link), `--decline` (remember this was turned down).
| Verdict | What you say | |---|---| | `fresh` | Nothing. Silence is the correct output. | | `too-soon` | Nothing. Already checked within the day. | | `offline` | Nothing. A failed fetch is not the user's problem to hear about. | | `not-installed` | Nothing, unless the user asked directly — then say the clone could not be found. | | `unsafe` | Nothing, unless the user asked directly — then say the clone is on `<branch>` or has uncommitted changes, so it is not safe to pull for them. | | `behind` | **One line.** See below. | | `updated` | One line: what was applied. If `refreshed` is false, say the pull worked but the re-link did not, and name `node <repo>/install.mjs --refresh`. |
When the user invoked this skill directly, report every verdict plainly — being asked a question is licence to answer it. When another skill called you, only `behind` earns any words at all.
One line, at the very end of whatever the calling skill was already saying, never in the middle:
> Skills update available — 3 commits behind (`feat(are-we-done): add close-out gate`). Update now?
Then honour the answer:
it changes the text of skills you already have, adds and removes nothing, and anything already running finishes on the version it started with.
sits there. Do not re-ask tomorrow; the answer has not expired.
Never mention an update next to a failure. If the calling skill is reporting blockers, a broken build, or anything the user has to act on, stay silent — an update offer stapled to bad news dilutes both, and this is the one thing here that can always wait.
`/are-we-done` on a clean close, `/ship-it` once the release is out and verified, `/brief-me` when re-entering a session. All of them skip this silently if it is not installed; none of them treat it as a prerequisite. The rule they share is that the work has to be finished first — this is a footnote to a natural close, never an interruption of one.
Each skill lives under skills//SKILL.md and is the single source of truth; an install script links them into the global skills directory (~/.claude/skills/) so Claude loads them in every session, on every machine.
Repo: adamlinscott/claude-skills
[Adam''s Skills] Deterministic close-out gate for a session or work tree. Sweeps a fixed set of sources — the todo list, this session''s own promises, git…
[Adam''s Skills] DEPRECATED — superseded by /build-it. Do not use for new work. Surfaced the load-bearing assumptions behind a task before a long run — goal,…
[Adam''s Skills] Print a plain-English re-entry briefing for a user who has lost the thread of a long-running session — after a distraction, overnight, or over…
[Adam''s Skills] Build a piece of work, from wherever it is written down — a ticket number or URL, a plan or spec file, the plan agreed in the conversation…
[Adam''s Skills] Audits a repository''s Claude context-injection setup — CLAUDE.md, CONTEXT.md, docs/, .claude/agents/, and the per-project memory directory.…
[Adam''s Skills] BETA / under development. Mine the current project''s Claude Code sessions for recurring corrections, then interrogate them — consolidate…