Skip to content

v2026.08.0 — the v2 planning suite, one Python installer, two skills retired

Latest

Choose a tag to compare

@rosslevinsky rosslevinsky released this 26 Aug 13:46
13ce57a

Sixteen skills, up from eleven. The planning workflow is rebuilt around a checkbox tracker
and a second, independent code review at every phase, with the previous generation kept
alongside under -v1 names so a plan already in progress still runs. One Python installer
replaces the two shell ones.

Before you update, read Removed and the two notes below it. An ordinary
python3 install.py replaces every skill this pack owns and prunes the two it has retired,
without a prompt — and if you are a Codex CLI user, the skills directory has moved and your
old one is left behind.

Added

  • /diff-review — an independent, diff-first code review. Where /cyw is the author
    re-reading their own work, this is a second reviewer that reads the diff without the
    implementation rationale and reports correctness findings without editing anything. With a
    second runtime installed it runs there, so a different model examines the code; with one
    runtime it uses a fresh reviewer, and failing that a deliberate in-context reset. It says
    when it had to fall back to that last one, because a reviewer that has seen the reasoning
    is a weaker check.
  • /web-verify — screenshot-first verification of a running web UI. Drives an existing
    Playwright setup and inspects the images against stated assertions. It never installs
    Playwright into a repository that lacks one; without it you get a manual checklist.
  • /demo-video — a guided-tour walkthrough video of a built feature, with subtitles
    timed from the test steps. Without ffmpeg it still produces Playwright's own video plus a
    subtitle file. It writes subtitles, not speech.
  • /clarify — explains something in plain English, from the conversation, a pasted
    document, code, or a link. Invoked bare it explains the last response. No repository
    needed.
  • The pack installs as an Agent Plugin. A plugin.json at the repository root makes it
    installable by any Agent Plugins 1.0.0 client, alongside
    install.py rather than instead of it. The standard discovers skills as
    skills/<name>/SKILL.md, which is the layout the pack already had.
  • AGENTS.md — the traps that bite an agent editing a skill in a clone of this
    repository: the per-skill size limit, the two edits adding a skill needs that nothing
    discovers, the rule that a skill file may not reference anything outside its own
    directory, and the deliberate duplication between the two planning generations.
  • Machine-read skill outputs have a schema of record. The /plan-duel judge verdict,
    the /diff-review findings object and the phase-worker result each ship a JSON Schema
    beside the skill. Where the spawned runtime takes a schema flag it is pinned and enforced;
    where it does not, the prompt asks for the object and a good narrative without a parseable
    one is still a successful result.

Changed

  • One installer, in Python. install.py replaces install.sh and install.ps1, and
    runs the same way on Linux, macOS and Windows. It reads the ownership manifest the shell
    installers wrote, so an install made by either can be updated or removed by this one.

    Three flags are gone. --update has no replacement and needs none — a plain
    python3 install.py installs or updates. --dry-run and --link have no replacement at
    all. If you script against the installer, check for those before updating.

    It needs Python 3.10 or newer. Installing as a plugin, or by copying skill directories
    by hand, needs no interpreter — but three skills have prerequisites at use time, however
    you installed them. /plan-duel runs a bundled Python engine and needs both runtimes'
    CLIs on PATH
    , so Python alone is not enough for it. /diff-review needs Python for its
    strongest cross-runtime mode and works without it at a weaker one. /web-verify's optional
    frame extraction needs bash and ffmpeg, and degrades to a checklist without them. Every
    other skill is Markdown and needs nothing installed.

  • Codex CLI users: the skills directory has moved, and nothing migrates it. The old
    installer wrote to ~/.codex/skills; that path holds configuration, and the documented
    user scope — shared with several other runtimes — is ~/.agents/skills. install.py
    writes there instead. Your old directory is left exactly as it was, with its eleven
    skills and its manifest — an install that nothing maintains any more, and a stale copy of
    skills that have since changed. Clear it out with the new installer, which reads what the
    old one recorded:

    python3 install.py --uninstall --target ~/.codex/skills

    Run it before or after updating. It deletes each skill directory the old manifest
    recorded, whole
    — so a file you added inside one, or an edit you made to one, goes with
    it. A skill directory you created yourself is not in that manifest and is left alone.
    Copy anything you want to keep out of those eleven directories first.

  • An update prunes what the pack retired, and replaces what it still ships. A plain
    install removes skills the manifest records as ours but the source no longer carries, and
    overwrites the rest wholesale. Skills you installed yourself are untouched.

  • The planning cycle is /plan-init/plan-phase/plan-run, rebuilt. A plan
    carries a Format: v2 marker; work breakdown writes one document per phase plus a
    checkbox execution.md; a run resumes from the first unticked box. Each phase ends at a
    gate that runs the phase's scoped tests, a single /cyw author pass and /diff-review,
    and records a short evidence block. A UI phase additionally runs /web-verify. Nothing
    edits plan.md after it is written; where the work departed from the plan is recorded in
    an as-built.md at the end of a non-trivial run.

  • /plan-init writes two things it did not before: for a plan under plans/, a row in a
    plans/README.md discovery index, creating that file if it is absent; and, when UI is in
    scope, a visual-verification success criterion in the plan itself.

  • The previous planning generation is available as /plan-init-v1, /plan-phase-v1 and
    /plan-run-v1.
    They are the skills that shipped under the plain names in 2026.06.0,
    driven by phases.md rather than execution.md. A plan already underway keeps working;
    new work belongs to the current suite. The two are kept apart by the Format: v2 marker
    on plan.md — the current skills refuse a plan without it, the -v1 skills stop and
    redirect when they find one — and by the tracker filename, which is how each suite finds
    its own state without reading the other's.

  • /plan-duel is a bundled Python engine and runs in either direction. The round loop,
    judging and resume logic moved out of prose into plan_duel.py, stdlib-only, so a resumed
    duel now replays its exit condition against what is on disk instead of leaving it to a
    model to reconstruct. Either runtime can be the controller, so the duel runs whichever one
    you start from. A run bounds every spawn with a timeout, refuses a workdir that already
    holds a duel rather than overwriting it, and states each role's file permission explicitly
    instead of inheriting the runtime's default.

  • /security-review-codebase absorbed the hierarchical mode. Deep mode is now a
    reference the one skill loads when the codebase warrants per-component review.
    Single-pass writes nothing to disk, and deep mode writes outside the repository it is
    auditing.

    It will also report differently. A committed secret is now reportable rather than
    excluded, values from a CLI argument or the environment are trusted less, LOW-severity
    findings are suppressed by one stated rule instead of three sections disagreeing, a
    fresh-context pass filters false positives before you see them, and a clean report now
    names what was reviewed and what was not — so "nothing found" tells you its scope.

  • /cyw run on its own no longer stops after one clean pass. A pass that finds nothing
    now needs a confirming second review before it stops, so a standalone run is longer than
    it was. Invoked from a phase gate — or with the argument single-pass — it runs exactly
    one pass instead.

  • /extract-hooks treats a declined candidate as a decision, listing it once rather
    than re-arguing it on the next run, and now reports a hook whose logic no test exercised,
    rather than letting a green suite stand as evidence for code nothing covered.

  • --verify compares file contents, by digest and kind, so a skill edited in place is
    reported rather than counted as present.

  • The project's own tests and CI ship. Twelve Python suites, two stub CLIs, and a CI
    workflow that runs the validator, the fixture corpus and every suite on Ubuntu, macOS and
    Windows. None of it is part of an install; it is what a fork inherits to check its own
    changes.

