>- ALWAYS invoke this skill when the user asks about work done outside this session - "check work", "check the others", "check other sessions" - or to each part against machine state, name every gap between claimed and true. Verified-ready work merges in the same pass. End with what is left, one next step, and any reply another session needs, ready to paste.
npx skills add https://github.com/kharmanskyi/open-steps --skill os-check-work
You are the receiving party: another session says it finished, and your job
is to find out whether that is true. Reports run optimistic - they are written
by whoever did the work. Triggers live in the description above; one more is
taking over work you did not do.
Write in the language the user speaks in this session, detected from the
conversation. Code, file names and identifiers stay English.
measurements: "tests are green" vs the count that ran. Ask for the number.
Plural is a sweep: every sibling session, one line each, statuses only.
Singular - "accept this", a named session or pull request - is an accept:
full verification, then acceptance. A sweep that finds verified-ready work
rolls into accepting it - the accept steps run first, never skipped.
One line per session, one call per pull request - the reader skims these and
reads the closing block. No table:
<name a person recognises (#PR)> - <product change>; <all done? plus
proof in 2-4 words, or what is missing>; <archive: yes / not yet>.
product, not a file list.
is one word, not a finding.
leaves unverified. Never announce your working mode - "cheap checks" is
bookkeeping.
when that needs the deep read, the reply becomes the do-this-next.
message is the report; read it once, do not quote it back. No tools → the
pull request is the artefact; say so.
| The session claims | Where the truth lives |
|---|---|
| checks are green | gh pr checks - counts and states, not the summary word |
| it was approved | --json reviewDecision,latestReviews - revocable on the same commit |
| no open discussions | the unresolved-thread count, not "I addressed the comments" |
| ready to merge | mergeStateStatus - and again right before merging |
| tests were added | find them in gh pr diff - the most common false report |
| it stayed in scope | gh pr diff --name-only vs the task; flag unasked files |
| linked to the task | the ticket in branch, title or body |
Prefer numbers to words. Check what the report did not mention: scope
creep and missing tests are never claimed - they are found.
Claimed: … Measured: ….No gaps → say so in one line; a clean intake is a real result.
never fix it silently - that makes you the author of work you were checking.
main line, restart a stuck check - reversible plumbing, no content change.
mode, no round-trip. Exactly two things stop it - a claim that failed,
and an instruction on this task that merges happen on command only (an
orchestrator may own the merge; that instruction beats any standing
policy). The verification itself is never skipped.
before deleting what is not certainly its. Archive verdict → closing block.
When a checked session needs to hear something back - a defect, a question, a
decision - write the reply in the same pass; do not leave the translation to
the user.
**To <session name>** - paste this:
<the instruction, verbatim>
marked; past three it is a decision for os-ask-simple.
Both modes end the same way, always last, nothing after it:
| | |
|---|---|
| **Still open** | <what remains, or "nothing"> |
| **Do this next** | <the one action> - <one clause of reasoning> |
| **On your word** | <what you will do once they say it> |
past three items goes to os-whats-next.
reasoning clause says so.
invent an action; a step that is not yours → say whose (os-step-by-step).
reports what you did. Pass closed everything → run os-whats-next.
standing policy; a task-scoped restriction beats both. Merging verified
work already has that policy: step 4.
live session is using.
Take kharmanskyi/os-check-work from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.