Skip to content

When to Use Tuff

Tuff is for teams that want agent capabilities to be managed like normal engineering assets: visible in a project, reviewable in pull requests, and reproducible across machines.

A platform or developer-experience team maintains a pack repository:

company-agent-pack/
tuff-pack.toml
capabilities/
rust-test-workflow/
security-review/
release-prep/

Product teams install the capabilities they need:

Terminal window
tuff init
tuff add skill https://github.com/company/company-agent-pack rust-test-workflow --agent open-agents
tuff list

The project owns the installed output. If a team customizes it, Tuff should show that drift instead of hiding it.

Some agent behavior belongs to a single project. For example:

  • how to run that service locally
  • how to test a migration
  • how to review domain-specific code
  • how to prepare a release

Those capabilities can live inside the project and still use Tuff for validation, install state, drift detection, and future merge behavior.

An engineer may also keep personal capabilities in a global location and load them into a harness. Tuff should support that flexibility later, but the strongest team workflow is project-owned state that can be reviewed and shared.

Global capabilities are useful for personal preferences. Project capabilities are better for team conventions.

Teams can adopt useful skills from ecosystems such as skills.sh or GitHub repositories, then bring them under Tuff lifecycle tracking.

The intended flow is:

Terminal window
tuff add skill https://github.com/owner/repo rust-implement --agent open-agents
tuff list
tuff diff rust-implement

Use tuff add --agent open-agents .agents/skills/<id> for local agent assets that already exist in a project. Use tuff add skill <git-url> <id> for capabilities hosted in a git repository.

Different coding agents expect different file layouts. Tuff should keep a single managed source model and compile or emit agent-specific output:

Terminal window
tuff agent add open-agents
tuff agent add claude

Harness adapters make agent output explicit and reproducible. The same managed capability can be emitted into .agents/ for Open Agents-compatible harnesses or .claude/ for Claude Code.