@ai-outfitter/outfitter 0.11.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (308) hide show
  1. package/.outfitter/skills/outfitter/SKILL.md +67 -37
  2. package/README.md +63 -35
  3. package/code/enterprise/cli/privateCatalogSettings.cjs +2 -2
  4. package/code/enterprise/pi-extension/privateCatalogOnboarding.js +5 -8
  5. package/code/enterprise/shared/privateCatalogPolicy.cjs +5 -5
  6. package/code/pi-extension/src/outfitter-extension.js +353 -553
  7. package/code/pi-extension/src/outfitter-runtime-extension.js +160 -0
  8. package/dist/agents/AgentLaunch.d.ts +9 -1
  9. package/dist/agents/AgentLaunch.js +19 -0
  10. package/dist/agents/AgentLaunch.js.map +1 -1
  11. package/dist/agents/PiCredentialPersistence.d.ts +6 -0
  12. package/dist/agents/PiCredentialPersistence.js +33 -0
  13. package/dist/agents/PiCredentialPersistence.js.map +1 -0
  14. package/dist/cli/OutfitterCli.js +10 -18
  15. package/dist/cli/OutfitterCli.js.map +1 -1
  16. package/dist/cli/commands/CommandObject.d.ts +0 -5
  17. package/dist/cli/commands/CommandObject.js +1 -4
  18. package/dist/cli/commands/CommandObject.js.map +1 -1
  19. package/dist/cli/commands/DumpCommand.d.ts +19 -0
  20. package/dist/cli/commands/DumpCommand.js +54 -0
  21. package/dist/cli/commands/DumpCommand.js.map +1 -0
  22. package/dist/cli/commands/ListCommand.d.ts +17 -0
  23. package/dist/cli/commands/ListCommand.js +77 -0
  24. package/dist/cli/commands/ListCommand.js.map +1 -0
  25. package/dist/cli/commands/PiRuntimeLaunch.d.ts +8 -0
  26. package/dist/cli/commands/PiRuntimeLaunch.js +47 -0
  27. package/dist/cli/commands/PiRuntimeLaunch.js.map +1 -0
  28. package/dist/cli/commands/ProcessDefaults.d.ts +2 -0
  29. package/dist/cli/commands/ProcessDefaults.js +5 -0
  30. package/dist/cli/commands/ProcessDefaults.js.map +1 -0
  31. package/dist/cli/commands/RunAgentCommand.d.ts +46 -0
  32. package/dist/cli/commands/RunAgentCommand.js +176 -0
  33. package/dist/cli/commands/RunAgentCommand.js.map +1 -0
  34. package/dist/cli/commands/SetupCommand.d.ts +38 -6
  35. package/dist/cli/commands/SetupCommand.js +194 -232
  36. package/dist/cli/commands/SetupCommand.js.map +1 -1
  37. package/dist/cli/commands/ValidateCommand.d.ts +20 -0
  38. package/dist/cli/commands/ValidateCommand.js +54 -0
  39. package/dist/cli/commands/ValidateCommand.js.map +1 -0
  40. package/dist/composer/Composer.d.ts +11 -0
  41. package/dist/composer/Composer.js +72 -0
  42. package/dist/composer/Composer.js.map +1 -0
  43. package/dist/composer/Composition.d.ts +33 -0
  44. package/dist/composer/Composition.js +2 -0
  45. package/dist/composer/Composition.js.map +1 -0
  46. package/dist/dump/Containment.d.ts +8 -0
  47. package/dist/dump/Containment.js +22 -0
  48. package/dist/dump/Containment.js.map +1 -0
  49. package/dist/dump/Dump.d.ts +8 -0
  50. package/dist/dump/Dump.js +182 -0
  51. package/dist/dump/Dump.js.map +1 -0
  52. package/dist/extensions/PiExtensionCache.d.ts +30 -0
  53. package/dist/extensions/PiExtensionCache.js +92 -0
  54. package/dist/extensions/PiExtensionCache.js.map +1 -0
  55. package/dist/fs/TypeConflict.d.ts +6 -0
  56. package/dist/fs/TypeConflict.js +21 -0
  57. package/dist/fs/TypeConflict.js.map +1 -0
  58. package/dist/paths/OutfitterCache.d.ts +6 -0
  59. package/dist/paths/OutfitterCache.js +17 -0
  60. package/dist/paths/OutfitterCache.js.map +1 -0
  61. package/dist/projection/Materialize.d.ts +24 -0
  62. package/dist/projection/Materialize.js +83 -0
  63. package/dist/projection/Materialize.js.map +1 -0
  64. package/dist/projection/ProjectHarness.d.ts +5 -0
  65. package/dist/projection/ProjectHarness.js +77 -0
  66. package/dist/projection/ProjectHarness.js.map +1 -0
  67. package/dist/projection/Projection.d.ts +23 -0
  68. package/dist/projection/Projection.js +2 -0
  69. package/dist/projection/Projection.js.map +1 -0
  70. package/dist/resolver/AgentDefinition.d.ts +30 -0
  71. package/dist/resolver/AgentDefinition.js +123 -0
  72. package/dist/resolver/AgentDefinition.js.map +1 -0
  73. package/dist/resolver/Layer.d.ts +12 -0
  74. package/dist/resolver/Layer.js +30 -0
  75. package/dist/resolver/Layer.js.map +1 -0
  76. package/dist/resolver/Resolver.d.ts +3 -0
  77. package/dist/resolver/Resolver.js +163 -0
  78. package/dist/resolver/Resolver.js.map +1 -0
  79. package/dist/resolver/ResolverContext.d.ts +15 -0
  80. package/dist/resolver/ResolverContext.js +11 -0
  81. package/dist/resolver/ResolverContext.js.map +1 -0
  82. package/dist/resolver/ResolverValidation.d.ts +11 -0
  83. package/dist/resolver/ResolverValidation.js +112 -0
  84. package/dist/resolver/ResolverValidation.js.map +1 -0
  85. package/dist/resolver/Resource.d.ts +88 -0
  86. package/dist/resolver/Resource.js +34 -0
  87. package/dist/resolver/Resource.js.map +1 -0
  88. package/dist/schemas/agent.schema.json +48 -0
  89. package/dist/schemas/settings.schema.json +32 -9
  90. package/dist/settings/Settings.d.ts +34 -5
  91. package/dist/settings/Settings.js +3 -1
  92. package/dist/settings/Settings.js.map +1 -1
  93. package/dist/settings/SettingsLoader.d.ts +1 -1
  94. package/dist/settings/SettingsLoader.js +23 -22
  95. package/dist/settings/SettingsLoader.js.map +1 -1
  96. package/dist/settings/SettingsMerger.js +12 -10
  97. package/dist/settings/SettingsMerger.js.map +1 -1
  98. package/dist/setup/DefaultCatalog.d.ts +20 -0
  99. package/dist/setup/DefaultCatalog.js +89 -0
  100. package/dist/setup/DefaultCatalog.js.map +1 -0
  101. package/dist/setup/Setup.d.ts +43 -0
  102. package/dist/setup/Setup.js +261 -0
  103. package/dist/setup/Setup.js.map +1 -0
  104. package/dist/skills/SkillDocument.d.ts +6 -1
  105. package/dist/skills/SkillDocument.js.map +1 -1
  106. package/dist/sources/SourceCache.d.ts +19 -0
  107. package/dist/{profiles/ProfileCache.js → sources/SourceCache.js} +22 -18
  108. package/dist/sources/SourceCache.js.map +1 -0
  109. package/dist/validation/SchemaValidator.d.ts +1 -1
  110. package/dist/validation/SchemaValidator.js +4 -13
  111. package/dist/validation/SchemaValidator.js.map +1 -1
  112. package/docs/architecture/state_writeback_strategy.md +54 -122
  113. package/docs/documentation/README.md +33 -12
  114. package/docs/documentation/actions.md +35 -52
  115. package/docs/documentation/agents.md +109 -0
  116. package/docs/documentation/best-practices.md +25 -63
  117. package/docs/documentation/catalogs.md +126 -0
  118. package/docs/documentation/cli.md +39 -41
  119. package/docs/documentation/concepts.md +66 -23
  120. package/docs/documentation/dump-and-bake.md +30 -0
  121. package/docs/documentation/first-time-cli-agent-users.md +8 -8
  122. package/docs/documentation/getting-started.md +28 -8
  123. package/docs/documentation/hooks.md +20 -0
  124. package/docs/documentation/iterating-on-profiles.md +56 -70
  125. package/docs/documentation/local-development.md +84 -0
  126. package/docs/documentation/migration.md +39 -0
  127. package/docs/documentation/personas.md +41 -0
  128. package/docs/documentation/porting-claude.md +54 -0
  129. package/docs/documentation/profiles.md +16 -169
  130. package/docs/documentation/settings.md +61 -0
  131. package/docs/documentation/skills.md +93 -334
  132. package/docs/documentation/state.md +24 -62
  133. package/docs/documentation/subagents.md +37 -0
  134. package/docs/documentation/support-matrix.md +40 -35
  135. package/docs/documentation/switching-to-outfitter.md +75 -81
  136. package/docs/documentation/tasks.md +13 -0
  137. package/docs/documentation/usecases/engineering.md +67 -84
  138. package/docs/documentation/usecases/organization-profile-catalog.md +83 -111
  139. package/docs/documentation/usecases/persona-reviews.md +133 -139
  140. package/docs/philosophy.md +2 -2
  141. package/package.json +3 -3
  142. package/src/schemas/agent.schema.json +48 -0
  143. package/src/schemas/settings.schema.json +32 -9
  144. package/dist/agents/AdapterProfileControls.d.ts +0 -21
  145. package/dist/agents/AdapterProfileControls.js +0 -76
  146. package/dist/agents/AdapterProfileControls.js.map +0 -1
  147. package/dist/agents/AdapterStatePaths.d.ts +0 -12
  148. package/dist/agents/AdapterStatePaths.js +0 -46
  149. package/dist/agents/AdapterStatePaths.js.map +0 -1
  150. package/dist/agents/AgentAdapter.d.ts +0 -44
  151. package/dist/agents/AgentAdapter.js +0 -2
  152. package/dist/agents/AgentAdapter.js.map +0 -1
  153. package/dist/agents/AgentRegistry.d.ts +0 -6
  154. package/dist/agents/AgentRegistry.js +0 -17
  155. package/dist/agents/AgentRegistry.js.map +0 -1
  156. package/dist/agents/LaunchResources.d.ts +0 -17
  157. package/dist/agents/LaunchResources.js +0 -61
  158. package/dist/agents/LaunchResources.js.map +0 -1
  159. package/dist/agents/OutfitterSkill.d.ts +0 -11
  160. package/dist/agents/OutfitterSkill.js +0 -128
  161. package/dist/agents/OutfitterSkill.js.map +0 -1
  162. package/dist/agents/ResourceIdentity.d.ts +0 -2
  163. package/dist/agents/ResourceIdentity.js +0 -51
  164. package/dist/agents/ResourceIdentity.js.map +0 -1
  165. package/dist/agents/claude/ClaudeAdapter.d.ts +0 -2
  166. package/dist/agents/claude/ClaudeAdapter.js +0 -148
  167. package/dist/agents/claude/ClaudeAdapter.js.map +0 -1
  168. package/dist/agents/claude/ClaudeCompositeProfileWriter.d.ts +0 -5
  169. package/dist/agents/claude/ClaudeCompositeProfileWriter.js +0 -7
  170. package/dist/agents/claude/ClaudeCompositeProfileWriter.js.map +0 -1
  171. package/dist/agents/pi/PiAdapter.d.ts +0 -2
  172. package/dist/agents/pi/PiAdapter.js +0 -363
  173. package/dist/agents/pi/PiAdapter.js.map +0 -1
  174. package/dist/agents/pi/PiArgs.d.ts +0 -2
  175. package/dist/agents/pi/PiArgs.js +0 -15
  176. package/dist/agents/pi/PiArgs.js.map +0 -1
  177. package/dist/agents/pi/PiCompositeProfileWriter.d.ts +0 -5
  178. package/dist/agents/pi/PiCompositeProfileWriter.js +0 -7
  179. package/dist/agents/pi/PiCompositeProfileWriter.js.map +0 -1
  180. package/dist/agents/pi/PiExtensionCache.d.ts +0 -12
  181. package/dist/agents/pi/PiExtensionCache.js +0 -195
  182. package/dist/agents/pi/PiExtensionCache.js.map +0 -1
  183. package/dist/agents/pi/PiMcpConfig.d.ts +0 -2
  184. package/dist/agents/pi/PiMcpConfig.js +0 -114
  185. package/dist/agents/pi/PiMcpConfig.js.map +0 -1
  186. package/dist/agents/pi/PiSettingsMergePolicy.d.ts +0 -17
  187. package/dist/agents/pi/PiSettingsMergePolicy.js +0 -59
  188. package/dist/agents/pi/PiSettingsMergePolicy.js.map +0 -1
  189. package/dist/agents/pi/PiSkillSources.d.ts +0 -8
  190. package/dist/agents/pi/PiSkillSources.js +0 -73
  191. package/dist/agents/pi/PiSkillSources.js.map +0 -1
  192. package/dist/cli/commands/FirstRunWelcomeProfile.d.ts +0 -11
  193. package/dist/cli/commands/FirstRunWelcomeProfile.js +0 -110
  194. package/dist/cli/commands/FirstRunWelcomeProfile.js.map +0 -1
  195. package/dist/cli/commands/PiLoginLaunch.d.ts +0 -22
  196. package/dist/cli/commands/PiLoginLaunch.js +0 -170
  197. package/dist/cli/commands/PiLoginLaunch.js.map +0 -1
  198. package/dist/cli/commands/RunCommand.d.ts +0 -36
  199. package/dist/cli/commands/RunCommand.js +0 -345
  200. package/dist/cli/commands/RunCommand.js.map +0 -1
  201. package/dist/cli/commands/SyncCommand.d.ts +0 -46
  202. package/dist/cli/commands/SyncCommand.js +0 -244
  203. package/dist/cli/commands/SyncCommand.js.map +0 -1
  204. package/dist/cli/commands/WelcomeCommand.d.ts +0 -56
  205. package/dist/cli/commands/WelcomeCommand.js +0 -224
  206. package/dist/cli/commands/WelcomeCommand.js.map +0 -1
  207. package/dist/cli/commands/assets/outfitter-ascii.txt +0 -5
  208. package/dist/cli/commands/profile/Command.d.ts +0 -7
  209. package/dist/cli/commands/profile/Command.js +0 -24
  210. package/dist/cli/commands/profile/Command.js.map +0 -1
  211. package/dist/cli/commands/profile/CreateCommand.d.ts +0 -19
  212. package/dist/cli/commands/profile/CreateCommand.js +0 -115
  213. package/dist/cli/commands/profile/CreateCommand.js.map +0 -1
  214. package/dist/cli/commands/profile/LintCommand.d.ts +0 -19
  215. package/dist/cli/commands/profile/LintCommand.js +0 -155
  216. package/dist/cli/commands/profile/LintCommand.js.map +0 -1
  217. package/dist/cli/commands/profile/ListCommand.d.ts +0 -19
  218. package/dist/cli/commands/profile/ListCommand.js +0 -91
  219. package/dist/cli/commands/profile/ListCommand.js.map +0 -1
  220. package/dist/cli/commands/profile/Shared.d.ts +0 -9
  221. package/dist/cli/commands/profile/Shared.js +0 -10
  222. package/dist/cli/commands/profile/Shared.js.map +0 -1
  223. package/dist/cli/commands/run/RunFirstRunOnboarding.d.ts +0 -7
  224. package/dist/cli/commands/run/RunFirstRunOnboarding.js +0 -52
  225. package/dist/cli/commands/run/RunFirstRunOnboarding.js.map +0 -1
  226. package/dist/cli/commands/run/RunLaunchSummary.d.ts +0 -2
  227. package/dist/cli/commands/run/RunLaunchSummary.js +0 -35
  228. package/dist/cli/commands/run/RunLaunchSummary.js.map +0 -1
  229. package/dist/cli/commands/run/RunProfileResolution.d.ts +0 -39
  230. package/dist/cli/commands/run/RunProfileResolution.js +0 -128
  231. package/dist/cli/commands/run/RunProfileResolution.js.map +0 -1
  232. package/dist/cli/commands/run/RunStateWritePrompt.d.ts +0 -2
  233. package/dist/cli/commands/run/RunStateWritePrompt.js +0 -29
  234. package/dist/cli/commands/run/RunStateWritePrompt.js.map +0 -1
  235. package/dist/cli/commands/setup/SetupPrompts.d.ts +0 -14
  236. package/dist/cli/commands/setup/SetupPrompts.js +0 -296
  237. package/dist/cli/commands/setup/SetupPrompts.js.map +0 -1
  238. package/dist/cli/commands/setup/SetupSourceImport.d.ts +0 -5
  239. package/dist/cli/commands/setup/SetupSourceImport.js +0 -177
  240. package/dist/cli/commands/setup/SetupSourceImport.js.map +0 -1
  241. package/dist/cli/commands/setup/SetupSourceLaunch.d.ts +0 -4
  242. package/dist/cli/commands/setup/SetupSourceLaunch.js +0 -65
  243. package/dist/cli/commands/setup/SetupSourceLaunch.js.map +0 -1
  244. package/dist/cli/commands/setup/SetupStarterSource.d.ts +0 -21
  245. package/dist/cli/commands/setup/SetupStarterSource.js +0 -133
  246. package/dist/cli/commands/setup/SetupStarterSource.js.map +0 -1
  247. package/dist/cli/commands/setup/SetupTypes.d.ts +0 -91
  248. package/dist/cli/commands/setup/SetupTypes.js +0 -26
  249. package/dist/cli/commands/setup/SetupTypes.js.map +0 -1
  250. package/dist/compositeProfile/CompositeProfile.d.ts +0 -8
  251. package/dist/compositeProfile/CompositeProfile.js +0 -6
  252. package/dist/compositeProfile/CompositeProfile.js.map +0 -1
  253. package/dist/compositeProfile/CompositeProfileAssembler.d.ts +0 -12
  254. package/dist/compositeProfile/CompositeProfileAssembler.js +0 -32
  255. package/dist/compositeProfile/CompositeProfileAssembler.js.map +0 -1
  256. package/dist/compositeProfile/CompositeProfileCleanup.d.ts +0 -9
  257. package/dist/compositeProfile/CompositeProfileCleanup.js +0 -87
  258. package/dist/compositeProfile/CompositeProfileCleanup.js.map +0 -1
  259. package/dist/compositeProfile/CompositeProfileFile.d.ts +0 -16
  260. package/dist/compositeProfile/CompositeProfileFile.js +0 -16
  261. package/dist/compositeProfile/CompositeProfileFile.js.map +0 -1
  262. package/dist/compositeProfile/CompositeProfileTemplate.d.ts +0 -15
  263. package/dist/compositeProfile/CompositeProfileTemplate.js +0 -65
  264. package/dist/compositeProfile/CompositeProfileTemplate.js.map +0 -1
  265. package/dist/compositeProfile/CompositeProfileWatcher.d.ts +0 -18
  266. package/dist/compositeProfile/CompositeProfileWatcher.js +0 -46
  267. package/dist/compositeProfile/CompositeProfileWatcher.js.map +0 -1
  268. package/dist/compositeProfile/StatePersistence.d.ts +0 -39
  269. package/dist/compositeProfile/StatePersistence.js +0 -249
  270. package/dist/compositeProfile/StatePersistence.js.map +0 -1
  271. package/dist/fs/SafeSymlink.d.ts +0 -13
  272. package/dist/fs/SafeSymlink.js +0 -50
  273. package/dist/fs/SafeSymlink.js.map +0 -1
  274. package/dist/profiles/Profile.d.ts +0 -60
  275. package/dist/profiles/Profile.js +0 -7
  276. package/dist/profiles/Profile.js.map +0 -1
  277. package/dist/profiles/ProfileCache.d.ts +0 -8
  278. package/dist/profiles/ProfileCache.js.map +0 -1
  279. package/dist/profiles/ProfileLoader.d.ts +0 -28
  280. package/dist/profiles/ProfileLoader.js +0 -299
  281. package/dist/profiles/ProfileLoader.js.map +0 -1
  282. package/dist/profiles/ProfileMerger.d.ts +0 -19
  283. package/dist/profiles/ProfileMerger.js +0 -112
  284. package/dist/profiles/ProfileMerger.js.map +0 -1
  285. package/dist/profiles/ProfileSource.d.ts +0 -35
  286. package/dist/profiles/ProfileSource.js +0 -13
  287. package/dist/profiles/ProfileSource.js.map +0 -1
  288. package/dist/profiles/PromptIncludes.d.ts +0 -32
  289. package/dist/profiles/PromptIncludes.js +0 -147
  290. package/dist/profiles/PromptIncludes.js.map +0 -1
  291. package/dist/prompts/SystemPromptExport.d.ts +0 -16
  292. package/dist/prompts/SystemPromptExport.js +0 -81
  293. package/dist/prompts/SystemPromptExport.js.map +0 -1
  294. package/dist/schemas/profile-source.schema.json +0 -29
  295. package/dist/schemas/profile.schema.json +0 -200
  296. package/dist/skills/ProfileSkillResolution.d.ts +0 -21
  297. package/dist/skills/ProfileSkillResolution.js +0 -88
  298. package/dist/skills/ProfileSkillResolution.js.map +0 -1
  299. package/dist/skills/SkillCatalog.d.ts +0 -41
  300. package/dist/skills/SkillCatalog.js +0 -119
  301. package/dist/skills/SkillCatalog.js.map +0 -1
  302. package/dist/skills/SkillResolution.d.ts +0 -34
  303. package/dist/skills/SkillResolution.js +0 -369
  304. package/dist/skills/SkillResolution.js.map +0 -1
  305. package/docs/documentation/profile-repository.md +0 -179
  306. package/src/schemas/SchemaDocument.ts +0 -20
  307. package/src/schemas/profile-source.schema.json +0 -29
  308. package/src/schemas/profile.schema.json +0 -200
