diff --git a/README.md b/README.md index 322f735..7155014 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ TeamCast now uses a canonical manifest shape with target-specific blocks: - `claude.agents.` - native Claude Code runtime fields and doc outputs - `codex.agents.` - native Codex runtime fields and TOML outputs - `.agents..forge` - TeamCast-only metadata such as delegation graph -- `project.environments` - active project environments such as `node`, `python` — auto-detected or explicit +- `project.environments` - active project environments (`node`, `python`, `go`, `rust`, `java`, `ruby`, `docker`, `terraform`) — auto-detected or explicit TeamCast includes a built-in registry of capabilities, traits, instruction fragments, policy fragments, models, and skills. These are not serialized into `teamcast.yaml`. @@ -526,6 +526,50 @@ This means a **reviewer** (read + execute, no write) gets code patterns but NOT Custom agents work the same way — a `react-dev` with `write_files` + `execute` automatically gets the right fragments without any role-name matching. +#### Built-in environments + +| Environment | Auto-detected by | Policy allows | +|---|---|---| +| `node` | `package.json` | `npm`, `npx`, `node` | +| `python` | `pyproject.toml`, `requirements.txt`, `setup.py` | `pytest`, `python`, `uv`, `poetry` | +| `go` | `go.mod` | `go build/test/run/vet/mod` | +| `rust` | `Cargo.toml` | `cargo`, `rustfmt`, `clippy` | +| `java` | `pom.xml`, `build.gradle` | `mvn`, `gradle`, `./gradlew` | +| `ruby` | `Gemfile` | `bundle`, `rake`, `rspec` | +| `docker` | `Dockerfile`, `docker-compose.yml` | `docker`, `docker compose` | +| `terraform` | `main.tf`, `terraform.tf` | `terraform init/plan/validate/fmt` | + +#### Custom environments + +Drop a YAML file into `.agentforge/environments/` to add a new environment or override a builtin: + +```yaml +# .agentforge/environments/bun.yaml +id: bun +description: "Bun runtime environment" +detect_files: + - bun.lockb +policy_rules: + sandbox: + enabled: true + allow: + - "Bash(bun *)" +instruction_fragments: + bun_patterns: + content: | + This project uses Bun. + Use `bun install`, `bun run`, and `bun test`. + requires_capabilities: + - read_files +``` + +Reference it in `teamcast.yaml` by id: + +```yaml +project: + environments: [node, bun] +``` + ### Instruction Layers Agent prompts are composed from three layers: @@ -534,7 +578,7 @@ Agent prompts are composed from three layers: |-------|--------|-------| | **instruction_blocks** | `teamcast.yaml` or preset | Project-specific behavior, workflow rules | | **instruction_fragments** | Built-in registry | Reusable role patterns (e.g. `feature-developer-workflow`) | -| **environment instructions** | Built-in environments | Toolchain best practices, injected by capability | +| **environment instructions** | Built-in + custom environments | Toolchain best practices, injected by capability | Presets provide sensible defaults for `instruction_blocks` and `instruction_fragments`. For deeper customization, edit `teamcast.yaml` and run `teamcast generate`. diff --git a/package-lock.json b/package-lock.json index d1ed7ca..cc06bd7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "teamcast", - "version": "1.0.3", + "version": "1.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "teamcast", - "version": "1.0.3", + "version": "1.1.0", "license": "MIT", "dependencies": { "ajv": "^8.17.1", diff --git a/package.json b/package.json index 566cd5f..b9fa4f4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "teamcast", - "version": "1.0.3", + "version": "1.1.0", "description": "YAML-driven CLI to design, validate, and generate multi-target agent teams for Claude Code and Codex", "type": "module", "bin": {