Scopes & Overrides
Tuff currently has two scopes:
projectglobal
The important rule is simple: project scope wins.
Scope Types
Section titled “Scope Types”Project scope
Section titled “Project scope”Project-scoped capabilities live in the repository and are tracked by:
tuff.locktuff.config.json(optional project preferences)
This is the default scope for tuff add, tuff list, tuff diff, and
tuff update.
Global scope
Section titled “Global scope”Global scope is for personal capabilities shared across projects. It uses the platform’s XDG-style Tuff config, state, and cache directories:
tuff.lockin Tuff’s user state directory- verified trees in Tuff’s user cache directory
~/.agents/or other global emitted files
Use it explicitly:
tuff init --globaltuff add ./my-skill --globaltuff update my-skill --scope globalResolution order
Section titled “Resolution order”When Tuff looks up an installed capability by id, it resolves in this order:
- project scope
- global scope
That means a project copy shadows a global copy with the same id.
Override Behavior
Section titled “Override Behavior”If both scopes contain the same capability id:
- the project copy is the active one for that repo
- the global copy remains installed, but is shadowed there
Tuff surfaces this in status output:
- project entries can show:
[overrides global: won't receive global updates] - global entries can show:
[shadowed by project copy]
Example: project copy overrides global
Section titled “Example: project copy overrides global”# Install globallytuff add ./company-review --global
# In a repo, install a project-specific copy with the same idtuff add ./company-review-custom
tuff statusIn that repository, Tuff resolves the project copy first.
Collision warnings
Section titled “Collision warnings”If a capability id already exists globally and you install a project copy from a different source, Tuff warns that the project copy will take precedence.
This is especially useful when:
- a company skill is installed globally
- a repository wants to pin or fork its own version
Scope-aware commands
Section titled “Scope-aware commands”Commands that default to project scope
Section titled “Commands that default to project scope”tuff add ./my-skilltuff listtuff diff my-skilltuff update my-skillCommands that can target global scope
Section titled “Commands that can target global scope”tuff add ./my-skill --globaltuff list --scope globaltuff delete my-skill --scope globaltuff untrack my-skill --scope globaltuff update my-skill --scope globalCurrent Limits
Section titled “Current Limits”Tuff does not currently support a deeper layered model such as:
- company
- team
- project
- personal local
Today the scope model is intentionally small: one repo-local layer plus one global layer, with clear precedence and explicit warnings when one shadows the other.