[local] — non-shared folders
Folders that should exist in an install but whose contents never ship in the artifact.
[local]
dirs = ["data/portfolios", "outputs", "research"]Fields
dirs (list of strings)
Folder paths (relative to the workspace root). Each is:
- Created during
rig installif missing, with a.rigkeepplaceholder so empty dirs survive. - Excluded from the artifact during
rig pack, regardless of[package].includepatterns.
This is the shape, not content mechanism. The rig says "this folder matters; please create it; don't ship its contents."
When to use it
- For data folders the agent reads from and writes to (e.g.
data/portfolios/). - For output folders (
outputs/,reports/). - For ephemeral folders the user populates themselves.
- For research/scratch folders.
If the contents should ship (templates, examples, reference data), don't put
the folder in [local].dirs. Use [package].include instead.
Precedence
[local].dirs is stronger than [package].include. A folder listed in
[local].dirs is never packaged, even if a parent pattern in include
would have matched.
This avoids accidents: if you've added data/** to include, but
data/portfolios/ is in [local].dirs, the portfolios contents stay out.
Example workflow
[package]
include = [
"data/templates/**", # ship templates
"data/reference/**" # ship reference data
]
[local]
dirs = [
"data/portfolios", # shape only — user populates
"data/transcripts", # shape only — user populates
"outputs" # shape only — agent writes here
]After rig hub use && rig install, the user has:
my-rig/
├── data/
│ ├── templates/ # populated from the artifact
│ ├── reference/ # populated from the artifact
│ ├── portfolios/ # empty, with .rigkeep
│ └── transcripts/ # empty, with .rigkeep
└── outputs/ # empty, with .rigkeepWhy .rigkeep
Empty directories don't survive in tar archives or in git. .rigkeep is a
zero-byte marker file that preserves the directory. The user can delete it
once they put real content in.