teamcast 0.9.3 → 1.0.1

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 (294) hide show
  1. package/README.md +255 -145
  2. package/dist/application/team.d.ts.map +1 -1
  3. package/dist/application/team.js +0 -1
  4. package/dist/application/team.js.map +1 -1
  5. package/dist/application/validate-team.d.ts.map +1 -1
  6. package/dist/application/validate-team.js +7 -4
  7. package/dist/application/validate-team.js.map +1 -1
  8. package/dist/cli/explain.d.ts.map +1 -1
  9. package/dist/cli/explain.js +4 -2
  10. package/dist/cli/explain.js.map +1 -1
  11. package/dist/cli/init.js +2 -5
  12. package/dist/cli/init.js.map +1 -1
  13. package/dist/cli/manage.d.ts.map +1 -1
  14. package/dist/cli/manage.js +6 -15
  15. package/dist/cli/manage.js.map +1 -1
  16. package/dist/core/assertions.d.ts +4 -4
  17. package/dist/core/assertions.d.ts.map +1 -1
  18. package/dist/core/capability-resolver.d.ts +7 -0
  19. package/dist/core/capability-resolver.d.ts.map +1 -0
  20. package/dist/core/capability-resolver.js +18 -0
  21. package/dist/core/capability-resolver.js.map +1 -0
  22. package/dist/core/compose-policies.d.ts +15 -0
  23. package/dist/core/compose-policies.d.ts.map +1 -0
  24. package/dist/core/compose-policies.js +106 -0
  25. package/dist/core/compose-policies.js.map +1 -0
  26. package/dist/core/environment-resolver.d.ts +20 -0
  27. package/dist/core/environment-resolver.d.ts.map +1 -0
  28. package/dist/core/environment-resolver.js +202 -0
  29. package/dist/core/environment-resolver.js.map +1 -0
  30. package/dist/core/policy-evaluator.d.ts +2 -2
  31. package/dist/core/policy-evaluator.d.ts.map +1 -1
  32. package/dist/core/policy-evaluator.js +7 -7
  33. package/dist/core/policy-evaluator.js.map +1 -1
  34. package/dist/core/types.d.ts +5 -2
  35. package/dist/core/types.d.ts.map +1 -1
  36. package/dist/explainer/index.js +1 -1
  37. package/dist/explainer/index.js.map +1 -1
  38. package/dist/generator/index.d.ts.map +1 -1
  39. package/dist/generator/index.js +4 -3
  40. package/dist/generator/index.js.map +1 -1
  41. package/dist/importer/codex.js.map +1 -1
  42. package/dist/importer/index.d.ts +0 -3
  43. package/dist/importer/index.d.ts.map +1 -1
  44. package/dist/importer/index.js +2 -3
  45. package/dist/importer/index.js.map +1 -1
  46. package/dist/manifest/normalize.d.ts.map +1 -1
  47. package/dist/manifest/normalize.js +41 -6
  48. package/dist/manifest/normalize.js.map +1 -1
  49. package/dist/manifest/types.d.ts +15 -10
  50. package/dist/manifest/types.d.ts.map +1 -1
  51. package/dist/manifest/types.js.map +1 -1
  52. package/dist/registry/capabilities.d.ts +6 -0
  53. package/dist/registry/capabilities.d.ts.map +1 -0
  54. package/dist/registry/capabilities.js +14 -0
  55. package/dist/registry/capabilities.js.map +1 -0
  56. package/dist/registry/environments.d.ts +5 -0
  57. package/dist/registry/environments.d.ts.map +1 -0
  58. package/dist/registry/environments.js +106 -0
  59. package/dist/registry/environments.js.map +1 -0
  60. package/dist/registry/index.d.ts +23 -0
  61. package/dist/registry/index.d.ts.map +1 -0
  62. package/dist/registry/index.js +85 -0
  63. package/dist/registry/index.js.map +1 -0
  64. package/dist/registry/instruction-fragments.d.ts +11 -0
  65. package/dist/registry/instruction-fragments.d.ts.map +1 -0
  66. package/dist/{components/agent-fragments.js → registry/instruction-fragments.js} +22 -73
  67. package/dist/registry/instruction-fragments.js.map +1 -0
  68. package/dist/registry/models.d.ts +3 -0
  69. package/dist/registry/models.d.ts.map +1 -0
  70. package/dist/registry/models.js +46 -0
  71. package/dist/registry/models.js.map +1 -0
  72. package/dist/registry/policy-fragments.d.ts +6 -0
  73. package/dist/registry/policy-fragments.d.ts.map +1 -0
  74. package/dist/registry/policy-fragments.js +49 -0
  75. package/dist/registry/policy-fragments.js.map +1 -0
  76. package/dist/registry/skills.d.ts +5 -0
  77. package/dist/registry/skills.d.ts.map +1 -0
  78. package/dist/registry/skills.js +182 -0
  79. package/dist/registry/skills.js.map +1 -0
  80. package/dist/registry/traits.d.ts +16 -0
  81. package/dist/registry/traits.d.ts.map +1 -0
  82. package/dist/registry/traits.js +109 -0
  83. package/dist/registry/traits.js.map +1 -0
  84. package/dist/registry/types.d.ts +77 -0
  85. package/dist/registry/types.d.ts.map +1 -0
  86. package/dist/registry/types.js +21 -0
  87. package/dist/registry/types.js.map +1 -0
  88. package/dist/renderers/claude/docs.d.ts +0 -1
  89. package/dist/renderers/claude/docs.d.ts.map +1 -1
  90. package/dist/renderers/claude/docs.js +0 -95
  91. package/dist/renderers/claude/docs.js.map +1 -1
  92. package/dist/renderers/claude/index.d.ts.map +1 -1
  93. package/dist/renderers/claude/index.js +1 -2
  94. package/dist/renderers/claude/index.js.map +1 -1
  95. package/dist/renderers/claude/skill-map.d.ts +8 -8
  96. package/dist/renderers/claude/skill-map.d.ts.map +1 -1
  97. package/dist/renderers/claude/skill-map.js +9 -9
  98. package/dist/renderers/claude/skill-map.js.map +1 -1
  99. package/dist/renderers/claude/skill-md.d.ts.map +1 -1
  100. package/dist/renderers/claude/skill-md.js +73 -5
  101. package/dist/renderers/claude/skill-md.js.map +1 -1
  102. package/dist/renderers/codex/agents-md.d.ts +4 -0
  103. package/dist/renderers/codex/agents-md.d.ts.map +1 -0
  104. package/dist/renderers/codex/agents-md.js +94 -0
  105. package/dist/renderers/codex/agents-md.js.map +1 -0
  106. package/dist/renderers/codex/index.d.ts.map +1 -1
  107. package/dist/renderers/codex/index.js +4 -0
  108. package/dist/renderers/codex/index.js.map +1 -1
  109. package/dist/renderers/codex/skill-map.d.ts +3 -4
  110. package/dist/renderers/codex/skill-map.d.ts.map +1 -1
  111. package/dist/renderers/codex/skill-map.js +1 -1
  112. package/dist/renderers/codex/skill-map.js.map +1 -1
  113. package/dist/renderers/codex/skill-md.d.ts +4 -0
  114. package/dist/renderers/codex/skill-md.d.ts.map +1 -0
  115. package/dist/renderers/codex/skill-md.js +125 -0
  116. package/dist/renderers/codex/skill-md.js.map +1 -0
  117. package/dist/renderers/target-context.d.ts +3 -4
  118. package/dist/renderers/target-context.d.ts.map +1 -1
  119. package/dist/team-templates/policies.js +1 -1
  120. package/dist/team-templates/policies.js.map +1 -1
  121. package/dist/team-templates/presets.d.ts.map +1 -1
  122. package/dist/team-templates/presets.js +5 -8
  123. package/dist/team-templates/presets.js.map +1 -1
  124. package/dist/team-templates/roles.d.ts +3 -3
  125. package/dist/team-templates/roles.d.ts.map +1 -1
  126. package/dist/team-templates/roles.js +2 -4
  127. package/dist/team-templates/roles.js.map +1 -1
  128. package/dist/types/manifest.d.ts +2 -2
  129. package/dist/types/manifest.d.ts.map +1 -1
  130. package/dist/types/manifest.js +3 -3
  131. package/dist/types/manifest.js.map +1 -1
  132. package/dist/utils/skill-prompt-options.d.ts +4 -0
  133. package/dist/utils/skill-prompt-options.d.ts.map +1 -0
  134. package/dist/utils/skill-prompt-options.js +12 -0
  135. package/dist/utils/skill-prompt-options.js.map +1 -0
  136. package/dist/validator/checks/capability-policy.d.ts +5 -0
  137. package/dist/validator/checks/capability-policy.d.ts.map +1 -0
  138. package/dist/validator/checks/capability-policy.js +40 -0
  139. package/dist/validator/checks/capability-policy.js.map +1 -0
  140. package/dist/validator/checks/capability-tools.d.ts +5 -0
  141. package/dist/validator/checks/capability-tools.d.ts.map +1 -0
  142. package/dist/validator/checks/capability-tools.js +23 -0
  143. package/dist/validator/checks/capability-tools.js.map +1 -0
  144. package/dist/validator/checks/environment.d.ts +8 -0
  145. package/dist/validator/checks/environment.d.ts.map +1 -0
  146. package/dist/validator/checks/environment.js +28 -0
  147. package/dist/validator/checks/environment.js.map +1 -0
  148. package/dist/validator/checks/handoff-graph.d.ts +2 -2
  149. package/dist/validator/checks/handoff-graph.d.ts.map +1 -1
  150. package/dist/validator/checks/handoff-graph.js +2 -2
  151. package/dist/validator/checks/handoff-graph.js.map +1 -1
  152. package/dist/validator/checks/instructions.d.ts +5 -0
  153. package/dist/validator/checks/instructions.d.ts.map +1 -0
  154. package/dist/validator/checks/instructions.js +169 -0
  155. package/dist/validator/checks/instructions.js.map +1 -0
  156. package/dist/validator/checks/manifest-registry.d.ts +8 -0
  157. package/dist/validator/checks/manifest-registry.d.ts.map +1 -0
  158. package/dist/validator/checks/manifest-registry.js +68 -0
  159. package/dist/validator/checks/manifest-registry.js.map +1 -0
  160. package/dist/validator/checks/mcp.d.ts +4 -0
  161. package/dist/validator/checks/mcp.d.ts.map +1 -0
  162. package/dist/validator/checks/mcp.js +73 -0
  163. package/dist/validator/checks/mcp.js.map +1 -0
  164. package/dist/validator/checks/policy-coherence.d.ts +4 -0
  165. package/dist/validator/checks/policy-coherence.d.ts.map +1 -0
  166. package/dist/validator/checks/policy-coherence.js +69 -0
  167. package/dist/validator/checks/policy-coherence.js.map +1 -0
  168. package/dist/validator/checks/registry.d.ts +8 -0
  169. package/dist/validator/checks/registry.d.ts.map +1 -0
  170. package/dist/validator/checks/registry.js +23 -0
  171. package/dist/validator/checks/registry.js.map +1 -0
  172. package/dist/validator/checks/role-warnings.d.ts +2 -2
  173. package/dist/validator/checks/role-warnings.d.ts.map +1 -1
  174. package/dist/validator/checks/role-warnings.js +5 -5
  175. package/dist/validator/checks/role-warnings.js.map +1 -1
  176. package/dist/validator/checks/runtime-models.d.ts +4 -0
  177. package/dist/validator/checks/runtime-models.d.ts.map +1 -0
  178. package/dist/validator/checks/runtime-models.js +14 -0
  179. package/dist/validator/checks/runtime-models.js.map +1 -0
  180. package/dist/validator/checks/skill-requirements.d.ts +5 -0
  181. package/dist/validator/checks/skill-requirements.d.ts.map +1 -0
  182. package/dist/validator/checks/skill-requirements.js +143 -0
  183. package/dist/validator/checks/skill-requirements.js.map +1 -0
  184. package/dist/validator/checks/team-graph-enhanced.d.ts +4 -0
  185. package/dist/validator/checks/team-graph-enhanced.d.ts.map +1 -0
  186. package/dist/validator/checks/team-graph-enhanced.js +71 -0
  187. package/dist/validator/checks/team-graph-enhanced.js.map +1 -0
  188. package/dist/validator/checks/tool-conflicts.d.ts +2 -2
  189. package/dist/validator/checks/tool-conflicts.d.ts.map +1 -1
  190. package/dist/validator/checks/tool-conflicts.js +3 -3
  191. package/dist/validator/checks/tool-conflicts.js.map +1 -1
  192. package/dist/validator/checks/trait-capability.d.ts +4 -0
  193. package/dist/validator/checks/trait-capability.d.ts.map +1 -0
  194. package/dist/validator/checks/trait-capability.js +23 -0
  195. package/dist/validator/checks/trait-capability.js.map +1 -0
  196. package/dist/validator/heuristics.d.ts +25 -0
  197. package/dist/validator/heuristics.d.ts.map +1 -0
  198. package/dist/validator/heuristics.js +87 -0
  199. package/dist/validator/heuristics.js.map +1 -0
  200. package/dist/validator/index.d.ts.map +1 -1
  201. package/dist/validator/index.js +24 -4
  202. package/dist/validator/index.js.map +1 -1
  203. package/dist/validator/reporter.d.ts.map +1 -1
  204. package/dist/validator/reporter.js +37 -10
  205. package/dist/validator/reporter.js.map +1 -1
  206. package/dist/validator/types.d.ts +3 -0
  207. package/dist/validator/types.d.ts.map +1 -1
  208. package/dist/wizard/index.d.ts.map +1 -1
  209. package/dist/wizard/index.js +2 -5
  210. package/dist/wizard/index.js.map +1 -1
  211. package/dist/wizard/steps/agent-customization.d.ts.map +1 -1
  212. package/dist/wizard/steps/agent-customization.js +6 -19
  213. package/dist/wizard/steps/agent-customization.js.map +1 -1
  214. package/dist/wizard/steps/environment-selection.d.ts +11 -0
  215. package/dist/wizard/steps/environment-selection.d.ts.map +1 -0
  216. package/dist/wizard/steps/environment-selection.js +46 -0
  217. package/dist/wizard/steps/environment-selection.js.map +1 -0
  218. package/package.json +5 -5
  219. package/schema/teamcast.schema.json +30 -11
  220. package/templates/presets/feature-team.yaml +30 -10
  221. package/templates/presets/research-and-build.yaml +28 -3
  222. package/templates/presets/secure-dev.yaml +33 -0
  223. package/templates/presets/solo-dev.yaml +9 -0
  224. package/dist/components/agent-fragments.d.ts +0 -15
  225. package/dist/components/agent-fragments.d.ts.map +0 -1
  226. package/dist/components/agent-fragments.js.map +0 -1
  227. package/dist/components/policy-fragments.d.ts +0 -5
  228. package/dist/components/policy-fragments.d.ts.map +0 -1
  229. package/dist/components/policy-fragments.js +0 -88
  230. package/dist/components/policy-fragments.js.map +0 -1
  231. package/dist/core/index.d.ts +0 -8
  232. package/dist/core/index.d.ts.map +0 -1
  233. package/dist/core/index.js +0 -8
  234. package/dist/core/index.js.map +0 -1
  235. package/dist/core/skill-resolver.d.ts +0 -8
  236. package/dist/core/skill-resolver.d.ts.map +0 -1
  237. package/dist/core/skill-resolver.js +0 -17
  238. package/dist/core/skill-resolver.js.map +0 -1
  239. package/dist/core/skills.d.ts +0 -4
  240. package/dist/core/skills.d.ts.map +0 -1
  241. package/dist/core/skills.js +0 -14
  242. package/dist/core/skills.js.map +0 -1
  243. package/dist/plugins/catalog.d.ts +0 -10
  244. package/dist/plugins/catalog.d.ts.map +0 -1
  245. package/dist/plugins/catalog.js +0 -30
  246. package/dist/plugins/catalog.js.map +0 -1
  247. package/dist/plugins/core/models-plugin.d.ts +0 -3
  248. package/dist/plugins/core/models-plugin.d.ts.map +0 -1
  249. package/dist/plugins/core/models-plugin.js +0 -50
  250. package/dist/plugins/core/models-plugin.js.map +0 -1
  251. package/dist/plugins/core/presets-plugin.d.ts +0 -3
  252. package/dist/plugins/core/presets-plugin.d.ts.map +0 -1
  253. package/dist/plugins/core/presets-plugin.js +0 -10
  254. package/dist/plugins/core/presets-plugin.js.map +0 -1
  255. package/dist/plugins/core/tools-plugin.d.ts +0 -3
  256. package/dist/plugins/core/tools-plugin.d.ts.map +0 -1
  257. package/dist/plugins/core/tools-plugin.js +0 -44
  258. package/dist/plugins/core/tools-plugin.js.map +0 -1
  259. package/dist/plugins/environments/node-env-plugin.d.ts +0 -3
  260. package/dist/plugins/environments/node-env-plugin.d.ts.map +0 -1
  261. package/dist/plugins/environments/node-env-plugin.js +0 -31
  262. package/dist/plugins/environments/node-env-plugin.js.map +0 -1
  263. package/dist/plugins/environments/python-env-plugin.d.ts +0 -3
  264. package/dist/plugins/environments/python-env-plugin.d.ts.map +0 -1
  265. package/dist/plugins/environments/python-env-plugin.js +0 -33
  266. package/dist/plugins/environments/python-env-plugin.js.map +0 -1
  267. package/dist/plugins/index.d.ts +0 -3
  268. package/dist/plugins/index.d.ts.map +0 -1
  269. package/dist/plugins/index.js +0 -14
  270. package/dist/plugins/index.js.map +0 -1
  271. package/dist/plugins/inject.d.ts +0 -7
  272. package/dist/plugins/inject.d.ts.map +0 -1
  273. package/dist/plugins/inject.js +0 -48
  274. package/dist/plugins/inject.js.map +0 -1
  275. package/dist/plugins/merge-policies.d.ts +0 -8
  276. package/dist/plugins/merge-policies.d.ts.map +0 -1
  277. package/dist/plugins/merge-policies.js +0 -90
  278. package/dist/plugins/merge-policies.js.map +0 -1
  279. package/dist/plugins/registry.d.ts +0 -27
  280. package/dist/plugins/registry.d.ts.map +0 -1
  281. package/dist/plugins/registry.js +0 -97
  282. package/dist/plugins/registry.js.map +0 -1
  283. package/dist/plugins/types.d.ts +0 -75
  284. package/dist/plugins/types.d.ts.map +0 -1
  285. package/dist/plugins/types.js +0 -2
  286. package/dist/plugins/types.js.map +0 -1
  287. package/dist/renderers/index.d.ts +0 -6
  288. package/dist/renderers/index.d.ts.map +0 -1
  289. package/dist/renderers/index.js +0 -4
  290. package/dist/renderers/index.js.map +0 -1
  291. package/dist/validator/checks/instruction-blocks.d.ts +0 -5
  292. package/dist/validator/checks/instruction-blocks.d.ts.map +0 -1
  293. package/dist/validator/checks/instruction-blocks.js +0 -47
  294. package/dist/validator/checks/instruction-blocks.js.map +0 -1
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # TeamCast
2
2
 