@@ -1,114 +1,97 @@
1
- # Engineering Profile Catalog
1
+ # Engineering Catalog
2
2
 
3
- An engineering profile catalog is a shared setup source for people who write code, review changes, operate infrastructure, and debug production-like systems. It gives engineers a reliable default Pi session without asking each teammate to rebuild the same model, thinking, prompt, skill, and extension choices by hand.
3
+ An engineering catalog is a shared `.agents` source for people who write code, review changes, operate infrastructure, and debug production-like systems. It gives engineers a reliable default session without asking each teammate to rebuild the same model, prompt, and skill choices by hand.
4
4
 
5
- For example, `acme-engineering-outfitter` can publish a small catalog with profiles for day-to-day implementation, deeper platform work, and lightweight review or triage.
5
+ For example, `acme-engineering/.agent` can publish a small catalog with agents for day-to-day implementation, deeper platform work, and lightweight review or triage — plus the skills those agents share.
6
6
 
7
7
  ```text
8
- acme-engineering-outfitter/
8
+ acme-engineering/.agent/ # repository root is the payload
9
+ agents.md # shared operating rules for every agent in the tree
10
+ agents/
11
+ engineer/agent.md
12
+ platform-engineer/agent.md
13
+ reviewer/agent.md
14
+ skills/
15
+ issue-planning/
16
+ deployment-review/
9
17
  settings.yml
10
- profiles/
11
- base-engineering/
12
- profile.yml
13
- engineer/
14
- profile.yml
15
- platform-engineer/
16
- profile.yml
17
- reviewer/
18
- profile.yml
19
18
  ```
