What is a way
The installable, validated contract for gated ways of working.
A way is a team's way of working, packaged: its gated phases, the documents each phase must
produce, the knowledge and rules it carries, and the tools, environment variables, and MCP servers
it requires — declared in one portable, versioned, agent-neutral manifest (way.yaml).
ways is the CLI that makes that manifest real:
npx ways.sh add <source> # acquire pinned → see the full plan → approve → install
npx ways.sh bind # bind the way's capability slots to YOUR tools
npx ways.sh doctor # validate the whole environment, honestly
npx ways.sh install # reproduce the whole ways.lock on a fresh clone / in CIInstall / invocation
The CLI is published under three names — same tool, pick whichever you prefer:
| Run with | Package |
|---|---|
npx ways.sh <cmd> | ways.sh (short, recommended) |
npx ways-cli <cmd> | ways-cli |
npx @incu/ways <cmd> | @incu/ways (canonical) |
npx ways (no suffix) does not work — that unscoped name belongs to an unrelated npm package.
All three expose the ways bin:
npm i -g ways.sh # then: ways add <source>Not another installer
Packaging and placement ride the substrates that already work: skills land via
skills.sh, rules land via
steering (converted to each agent's native format), MCP dependencies are
described with the standard server.json vocabulary. ways never copies skill files itself and
never targets a single agent.
What none of those substrates have — and what ways adds on top — is the contract:
| Layer | Who owns it |
|---|---|
| A gated, multi-phase process with human approvals | way.yaml → spec.flow |
| Tool needs as capabilities, not brands | skills[].uses → spec.needs + bindings |
| Declared CLIs, env vars, MCP servers — validated | spec.requires + ways doctor |
| Pinned, content-addressed, approved installs | ways.lock + the approval gate |
The 30-second mental model
- A way author writes
way.yaml: skills, knowledge, requirements, capability slots, and the flow (phases → gates → generated documents). - A consumer runs
ways add: the way is fetched pinned, validated against the schema and the conformance rules, and nothing executable is enabled until the full plan is approved. - The consumer runs
ways bindto fill the way's slots with their tools (GitHub or GitLab, Jira or Linear — the way doesn't care, the contract does). ways doctorproves the environment is ready — or tells you exactly what to fix.- Every teammate (and CI) runs
ways installto reproduce that exact set fromways.lock— byte-for-byte, with the approval carried in the lock so trusted content isn't re-prompted.
One way, or a whole family
A way.yaml describes one gated flow. To ship several related flows under one identity —
a feature flow and a bug flow, say, each with its own gates — package them as a
WayFamily: it references member ways and carries the payload they
share, so ways add installs the whole set in one command while each member stays installable on its
own.
Continue with Getting started, or go straight to ways & families.
Normative source of truth: the
waysrepo — schemas inschemas/ways/v1alpha1/, program docs indocs/program/.