Moving `web-agent-presets` to the built lane took its coverage with it, and the per-file gate named what it had been the only reach for: the session header's `agentPreset` type check, and the preset subtree's `write()` override. Neither belonged to a real-composition boot — a header validation case and a subtree behaviour are package-level facts. The `write()` test states why the override exists: the inherited method persists the tree whenever the Loader thinks the config moved, and disposing an agent disposes its subtree, so inheriting it truncates the shipped preset to `[]` the first time a session ends.
preset/ — per-session agent composition
English | 中文
An agent preset is a directory holding one agent.cordis.yml. Mounting it under an agent's scope context gives that session its own tools and prompt sections while every other live session keeps its own, so one process can run several differently composed agents at once.
| Package | Role | ctx key |
|---|---|---|
agent-presets/ |
Preset vocabulary, filesystem discovery over trusted and user-authored roots, and the guarded per-agent mount | ctx.agentPresets |
persona/ |
The agent persona as a composable row, so a preset can change identity and not only tools | — |
The composition split this group assumes: registries and cross-session facilities are process singletons and stay in the host composition, while a preset carries what one agent contributes to them. A preset that names a row publishing a process-global service is rejected at mount rather than allowed to collide with the next session.
Design: the per-session agent-preset note.