20
19
 
21
20
  ## Catalog settings
22
21
 
22
+ Settings only names the default agent; each agent carries its own loadout.
23
+
23
24
  ```yaml
24
- # acme-engineering-outfitter/settings.yml
25
- profile_sources:
26
- - path: ./profiles
27
- only:
28
- - engineer
29
- - platform-engineer
30
- - reviewer
25
+ # settings.yml
26
+ default_agent: engineer
31
27
  ```
32
28
 
33
- ## Shared base profile
29
+ ## Shared operating context
34
30
 
35
- ```yaml
36
- # profiles/base-engineering/profile.yml
37
- id: base-engineering
38
- label: Engineering Base
39
- template: true
40
- description: Shared engineering operating rules for code, tests, and infrastructure.
41
- controls:
42
- append_system_prompt: |
43
- Work as a careful engineering agent. Read the relevant code before editing,
44
- prefer small reversible changes, keep secrets out of logs, run focused tests,
45
- and return changed files plus verification evidence.
31
+ Rules that apply to every agent in the tree live in `agents.md`, so each role inherits them without ordered persona composition:
32
+
33
+ ```markdown
34
+ <!-- agents.md -->
35
+
36
+ Work as a careful engineering agent. Read the relevant code before editing,
37
+ prefer small reversible changes, keep secrets out of logs, run focused tests,
38
+ and return changed files plus verification evidence.
46
39
  ```
47
40
 
48
- ## Role profiles
41
+ ## Role agents
49
42
 
50
- Engineering catalogs SHOULD separate routine implementation from high-risk infrastructure and review work. The examples below are role-shaped; replace model IDs and thinking levels with the exact choices exposed by the team's agent providers.
43
+ Engineering catalogs SHOULD separate routine implementation from high-risk infrastructure and review work. Each agent declares its skills, model, and thinking level in its own loadout; replace the IDs with the exact choices exposed by the team's providers.
51
44
 
52
- ```yaml
53
- # profiles/engineer/profile.yml
54
- id: engineer
55
- label: Software Engineer
45
+ ```
46
+ <!-- agents/engineer/agent.md -->
47
+ ---
48
+ name: engineer
56
49
  description: Default for feature work, bug fixes, and test-backed implementation.
57
- inherits:
58
- - base-engineering
59
- controls:
60
- provider: anthropic
61
- model: anthropic/claude-sonnet-4
62
- thinking: high
63
- append_system_prompt: |
64
- Optimize for correct, reviewable implementation. Inspect nearby code and tests,
65
- make narrow commits, run the smallest meaningful validation, and summarize risks.
50
+ skills: [issue-planning]
51
+ ---
52
+
53
+ Optimize for correct, reviewable implementation. Inspect nearby code and tests,
54
+ make narrow commits, run the smallest meaningful validation, and summarize risks.
66
55
  ```
