From Spec to Delivery
Workflow Skills
Spec in. Named pipeline. Reviewed pull request out. Any coding agent. GitHub and Azure DevOps.
Features
A spec-driven pipeline: the spec is source of truth, gates are named, and the agent cannot skip them.
Specialized host subagents (Cursor & agents)
Compile canonical skills into host-native specialized subagents (.cursor/agents/ws-step-*.md) with zero-turn bootstrap overhead, direct embedded instructions, non-clobbering custom agent protection, and a fail-safe fallback ladder.
Context budgets and progressive disclosure
Dispatches use bounded subagent contracts and indexed plan slices: an 18 KB fixed preamble, a 4 KB matched MEMORY slice, and a configurable 32 KB total context budget, with optional per-step overrides via defaults.stepContextBudgets (step-override-else-global, 18 KB floor). Every dispatch persists a durable prompt audit pair beside the step artifacts, linked from dispatch provenance and verified by pre-advance gates.
AC ledger and derived scoring
A machine-readable acceptance-criteria ledger links evidence, tasks, files, tests, findings, and sabotage outcomes. Standard Step 5 derives its score from that ledger, so agents cannot author or override it.
Atomic Node state runtime
Portable Node helpers write {workflow-id}.state.json first (machine SoT with embedded handoffs), render .state.md, and append a single telemetry.jsonl stream plus the repo plans index for reliable resume and inspection.
Telemetry and deterministic reporting
A single append-only telemetry.jsonl stream captures lifecycle, gate, skip, revision, and timing evidence. Aggregate and report commands summarize audit counts and median elapsed time by pipeline and step.
Gate granularity and adaptive convergence
Choose step or phase gates, with phase mode capped at five blocking decisions. Adaptive polling uses observed check and thread state while preserving fail-closed verification and review convergence.
Desktop config GUI editor
Interactive Windows Forms editor (npm run config:gui / Edit-Config.bat) with auto Dark/Light themes, categorized tabs, live search filter, schema descriptions, and comment-preserving JSON persistence for config.json.
Multi-CLI step runs (ws-spec-to-pr-distributed)
The opt-in ws-spec-to-pr-distributed workflow executes different steps in different CLI processes through the deterministic coordinator (step_coordinator.cjs, no LLM): map steps to runners with defaults.stepRunners / defaults.runners, tune polling with defaults.stepBaton. Revision-serialized claim/release/expiry on the state-file baton, one-shot workers with sparse pointers, baton_* telemetry plus read-only monitor fields, and coordinator-surfaced gates. ws-spec-to-pr ignores those keys and stays single-host.
Opt-in proof of work (UI evidence)
A post-completion, non-blocking evidence step gated by defaults.enableOptionalProofOfWork plus defaults.enableAutomaticEvidenceCollectForProofOfWork. Evidence lands under defaults.projectRootFolderToSave (default {projectRoot}/.proofOfWork/{slug}) and that folder is never committed unless separately asked. Pipeline details →
Translate to human
ws-spec-translate-to-human writes a numbered Implementation / UI Test / Out of scope runbook beside an agent spec. It never replaces the spec, and the refinement hook that offers it is non-blocking when the companion is absent. Spec lifecycle →
Unattended autoMode and batch runs
autoMode chains Steps 0→9 in one orchestrator session with mid-step checkpoint and turn-boundary pause-turn resume via update_state.cjs. ws-spec-multi classifies each queued spec and dispatches exactly one pipeline at a time with isolated workflowType and no cross-resume. In autoMode, Step 5 exit skips Pass 1 / Reach-10 and dispatches Step 6 in the same turn. Pipeline details →
Spec organizer, subfolder sync, and cleanup
ws-spec-organizer files specs into pending / completed / archived subfolders and prefixes NNNN- when plans.enforceSpecPrefixOrdering is true; ws-spec-index sync follows a move, while ws-spec-archive harvests shipped plan folders into index.PRD and ws-cleanup deletes only user-approved untracked leftovers. Cleanup & diagnostics →
Tracker export without a spec
ws-spec-to-issue turns a free-text idea into an anonymized GitHub issue / ADO User Story through the active provider create-issue intent. No local spec, no git mutation. Provider intents →
Install snapshot and global fallback
ws-version prints install scope (global vs project-local), the loaded skill directory, and the package semver. A repo-relative skill path missing on disk falls through to the same path under the global install instead of creating a junction, symlink, or copy. The install-mode detector compares roots as canonical paths, so a coincident tree reports global (never hybrid), and the global version resolves from canonical ws-shared/version.json. Install & hub →
Live monitor watch for long runs
ws-monitor --watch --until-terminal polls an active run until it leaves active state, tracks a stall stopwatch that defers to the workflow state/telemetry clock, follows the correlated session transcript, and proposes an enriched, anonymized defect issue through the configured provider create-issue intent. Read-only: it classifies drift without editing the run. Diagnostics →
Session retrospective that writes back
ws-retro reviews one completed run and proposes ranked, evidence-linked environment improvements (memory, directives, standards, checks, pointers, no-op deletions). Propose-only with approval; opt-in auto-run via retro.enabled after ship; never blocks close. Practices & tooling →
Local kanban board for specs
ws-kanvas (npm run kanvas) serves a six-column board of spec and workflow state with phase color coding, drag-and-drop moves, and a modal that renders the full spec markdown. Kanvas board →
Living wiki with pre-ship doc-sync
ws-wiki keeps a domain-partitioned feature wiki in sync with shipped code (init, from-code genesis, sweep, verify, apply), bounded by a Sync Baseline watermark. The pre-ship gate files wiki, spec-index, and changelog updates before the PR opens. Wiki manager →
Worker liveness verdict for dispatched batches
Every dispatched batch worker writes a .runtime/worker-started-{step}-{batch}.md marker, so the parent resolves exactly one read-only verdict from the recorded dispatch baseline, that marker, and durable progress after dispatch: no-baseline → alive → pending → wedged (exit 2 only for wedged). Durable progress outranks marker absence, only a proven wedge authorizes takeover, and the window resolves from defaults.workerLivenessWindowSec (default 600 s). Inline, lite, and Tier 3 postures carry no marker obligation. Pipeline details →
Definition of Ready and TDD
Authoring requires Definition of Ready, Validation & Observation Notes, and Negative & Failing Test Scenarios. Interview audits failing tests. Implement is red-then-green. Uncovered negative scenarios cap verify at 8.
Dual memory routing
Consult local MEMORY files, an external spec-memo vault, or both. enableMemoryFiles and enableSpecMemoIntegration choose the backends. ws-spec-memo is setup; runtime vault ops use ws-memo.
Spec is the contract
Human-facing *.spec.md under the specs directory is the contract of record. Plans are run artifacts. Write a spec, plan, implement, verify, review, test, open a PR, and close threads. One orchestrator owns the sequence so the agent does not skip gates.
Two speeds, same config
Standard is thorough (steps 0–9). Lite is fast (steps 0–5). Both share project config. Batch mode classifies each spec and picks the right speed.
Verify at minVerifyScore or keep going
Standard Step 5 scores the work 0–10. Below defaults.minVerifyScore (default 9) it re-implements flagged tasks and re-scores (max 3 rounds). It never auto-approves a weak score.
GitHub and Azure, same ops
Auth, fetch to spec, create PR, list and resolve threads, check status, merge. Switch providers.scm. The contract is tested in CI.
Hermes delivery disciplines
Prior-work sweep before plan/code; design-intent git history; repo-wide defect-class fixes; regression sabotage when mutation is unset; CI triage via extended check-pr-status; GitHub PR-body Closes #{id} auto-close on default-branch merges; tracker comments use comment-issue and post-merge state transitions use close-issue.
Commit, then review
Product files commit after verify (standard) or after implement (lite). Review diffs committed work vs the base branch. Review fixes get a second commit. Plan files wait until ship.
Any agent, your repo
Skills are markdown plus scripts. No IDE lock-in. Paths come from config.json. Your config, memory, and changelog stay local when you update.
Local preview dry-run
/ws-preview runs your preview.dryRunCommand in-repo (no packaged reviewer). Configure with /ws-configure-project --section preview — it can infer the recipe from harness docs and scripts.
Per-run model preset
preset=<name> on the orch invocation overrides defaults.modelsPreset for that run only. An unknown configured preset fails closed at run start; the resolved preset persists in state and survives resume, and telemetry records concrete model ids.
Orchestrated fix-PR rounds
ws-goal-fix-pr owns the convergence loop inline while every Act round batch runs in a fresh worker: reviewer-model plan gate first, execution-model fix second. No-dispatch hosts use Tier 3 inline execution.
Dry-run before Create PR
Ship reuses preview.dryRunCommand after push and before PR creation (default on via preview.previewBeforeShip). Findings are reported on the Prepare-to-PR board and never block shipping.
Quiet ship preflight
Ship resolves head, base, remote, provider, and commit title from state, git, config, then auto-detect — asking only on genuine ambiguity instead of re-prompting known values.
Stay on your branch
Runs start on the branch you checked out: defaults.branchStrategy defaults to stay (or from-current, from-base, prompt). Ship resolves feature, shared-head, or push-only refs so a stay run never tries to PR a branch into itself.
Parallel agents, one worktree
Every workflow stages only its own paths and never resets, cleans, or stashes foreign work. A harness gate scans all shipped recipes for broad staging and destructive verbs, bootstrap warns about other active runs, and shared files (index.PRD, MEMORY, changelog) update under a cross-process lock.
A dirty baseline never costs the score
Verify counts an alias failure as a defect only when failing paths touch the workflow's own files. Implement runs every scoring alias and formats only what it changed, so a first-pass 10 is reachable on a repo with pre-existing lint debt.
Spec board by status
Opt in with plans.statusSubfolders to file specs under pending/, completed/, and archived/. organize_specs.cjs --by-status moves specs with their companions and rewrites index.PRD; shipped specs move to completed/ on sync.
Dispatch a subagent on demand
workflow-skills dispatch --subagent <name> --task "…" [--payload <json>] [--json] or the async dispatchSubagentTask() API run one task outside an orchestrator, with validated inputs and structured results.
Ready-to-use project hub
ws-configure-project seeds only what is missing in .ws/: STACK.md, hub AGENTS.md, autoload.md, and .gitignore. Your existing config is never rewritten, and a skillLoader capability lets hosts load skills with their native tool.
Deterministic Verification Engine
How Workflow Skills eliminates LLM hallucinations, fake passes, and regression drift.
ac-ledger.json mechanically links each spec requirement to concrete tasks, touched files, tests, commits, and sabotage checks. LLMs cannot fake completion without recorded evidence.
Standard Step 5 computes an objective score from the ledger: score = 10 × (implemented / total), capped at 8 if any negative scenario remains uncovered. Agents cannot author or override this score.
Before advancing to Step N, validate_state.cjs --pre-advance N verifies all required prerequisites exist on disk and match state hashes. Missing artifacts halt the pipeline immediately.
ws-self-learning inspects project MEMORY.md and external spec-memo vaults before planning or editing, turning previous coding mistakes into hard rules that subagents must respect.
Specialized Host Subagents for Coding Agents
Compile canonical skills into host-native specialized subagents (.cursor/agents/ws-step-*.md).
Subagents start instantly with embedded domain instructions and JSON output schemas—eliminating boot-time disk reads while preserving 100% harness portability.
Eliminates prompt token waste. Domain instructions, behavioral invariants, checklists, and the canonical step-output schema are baked directly into the agent definition. No turn spent reading SKILL.md on boot.
Generated agents include @generated SHA-256 header signatures. Non-generated custom agents are never touched. Automatic drift detection (--check) warns if projections drift from canonical skills.
Tier 1 named specialized subagent (@ws-step-*) → Tier 2 generic prompt reading SKILL.md → Tier 3 inline execution. The workflow never breaks if host tool capabilities differ or evolve.
Generated Projection (.cursor/agents)
disable-model-invocation: true---
name: ws-step-04-implement-tasks
description: "Executes implementation tasks for ws-spec-to-pr. Reserved for orchestrator dispatch."
disable-model-invocation: true
---
<!-- @generated signed-content sha256:7a018f39... -->
# ws-step-04-implement-tasks
## Behavioral Invariants & Pre-Checks
- Consult project MEMORY.md and stack rules before edits
- Apply red-then-green TDD for acceptance criteria
- Output parseable step-output JSON schema on exit
Adaptive Dispatch Ladder
host-dispatch.mdNamed Specialized Subagent
Direct delegation to ws-step-04-implement-tasks with zero overhead and direct context handoff.
Generic Subagent Prompt
Dynamic fallback reading canonical SKILL.md when host lacks named subagent routing.
Inline Step Execution
Orchestrator adopts step persona temporarily if tool invocation is completely unsupported.
How It Works
Start from a spec. Derive the plan. Implement against acceptance criteria. Ship a reviewed PR.
Spec Brainstorming & Schema Alignment
Transforms free-text user intent, issue description, or context into a canonical *.spec.md with crisp section hierarchy, mandatory acceptance criteria, Definition of Ready, Validation & Observation Notes, and Negative & Failing Test Scenarios. Authoring validation fails closed. New runs also ask a feature-branch strategy gate (stay on current, or create feat/{slug} from HEAD or from baseBranch).
Technical Implementation Planning
Generates a detailed technical implementation plan (step-01-*.plan.md), mapping proposed file modifications, domain schema bindings, and verification strategies.
Architectural Interview & Audit
Audits the plan against actual project code structure, surfaces design trade-offs, and resolves ambiguities interactively with structured user-gate choices.
DAG Task Graph Decomposition
Breaks down the refined plan into an atomic Directed Acyclic Graph (*.exec.dag.json), establishing strict dependencies, touch boundaries, and test obligations.
Subagent Task Implementation
Executes DAG tasks sequentially using subagent isolation. Enforces surgical diff hygiene, memory trap consulting before edits, and action-first execution. Product files stay uncommitted until after Step 05 verification.
Spec Compliance Verification
Evaluates code changes against spec acceptance criteria, calculating an objective completeness score (0–10) and generating a verification report. Advance requires score ≥ defaults.minVerifyScore (default 9, range 1–10); below the bar the orchestrator runs scoreAndRefine (re-implement flagged tasks and re-verify) until that bar. After a passing score, the orchestrator commits workflow-touched product files so local review can diff committed work vs the base branch.
Multi-Stage Local Code Review & Auto-Fix
Reviews the committed diff vs baseBranch (git diff {base}...HEAD). Runs a two-phase code review (Security/Bugs & Senior Standards) with automatic fix sub-cycles, then a second product commit for review fixes if any.
Automated Testing & Quality Gate
Runs pre-PR automated test suites (unit, integration/E2E, coverage) plus an optional mutation-testing gate (kill/survive score vs threshold) when configured in project config. Optional defaults.testingModel selects a dedicated test-executor model for this step after modelsPreset / stepModels overrides (falls back to executionModel).
SCM Commit & Pull Request Delivery
Commits configured plan-dir delivery artifacts (product code is already committed after verify and after review-fix), pushes the feature branch, and opens a Pull Request via the configured SCM provider (GitHub CLI / Azure DevOps).
PR Review Thread Convergence
For each Act-round or standalone batch, runs a gate-only fixPrPlan with reviewer-class model resolution, then validates and applies it in fixPrExec with execution-class resolution. Both roles stay inside outer Step 9; convergence continues until zero unresolved threads remain.
Lite Spec Creation & Complexity Routing
Drafts a canonical *.spec.md with Definition of Ready, Validation & Observation Notes, and Negative & Failing Test Scenarios (authoring validation fails closed), then evaluates complexity against dagThresholds in project config to validate Lite eligibility.
Direct Implementation Planning
Generates concise, focused implementation plan without requiring deep multi-round interview overhead.
Direct Sequential Task Execution
Executes code changes sequentially in place, bypassing complex JSON DAG file generation for rapid feature delivery. Then commits workflow-touched product files before local review.
Focused Code Review & Refinement
Reviews the committed diff vs the base branch, verifying quality standards and auto-fixing issues, then a second product commit for review fixes if any.
Rapid SCM Delivery
Pushes the feature branch and opens the pull request (product already committed). GitHub or Azure DevOps, same intents.
PR Review Fix Convergence
Runs the same gate-only plan before execute order for each incoming PR-comment batch, inline on the current session model, until all threads are resolved.
Spec Queue Discovery & Validation
Scans specs/ directory or `{plansDir}/specs/` to index all pending feature specifications and verify structural formatting.
Smart Complexity Auto-Routing
Evaluates spec complexity (file count, layer depth, estimated tasks). Automatically routes simple specs to ws-spec-to-pr-lite and complex specs to full ws-spec-to-pr.
Sequential Worker Dispatch & State Persistence
Dispatches worker FSM pipelines one spec at a time, persisting multi-spec execution status under {plansDir}/ws-spec-multi/ to allow resumption across sessions.
Interactive Failure Recovery & PR Consolidation
If a worker spec fails, pauses execution with clear user-gate choices (Resume, Skip, Abort). On success, ships individual PRs and updates project changelog.
Orchestrators
Top-level Finite State Machines that coordinate multi-step workflows, manage subagent lifecycles, and maintain state persistence.
Planners & Validators
Brainstorming, spec formatting, architectural plan generation, plan auditing, and DAG task graph building.
Task Executors
Isolated coding step workers that execute individual tasks, apply targeted refactoring, and resolve implementation issues.
Verifiers & Auditors
Spec compliance scoring (advance at ≥ defaults.minVerifyScore (default 9), scoreAndRefine until then), multi-pass code reviews, adversarial AI fraud detection, secrets scanning, install diagnose, and test verification.
SCM Delivery & PR Fixers
Branch management, git commits, PR creation across GitHub / Azure DevOps with a shared intent contract, Local spec register, and goal loops for PR thread fixing.
Guardrails & Memory
Scope control standards, surgical code diff guidelines, anti-regression memory, action-first response rules, and changelog updates.
Workflows
Every delivery run starts from a spec. One thorough path. One fast path. Same project config.
spec-to-pr
Standard FSMThorough delivery (steps 0–9)
Plan, interview, implement, verify at ≥ minVerifyScore (default 9), commit, review, test, open a PR, and close threads.
- Feature-branch strategy gate at bootstrap, then spec (Step 0)
- Architectural Review & Interview (Steps 1–2)
- DAG Task Decomposition (Step 3)
- Implement, verify (score ≥
defaults.minVerifyScore(default 9) or scoreAndRefine), product commit, local code review, review-fix commit (Steps 4–6) - Pre-PR testing (optional
testingModel), shipping & ws-goal-fix-pr (Steps 7–9)
spec-to-pr-lite
Lite FSMFast delivery (steps 0–5)
Plan, implement, commit, review, ship. Same GitHub or Azure PR ops as standard. No interview, DAG, or test step.
- Feature-branch strategy gate at bootstrap (same as standard)
- Planning & brainstorm from existing spec
- Direct sequential coding, then product commit
- Local code review of committed diff vs base; second commit for fixes
- Fast consolidation & PR delivery (plan-dir artifacts at ship)
- Zero setup/config duplication in dual-mode
ws-spec-multi
Smart Multi-Spec OrchestratorMany specs, one queue
Classifies each spec and runs standard or lite. Skips work that already shipped. Pauses with clear choices if a spec fails.
- Routes simple specs to lite and complex specs to standard
- Blank scan lists only pending/unfinished specs
- Skips specs that already have a merged PR
- Keeps queue state in per-run
{plansDir}/{runId}/dirs (legacy flat files still resume) - On failure: Resume, Skip, or Abort
ws-spec-to-pr-distributed
Opt-in multi-CLISame standard steps, several CLI processes
Drives the standard 0–9 step set across CLI processes on one machine via the state-file baton and deterministic step_coordinator.cjs. Explicitly invoked only; never auto-selected.
- Maps steps to runners with
defaults.stepRunners/defaults.runners - Revision-serialized claim/release/expiry on the state-file baton
- One-shot workers get sparse pointers plus a baton envelope
- Gates surface at the coordinator;
ws-spec-to-prstays single-host
Skill Catalog
Discover every shipped skill. Search by name, layer, or full vs lite.
Layer 0 — Harness
10 skillsLayer 1 — Engineering standards
1 skillsLayer 2 — Pipeline + providers
16 skillsLayer 4 — Review & audit
2 skillsLayer 5 — Utility & meta
33 skillsInstallation Packages
Flexible installation presets powered by bin/skill-dependencies.json dependency graph.
f
Full Package
Full package — selects every installable top-level skill and initializes the consumer (.ws/) config/docs hub.
.ws/) config & docs hubw
Workflows Package
Workflows package — 54 skills (orchestrators, pipeline, providers, harness, promoted utilities) plus the consumer (.ws/) hub.
ws-spec-to-pr, ws-spec-to-pr-lite, ws-spec-to-pr-distributed, ws-spec-write, ws-classify-complexity, ws-plan-write, ws-plan-interview, ws-plan-to-tasks, … (+46)
e
Extra Package
Extra package — 8 optional authoring/review skills. Does not install workflow orchestrators or hub by default.
ws-write-a-skill, ws-show-harness, ws-preview, ws-activity-report, ws-fable-domain, ws-plan-update, ws-run-benchmark, ws-benchmarks
Installation, Updates & Management
Canonical installation form: npx --yes github:jpolvora/workflow-skills.
Preserves consumer-owned files under .ws/.
Interactive Menu
Launch the interactive visual installer to select skills and packages.
npx --yes github:jpolvora/workflow-skills
Update Skills
Refresh managed skills listed in ws-shared/installed-skills.json while preserving local config.
npx --yes github:jpolvora/workflow-skills update
npx --yes github:jpolvora/workflow-skills update --include-new
Version & Health Check
Verify current local installed version against latest remote release.
npx --yes github:jpolvora/workflow-skills --check
npx --yes github:jpolvora/workflow-skills --version
cURL Quick Shim
Execute CLI directly via shell pipeline (requires Node.js).
curl -fsSL https://raw.githubusercontent.com/jpolvora/workflow-skills/main/install-skills.sh | bash -s --
Coding Agent Environment Configuration
Copy-paste integration recipes for Cursor, OpenCode, Claude Code, and Antigravity.
---
description: Spec-driven harness and workflow skills router
globs: .agents/**/*, **/*.spec.md
---
# Workflow Skills Harness
Read .ws/AGENTS.md for project configuration and task routing.
Follow ws-spec-to-pr for standard pipeline, or ws-spec-to-pr-lite for low-complexity changes.
{
"$schema": "https://opencode.ai/schema.json",
"instructions": [
".ws/AGENTS.md"
],
"skills": {
"local": ".agents/skills",
"global": "~/.agents/skills"
}
}
# Claude Code Spec-Driven Instructions
At session start, read .ws/AGENTS.md.
Use `npx --yes github:jpolvora/workflow-skills` to update or install skills.
All changes require a spec file under .agents/specs/*.spec.md.
# Antigravity / Gemini CLI Instructions
Load project settings from .ws/config.json.
When running multi-spec batches, invoke ws-spec-multi.
Adhere to surgical code hygiene and verify ledger scoring.
# Explicit Antigravity / Gemini CLI target (declarative ~/.gemini/config/skills.json)
npx --yes github:jpolvora/workflow-skills install --full --global --targets gemini --yes
# Or every known host (canonical + claude + codex + gemini)
npx --yes github:jpolvora/workflow-skills install --full --global --targets all --yes
# Interactive --global install/update prompts for host targets; piped/--yes runs auto-detect
# a pre-existing ~/.gemini dir when --targets is omitted
npx --yes github:jpolvora/workflow-skills update --global
# Install global skills once
npx --yes github:jpolvora/workflow-skills --global
# Configure current project (in your coding agent)
/ws-configure-project
# Verify harness integrity (in your coding agent)
/ws-check-harness
Frequently Asked Questions
Spec-driven delivery, orchestrators, quality gates, and agent harness compatibility.
Workflow Skills is a portable, spec-driven skill pack for coding agents. You install it once. The agent then runs a named pipeline from a feature spec to a reviewed pull request instead of inventing a process each time.
The spec is the contract of record. Plans are run artifacts. Standard delivery is ten steps. Lite is six. Skills are LLM-agnostic: any coding agent that can load SKILL.md can run the pipeline. Verify must hit ≥ defaults.minVerifyScore (default 9) from the AC ledger before review. GitHub and Azure DevOps expose the same PR operations. Your project config and memory stay local when skills update.
Yes. Delivery is spec-driven:
- Spec of record — canonical
*.spec.mdunder the specs directory (local draft, GitHub issue, or Azure DevOps work item). - Plans are runs — workflow copies and state live under the plans directory. A plan is not a second spec.
- Acceptance criteria gate code — standard verify derives its 0–10 score from an AC ledger. Agents cannot author or override that score. Advance only at score ≥
defaults.minVerifyScore(default 9).
This upstream repo uses the same model. Extra skills (direct problem-solving, doctor, preview, human runbook) sit beside the pipeline; they do not replace the spec contract. ws-spec-translate-to-human writes a numbered implementation and UI-test runbook next to the spec. The pipeline still runs if that file is absent.
Pick by how much process you want:
- Standard (
ws-spec-to-pr): ten steps. Plan interview, task graph, verify at ≥ minVerifyScore (default 9), commit, review, tests, PR, thread fixes. - Lite (
ws-spec-to-pr-lite): six steps. Plan, implement, commit, review, PR. No interview, DAG, or test step.
Product files are committed before local code review, not first at ship:
- Standard: after Step 5 verify (score ≥
defaults.minVerifyScore, default 9), then Step 6 reviewsgit diff {base}...HEAD. Review fixes get a second product commit. - Lite: after Step 2 implement, then Step 3 review; second commit after review fixes if any.
- Ship (Step 8 / lite Step 4): close implementation first (plan-dir G2-delivery, MEMORY, changelog,
status: completed), then optional push/PR. Plan files stay uncommitted until close. Shipping usesshipStatus, not workflow completion.
Only workflow-touched created/updated/deleted product paths are staged. Never git add -A. Review fails closed if those files are still uncommitted.
Standard Step 5 (ws-plan-verify) advances only at overall score ≥ defaults.minVerifyScore (default 9, range 1–10).
- Score below the bar: the orchestrator runs
scoreAndRefine(re-implement flagged tasks, then re-verify) until ≥defaults.minVerifyScore. - Max 3 rounds per Step 5 visit; then Pause (fail closed). Resume continues. Never auto-approve below the bar, including in
autoMode. - Optional polish (Accept As-Is) only when the score is already ≥
defaults.minVerifyScoreand thescoreAndRefineflag is on. Choosing Second Pass reviews the full Pass 1 diff for overengineering and unused workflow-introduced files, tests, methods, and classes.
Lite has no Step 5 verify gate. Product commit on standard runs only after score ≥ defaults.minVerifyScore (default 9). Uncovered Negative & Failing Test Scenarios cap the derived score at 8.
Authoring a spec requires Definition of Ready, Validation & Observation Notes, and Negative & Failing Test Scenarios. validate_spec.cjs --mode=authoring fails closed if those sections are missing or placeholder.
Interview audits failing-test coverage. Implement-tasks is red-then-green. Verify treats uncovered negative scenarios as a known defect and caps the score at 8.
ws-spec-multi is a sequential smart multi-spec batch orchestrator. A blank scan lists only pending and unfinished specifications under {specsDir}, runs ws-classify-complexity on each selected spec to dynamically select between Standard or Lite pipeline execution, and processes them one by one.
It maintains state persistence under per-run {plansDir}/{runId}/ directories (legacy flat {plansDir}/ws-spec-multi/*.state.md files still resume), allowing safe session pauses/resumes. It skips specs with already-merged PRs and presents structured user-gate choices if a spec encounters an issue.
No! Workflow Skills maintains a strict separation between managed skill files and consumer-owned project data.
Project .ws/config.json, STACK.md, and installed-skills.json stay put on update and uninstall. MEMORY.md, memory/, and CHANGELOG.md follow rules.memoryDir and rules.changelogFile (repo root by default) and are never overwritten from upstream. Update replaces managed skill files only.
Yes. Dual routing is controlled by enableMemoryFiles and enableSpecMemoIntegration. Default is local MEMORY files on and spec-memo off unless you opt in.
ws-spec-memo is the harness setup/bridge (wizard, import, config.json flags, hybrid fallback). Runtime vault ops (search, upsert, bootstrap, canvas) use ws-memo from the spec-memo package. When both backends are on, consult the vault first, then local MEMORY.
Workflow Skills includes multiple layers of automated defense:
ws-plan-verify: Spec compliance score 0–10. Standard Step 5 advances only at ≥defaults.minVerifyScore(default 9); below the bar runsscoreAndRefineuntil that bar (max 3 rounds).ws-senior-developer: Delivery gate enforcing surgical diff footprints, anti-reinvention checks, and pre-ship verification proof.ws-fable-judge: Adversarial audit engine performing diff-grounded verification to detect 4 classic AI code frauds (weakened unit tests, false verification claims, unauthorized side effects, and scope creep).ws-secrets-leak-review: Pre-PR scanner checking diffs for hardcoded API tokens, private keys, passwords, and sensitive credentials.ws-doctor: Read-only install/runtime diagnose of path errors, script recipes, config switches, and missing skill references.
Yes. Skills are markdown plus scripts. Any coding agent that can load SKILL.md can run the pipeline. There is no required host or IDE, and shipped skill bodies do not couple to a vendor UI.
GitHub and Azure DevOps share the same PR operations. Config, memory, and changelog stay in your repo when skills update.
You can run ws-configure-project or edit .ws/config.json directly. Key configurable options include:
plans.dir: Target folder for workflow plans and execution artifacts (default:.agents/plans).providers.scm: Active SCM provider (githubviaghCLI,azure-devopsvia ADO PAT). Both implement the same required intents inscm-provider-contract.md(parity checked innpm run test). Hybrid:providers.active: localwithscm: github.rules.stackFile: Path to project technology stack guidance (default:.ws/STACK.md).verification.*: Build, test, format, and optional mutation commands.preview.dryRunCommand: Local pipeline review dry-run for/ws-preview(set via/ws-configure-project --section preview, which can infer from AGENTS/README/MEMORY/rules/scripts; empty until configured).defaults.testingModel: Optional test-executor model for standard Step 7 (falls back toexecutionModel).
ws-preview does not ship a reviewer backend. It runs whatever command you set in preview.dryRunCommand from the consumer repo root, and never publishes PR threads.
Recommended setup: /ws-configure-project --section preview. The wizard infers candidates from AGENTS.md, README.md, MEMORY, rules.*, package.json scripts, and local skills, then asks you to accept, edit, or leave empty. You can also edit .ws/config.json directly (see config.json.example).
Yes. Both SCM providers implement the same required intents: validate-auth, fetch-to-spec, create-pr, list-threads, sweep-prior-work, check-pr-status, resolve-thread, comment-issue, close-issue, and merge-pr.
The contract lives in {skillsRoot}/ws-shared/runtime/scm-provider-contract.md. Host CLI recipes stay inside each provider. An extra intent on one side without the other (and without an allowlist row) fails npm run test via test/test-provider-parity.js.
The local spec provider is not an SCM implementer. It registers specs and delegates PR intents to providers.scm.
Closes #{id} stays in the PR body. GitHub auto-closes that issue only when the PR base is the repository default branch. After a merge with zero active threads, ship dispatches close-issue on any base. comment-issue stays a comment. Local specs (id: null) skip the close with exit 0.
Yes! To author a new skill, use our meta-skill ws-write-a-skill. It guides you through defining standard YAML frontmatter (name, description, version), applying progressive disclosure principles, and structuring helper scripts.
Lasting skill improvements can be submitted via Pull Request to the canonical upstream repository: jpolvora/workflow-skills. When that clone and a global ~/.agents/skills install both exist, edit only the clone; see README § This clone vs a global install.
ws-doctor is a read-only install/runtime diagnose: path errors, tool/script recipes, config switches, and missing references across installed ws-* skills. Use it after install/update or when a skill recipe fails.
ws-check-harness is the meta-harness integrity audit (routing, links, portability, integrity digests).
On a new ws-spec-to-pr / lite start (not resume), bootstrap asks how to isolate the run: stay on the current branch, create feat/{slug} from HEAD, or create it from baseBranch (after fetch). Resume skips this gate and checks out state.branch.
The gate never rewrites config.project.workingBranch. It will not git reset, delete branches, or overwrite an existing feature branch.
Optional model preference for standard Step 7 (testing). modelsPreset / stepModels overrides apply first. When set, the orchestrator prefers that model for the test executor subagent. Empty or omitted falls back to defaults.executionModel, then the active session model. Lite has no Testing step and does not read testingModel.
Yes. Pass preset=<name> (or --preset <name>) on the ws-spec-to-pr / ws-spec-to-pr-lite invocation and that run resolves subagent models from the named bundle instead of defaults.modelsPreset — no config.json edit needed.
Unknown names warn in telemetry and the Init banner and fall back to the configured preset. The resolved preset persists in workflow state and survives resume without re-passing the flag. The orchestrator session itself always stays on the active model.
ws-goal-fix-pr acts as an orchestrator: its session owns the wait/fetch convergence loop inline, while every Act round batch runs in a freshly dispatched worker. Each worker runs one ordered pair — reviewer-model fixPrPlan writes the complete gate before any mutation, then execution-model fixPrExec validates and applies it.
Hosts without subagent dispatch use documented Tier 3 inline execution with identical gate and learning contracts. Resolve and push stay forbidden until both substeps have evidence.
Specialized subagents project canonical .agents/skills/ws-* definitions into native host agent formats, such as .cursor/agents/ws-step-*.md. Each compiled subagent embeds domain instructions, behavioral rules, and JSON schemas directly into its prompt with disable-model-invocation: true, eliminating the prompt token tax of reading SKILL.md on boot.
Canonical skills remain the single source of truth: compile_host_subagents.cjs signs generated files with @generated hashes to prevent clobbering human-authored agents and detects drift via --check. If specialized subagents are disabled or unsupported, the orchestrator automatically falls back to generic subagent prompts or inline execution.
Three things:
- Node 22+ — the only required runtime. Install, update, skills, and scripts all run on
npx/Node. No Python, no shell toolchain. - A coding agent that can load
SKILL.md— any host works; there is no required IDE. - Your SCM CLI —
ghfor GitHub or an ADO PAT for Azure DevOps, only if you want issue/PR operations. Local-spec runs need neither.
After install, ask your agent to run ws-check-harness once, then /ws-configure-project to fill .ws/config.json (or use the desktop GUI via npm run config:gui on Windows).
Five steps, in order:
- 1. Install —
npx --yes github:jpolvora/workflow-skills install --full --yesin your repo. - 2. Configure —
/ws-configure-project(interview) so builds, tests, and the SCM provider match your repo. - 3. Write a spec — describe the feature; the agent drafts a testable
*.spec.mdwith acceptance criteria. - 4. Run the pipeline —
ws-spec-to-pr-litefor a fast first run,ws-spec-to-prfor the full gated path. - 5. Review the PR — code is committed before review and shipped only after close; fix-PR rounds converge review threads.
Unsure which pipeline fits? ws-classify-complexity recommends lite vs standard from your spec.
- Project-local (
.agents/skills/) — best for teams and CI: the skills travel with the repo and every run uses the same version. - Global (
~/.agents/skills) — best for solo work across many repos: install once, use everywhere. Global runs still read and write project config from the open repo, never from the global hub. - Hybrid — both installed: project-local skill bodies win, global fills gaps, and project
.ws/config.jsonalways wins over global defaults.
Global installs can also project into companion host targets (Claude Code, Codex, Gemini/Antigravity) via --targets. ws-version shows which scope a session actually loaded.
The pipeline fails closed and tells you how to resume — it never auto-approves a weak state:
- Below the verify bar —
scoreAndRefinere-implements and re-scores up to 3 rounds, then Pauses with the deficiencies listed. - Review loops — fix → re-review runs max 3 rounds, then Pause.
- Resume — re-invoke the orchestrator on the same slug; atomic state plus
telemetry.jsonlrestore the exact step.ws-monitorshows which step and gate a run is waiting on.
Genuine blockers (missing credentials, ambiguous scope, failing base branch) surface through a user-gate choice instead of a guess.
Two read-only views, no interference with the run:
ws-monitor --watch --until-terminal— polls until the run leaves active state, tracks a stall stopwatch, follows the session transcript, and can file an anonymized defect issue when something hangs.ws-kanvas(npm run kanvas) — a six-column board of spec and workflow state with drag-and-drop moves.
In autoMode the orchestrator chains steps 0→9 without yielding at internal checkpoints; mid-step progress survives host turn ends via checkpoint / turn-boundary pause records.
index.PRD— the project spec board. Specs are tracked as pending on write/import and flipped to done with a Done-log row when delivery evidence (commit or PR URL) exists.- Status subfolders — opt in with
plans.statusSubfoldersto file specs underpending/,completed/,archived/; sync moves shipped specs automatically and a close verifier fails if a done row still points atpending/. ws-spec-manager— one front door for create/list/update/sync/organize/archive/validate/import/run, so agents stop guessing which skill owns the task.
Before the ship phase opens a PR, the close step files a documentation trio so docs reflect shipped code:
ws-wiki sync— living feature wiki pages for the shipped behavior (warn-skips when no wiki is configured).ws-spec-index sync— flips the spec row to done and files the spec intocompleted/.- Changelog entry — append-only record of prompt, done, and result.
Governed by defaults.requirePreShipDocSync (default true; omitted or invalid also means true). Set false to restore the previous offered-wiki behavior.
Contribute
Lasting skill changes ship here. Consumer installs stay managed copies.
Skills live in .agents/skills/<name>/SKILL.md with standard YAML frontmatter (name, description, version).
If this clone and a global install (~/.agents/skills) both exist, edit only .agents/skills/ws-* in the clone. Do not edit the global copies from this repo. There is no IDE toggle that hides the duplicate; agents follow AGENTS.md § Global vs local ws-*.
Agents: see AGENTS.md for the full routing contract.
Humans: see README.md for install and contribution guidelines.
Docs map: Wiki · Flow diagram · FAQ · FEATURES.md · CATALOG.md