3
- CLI to design, generate, and validate Claude Code subagents from a single manifest.
3
+ CLI to design, generate, and validate multi-target agent teams for Claude Code and Codex from a single manifest.
4
4
 
5
- Define your subagents in one `teamcast.yaml` file. TeamCast generates Claude Code config files, validates the configuration, and keeps generated output in sync with the manifest.
5
+ Define your agent team in one `teamcast.yaml` file. TeamCast validates the manifest, generates `.claude/` and/or `.codex/` config files, and keeps generated output in sync with the source config.
6
6
 
7
7
  ## Install
8
8
 
@@ -23,56 +23,68 @@ npx teamcast <command>
23
23
  teamcast init
24
24
 
25
25
  # Or skip the wizard and use a preset directly
26
- teamcast init --preset feature-team
26
+ teamcast init --preset feature-team --target both
27
27
 
28
- # Generate Claude Code config files from teamcast.yaml
28
+ # Generate files for the targets defined in teamcast.yaml
29
29
  teamcast generate
30
30
 
31
31
  # Validate the manifest
32
32
  teamcast validate
33
33
  ```
34
34
 
35
- After `generate`, your project will have:
36
- - `.claude/agents/<name>.md` - one file per agent
37
- - `.claude/skills/<skill>/SKILL.md` - one stub file per unique skill
38
- - `.claude/settings.json` - permissions and sandbox config
39
- - `.claude/settings.local.json` - local Claude settings when enabled
40
- - `CLAUDE.md` - team documentation for Claude Code
41
- - `AGENTS.md` - universal AI agent documentation
35
+ After `generate`, your project will have files for the selected target(s):
42
36
 
43
- ## Native Claude Code Model
37
+ - Claude target:
38
+ - `.claude/agents/<name>.md` - one file per agent
39
+ - `.claude/skills/<skill>/SKILL.md` - one stub file per unique skill
40
+ - `.claude/settings.json` - permissions and sandbox config
41
+ - `.claude/settings.local.json` - local Claude settings when enabled
42
+ - `CLAUDE.md` - team documentation for Claude Code
43
+ - Codex target:
44
+ - `.codex/config.toml` - workspace-level Codex config
45
+ - `.codex/agents/<name>.toml` - one TOML config per agent
46
+ - `AGENTS.md` - team-level instructions for Codex agents
44
47
 
45
- TeamCast now uses a canonical agent shape that separates:
48
+ Use `teamcast init --target claude|codex|both` to choose which outputs are generated up front.
46
49
 
47
- - `agents.<name>.claude` - native Claude Code subagent runtime fields
48
- - `agents.<name>.forge` - TeamCast-only metadata such as delegation graph
50
+ ## Target Model
51
+
52
+ TeamCast now uses a canonical manifest shape with target-specific blocks:
53
+
54
+ - `claude.agents.<name>` - native Claude Code runtime fields and doc outputs
55
+ - `codex.agents.<name>` - native Codex runtime fields and TOML outputs
56
+ - `<target>.agents.<name>.forge` - TeamCast-only metadata such as delegation graph
57
+ - `project.environments` - active project environments such as `node`, `python` — auto-detected or explicit
58
+
59
+ TeamCast includes a built-in registry of capabilities, traits, instruction fragments, policy fragments, models, and skills. These are not serialized into `teamcast.yaml`.
49
60
 
50
61
  Legacy flat manifests are still accepted and normalized automatically, but new writes use the canonical shape.
51
62
 
52
63
  ## Command Summary
53
64
 
54
- | Command | Description |
55
- |---------|-------------|
56
- | `init` | Initialize `teamcast.yaml` and generate files |
57
- | `generate` | Generate Claude Code files from `teamcast.yaml` |
58
- | `validate` | Validate the team configuration |
59
- | `validate --format json` | Machine-readable validation output for CI pipelines |
60
- | `explain` | Print a human-readable view of the team architecture |
61
- | `diff` | Show what generated files would change |
62
- | `add agent <name>` | Add a new agent |
63
- | `edit agent <name>` | Edit an existing agent |
64
- | `remove agent <name>` | Remove an agent and clean up handoffs |
65
- | `create skill <name>` | Create a new skill and assign it to one agent |
66
- | `assign skill <name>` | Assign an existing skill to more agents |
67
- | `import` | Import an existing `.claude/` setup into `teamcast.yaml` |
68
- | `reset` | Delete generated files, keep `teamcast.yaml` |
69
- | `clean` | Delete generated files and `teamcast.yaml` |
65
+ | Command | Description |
66
+ | ------------------------ | -------------------------------------------------------- |
67
+ | `init` | Initialize `teamcast.yaml` and generate files |
68
+ | `generate` | Generate target files from `teamcast.yaml` |
69
+ | `validate` | Validate the team configuration |
70
+ | `validate --format json` | Machine-readable validation output for CI pipelines |
71
+ | `explain` | Print a human-readable view of the team architecture |
72
+ | `diff` | Show what generated files would change |
73
+ | `add agent <name>` | Add a new agent |
74
+ | `edit agent <name>` | Edit an existing agent |
75
+ | `remove agent <name>` | Remove an agent and clean up handoffs |
76
+ | `create skill <name>` | Create a new skill and assign it to one agent |
77
+ | `assign skill <name>` | Assign an existing skill to more agents |
78
+ | `import` | Import an existing `.claude/` setup into `teamcast.yaml` |
79
+ | `reset` | Delete generated files, keep `teamcast.yaml` |
80
+ | `clean` | Delete generated files and `teamcast.yaml` |
70
81
 
71
82
  Useful options:
72
83
 
73
84
  ```bash
