The three scopes
Task packs capture patterns for specific recurring tasks. They encode intent, constraints, workflow steps, and failure traps that proved useful for a particular type of work — for example, converting HTML to Next.js without redesigning the layout. Task packs are the most targeted scope and carry the highest override priority. Project packs capture cross-task constraints and preferences that apply broadly across a repo. They encode things like code style rules, architectural preferences, and team conventions that should be consistent regardless of what task is running. A singleproject.aep.json lives at the root of the AEP directory and applies automatically to every task in that repository.
User packs capture personal collaboration style and preferences that travel with you between repositories. They encode how you like agents to explain things, how you make decisions, and how you prefer to communicate — preferences that are independent of any particular project or task.
Override order
When multiple packs are active, signals are merged in a defined priority order:Where packs are stored
AEP packs are stored inside the active agent’s directory underaep/:
<agent-dir> matches the agent you are using:
| Agent | Directory |
|---|---|
| Claude | .claude/ |
| OpenCode | .opencode/ |
| Cursor | .cursor/ |
| Codex | .codex/ |
| Gemini | .gemini/ |
- Task packs:
<agent-dir>/aep/tasks/<id>.aep.json - Project pack:
<agent-dir>/aep/project.aep.json - User pack:
<agent-dir>/aep/user.aep.json
The index.json file
<agent-dir>/aep/index.json is the registry that ties everything together. It lists every pack across all scopes with its path, scope, tags, strength, and last-updated timestamp. Agents load the index first to discover available packs before deciding which ones to apply.
Scope comparison
| Scope | Purpose | File location | When to use |
|---|---|---|---|
| task | Patterns for a specific recurring task type | <agent-dir>/aep/tasks/<id>.aep.json | When a task type repeats with similar constraints |
| project | Cross-task defaults for a single repo | <agent-dir>/aep/project.aep.json | When conventions apply to all tasks in a project |
| user | Personal collaboration style across all work | <agent-dir>/aep/user.aep.json | When preferences should follow you between repos |
How signals merge
Whenaep apply runs before a task, the agent loads all relevant packs and merges their signals in scope order:
Score and rank
Each pack receives a match score based on keyword overlap,
applies_to fields (languages, frameworks, paths, domains), and the pack’s strength value. Task packs are ranked above project packs, which rank above user packs.Merge signals
Signals —
intent, constraints, preferences, workflow, failure_traps, success_checks — are merged. Task-level values override project-level values, which override user-level values.Agents should treat
applies_to fields as soft filters. If a pack matches on keywords but not on language or framework, it can still be applied at reduced weight.Explore each pack type
Task packs
Save and reuse patterns for specific recurring tasks.
Project packs
Define project-wide constraints and preferences for all tasks.
User packs
Encode your personal collaboration style across all projects.
Schema reference
Full field reference for all pack types and the index schema.