67
56
 
68
- ```yaml
69
- # profiles/platform-engineer/profile.yml
70
- id: platform-engineer
71
- label: Platform Engineer
72
- description: Higher-caution profile for CI, infrastructure, deployment, and incident work.
73
- inherits:
74
- - base-engineering
75
- controls:
76
- provider: anthropic
77
- model: anthropic/claude-opus-4
78
- thinking: xhigh
79
- append_system_prompt: |
80
- Treat infrastructure and production-like systems as high-risk. Diagnose before
81
- mutating state, name rollback paths, and ask before deploys, credential use,
82
- payments, or irreversible operations.
57
+ ```
58
+ <!-- agents/platform-engineer/agent.md -->
59
+ ---
60
+ name: platform-engineer
61
+ description: Higher-caution role for CI, infrastructure, deployment, and incident work.
62
+ skills: [deployment-review]
63
+ ---
64
+
65
+ Treat infrastructure and production-like systems as high-risk. Diagnose before
66
+ mutating state, name rollback paths, and ask before deploys, credential use,
67
+ payments, or irreversible operations.
83
68
  ```
84
69
 
85
- ```yaml
86
- # profiles/reviewer/profile.yml
87
- id: reviewer
88
- label: Code Reviewer
89
- description: Review-focused profile for diffs, pull requests, and release readiness.
90
- inherits:
91
- - base-engineering
92
- controls:
93
- provider: openai
94
- model: openai/gpt-4.1
95
- thinking: medium
96
- append_system_prompt: |
97
- Review for correctness, regression risk, missing tests, unsafe operations,
98
- unclear rollout paths, and documentation drift. Prioritize actionable findings
99
- over style nits.
70
+ ```
71
+ <!-- agents/reviewer/agent.md -->
72
+ ---
73
+ name: reviewer
74
+ description: Review-focused role for diffs, pull requests, and release readiness.
75
+ ---
76
+
77
+ Review for correctness, regression risk, missing tests, unsafe operations,
78
+ unclear rollout paths, and documentation drift. Prioritize actionable findings
79
+ over style nits.
100
80
  ```