74
85
  teamcast init --preset <name> # skip wizard and use a preset
75
86
  teamcast init --from <path> # initialize from an existing YAML file
87
+ teamcast init --target <name> # generate claude, codex, or both
76
88
  teamcast init --yes # non-interactive init, uses defaults
77
89
  teamcast generate --dry-run # preview generated files without writing
78
90
  teamcast validate --strict # fail on warnings as well as errors
@@ -84,12 +96,12 @@ teamcast clean --yes # skip clean confirmation
84
96
 
85
97
  ## Presets
86
98
 
87
- | Preset | Description |
88
- |--------|-------------|
89
- | `feature-team` | orchestrator -> planner -> developer -> reviewer |
90
- | `solo-dev` | single developer agent with broad tool access |
91
- | `research-and-build` | orchestrator -> researcher -> planner -> developer |
92
- | `secure-dev` | orchestrator -> planner -> developer -> security-auditor -> reviewer |
99
+ | Preset | Agents | Workflow |
100
+ | -------------------- | ------ | -------- |
101
+ | `feature-team` | orchestrator, planner, developer, reviewer | orchestrator triages and delegates; planner reads code and produces step-by-step plans; developer implements with tests; reviewer checks quality |
102
+ | `solo-dev` | developer | single full-stack agent handles end-to-end: plan, implement, test, verify |
103
+ | `research-and-build` | orchestrator, researcher, planner, developer | research-first: orchestrator routes to researcher for external info, planner integrates findings, developer implements |
104
+ | `secure-dev` | orchestrator, planner, developer, security-auditor, reviewer | mandatory security pipeline: planner includes threat model, developer follows OWASP, security-auditor gates every change, reviewer checks quality |
93
105
 