Removed

  • plan-and-do — its testing tenets moved into the plan-run skills, where the work
    actually happens, so the discipline now applies during execution rather than in a separate
    document you had to remember to open.
  • security-review-codebase-hierarchical — folded into security-review-codebase as
    its deep mode, at references/hierarchical-mode.md. Ask for a deep, thorough or
    hierarchical review and the one skill loads it; nothing is lost but the second name. If
    you ran the old skill, note that it wrote a run directory into the repository it was
    auditing and edited that repository's .gitignore to hide it. Deep mode writes to a
    temporary directory outside the audited repository and prints the absolute path.
  • install.sh and install.ps1, replaced by install.py. Earlier tags still carry
    them.

Both retired skills are pruned from your machine by an ordinary python3 install.py,
without a prompt.
So is any edit you made inside a skill directory this pack owns —
ownership is recorded as a directory name, and an update removes the directory before
copying the new version in, so a change you made to cyw/SKILL.md or any other pack skill
goes with it. Skills you created yourself are untouched. Copy anything you want to keep
before you update.

Fixed

Four defects in skills you have been running since 2026.06.0:

  • /plan-run no longer pushes to your default branch. It ran git push origin HEAD
    after committing a phase, so an unattended run on main published every phase straight to
    the trunk — and from a detached HEAD that command has no destination and simply failed.
    It now derives the default branch and skips rather than fails, and a skipped push stops
    the run instead of ticking the tracker over an unpublished commit.
  • /commit stops after committing unless you asked to publish. It ran
    git push origin <current-branch> as part of every invocation; "stage and commit" no
    longer pushes, while "push my changes" still works when there is nothing to stage. It also
    stages by named path instead of sweeping the whole tree, and surfaces unrelated files
    before they are committed rather than after. Three smaller fixes ride with it: a secret
    already staged before you invoked the skill is now caught rather than waved through, a
    secret reached by expanding a directory is caught too, a public key is no longer treated as
    one, and the message no longer goes through a shell heredoc — which does not exist under
    cmd or PowerShell — so committing works the same way on Windows. It also handles a
    repository with no commit yet, where the diff command it ran had nothing to compare.
  • /plan-phase writes beside the plan you gave it. It accepted a plan anywhere and then
    created plans/<slug>/phase-NN-*.md literally, so a plan in docs/ had its phase
    documents filed where nothing would look for them. It also refuses to overwrite an
    existing plan directory, and that check now runs before the first write rather than after.
  • /tdd accepts a failing assertion as red. It recognised a missing module or a missing
    attribute and told you to fix the test for anything else — including a test that failed on
    the assertion it was written to fail on, which is the usual red when you extend an existing
    function rather than add a new one. It now takes any failure showing the behaviour is
    absent, a failing assertion among them, and says so rather than leaving you to infer it.