diff --git a/CHANGELOG.md b/CHANGELOG.md index f91e5a9..29a3446 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ # Changelog +## 0.10.1 + +- **Grok Build opt-in.** Stock configs keep `team_harness_agents` as + codex/claude/gemini. Commented overlays document how to enable the + `grok` worker family when the Grok Build CLI is installed and authenticated + (`XAI_API_KEY` or `grok login`). Requires **team-harness ≥ 0.6.1**. +- Skill and website configuration docs mention the same opt-in path. +- Dependency lower bound: `team-harness>=0.6.1`. + ## 0.10.0 The session layout, IDs, and traces redesign (session-layout-and-ids.md; diff --git a/pyproject.toml b/pyproject.toml index f1f0573..7579c9d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "loopy-loop" -version = "0.10.0" +version = "0.10.1" description = "Run long-running AI agent workflows inside your repository." readme = "README.md" requires-python = ">=3.12" @@ -44,7 +44,7 @@ dependencies = [ "pydantic>=2.11", "pyyaml>=6.0.2", "rich>=14.0", - "team-harness>=0.5.4", + "team-harness>=0.6.1", "uvicorn[standard]>=0.32.0", ] diff --git a/skills/loopy-loop/SKILL.md b/skills/loopy-loop/SKILL.md index 4bbf2a5..5b97990 100644 --- a/skills/loopy-loop/SKILL.md +++ b/skills/loopy-loop/SKILL.md @@ -101,6 +101,12 @@ team_harness_api_key_env: OPENROUTER_API_KEY team_harness_system_prompt_extension: "" ``` +Optional Grok Build worker family (team-harness ≥ 0.6.1): when `grok` is +installed and authenticated (`XAI_API_KEY` or `grok login`), append `grok` to +`team_harness_agents` and add model/effort cells (e.g. `grok-4.5` / `high`). +Do not list families the worker host cannot run — the capability roster treats +every listed agent with a model cell as available. + The four canonical strength tiers are: - `frontier`: hardest architecture, ambiguous debugging, adversarial review, diff --git a/src/loopy_loop/cli.py b/src/loopy_loop/cli.py index b23d297..656dd56 100644 --- a/src/loopy_loop/cli.py +++ b/src/loopy_loop/cli.py @@ -122,6 +122,10 @@ claude: "claude-opus-4-8" gemini: "gemini-3.5-flash" team_harness_agent_reasoning_efforts: {{}} +# Optional: enable Grok Build when `grok` is installed/authenticated +# (XAI_API_KEY or `grok login`). Requires team-harness>=0.6.1. +# team_harness_agents: [codex, claude, gemini, grok] +# team_harness_agent_models: {{..., grok: "grok-4.5"}} # Optional coordinator retry controls. Omit to use team-harness defaults. # team_harness_max_retries: 8 # team_harness_retry_base_delay_s: 2.0 diff --git a/src/loopy_loop/templates/inner_outer_eval/loopy_loop_config.yaml b/src/loopy_loop/templates/inner_outer_eval/loopy_loop_config.yaml index 50e7cf9..8030dfe 100644 --- a/src/loopy_loop/templates/inner_outer_eval/loopy_loop_config.yaml +++ b/src/loopy_loop/templates/inner_outer_eval/loopy_loop_config.yaml @@ -21,6 +21,13 @@ team_harness_agent_models: gemini: "gemini-3.5-flash" team_harness_agent_reasoning_efforts: codex: "high" +# Optional: enable Grok Build as a worker family when `grok` is installed and +# authenticated (XAI_API_KEY or `grok login`). Requires team-harness>=0.6.1. +# Only list families the worker host can run — the capability roster treats +# every listed agent with a model cell as available. +# team_harness_agents: [codex, claude, gemini, grok] +# team_harness_agent_models: {..., grok: "grok-4.5"} +# team_harness_agent_reasoning_efforts: {..., grok: "high"} # Optional semantic strength tiers. Configure concrete ids here; stock role # prompts select by tier and enabled family without naming vendors or models. # With default_tier set, REMOVE the two explicit mappings above. Every enabled @@ -30,14 +37,17 @@ team_harness_agent_reasoning_efforts: # codex: {model: "", effort: ""} # claude: {model: "", effort: ""} # gemini: {model: "", effort: ""} +# grok: {model: "grok-4.5", effort: "high"} # strong: # codex: {model: "", effort: ""} # claude: {model: "", effort: ""} # gemini: {model: "", effort: ""} +# grok: {model: "grok-4.5", effort: "high"} # standard: # codex: {model: "", effort: ""} # claude: {model: "", effort: ""} # gemini: {model: "", effort: ""} +# grok: {model: "grok-4.5", effort: "medium"} # economy: # codex: {model: "", effort: ""} # claude: {model: "", effort: ""} diff --git a/src/loopy_loop/templates/pm_planner_dispatcher/loopy_loop_config.yaml b/src/loopy_loop/templates/pm_planner_dispatcher/loopy_loop_config.yaml index cbaa420..9952d63 100644 --- a/src/loopy_loop/templates/pm_planner_dispatcher/loopy_loop_config.yaml +++ b/src/loopy_loop/templates/pm_planner_dispatcher/loopy_loop_config.yaml @@ -12,6 +12,11 @@ team_harness_agent_models: codex: "gpt-5.5" team_harness_agent_reasoning_efforts: codex: "high" +# Optional: enable Grok Build when `grok` is installed/authenticated +# (XAI_API_KEY or `grok login`). Requires team-harness>=0.6.1. Only list +# families the worker host can run. +# team_harness_agents: [codex, claude, gemini, grok] +# team_harness_agent_models: {..., grok: "grok-4.5"} # Optional semantic strength tiers. Configure concrete ids here; stock role # prompts select by tier and enabled family without naming vendors or models. # This extension also reaches child sessions. With default_tier set, REMOVE the @@ -22,18 +27,22 @@ team_harness_agent_reasoning_efforts: # codex: {model: "", effort: ""} # claude: {model: "", effort: ""} # gemini: {model: "", effort: ""} +# grok: {model: "grok-4.5", effort: "high"} # strong: # codex: {model: "", effort: ""} # claude: {model: "", effort: ""} # gemini: {model: "", effort: ""} +# grok: {model: "grok-4.5", effort: "high"} # standard: # codex: {model: "", effort: ""} # claude: {model: "", effort: ""} # gemini: {model: "", effort: ""} +# grok: {model: "grok-4.5", effort: "medium"} # economy: # codex: {model: "", effort: ""} # claude: {model: "", effort: ""} # gemini: {model: "", effort: ""} +# grok: {model: "grok-4.5", effort: "low"} # default_tier: "standard" # Optional coordinator retry controls. Omit to use team-harness defaults. # team_harness_max_retries: 8 diff --git a/uv.lock b/uv.lock index 236f204..b6e25d1 100644 --- a/uv.lock +++ b/uv.lock @@ -272,7 +272,7 @@ wheels = [ [[package]] name = "loopy-loop" -version = "0.8.0" +version = "0.10.1" source = { editable = "." } dependencies = [ { name = "click" }, @@ -309,7 +309,7 @@ requires-dist = [ { name = "pyyaml", specifier = ">=6.0.2" }, { name = "rich", specifier = ">=14.0" }, { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.4" }, - { name = "team-harness", specifier = ">=0.5.4" }, + { name = "team-harness", specifier = ">=0.6.1" }, { name = "uvicorn", extras = ["standard"], specifier = ">=0.32.0" }, ] @@ -654,7 +654,7 @@ wheels = [ [[package]] name = "team-harness" -version = "0.5.4" +version = "0.6.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, @@ -665,9 +665,9 @@ dependencies = [ { name = "pyyaml" }, { name = "rich" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e4/2e/24c4e1e77803095b05f37ab0ff00b6c87e7d0ff09dfca4aea0df4e12b9c0/team_harness-0.5.4.tar.gz", hash = "sha256:ac8ea3005e2146e5b775053e6362a787f5c782ef32ddd01009c36de51413a495", size = 2117096 } +sdist = { url = "https://files.pythonhosted.org/packages/44/00/1626e914414e07ad38f9ff51c1e8093422db6eb57187030b3751d43f5ee0/team_harness-0.6.1.tar.gz", hash = "sha256:71d194397cb6c871919c54259203c083037105547992002865818bffdd806fef", size = 2129019 } wheels = [ - { url = "https://files.pythonhosted.org/packages/1f/c8/568dc848862a2f7635dbe98759139ec0cd8cc80c4737e85f785a4fc5806b/team_harness-0.5.4-py3-none-any.whl", hash = "sha256:c5e89a6f17dc350b0c41190a15797705ccb57607172fcd60a3ca844d344bd017", size = 138189 }, + { url = "https://files.pythonhosted.org/packages/9d/68/4fd445aaa3b90523996bc9c6ec8547b6752b0159d8d99cfd32b50ccd0136/team_harness-0.6.1-py3-none-any.whl", hash = "sha256:f9d326fb411e11883262f7e5ae99df9d0f8cebfbccd4ae553d2290fcdfdf07d2", size = 143542 }, ] [[package]] diff --git a/website/src/app/docs/configuration/page.mdx b/website/src/app/docs/configuration/page.mdx index 0341550..9d2d217 100644 --- a/website/src/app/docs/configuration/page.mdx +++ b/website/src/app/docs/configuration/page.mdx @@ -63,7 +63,7 @@ Everything about *how* work is executed — which provider, coordinator model, a | --- | --- | --- | --- | | `team_harness_provider` | string | `"openai_compat"` | The team-harness provider name workers use. `codex` uses local Codex authentication; the shipped templates set this to `"codex"`. | | `team_harness_model` | string | `"gpt-5.5"` | The model name passed to team-harness for its **coordinator** model. | -| `team_harness_agents` | list of strings | `["codex"]` | Agent names team-harness should make available as worker subprocesses, such as `codex`, `claude`, and `gemini`. | +| `team_harness_agents` | list of strings | `["codex"]` | Agent names team-harness should make available as worker subprocesses, such as `codex`, `claude`, and `gemini`. Optional `grok` (Grok Build CLI; team-harness ≥ 0.6.1) when the binary is installed and authenticated (`XAI_API_KEY` or `grok login`). Only list families the worker host can run. | | `team_harness_agent_models` | map | `{}` | Per-agent default worker model overrides, keyed by agent name. | | `team_harness_agent_reasoning_efforts` | map | `{}` | Per-agent reasoning-effort overrides, keyed by agent name. Only agents whose templates support a reasoning-effort flag use this value. | | `model_tiers` | map | `{}` | Coordinator-side tier name → agent → `{model, effort}` bundles rendered into the harness prompt for per-spawn worker choice. Tier selection is guidance and audit evidence, not enforcement. |