Skip to content

Workflows

A workflow capability declares a reusable pattern. It lists which skills, tools, and hooks should be installed together to support a specific workflow (e.g., “test-first Rust development”).

Workflows don’t execute anything. They are declarative bundles that surface a checklist of required capabilities. The harness (Codex, Claude, etc.) reads the workflow definition and activates the listed capabilities together.

tuff.toml
id = "release-prep"
version = "1.0.0"
type = "workflow"
description = "Pre-release checks and validation steps before cutting a release."
[[workflow.requires]]
id = "python-uv-default"
type = "skill"
[[workflow.requires]]
id = "security-review"
type = "tool"
[[workflow.requires]]
id = "pre-commit-lint"
type = "hook"
FieldRequiredDescription
idYesStable identifier
versionYesSemantic version
typeYesMust be "workflow"
descriptionYesWhat this workflow enables
[[workflow.requires]]YesAt least one required capability

Each [[workflow.requires]] entry must have:

FieldRequiredDescription
idYesThe capability to depend on. Cannot be the workflow’s own id.
typeYes"skill", "tool", or "hook"
Terminal window
$ tuff add workflow ./release-prep --agent open-agents
note: workflow 'release-prep' requires 3 capabilities:
- python-uv-default (skill)
- security-review (tool)
- pre-commit-lint (hook)
installed release-prep (open-agents) -> .agents/workflows/release-prep/workflow.toml

Workflows install themselves but do not auto-install dependencies. Install the required capabilities separately, or use tuff add <capability-type> <path> --agent <agent> if they already exist in your project.

At install time, Tuff validates:

  • requires has at least one entry
  • No duplicate requirement ids
  • No self-reference (workflow cannot require itself)
  • All requirement ids are non-empty
TargetWorkflow directory
open-agents.agents/workflows/<id>/workflow.toml
claude.claude/workflows/<id>/workflow.toml

Shows the workflow and each required capability with its drift status:

release-prep project clean
├─ python-uv-default skill clean
├─ security-review tool modified
└─ pre-commit-lint hook missing

Capabilities that aren’t installed show missing. Installed capabilities show their actual drift status (clean, modified).

Workflows participate in the full Tuff lifecycle: tuff list, tuff diff, tuff check, tuff delete, tuff untrack, and tuff outdated all work.

Terminal window
# 1. Create the workflow
mkdir feature-build
cat > feature-build/tuff.toml << 'EOF'
id = "feature-build"
version = "1.0.0"
type = "workflow"
description = "Full feature development cycle with testing, linting, and security review."
[[workflow.requires]]
id = "rust-implement"
type = "skill"
[[workflow.requires]]
id = "rust-write-tests"
type = "skill"
[[workflow.requires]]
id = "pre-commit-lint"
type = "hook"
[[workflow.requires]]
id = "security-review"
type = "tool"
EOF
# 2. Install the workflow
tuff add workflow ./feature-build --agent open-agents
# 3. Install the required capabilities
tuff add skill https://github.com/pproenca/dot-skills rust-implement --agent open-agents
tuff add skill https://github.com/pproenca/dot-skills rust-write-tests --agent open-agents
tuff add hook examples/hooks/pre-commit-lint --agent open-agents
tuff add tool examples/tools/security-review --agent open-agents
# 4. Check status
tuff status