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.
- package/README.md +255 -145
- package/dist/application/team.d.ts.map +1 -1
- package/dist/application/team.js +0 -1
- package/dist/application/team.js.map +1 -1
- package/dist/application/validate-team.d.ts.map +1 -1
- package/dist/application/validate-team.js +7 -4
- package/dist/application/validate-team.js.map +1 -1
- package/dist/cli/explain.d.ts.map +1 -1
- package/dist/cli/explain.js +4 -2
- package/dist/cli/explain.js.map +1 -1
- package/dist/cli/init.js +2 -5
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/manage.d.ts.map +1 -1
- package/dist/cli/manage.js +6 -15
- package/dist/cli/manage.js.map +1 -1
- package/dist/core/assertions.d.ts +4 -4
- package/dist/core/assertions.d.ts.map +1 -1
- package/dist/core/capability-resolver.d.ts +7 -0
- package/dist/core/capability-resolver.d.ts.map +1 -0
- package/dist/core/capability-resolver.js +18 -0
- package/dist/core/capability-resolver.js.map +1 -0
- package/dist/core/compose-policies.d.ts +15 -0
- package/dist/core/compose-policies.d.ts.map +1 -0
- package/dist/core/compose-policies.js +106 -0
- package/dist/core/compose-policies.js.map +1 -0
- package/dist/core/environment-resolver.d.ts +20 -0
- package/dist/core/environment-resolver.d.ts.map +1 -0
- package/dist/core/environment-resolver.js +202 -0
- package/dist/core/environment-resolver.js.map +1 -0
- package/dist/core/policy-evaluator.d.ts +2 -2
- package/dist/core/policy-evaluator.d.ts.map +1 -1
- package/dist/core/policy-evaluator.js +7 -7
- package/dist/core/policy-evaluator.js.map +1 -1
- package/dist/core/types.d.ts +5 -2
- package/dist/core/types.d.ts.map +1 -1
- package/dist/explainer/index.js +1 -1
- package/dist/explainer/index.js.map +1 -1
- package/dist/generator/index.d.ts.map +1 -1
- package/dist/generator/index.js +4 -3
- package/dist/generator/index.js.map +1 -1
- package/dist/importer/codex.js.map +1 -1
- package/dist/importer/index.d.ts +0 -3
- package/dist/importer/index.d.ts.map +1 -1
- package/dist/importer/index.js +2 -3
- package/dist/importer/index.js.map +1 -1
- package/dist/manifest/normalize.d.ts.map +1 -1
- package/dist/manifest/normalize.js +41 -6
- package/dist/manifest/normalize.js.map +1 -1
- package/dist/manifest/types.d.ts +15 -10
- package/dist/manifest/types.d.ts.map +1 -1
- package/dist/manifest/types.js.map +1 -1
- package/dist/registry/capabilities.d.ts +6 -0
- package/dist/registry/capabilities.d.ts.map +1 -0
- package/dist/registry/capabilities.js +14 -0
- package/dist/registry/capabilities.js.map +1 -0
- package/dist/registry/environments.d.ts +5 -0
- package/dist/registry/environments.d.ts.map +1 -0
- package/dist/registry/environments.js +106 -0
- package/dist/registry/environments.js.map +1 -0
- package/dist/registry/index.d.ts +23 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +85 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/instruction-fragments.d.ts +11 -0
- package/dist/registry/instruction-fragments.d.ts.map +1 -0
- package/dist/{components/agent-fragments.js → registry/instruction-fragments.js} +22 -73
- package/dist/registry/instruction-fragments.js.map +1 -0
- package/dist/registry/models.d.ts +3 -0
- package/dist/registry/models.d.ts.map +1 -0
- package/dist/registry/models.js +46 -0
- package/dist/registry/models.js.map +1 -0
- package/dist/registry/policy-fragments.d.ts +6 -0
- package/dist/registry/policy-fragments.d.ts.map +1 -0
- package/dist/registry/policy-fragments.js +49 -0
- package/dist/registry/policy-fragments.js.map +1 -0
- package/dist/registry/skills.d.ts +5 -0
- package/dist/registry/skills.d.ts.map +1 -0
- package/dist/registry/skills.js +182 -0
- package/dist/registry/skills.js.map +1 -0
- package/dist/registry/traits.d.ts +16 -0
- package/dist/registry/traits.d.ts.map +1 -0
- package/dist/registry/traits.js +109 -0
- package/dist/registry/traits.js.map +1 -0
- package/dist/registry/types.d.ts +77 -0
- package/dist/registry/types.d.ts.map +1 -0
- package/dist/registry/types.js +21 -0
- package/dist/registry/types.js.map +1 -0
- package/dist/renderers/claude/docs.d.ts +0 -1
- package/dist/renderers/claude/docs.d.ts.map +1 -1
- package/dist/renderers/claude/docs.js +0 -95
- package/dist/renderers/claude/docs.js.map +1 -1
- package/dist/renderers/claude/index.d.ts.map +1 -1
- package/dist/renderers/claude/index.js +1 -2
- package/dist/renderers/claude/index.js.map +1 -1
- package/dist/renderers/claude/skill-map.d.ts +8 -8
- package/dist/renderers/claude/skill-map.d.ts.map +1 -1
- package/dist/renderers/claude/skill-map.js +9 -9
- package/dist/renderers/claude/skill-map.js.map +1 -1
- package/dist/renderers/claude/skill-md.d.ts.map +1 -1
- package/dist/renderers/claude/skill-md.js +73 -5
- package/dist/renderers/claude/skill-md.js.map +1 -1
- package/dist/renderers/codex/agents-md.d.ts +4 -0
- package/dist/renderers/codex/agents-md.d.ts.map +1 -0
- package/dist/renderers/codex/agents-md.js +94 -0
- package/dist/renderers/codex/agents-md.js.map +1 -0
- package/dist/renderers/codex/index.d.ts.map +1 -1
- package/dist/renderers/codex/index.js +4 -0
- package/dist/renderers/codex/index.js.map +1 -1
- package/dist/renderers/codex/skill-map.d.ts +3 -4
- package/dist/renderers/codex/skill-map.d.ts.map +1 -1
- package/dist/renderers/codex/skill-map.js +1 -1
- package/dist/renderers/codex/skill-map.js.map +1 -1
- package/dist/renderers/codex/skill-md.d.ts +4 -0
- package/dist/renderers/codex/skill-md.d.ts.map +1 -0
- package/dist/renderers/codex/skill-md.js +125 -0
- package/dist/renderers/codex/skill-md.js.map +1 -0
- package/dist/renderers/target-context.d.ts +3 -4
- package/dist/renderers/target-context.d.ts.map +1 -1
- package/dist/team-templates/policies.js +1 -1
- package/dist/team-templates/policies.js.map +1 -1
- package/dist/team-templates/presets.d.ts.map +1 -1
- package/dist/team-templates/presets.js +5 -8
- package/dist/team-templates/presets.js.map +1 -1
- package/dist/team-templates/roles.d.ts +3 -3
- package/dist/team-templates/roles.d.ts.map +1 -1
- package/dist/team-templates/roles.js +2 -4
- package/dist/team-templates/roles.js.map +1 -1
- package/dist/types/manifest.d.ts +2 -2
- package/dist/types/manifest.d.ts.map +1 -1
- package/dist/types/manifest.js +3 -3
- package/dist/types/manifest.js.map +1 -1
- package/dist/utils/skill-prompt-options.d.ts +4 -0
- package/dist/utils/skill-prompt-options.d.ts.map +1 -0
- package/dist/utils/skill-prompt-options.js +12 -0
- package/dist/utils/skill-prompt-options.js.map +1 -0
- package/dist/validator/checks/capability-policy.d.ts +5 -0
- package/dist/validator/checks/capability-policy.d.ts.map +1 -0
- package/dist/validator/checks/capability-policy.js +40 -0
- package/dist/validator/checks/capability-policy.js.map +1 -0
- package/dist/validator/checks/capability-tools.d.ts +5 -0
- package/dist/validator/checks/capability-tools.d.ts.map +1 -0
- package/dist/validator/checks/capability-tools.js +23 -0
- package/dist/validator/checks/capability-tools.js.map +1 -0
- package/dist/validator/checks/environment.d.ts +8 -0
- package/dist/validator/checks/environment.d.ts.map +1 -0
- package/dist/validator/checks/environment.js +28 -0
- package/dist/validator/checks/environment.js.map +1 -0
- package/dist/validator/checks/handoff-graph.d.ts +2 -2
- package/dist/validator/checks/handoff-graph.d.ts.map +1 -1
- package/dist/validator/checks/handoff-graph.js +2 -2
- package/dist/validator/checks/handoff-graph.js.map +1 -1
- package/dist/validator/checks/instructions.d.ts +5 -0
- package/dist/validator/checks/instructions.d.ts.map +1 -0
- package/dist/validator/checks/instructions.js +169 -0
- package/dist/validator/checks/instructions.js.map +1 -0
- package/dist/validator/checks/manifest-registry.d.ts +8 -0
- package/dist/validator/checks/manifest-registry.d.ts.map +1 -0
- package/dist/validator/checks/manifest-registry.js +68 -0
- package/dist/validator/checks/manifest-registry.js.map +1 -0
- package/dist/validator/checks/mcp.d.ts +4 -0
- package/dist/validator/checks/mcp.d.ts.map +1 -0
- package/dist/validator/checks/mcp.js +73 -0
- package/dist/validator/checks/mcp.js.map +1 -0
- package/dist/validator/checks/policy-coherence.d.ts +4 -0
- package/dist/validator/checks/policy-coherence.d.ts.map +1 -0
- package/dist/validator/checks/policy-coherence.js +69 -0
- package/dist/validator/checks/policy-coherence.js.map +1 -0
- package/dist/validator/checks/registry.d.ts +8 -0
- package/dist/validator/checks/registry.d.ts.map +1 -0
- package/dist/validator/checks/registry.js +23 -0
- package/dist/validator/checks/registry.js.map +1 -0
- package/dist/validator/checks/role-warnings.d.ts +2 -2
- package/dist/validator/checks/role-warnings.d.ts.map +1 -1
- package/dist/validator/checks/role-warnings.js +5 -5
- package/dist/validator/checks/role-warnings.js.map +1 -1
- package/dist/validator/checks/runtime-models.d.ts +4 -0
- package/dist/validator/checks/runtime-models.d.ts.map +1 -0
- package/dist/validator/checks/runtime-models.js +14 -0
- package/dist/validator/checks/runtime-models.js.map +1 -0
- package/dist/validator/checks/skill-requirements.d.ts +5 -0
- package/dist/validator/checks/skill-requirements.d.ts.map +1 -0
- package/dist/validator/checks/skill-requirements.js +143 -0
- package/dist/validator/checks/skill-requirements.js.map +1 -0
- package/dist/validator/checks/team-graph-enhanced.d.ts +4 -0
- package/dist/validator/checks/team-graph-enhanced.d.ts.map +1 -0
- package/dist/validator/checks/team-graph-enhanced.js +71 -0
- package/dist/validator/checks/team-graph-enhanced.js.map +1 -0
- package/dist/validator/checks/tool-conflicts.d.ts +2 -2
- package/dist/validator/checks/tool-conflicts.d.ts.map +1 -1
- package/dist/validator/checks/tool-conflicts.js +3 -3
- package/dist/validator/checks/tool-conflicts.js.map +1 -1
- package/dist/validator/checks/trait-capability.d.ts +4 -0
- package/dist/validator/checks/trait-capability.d.ts.map +1 -0
- package/dist/validator/checks/trait-capability.js +23 -0
- package/dist/validator/checks/trait-capability.js.map +1 -0
- package/dist/validator/heuristics.d.ts +25 -0
- package/dist/validator/heuristics.d.ts.map +1 -0
- package/dist/validator/heuristics.js +87 -0
- package/dist/validator/heuristics.js.map +1 -0
- package/dist/validator/index.d.ts.map +1 -1
- package/dist/validator/index.js +24 -4
- package/dist/validator/index.js.map +1 -1
- package/dist/validator/reporter.d.ts.map +1 -1
- package/dist/validator/reporter.js +37 -10
- package/dist/validator/reporter.js.map +1 -1
- package/dist/validator/types.d.ts +3 -0
- package/dist/validator/types.d.ts.map +1 -1
- package/dist/wizard/index.d.ts.map +1 -1
- package/dist/wizard/index.js +2 -5
- package/dist/wizard/index.js.map +1 -1
- package/dist/wizard/steps/agent-customization.d.ts.map +1 -1
- package/dist/wizard/steps/agent-customization.js +6 -19
- package/dist/wizard/steps/agent-customization.js.map +1 -1
- package/dist/wizard/steps/environment-selection.d.ts +11 -0
- package/dist/wizard/steps/environment-selection.d.ts.map +1 -0
- package/dist/wizard/steps/environment-selection.js +46 -0
- package/dist/wizard/steps/environment-selection.js.map +1 -0
- package/package.json +5 -5
- package/schema/teamcast.schema.json +30 -11
- package/templates/presets/feature-team.yaml +30 -10
- package/templates/presets/research-and-build.yaml +28 -3
- package/templates/presets/secure-dev.yaml +33 -0
- package/templates/presets/solo-dev.yaml +9 -0
- package/dist/components/agent-fragments.d.ts +0 -15
- package/dist/components/agent-fragments.d.ts.map +0 -1
- package/dist/components/agent-fragments.js.map +0 -1
- package/dist/components/policy-fragments.d.ts +0 -5
- package/dist/components/policy-fragments.d.ts.map +0 -1
- package/dist/components/policy-fragments.js +0 -88
- package/dist/components/policy-fragments.js.map +0 -1
- package/dist/core/index.d.ts +0 -8
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -8
- package/dist/core/index.js.map +0 -1
- package/dist/core/skill-resolver.d.ts +0 -8
- package/dist/core/skill-resolver.d.ts.map +0 -1
- package/dist/core/skill-resolver.js +0 -17
- package/dist/core/skill-resolver.js.map +0 -1
- package/dist/core/skills.d.ts +0 -4
- package/dist/core/skills.d.ts.map +0 -1
- package/dist/core/skills.js +0 -14
- package/dist/core/skills.js.map +0 -1
- package/dist/plugins/catalog.d.ts +0 -10
- package/dist/plugins/catalog.d.ts.map +0 -1
- package/dist/plugins/catalog.js +0 -30
- package/dist/plugins/catalog.js.map +0 -1
- package/dist/plugins/core/models-plugin.d.ts +0 -3
- package/dist/plugins/core/models-plugin.d.ts.map +0 -1
- package/dist/plugins/core/models-plugin.js +0 -50
- package/dist/plugins/core/models-plugin.js.map +0 -1
- package/dist/plugins/core/presets-plugin.d.ts +0 -3
- package/dist/plugins/core/presets-plugin.d.ts.map +0 -1
- package/dist/plugins/core/presets-plugin.js +0 -10
- package/dist/plugins/core/presets-plugin.js.map +0 -1
- package/dist/plugins/core/tools-plugin.d.ts +0 -3
- package/dist/plugins/core/tools-plugin.d.ts.map +0 -1
- package/dist/plugins/core/tools-plugin.js +0 -44
- package/dist/plugins/core/tools-plugin.js.map +0 -1
- package/dist/plugins/environments/node-env-plugin.d.ts +0 -3
- package/dist/plugins/environments/node-env-plugin.d.ts.map +0 -1
- package/dist/plugins/environments/node-env-plugin.js +0 -31
- package/dist/plugins/environments/node-env-plugin.js.map +0 -1
- package/dist/plugins/environments/python-env-plugin.d.ts +0 -3
- package/dist/plugins/environments/python-env-plugin.d.ts.map +0 -1
- package/dist/plugins/environments/python-env-plugin.js +0 -33
- package/dist/plugins/environments/python-env-plugin.js.map +0 -1
- package/dist/plugins/index.d.ts +0 -3
- package/dist/plugins/index.d.ts.map +0 -1
- package/dist/plugins/index.js +0 -14
- package/dist/plugins/index.js.map +0 -1
- package/dist/plugins/inject.d.ts +0 -7
- package/dist/plugins/inject.d.ts.map +0 -1
- package/dist/plugins/inject.js +0 -48
- package/dist/plugins/inject.js.map +0 -1
- package/dist/plugins/merge-policies.d.ts +0 -8
- package/dist/plugins/merge-policies.d.ts.map +0 -1
- package/dist/plugins/merge-policies.js +0 -90
- package/dist/plugins/merge-policies.js.map +0 -1
- package/dist/plugins/registry.d.ts +0 -27
- package/dist/plugins/registry.d.ts.map +0 -1
- package/dist/plugins/registry.js +0 -97
- package/dist/plugins/registry.js.map +0 -1
- package/dist/plugins/types.d.ts +0 -75
- package/dist/plugins/types.d.ts.map +0 -1
- package/dist/plugins/types.js +0 -2
- package/dist/plugins/types.js.map +0 -1
- package/dist/renderers/index.d.ts +0 -6
- package/dist/renderers/index.d.ts.map +0 -1
- package/dist/renderers/index.js +0 -4
- package/dist/renderers/index.js.map +0 -1
- package/dist/validator/checks/instruction-blocks.d.ts +0 -5
- package/dist/validator/checks/instruction-blocks.d.ts.map +0 -1
- package/dist/validator/checks/instruction-blocks.js +0 -47
- 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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
48
|
+
Use `teamcast init --target claude|codex|both` to choose which outputs are generated up front.
|
|
46
49
|
|
|
47
|
-
|
|
48
|
-
|
|
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
|
|
55
|
-
|
|
56
|
-
| `init`
|
|
57
|
-
| `generate`
|
|
58
|
-
| `validate`
|
|
59
|
-
| `validate --format json` | Machine-readable validation output for CI pipelines
|
|
60
|
-
| `explain`
|
|
61
|
-
| `diff`
|
|
62
|
-
| `add agent <name>`
|
|
63
|
-
| `edit agent <name>`
|
|
64
|
-
| `remove agent <name>`
|
|
65
|
-
| `create skill <name>`
|
|
66
|
-
| `assign skill <name>`
|
|
67
|
-
| `import`
|
|
68
|
-
| `reset`
|
|
69
|
-
| `clean`
|
|
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 |
|
|
88
|
-
|
|
89
|
-
| `feature-team` | orchestrator
|
|
90
|
-
| `solo-dev` | single
|
|
91
|
-
| `research-and-build` | orchestrator
|
|
92
|
-
| `secure-dev`
|
|
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. `
|
|
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
|
-
|
|
132
|
+
4. If you choose `Use a preset`:
|
|
117
133
|
- `Select a preset:`
|
|
118
|
-
|
|
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
|
-
|
|
138
|
+
6. `Customize agents before generating?`
|
|
123
139
|
- if yes, each agent gets:
|
|
124
140
|
- `Model for <agent>:`
|
|
125
|
-
|
|
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 `
|
|
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 `
|
|
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 `
|
|
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
|
|
347
|
-
|
|
348
|
-
| `require_sandbox_with_execute` | —
|
|
349
|
-
| `no_unrestricted_execute`
|
|
350
|
-
| `require_skill`
|
|
351
|
-
| `deny_skill_for_role`
|
|
352
|
-
| `forbid_skill_combination`
|
|
353
|
-
| `max_agents`
|
|
354
|
-
| `require_instruction_block`
|
|
355
|
-
| `require_delegation_chain`
|
|
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
|
|
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
|
-
`
|
|
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
|
-
|
|
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
|
-
|
|
464
|
-
|
|
465
|
-
|
|
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: "
|
|
537
|
+
version: "2"
|
|
475
538
|
project:
|
|
476
539
|
name: my-project
|
|
477
540
|
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
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
|
-
|
|
486
|
-
|
|
487
|
-
|
|
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: "
|
|
558
|
+
version: "2"
|
|
494
559
|
project:
|
|
495
560
|
name: my-project
|
|
496
561
|
description: TypeScript/Node.js web app
|
|
497
562
|
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
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
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
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
|
-
|
|
520
|
-
|
|
521
|
-
|
|
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
|
-
|
|
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
|
-
|
|
531
|
-
|
|
597
|
+
instruction_blocks:
|
|
598
|
+
- kind: behavior
|
|
599
|
+
content: |
|
|
600
|
+
Implement the plan, write tests, and verify the result.
|
|
532
601
|
|
|
533
|
-
|
|
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
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
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
|
|
570
|
-
|
|
571
|
-
| `claude.description`
|
|
572
|
-
| `claude.model`
|
|
573
|
-
| `claude.tools`
|
|
574
|
-
| `claude.disallowed_tools` | string[]
|
|
575
|
-
| `claude.skills`
|
|
576
|
-
| `claude.max_turns`
|
|
577
|
-
| `claude.mcp_servers`
|
|
578
|
-
| `claude.permission_mode`
|
|
579
|
-
| `
|
|
580
|
-
| `
|
|
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
|
|
591
|
-
|
|
592
|
-
| `read_files`
|
|
593
|
-
| `write_files` | `Write`, `Edit`, `MultiEdit`
|
|
594
|
-
| `execute`
|
|
595
|
-
| `search`
|
|
596
|
-
| `web`
|
|
597
|
-
| `delegate`
|
|
598
|
-
| `interact`
|
|
599
|
-
| `notebook`
|
|
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`
|
|
649
|
-
|
|
650
|
-
-
|
|
651
|
-
-
|
|
652
|
-
-
|
|
653
|
-
-
|
|
654
|
-
- policy
|
|
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;
|
|
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"}
|
package/dist/application/team.js
CHANGED
|
@@ -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, {
|