What project packs capture
Project packs encode the stable, repo-wide layer of your working style:- Cross-task constraints — rules that apply regardless of what kind of task is running (e.g. always use TypeScript strict mode, never introduce new third-party dependencies without discussion)
- Code style preferences — formatting conventions, naming patterns, and structural preferences the entire codebase follows
- Architectural preferences — how the project is structured and what patterns it uses (e.g. prefer composition over inheritance, keep API surface minimal)
- Team conventions — shared expectations about how work should be done in this repo
File location
There is exactly one project pack per repo, stored at:<agent-dir> matches the agent you are using. The project pack is automatically discovered and loaded by the agent whenever it reads the AEP index.
How project pack constraints apply
Whenaep apply runs, the agent loads and merges signals from all relevant packs. The project pack’s signals form the baseline that applies to every task:
Fields specific to project packs
scope
Always "project" — this identifies the pack as repo-wide in scope.
applies_to
For a project pack, applies_to can reflect the technology stack and domain of the entire project:
"paths": ["**"] signals that the pack applies to all files in the repo.
strength
The project pack’s strength reflects how established and trusted the project-wide patterns are. A newly created project pack typically starts at 0.6. As the patterns prove reliable over time, the strength can be increased.
Template
This is the complete project pack template from the AEP source:The
artifacts.notes field in the template is a plain text field for human-readable context. Use it to explain to future collaborators (or future agents) why specific constraints exist in this project pack.When to update the project pack
Update the project pack when patterns that started as task-specific have proven to apply universally across the repo.Recognize the pattern
After running
aep inspect, look for constraints or preferences that appear in multiple task packs. If the same rule keeps showing up across different task types, it belongs at the project level.Promote from a task pack
Tell the agent:
"Use the AEP skill and promote the constraints from <task-pack-id> to the project pack." The agent extracts the relevant signals, adds them to project.aep.json, and records history entries in both packs.Update the project pack directly
You can also edit
project.aep.json directly when you have a new cross-task convention to encode. Add a history entry describing the change:Override behavior
Task packs always override the project pack. This is by design — you can set broad rules at the project level and then carve out task-specific exceptions without touching the project pack.Related pages
Pack types overview
Understand all three scopes and how they work together.
Task packs
How task-level constraints override the project pack.
Promote guide
Step-by-step guide to promoting task patterns to project scope.
Schema reference
Full field reference for project pack fields.