Skip to content

sermakarevich/ccw

Repository files navigation

CCW — Claude Code Workflows

Claude Code Workflow

Generator for linear Spec-Driven Development (SDD) workflow plugins for Claude Code. Define a workflow in one configs/<name>.yaml file and regenerate all commands, install scripts, and plugin manifests mechanically.

Install

git clone https://github.com/sermakarevich/ccw.git
cd ccw
just install
# or: bash bin/install.sh --local

The installer symlinks ~/.claude/ccw → this repo, installs the ccw CLI (via uv tool install --editable if uv is on PATH, otherwise pip install --user -e), and registers the four Claude Code commands under ~/.claude/commands/ccw/. Re-running the script is idempotent.

Commands

Command Purpose
/ccw:scaffold <name> Render a workflow plugin from configs/<name>.yaml. Idempotent; preserves hand-written content.
/ccw:instruct <name> <step> Walk through authoring content for a step, bucket by bucket.
/ccw:validate <name> Validate a config against CCW rules.
/ccw:help [<name>] Show workflow overview or per-step content status.

Minimal Config

configs/myflow.yaml:

plugin:
  name: myflow
  version: "0.1.0"
  description: "My workflow"
  author:
    name: "You"
    email: "you@example.com"
  repo_url: "https://github.com/you/myflow"

# Optional. Relative path; scaffold writes to <output_dir>/<workflow-name>/ at cwd.
# Omit to write to ./<workflow-name>/. Absolute paths and `..` segments are rejected.
output_dir: examples

common_instructions:
  - instructions/common.md

command_instructions:
  - instructions
  - questionnaires

workflow:
  - id: requirements
    description: "Gather requirements for a feature"
    argument:
      name: feature-name
      hint: "Name of the feature"

standalone:
  - id: chat
    description: "Quick chat about a feature"
    argument:
      name: feature-name
      hint: "Feature to chat about"

Then:

ccw scaffold myflow    # write <output_dir>/myflow/ (or ./myflow/ if unset)
ccw validate myflow    # config check
ccw help myflow        # per-step content status

Example

configs/sddw.yaml ships with this repo and sets output_dir: examples, so ccw scaffold sddw writes to examples/sddw/ — a full worked reference tree (commands, plugin manifest, install script, justfile, size-0 content stubs).

Uninstall

just uninstall

Removes ~/.claude/ccw and ~/.claude/commands/ccw/. The Python CLI remains installed — remove it with uv tool uninstall ccw or pip uninstall ccw.

Development

pip install -e ".[dev]"
pytest

Layout

  • ccw/ — Python package (CLI, rendering, validation)
  • commands/ — Claude Code command markdown for /ccw:*
  • configs/ — workflow configs (one <name>.yaml per plugin)
  • examples/ — committed scaffold outputs for reference (e.g. examples/sddw/)
  • .claude-plugin/plugin.json — plugin manifest
  • bin/install.sh — installer (CCW eats its own dogfood; install paths hardcoded)
  • tests/ — pytest suite

About

Plugin to create multi-step Claude Code Workflows from a config file.

Resources

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

 

Packages

 
 
 

Contributors