101
81
 
102
82
  ## Verification pattern
103
83
 
104
- Engineering catalogs SHOULD make verification expectations explicit in prompts or comments so agents return evidence instead of vague completion claims.
84
+ Engineering catalogs SHOULD make verification expectations explicit so agents return evidence instead of vague completion claims:
105
85
 
106
- ```yaml
107
- # profiles/engineer/profile.yml excerpt
108
- controls:
109
- append_system_prompt: |
110
- When you change code, report the exact tests or checks you ran. If a check is
111
- skipped, say why and name the smallest follow-up validation that would reduce risk.
112
86
  ```
87
+ <!-- agents/engineer/agent.md excerpt -->
88
+
89
+ When you change code, report the exact tests or checks you ran. If a check is
90
+ skipped, say why and name the smallest follow-up validation that would reduce risk.
91
+ ```
92
+
93
+ ## Repeatable automation
94
+
95
+ Recurring engineering work — PR review, issue triage, scheduled audits — runs these agents headlessly through [GitHub Actions](../actions.md) with structured inputs. Adding a capability is a skill change; adding a trigger is workflow wiring; neither duplicates the roles. A dedicated task/bake contract for that recurring work is the subject of a [separate upcoming RFC](../tasks.md).
113
96
 
114
97
  This gives an engineering team a repeatable catalog with safe defaults: fast enough for common implementation, cautious enough for infrastructure, and explicit about verification evidence.
@@ -1,140 +1,112 @@
1
- # Organization Profile Catalog
1
+ # Organization Catalog
2
2
 
3
- An organization profile catalog is a shared setup source that publishes named roles instead of asking every user to choose providers, models, thinking levels, extensions, and prompts by hand.
4
- For example, `acme` can publish a small catalog that gives engineers, platform operators, support staff, and executives a useful default Pi session while still letting projects override the final profile.
3
+ An organization catalog publishes named role agents instead of asking every user to choose models, prompts, skills, and MCP configuration by hand. The convention is an `owner/.outfitter` control repository carrying a protocol `.agents/` payload: `acme/.outfitter` can give engineers, platform operators, support staff, and executives a useful default session while still letting projects override the final composition.
5
4
 
6
5
  ```text