94
106
  The built-in preset files live in `templates/presets/` and are valid TeamCast YAML. Use them as a reference when creating custom presets, or copy one as a starting point:
95
107
 
@@ -109,27 +121,36 @@ Interactive wizard flow:
109
121
  1. `Project name:`
110
122
  - default is auto-detected from the current directory
111
123
  - must match lowercase letters, numbers, and hyphens
112
- 2. `How do you want to set up your agent team?`
124
+ 2. `Which target configs should TeamCast generate?`
125
+ - `Claude`
126
+ - `Codex`
127
+ - `Both`
128
+ 3. `How do you want to set up your agent team?`
113
129
  - `Use a preset`
114
130
  - `Custom team`
115
131
  - `Single agent`
116
- 3. If you choose `Use a preset`:
132
+ 4. If you choose `Use a preset`:
117
133
  - `Select a preset:`
118
- 4. If you choose `Custom team`:
134
+ 5. If you choose `Custom team`:
119
135
  - `Select roles for your team:`
120
136
  - available roles: `orchestrator`, `planner`, `researcher`, `developer`, `tester`, `reviewer`, `security-auditor`
121
137
  - if `orchestrator` is selected with other roles, handoffs are auto-wired to the other selected agents
122
- 5. `Customize agents before generating?`
138
+ 6. `Customize agents before generating?`
123
139
  - if yes, each agent gets:
124
140
  - `Model for <agent>:`
125
- 6. Preview:
141
+ - `Reasoning effort [codex]:` for Codex agents
142
+ 7. `Select project environments:`
143
+ - detected environments (e.g. Node.js, Python) are pre-selected
144
+ - environments inject policies and workflow instructions into capable agents
145
+ 8. Preview:
126
146
  - shows the files that will be created
127
147
  - asks `Generate these files?`
128
148
 
129
149
  Important limitations of the wizard:
130
150
 
131
151
  - It does not let you rename individual agents.
132
- - It does not ask for custom `claude.instructions`.
152
+ - It does not ask for custom `instruction_blocks` or `instruction_fragments`.
153
+ - It does not ask for environment-specific configuration prompts.
133
154
  - It does not ask for custom `claude.skills`, `forge.handoffs`, `claude.max_turns`, or exact tool lists.
134
155
  - Those values come from built-in presets or role templates.
135
156
  - If you want deeper customization, edit `teamcast.yaml` after init and run `teamcast generate`.
@@ -139,6 +160,7 @@ Non-interactive `init` flows:
139
160
  - `teamcast init --preset <name>`
140
161
  - skips the wizard
141
162
  - loads the preset
163
+ - uses the selected `--target` value, or `claude` if omitted
142
164
  - uses the detected directory name as `project.name`
143
165
  - writes `teamcast.yaml`
144
166
  - generates files immediately
@@ -188,6 +210,7 @@ How those answers map into the manifest:
188
210
  What `add agent` does not ask for:
189
211
 
190
212
  - `claude.instructions`
213
+ - `instruction_blocks`
191
214
  - `claude.skills`
192
215
  - `forge.handoffs`
193
216
  - `claude.max_turns`
@@ -195,7 +218,7 @@ What `add agent` does not ask for:
195
218
  - `claude.mcp_servers`
196
219
  - a fully custom `claude.tools` / `claude.disallowed_tools` list
197
220
 
198
- That means a custom agent added this way starts with a minimal prompt. To make it useful, edit `teamcast.yaml` and add fields such as `claude.instructions`, `claude.skills`, and `forge.handoffs`.
221
+ That means a custom agent added this way starts with a minimal prompt. To make it useful, edit `teamcast.yaml` and add fields such as `instruction_blocks`, `instruction_fragments`, `skills`, and `forge.handoffs`.
199
222
 
200
223
  ### `edit agent <name>`
201
224
 
@@ -233,7 +256,7 @@ Interactive questions:
233
256
 
234
257
  Important limitations:
235
258
 
236
- - `edit agent` does not edit `claude.instructions`, `claude.skills`, `forge.handoffs`, `claude.permission_mode`, or `claude.mcp_servers`.
259
+ - `edit agent` does not edit `instruction_blocks`, `instruction_fragments`, `skills`, `forge.handoffs`, `permission_mode`, or `mcp_servers`.
237
260
  - If you pass any direct flags such as `--description`, `--model`, or `--max-turns`, the command updates only those fields and skips the interactive tool editor.
238
261
 
239
262
  ### `remove agent <name>`
@@ -343,16 +366,16 @@ policies:
343
366
 
344
367
  Available rules:
345
368
 
346
- | Rule | Parameters | Description |
347
- |------|-----------|-------------|
348
- | `require_sandbox_with_execute` | — | Any agent with `execute` skill must have sandbox enabled |
349
- | `no_unrestricted_execute` | — | `execute` skill must have a permission scope (e.g. `Bash(npm *)`) |
350
- | `require_skill` | `skill` | All agents must have the specified skill |
351
- | `deny_skill_for_role` | `agent`, `skill` | A named agent must not have the specified skill |
352
- | `forbid_skill_combination` | `skills[]` | No single agent may hold all listed skills at once |
353
- | `max_agents` | `count` | Team must not exceed the given number of agents |
354
- | `require_instruction_block` | `kind` | All agents must include an instruction block of the given kind |
355
- | `require_delegation_chain` | — | At least one agent must have the `delegate` skill |
369
+ | Rule | Parameters | Description |
370
+ | ------------------------------ | ---------------- | ----------------------------------------------------------------- |
371
+ | `require_sandbox_with_execute` | — | Any agent with `execute` skill must have sandbox enabled |
372
+ | `no_unrestricted_execute` | — | `execute` skill must have a permission scope (e.g. `Bash(npm *)`) |
373
+ | `require_skill` | `skill` | All agents must have the specified skill |
374
+ | `deny_skill_for_role` | `agent`, `skill` | A named agent must not have the specified skill |
375
+ | `forbid_skill_combination` | `skills[]` | No single agent may hold all listed skills at once |
376
+ | `max_agents` | `count` | Team must not exceed the given number of agents |
377
+ | `require_instruction_block` | `kind` | All agents must include an instruction block of the given kind |
378
+ | `require_delegation_chain` | — | At least one agent must have the `delegate` skill |
356
379
 
357
380
  The `secure-dev` preset includes several security assertions by default.
358
381
 