7
- acme-outfitter-catalog/
8
- settings.yml
9
- profiles/
10
- base-acme/
11
- profile.yml
12
- engineer/
13
- profile.yml
14
- platform-operator/
15
- profile.yml
16
- support-triage/
17
- profile.yml
18
- exec-briefing/
19
- profile.yml
6
+ acme/.outfitter/
7
+ .agents/
8
+ agents.md # shared Acme operating rules for every role
9
+ models.json
10
+ agents/
11
+ engineer/agent.md
12
+ platform-operator/agent.md
13
+ support-triage/agent.md
14
+ exec-briefing/agent.md
15
+ settings.yml
20
16
  ```
21
17
 
22
18
  ## Catalog settings
23
19
 
20
+ The catalog's `settings.yml` names the default agent; the organization distributes it through [remote settings](./../catalogs.md#organization-control-repositories):
21
+
24
22
  ```yaml
25
- # acme-outfitter-catalog/settings.yml
26
- profile_sources:
27
- - path: ./profiles
28
- only:
29
- - engineer
30
- - platform-operator
31
- - support-triage
32
- - exec-briefing
23
+ # acme/.outfitter/.agents/settings.yml
24
+ default_agent: engineer
33
25
  ```
34
26
 
35
- ## Shared base profile
27
+ ## Shared operating context
36
28
 
37
- ```yaml
38
- # profiles/base-acme/profile.yml
39
- id: base-acme
40
- label: Acme Base
41
- template: true
42
- description: Shared Acme operating rules for every published role.
43
- controls:
44
- append_system_prompt: |
45
- Work as an Acme operator: prefer small reversible changes, cite durable evidence,
46
- keep secrets out of logs and docs, and write decisions into repository files.
29
+ Rules every role shares live in the tree's `agents.md`, inherited by each agent without ordered persona composition:
30
+
31
+ ```markdown
32
+ <!-- .agents/agents.md -->
33
+
34
+ Work as an Acme operator: prefer small reversible changes, cite durable
35
+ evidence, keep secrets out of logs and docs, and write decisions into
36
+ repository files.
47
37
  ```