@@ -409,6 +432,8 @@ It targets:
409
432
  - `.claude/settings.json`
410
433
  - `.claude/settings.local.json`
411
434
  - `CLAUDE.md`
435
+ - `.codex/agents`
436
+ - `.codex/config.toml`
412
437
  - `AGENTS.md`
413
438
 
414
439
  Flow:
@@ -440,7 +465,11 @@ Use `--yes` to skip confirmation.
440
465
 
441
466
  Everything is defined in `teamcast.yaml` at the root of your project.
442
467
 
443
- For each agent, TeamCast renders `.claude/agents/<name>.md` from `agents.<name>.claude`.
468
+ For Claude targets, TeamCast renders `.claude/agents/<name>.md` and `CLAUDE.md` from `claude.agents.<name>`.
469
+
470
+ For Codex targets, TeamCast renders `.codex/agents/<name>.toml` plus `.codex/config.toml` from `codex.agents.<name>`.
471
+
472
+ `.codex/config.toml` is the workspace-level agent index. Concrete agent runtime config lives in `.codex/agents/<name>.toml`.
444
473
 
445
474
  Native Claude Code fields are rendered into frontmatter:
446
475
 
@@ -454,15 +483,49 @@ Native Claude Code fields are rendered into frontmatter:
454
483
  - `mcpServers`
455
484
  - `background`
456
485
 
457
- `claude.instructions` becomes the markdown body.
486
+ `instruction_blocks` and `instruction_fragments` compose the markdown body for Claude agents and the instruction sections embedded in Codex `developer_instructions`.
458
487
 
459
488
  `forge` metadata is not rendered into the agent markdown. It is used by TeamCast for validation, workflow docs, and delegation modeling.
460
489
 
461
- This is important for custom agents:
490
+ Codex agent TOML uses these native fields:
491
+
492
+ - `model`
493
+ - `model_reasoning_effort`
494
+ - `sandbox_mode`
495
+ - `developer_instructions`
496
+
497
+ `tools`, `disallowed_tools`, `skills`, and `forge.handoffs` are encoded as structured sections inside `developer_instructions`.
498
+
499
+ ### Environment Instructions
500
+
501
+ Project environments inject capability-gated instructions into agent prompts at generation time. Each environment fragment specifies which capabilities an agent must have to receive it:
462
502
 
463
- - role templates and presets come with built-in `claude.instructions`
464
- - `add agent <name>` without `--template` does not ask for `claude.instructions`
465
- - a custom agent created from `add agent` therefore starts with a very minimal prompt until you edit `teamcast.yaml`
503
+ | Fragment | Requires | Example content |
504
+ |----------|----------|----------------|
505
+ | `node_code_patterns` | `read_files` | ESM imports, TypeScript strict mode, named exports |
506
+ | `node_development` | `write_files` | `npm install`, async/await, error handling patterns |
507
+ | `node_testing` | `execute` + `write_files` | `npm test`, vitest/jest commands, test conventions |
508
+
509
+ This means a **reviewer** (read + execute, no write) gets code patterns but NOT testing instructions. A **developer** (read + write + execute) gets everything. An **orchestrator** (read + delegate only) gets only code patterns.
510
+
511
+ Custom agents work the same way — a `react-dev` with `write_files` + `execute` automatically gets the right fragments without any role-name matching.
512
+
513
+ ### Instruction Layers
514
+
515
+ Agent prompts are composed from three layers:
516
+
517
+ | Layer | Source | Scope |
518
+ |-------|--------|-------|
519
+ | **instruction_blocks** | `teamcast.yaml` or preset | Project-specific behavior, workflow rules |
520
+ | **instruction_fragments** | Built-in registry | Reusable role patterns (e.g. `feature-developer-workflow`) |
521
+ | **environment instructions** | Built-in environments | Toolchain best practices, injected by capability |
522
+
523
+ Presets provide sensible defaults for `instruction_blocks` and `instruction_fragments`. For deeper customization, edit `teamcast.yaml` and run `teamcast generate`.
524
+
525
+ Note for `add agent`:
526
+
527
+ - `add agent <name> --template <role>` inherits the role template's blocks and fragments
528
+ - `add agent <name>` without `--template` starts with a minimal prompt until you edit `teamcast.yaml`
466
529
 
467
530
  ## Configuration
468
531
 
@@ -471,113 +534,121 @@ Everything is defined in `teamcast.yaml` at the root of your project.
471
534
  ### Minimal Example
472
535
 
473
536
  ```yaml
474
- version: "1"
537
+ version: "2"
475
538
  project:
476
539
  name: my-project
477
540
 
478
- agents:
479
- developer:
480
- claude:
541
+ claude:
542
+ agents:
543
+ developer:
481
544
  description: Implements features and fixes bugs
482
545
  model: sonnet
483
546
  tools: [Read, Write, Edit, Bash, Grep, Glob]
484
547
  disallowed_tools: [WebFetch, WebSearch]
485
- instructions: |
486
- Implement the requested changes.
487
- Write tests when behavior changes.
548
+ instruction_blocks:
549
+ - kind: behavior
550
+ content: |
551
+ Implement the requested changes.
552
+ Write tests when behavior changes.
488
553
  ```
489
554
 
490
555
  ### Full Example
491
556
 
492
557
  ```yaml
493
- version: "1"
558
+ version: "2"
494
559
  project:
495
560
  name: my-project
496
561
  description: TypeScript/Node.js web app
497
562
 
498
- agents:
499
- orchestrator:
500
- claude:
563
+ claude:
564
+ agents:
565
+ orchestrator:
501
566
  description: Coordinates the team and delegates tasks
502
567
  model: opus
503
568
  tools: [Read, Grep, Glob, Agent]
504
569
  disallowed_tools: [Edit, Write, Bash]
505
570
  max_turns: 30
506
- instructions: |
507
- You are the coordinator for the project.
508
- Read the request, break it into subtasks, and delegate to the right agents.
509
- Never modify files yourself.
510
- forge:
511
- handoffs: [planner, developer, reviewer]
512
-
513
- planner:
514
- claude:
571
+ instruction_blocks:
572
+ - kind: behavior
573
+ content: |
574
+ You are the coordinator for the project.
575
+ Read the request, break it into subtasks, and delegate to the right agents.
576
+ Never modify files yourself.
577
+ forge:
578
+ handoffs: [planner, developer, reviewer]
579
+
580
+ planner:
515
581
  description: Analyzes codebase and produces implementation plans
516
582
  model: sonnet
517
583
  tools: [Read, Grep, Glob, WebFetch, WebSearch]
518
584
  disallowed_tools: [Edit, Write, Bash]
519
- instructions: |
520
- Read the codebase and produce a step-by-step implementation plan.
521
- Never modify files.
585
+ instruction_blocks:
586
+ - kind: behavior
587
+ content: |
588
+ Read the codebase and produce a step-by-step implementation plan.
589
+ Never modify files.
522
590
 
523
- developer:
524
- claude:
591
+ developer:
525
592
  description: Implements features based on the plan
526
593
  model: sonnet
527
594
  tools: [Read, Write, Edit, Bash, Grep, Glob]
528
595
  disallowed_tools: [WebFetch, WebSearch]
529
596
  skills: [test-first, clean-code]
530
- instructions: |
531
- Implement the plan, write tests, and verify the result.
597
+ instruction_blocks:
598
+ - kind: behavior
599
+ content: |
600
+ Implement the plan, write tests, and verify the result.
532
601
 
533
- reviewer:
534
- claude:
602
+ reviewer:
535
603
  description: Reviews code for quality and security issues
536
604
  model: sonnet
537
605
  tools: [Read, Grep, Glob, Bash]
538
606
  disallowed_tools: [Edit, Write]
539
- instructions: |
540
- Review the implementation for correctness, style, and security.
541
- Do not modify files yourself.
542
-
543
- policies:
544
- permissions:
545
- allow:
546
- - "Bash(npm run *)"
547
- - "Bash(npm test)"
548
- - "Bash(git status)"
549
- - "Bash(git diff *)"
550
- - "Bash(git commit *)"
551
- ask:
552
- - "Bash(git push *)"
553
- deny:
554
- - "Bash(rm -rf *)"
555
- - "Bash(git push --force *)"
556
- - "Write(.env*)"
557
- sandbox:
558
- enabled: true
559
- auto_allow_bash: true
560
-
561
- settings:
562
- default_model: sonnet
563
- generate_docs: true
564
- generate_local_settings: true
607
+ instruction_blocks:
608
+ - kind: behavior
609
+ content: |
610
+ Review the implementation for correctness, style, and security.
611
+ Do not modify files yourself.
612
+
613
+ policies:
614
+ permissions:
615
+ allow:
616
+ - "Bash(npm run *)"
617
+ - "Bash(npm test)"
618
+ - "Bash(git status)"
619
+ - "Bash(git diff *)"
620
+ - "Bash(git commit *)"
621
+ ask:
622
+ - "Bash(git push *)"
623
+ deny:
624
+ - "Bash(rm -rf *)"
625
+ - "Bash(git push --force *)"
626
+ - "Write(.env*)"
627
+ sandbox:
628
+ enabled: true
629
+ auto_allow_bash: true
630
+
631
+ settings:
632
+ generate_docs: true
633
+ generate_local_settings: true
565
634
  ```
566
635
 
567
636
  ### Agent Fields
568
637
 
569
- | Field | Type | Description |
570
- |-------|------|-------------|
571
- | `claude.description` | string | Required. Shown in the Claude Code subagent picker |
572
- | `claude.model` | `opus \| sonnet \| haiku \| inherit` | Model alias to use |
573
- | `claude.tools` | string[] | Native Claude Code tool allow-list |
574
- | `claude.disallowed_tools` | string[] | Native Claude Code tool deny-list |
575
- | `claude.skills` | string[] | Skill names. Each unique skill generates `.claude/skills/<skill>/SKILL.md` |
576
- | `claude.max_turns` | number | Maximum agentic turns |
577
- | `claude.mcp_servers` | object[] | MCP server definitions |
578
- | `claude.permission_mode` | `default \| acceptEdits \| bypassPermissions \| plan \| dontAsk` | Claude Code permission mode |
579
- | `claude.instructions` | string | Freeform instructions used as the markdown body |
580
- | `forge.handoffs` | string[] | Other agents this agent can delegate to. Requires `Agent` in `claude.tools` |
638
+ | Field | Type | Description |
639
+ | ------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
640
+ | `claude.description` | string | Required. Shown in the Claude Code subagent picker |
641
+ | `claude.model` | `opus \| sonnet \| haiku \| inherit` | Model alias to use |
642
+ | `claude.tools` | string[] | Native Claude Code tool allow-list |
643
+ | `claude.disallowed_tools` | string[] | Native Claude Code tool deny-list |
644
+ | `claude.skills` | string[] | Skill names. Each unique skill generates `.claude/skills/<skill>/SKILL.md` |
645
+ | `claude.max_turns` | number | Maximum agentic turns |
646
+ | `claude.mcp_servers` | object[] | MCP server definitions |
647
+ | `claude.permission_mode` | `default \| acceptEdits \| bypassPermissions \| plan \| dontAsk` | Claude Code permission mode |
648
+ | `capability_traits` | string[] | High-level capability profiles that expand to `tools` + `disallowed_tools` |
649
+ | `instruction_blocks` | object[] | Structured instruction blocks rendered into Claude markdown and Codex `developer_instructions` |
650
+ | `instruction_fragments` | string[] | Named instruction fragments composed with `instruction_blocks` |
651
+ | `forge.handoffs` | string[] | Other agents this agent can delegate to. Requires `Agent` in `claude.tools` |
581
652
 
582
653
  Available Claude Code tools:
583
654
 
@@ -587,16 +658,16 @@ Available Claude Code tools:
587
658
 
588
659
  Instead of listing raw tool names, you can specify platform-agnostic skills in `claude.tools`. TeamCast expands each skill to the appropriate Claude Code tools automatically.
589
660
 
590
- | Skill | Expands to |
591
- |-------|-----------|
592
- | `read_files` | `Read`, `Grep`, `Glob` |
593
- | `write_files` | `Write`, `Edit`, `MultiEdit` |
594
- | `execute` | `Bash` |
595
- | `search` | `Glob`, `Grep` |
596
- | `web` | `WebFetch`, `WebSearch` |
597
- | `delegate` | `Agent` |
598
- | `interact` | `AskUserQuestion`, `TodoWrite`, `TodoRead` |
599
- | `notebook` | `NotebookEdit` |
661
+ | Skill | Expands to |
662
+ | ------------- | ------------------------------------------ |
663
+ | `read_files` | `Read`, `Grep`, `Glob` |
664
+ | `write_files` | `Write`, `Edit`, `MultiEdit` |
665
+ | `execute` | `Bash` |
666
+ | `search` | `Glob`, `Grep` |
667
+ | `web` | `WebFetch`, `WebSearch` |
668
+ | `delegate` | `Agent` |
669
+ | `interact` | `AskUserQuestion`, `TodoWrite`, `TodoRead` |
670
+ | `notebook` | `NotebookEdit` |
600
671
 
601
672
  Example:
602
673
 