48
38
 
49
- ## Role profiles
39
+ ## Role agents
50
40
 
51
- The catalog SHOULD publish role profiles that make the cost/latency/quality tradeoff explicit.
52
- Use provider-qualified model IDs that match the models available in the team's Pi or Claude configuration.
53
- The examples below are intentionally role-shaped; replace model IDs with the exact names exposed by the organization's provider catalog.
41
+ The catalog SHOULD publish role agents that make the cost/latency/quality tradeoff explicit. Model choices live in each agent's `config.json` (or the tree's `models.json`); replace the IDs below with the exact names exposed by the organization's provider catalog.
54
42
 
55
- ```yaml
56
- # profiles/engineer/profile.yml
57
- id: engineer
58
- label: Software Engineer
43
+ ```
44
+ <!-- .agents/agents/engineer/agent.md -->
45
+ ---
46
+ name: engineer
59
47
  description: Default for feature work, debugging, tests, and code review.
60
- inherits:
61
- - base-acme
62
- controls:
63
- provider: anthropic
64
- model: anthropic/claude-sonnet-4
65
- thinking: high
66
- append_system_prompt: |
67
- Optimize for correct implementation over speed. Read nearby code before editing,
68
- run the narrowest meaningful tests, and return changed files plus verification.
48
+ ---
49
+
50
+ Optimize for correct implementation over speed. Read nearby code before
51
+ editing, run the narrowest meaningful tests, and return changed files plus
52
+ verification.
69
53
  ```
70
54
 
71
- ```yaml
72
- # profiles/platform-operator/profile.yml
73
- id: platform-operator
74
- label: Platform Operator
75
- description: Higher-reasoning profile for infrastructure, incidents, CI, and release safety.
76
- inherits:
77
- - base-acme
78
- controls:
79
- provider: anthropic
80
- model: anthropic/claude-opus-4
81
- thinking: xhigh
82
- append_system_prompt: |
83
- Treat production-like systems as high-risk. Prefer diagnosis before mutation,
84
- name rollback paths, and ask before deploys, credential use, payments, or irreversible changes.
55
+ ```json
56
+ // .agents/agents/engineer/config.json
57
+ { "provider": "anthropic", "model": "anthropic/claude-sonnet-4", "thinking": "high" }
85
58
  ```