@@ -608,6 +679,39 @@ developer:
608
679
 
609
680
  Raw tool names and skills can be mixed in the same `tools` array.
610
681
 
682
+ ### Capability Traits
683
+
684
+ Capability traits are high-level profiles that compose `tools` and `disallowed_tools` from named capability sets. They are the recommended way to define agent permissions in presets and custom manifests — more readable than raw tool lists and safer than manual assembly.
685
+
686
+ | Trait | Grants | Denies |
687
+ | -------------------- | ------------------------------- | --------------- |
688
+ | `base-read` | `read_files`, `search` | — |
689
+ | `file-authoring` | `write_files` | — |
690
+ | `command-execution` | `execute` | — |
691
+ | `web-research` | `web` | — |
692
+ | `delegation` | `delegate` | — |
693
+ | `interaction` | `interact` | — |
694
+ | `notebook-editing` | `notebook` | — |
695
+ | `no-file-edits` | — | `write_files` |
696
+ | `no-commands` | — | `execute` |
697
+ | `no-web` | — | `web` |
698
+ | `full-access` | all capabilities | — |
699
+
700
+ Grant traits expand to the corresponding abstract skills (see table above). Deny traits add the expanded tools to `disallowed_tools`.
701
+
702
+ Traits are combined in order. If you need a read-only planner that can browse the web but cannot edit files or run commands:
703
+
704
+ ```yaml
705
+ planner:
706
+ capability_traits:
707
+ - base-read
708
+ - web-research
709
+ - no-file-edits
710
+ - no-commands
711
+ ```
712
+
713
+ Traits merge with explicit `tools` and `disallowed_tools` — you can use both in the same agent definition. Explicit tool lists take precedence for additions; deny traits always add to the disallow list.
714
+
611
715
  ### Policy Fields
612
716
 
613
717
  ```yaml
@@ -645,10 +749,16 @@ preset_meta:
645
749
 
646
750
  ## Validation
647
751
 
648
- `teamcast validate` checks:
649
-
650
- - handoff graph correctness
651
- - tool allow or deny conflicts
652
- - role-based warnings
653
- - security baseline configuration
654
- - policy assertions (when defined in `policies.assertions`)
752
+ `teamcast validate` runs 10 validation phases:
753
+
754
+ - Registry references — all fragments, traits, skills, and environments resolve
755
+ - Trait and capability composition — no grant/deny conflicts
756
+ - Capability-to-tool mapping — abstract capabilities map to target tools
757
+ - Policy coherence — no allow/deny contradictions
758
+ - Capability-policy cross-check capabilities align with policies
759
+ - Skill requirements — capabilities, MCP servers, and target compatibility
760
+ - Instruction validation — fragment conflicts, heuristic contradiction detection
761
+ - Team graph — handoff targets exist, no orphans, reachability verified
762
+ - Environment checks — detected and declared environments valid
763
+ - MCP server configuration — required servers present, no duplicates
764
+ - Policy assertions (when defined in `policies.assertions`)
@@ -1 +1 @@
1
- {"version":3,"file":"team.d.ts","sourceRoot":"","sources":["../../src/application/team.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,KAAK,EAAe,gBAAgB,EAAgB,MAAM,sBAAsB,CAAC;AACxF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAQ/D,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,OAAO,CAAC;AAChD,MAAM,MAAM,mBAAmB,GAAG,cAAc,GAAG,MAAM,CAAC;AAE1D,wBAAgB,kBAAkB,CAAC,SAAS,GAAE,mBAA8B,GAAG,cAAc,EAAE,CAE9F;AA0JD,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,mBAA8B,GACxC,gBAAgB,CA8BlB;AAED,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,UAAU,GAAE,cAAyB,GACpC,QAAQ,CAGV;AAED,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,YAAY,EAAE,EACrB,UAAU,GAAE,cAAyB,GACpC,QAAQ,CA0BV;AAED,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,YAAY,EAAE,EACrB,SAAS,GAAE,mBAA8B,GACxC,gBAAgB,CAOlB;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ,CA2BlE;AAED,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,MAAM,EACnB,UAAU,GAAE,cAAyB,GACpC,QAAQ,CAmCV;AAED,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,mBAA8B,GACxC,gBAAgB,CAOlB;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,KAAK,CAAC;IAAE,UAAU,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,GAC3D,gBAAgB,CAWlB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,QAAQ,CAWvF;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,QAAQ,CAWxF;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAoB1E;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,QAAQ,CAsBjG;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE;IACP,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,eAAe,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,iBAAiB,CAAC,CAAC;CAC3D,GACA,SAAS,CAkBX"}
1
+ {"version":3,"file":"team.d.ts","sourceRoot":"","sources":["../../src/application/team.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,KAAK,EAAe,gBAAgB,EAAgB,MAAM,sBAAsB,CAAC;AACxF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAO/D,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,OAAO,CAAC;AAChD,MAAM,MAAM,mBAAmB,GAAG,cAAc,GAAG,MAAM,CAAC;AAE1D,wBAAgB,kBAAkB,CAAC,SAAS,GAAE,mBAA8B,GAAG,cAAc,EAAE,CAE9F;AA0JD,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,mBAA8B,GACxC,gBAAgB,CA6BlB;AAED,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,UAAU,GAAE,cAAyB,GACpC,QAAQ,CAGV;AAED,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,YAAY,EAAE,EACrB,UAAU,GAAE,cAAyB,GACpC,QAAQ,CA0BV;AAED,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,YAAY,EAAE,EACrB,SAAS,GAAE,mBAA8B,GACxC,gBAAgB,CAOlB;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ,CA2BlE;AAED,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,MAAM,EACnB,UAAU,GAAE,cAAyB,GACpC,QAAQ,CAmCV;AAED,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,mBAA8B,GACxC,gBAAgB,CAOlB;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,KAAK,CAAC;IAAE,UAAU,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,GAC3D,gBAAgB,CAWlB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,QAAQ,CAWvF;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,QAAQ,CAWxF;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAoB1E;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,QAAQ,CAsBjG;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE;IACP,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,eAAe,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,iBAAiB,CAAC,CAAC;CAC3D,GACA,SAAS,CAkBX"}
@@ -158,7 +158,6 @@ export function buildManifestFromPreset(presetName, projectName, selection = 'cl
158
158
  return {
159
159
  version: '2',
160
160
  project: { ...manifest.project },
161
- plugins: manifest.plugins ? [...manifest.plugins] : undefined,
162
161
  preset_meta: manifest.preset_meta ? { ...manifest.preset_meta } : undefined,
163
162
  claude: targetNames.includes('claude')
164
163
  ? cloneTargetConfig(manifest.claude ?? sourceTarget, {