86
59
 
87
- ```yaml
88
- # profiles/support-triage/profile.yml
89
- id: support-triage
90
- label: Support Triage
91
- description: Lower-cost profile for ticket summarization, reproduction notes, and routing.
92
- inherits:
93
- - base-acme
94
- controls:
95
- provider: openai
96
- model: openai/gpt-4.1-mini
97
- thinking: low
98
- append_system_prompt: |
99
- Convert messy user reports into concise reproduction steps, affected surfaces,
100
- suspected owners, and the next question that would unblock diagnosis.
60
+ ```
61
+ <!-- .agents/agents/platform-operator/agent.md -->
62
+ ---
63
+ name: platform-operator
64
+ description: Higher-reasoning role for infrastructure, incidents, CI, and release safety.
65
+ ---
66
+
67
+ Treat production-like systems as high-risk. Prefer diagnosis before mutation,
68
+ name rollback paths, and ask before deploys, credential use, payments, or
69
+ irreversible changes.
101
70
  ```
102
71
 
103
- ```yaml
104
- # profiles/exec-briefing/profile.yml
105
- id: exec-briefing
106
- label: Executive Briefing
107
- description: Fast profile for dense status synthesis and decision memos.
108
- inherits:
109
- - base-acme
110
- controls:
111
- provider: openai
112
- model: openai/gpt-4.1
113
- thinking: medium
114
- append_system_prompt: |
115
- Produce dense prose for leaders: state the decision, evidence, risk, owner,
116
- deadline, and the smallest reversible next action. Avoid implementation trivia unless it changes the decision.
72
+ ```
73
+ <!-- .agents/agents/support-triage/agent.md -->
74
+ ---
75
+ name: support-triage
76
+ description: Lower-cost role for ticket summarization, reproduction notes, and routing.
77
+ ---
78
+
79
+ Convert messy user reports into concise reproduction steps, affected surfaces,
80
+ suspected owners, and the next question that would unblock diagnosis.
81
+ ```
82
+
83
+ ```
84
+ <!-- .agents/agents/exec-briefing/agent.md -->
85
+ ---
86
+ name: exec-briefing
87
+ description: Fast role for dense status synthesis and decision memos.
88
+ ---
89
+
90
+ Produce dense prose for leaders: state the decision, evidence, risk, owner,
91
+ deadline, and the smallest reversible next action. Avoid implementation trivia
92
+ unless it changes the decision.
117
93
  ```
118
94
 
119
95
  ## Budget annotation pattern
120
96
 
121
- Profiles can carry comments that explain why a role uses a given model and thinking level without embedding current vendor prices.
122
- Keep the metric relative, because token prices and model names drift.
97
+ Agent `config.json` entries can carry comments-in-docs that explain why a role uses a given model and thinking level without embedding current vendor prices. Keep the metric relative, because token prices and model names drift:
123
98
 
124
- ```yaml
125
- # Metric docstring for catalog maintainers:
126
- # budget_units estimates relative spend and latency for a role, not an invoice.
127
- # budget_units = expected_input_tokens * input_weight
128
- # + expected_output_tokens * output_weight
129
- # + expected_reasoning_tokens * thinking_weight
130
- # thinking_weight guideline: low=1, medium=2, high=4, xhigh=8.
131
- # Use low/medium for repeatable summarization or routing; use high/xhigh when a wrong answer
132
- # can cause rework, outages, bad code, unsafe operations, or expensive human review.
133
-
134
- # profiles/platform-operator/profile.yml excerpt
135
- controls:
136
- model: anthropic/claude-opus-4
137
- thinking: xhigh # Expensive by design: infra mistakes dominate token spend.
99
+ ```text
100
+ budget_units estimates relative spend and latency for a role, not an invoice.
101
+ budget_units = expected_input_tokens * input_weight
102
+ + expected_output_tokens * output_weight
103
+ + expected_reasoning_tokens * thinking_weight
104
+ thinking_weight guideline: low=1, medium=2, high=4, xhigh=8.
105
+ Use low/medium for repeatable summarization or routing; use high/xhigh when a
106
+ wrong answer can cause rework, outages, bad code, unsafe operations, or
107
+ expensive human review.
138
108
  ```
139
109
 
140
- This gives the organization a publishable catalog with clear defaults: cheaper profiles for high-volume low-risk work, stronger reasoning for code and infrastructure, and role prompts that teach the agent what evidence and output shape matter for each job.
110
+ ## Governance
111
+
112
+ Because the catalog is a normal repository publishing normal files, organization changes flow through ordinary pull requests: a role prompt change is a reviewable diff to one `agent.md`. Consumers pin the catalog by SHA and bump deliberately; `outfitter dump` shows exactly what a pinned composition resolves to before an approval. Recurring org automation — like a `weekly-kpis` report — lives in the same repository as an agent run through [GitHub Actions](../actions.md); a dedicated task/bake contract for that work is a [separate upcoming RFC](../tasks.md).