chore: sync frontend changes for runtime 0.0.33

This commit is contained in:
777genius 2026-05-14 23:53:07 +03:00
parent 9c0b8beb7c
commit 60f7b6a5fd
57 changed files with 484 additions and 173 deletions

View file

@ -10,6 +10,7 @@ on:
- 'mcp-server/**' - 'mcp-server/**'
- 'packages/**' - 'packages/**'
- 'resources/runtime/**' - 'resources/runtime/**'
- '.runtime-download/**'
- 'runtime.lock.json' - 'runtime.lock.json'
- 'test/**' - 'test/**'
- '.github/workflows/**' - '.github/workflows/**'
@ -29,6 +30,7 @@ on:
- 'mcp-server/**' - 'mcp-server/**'
- 'packages/**' - 'packages/**'
- 'resources/runtime/**' - 'resources/runtime/**'
- '.runtime-download/**'
- 'runtime.lock.json' - 'runtime.lock.json'
- 'test/**' - 'test/**'
- '.github/workflows/**' - '.github/workflows/**'
@ -49,6 +51,9 @@ jobs:
- name: Checkout - name: Checkout
uses: actions/checkout@v6 uses: actions/checkout@v6
- name: Guard runtime artifacts
run: node ./scripts/ci/forbid-runtime-artifacts.cjs
- name: Setup pnpm - name: Setup pnpm
uses: pnpm/action-setup@v6 uses: pnpm/action-setup@v6
with: with:

6
.gitignore vendored
View file

@ -9,6 +9,12 @@ out/
release/ release/
coverage/ coverage/
# Runtime release artifacts are downloaded during dev/release builds.
# Keep only the placeholder directory in git.
.runtime-download/
resources/runtime/*
!resources/runtime/.gitkeep
# IDE # IDE
.vscode/ .vscode/
.idea/ .idea/

View file

@ -1 +0,0 @@
4968c54bb28f62ce55220de3437fa6d610729736

View file

@ -1 +0,0 @@
0.0.32

View file

@ -16,7 +16,7 @@ Key capabilities:
- **MCP integration** — built-in mcp-server for external tools and agent plugins - **MCP integration** — built-in mcp-server for external tools and agent plugins
- **Post-compact context recovery** — restores team-management instructions after context compaction - **Post-compact context recovery** — restores team-management instructions after context compaction
- **Notification system** — alerts on task completion, agent attention needed, errors - **Notification system** — alerts on task completion, agent attention needed, errors
- **Zero-setup onboarding** — built-in Claude Code installation and authentication - **Zero-setup onboarding** — built-in runtime detection and provider authentication for Claude, Codex, and OpenCode
100% free, open source, and local-first. The app uses available Claude/Codex/OpenCode provider access instead of forcing a single app-level API-key setup. 100% free, open source, and local-first. The app uses available Claude/Codex/OpenCode provider access instead of forcing a single app-level API-key setup.

View file

@ -196,9 +196,9 @@ Before changing launch or runtime logic:
Recommended verification: Recommended verification:
```bash ```bash
pnpm vitest run test/main/services/team/TeamProvisioningService.test.ts pnpm test -- test/main/services/team/TeamProvisioningService.test.ts
pnpm vitest run test/main/services/team/TeamAgentLaunchMatrix.safe-e2e.test.ts pnpm test -- test/main/services/team/TeamAgentLaunchMatrix.safe-e2e.test.ts
pnpm typecheck --pretty false pnpm typecheck
git diff --check git diff --check
``` ```

View file

@ -39,8 +39,7 @@ const rootGuide: DefaultTheme.SidebarItem[] = [
text: "Start", text: "Start",
items: [ items: [
{ text: "Quickstart", link: "/guide/quickstart" }, { text: "Quickstart", link: "/guide/quickstart" },
{ text: "Installation", link: "/guide/installation" }, { text: "Installation", link: "/guide/installation" }
{ text: "Create a team", link: "/guide/create-team" }
] ]
}, },
{ {
@ -49,9 +48,15 @@ const rootGuide: DefaultTheme.SidebarItem[] = [
{ text: "Runtime setup", link: "/guide/runtime-setup" }, { text: "Runtime setup", link: "/guide/runtime-setup" },
{ text: "Agent workflow", link: "/guide/agent-workflow" }, { text: "Agent workflow", link: "/guide/agent-workflow" },
{ text: "MCP integration", link: "/guide/mcp-integration" }, { text: "MCP integration", link: "/guide/mcp-integration" },
{ text: "Code review", link: "/guide/code-review" }
]
},
{
text: "Team Management",
items: [
{ text: "Create a team", link: "/guide/create-team" },
{ text: "Team brief examples", link: "/guide/team-brief-examples" }, { text: "Team brief examples", link: "/guide/team-brief-examples" },
{ text: "Git and worktree strategy", link: "/guide/git-worktree-strategy" }, { text: "Git and worktree strategy", link: "/guide/git-worktree-strategy" },
{ text: "Code review", link: "/guide/code-review" },
{ text: "Troubleshooting", link: "/guide/troubleshooting" } { text: "Troubleshooting", link: "/guide/troubleshooting" }
] ]
}, },
@ -77,8 +82,7 @@ const ruGuide: DefaultTheme.SidebarItem[] = [
text: "Старт", text: "Старт",
items: [ items: [
{ text: "Быстрый старт", link: "/ru/guide/quickstart" }, { text: "Быстрый старт", link: "/ru/guide/quickstart" },
{ text: "Установка", link: "/ru/guide/installation" }, { text: "Установка", link: "/ru/guide/installation" }
{ text: "Создание команды", link: "/ru/guide/create-team" }
] ]
}, },
{ {
@ -87,9 +91,15 @@ const ruGuide: DefaultTheme.SidebarItem[] = [
{ text: "Настройка рантайма", link: "/ru/guide/runtime-setup" }, { text: "Настройка рантайма", link: "/ru/guide/runtime-setup" },
{ text: "Работа агентов", link: "/ru/guide/agent-workflow" }, { text: "Работа агентов", link: "/ru/guide/agent-workflow" },
{ text: "MCP integration", link: "/ru/guide/mcp-integration" }, { text: "MCP integration", link: "/ru/guide/mcp-integration" },
{ text: "Код-ревью", link: "/ru/guide/code-review" }
]
},
{
text: "Управление командами",
items: [
{ text: "Создание команды", link: "/ru/guide/create-team" },
{ text: "Team brief examples", link: "/ru/guide/team-brief-examples" }, { text: "Team brief examples", link: "/ru/guide/team-brief-examples" },
{ text: "Git and worktree strategy", link: "/ru/guide/git-worktree-strategy" }, { text: "Git and worktree strategy", link: "/ru/guide/git-worktree-strategy" },
{ text: "Код-ревью", link: "/ru/guide/code-review" },
{ text: "Диагностика", link: "/ru/guide/troubleshooting" } { text: "Диагностика", link: "/ru/guide/troubleshooting" }
] ]
}, },

View file

@ -1,5 +1,5 @@
--- ---
title: Developers - Agent Teams Docs title: Developers Agent Teams Docs
description: Contributor and developer entry point for Agent Teams architecture, guardrails, debugging, and MCP extension paths. description: Contributor and developer entry point for Agent Teams architecture, guardrails, debugging, and MCP extension paths.
--- ---

View file

@ -18,23 +18,41 @@ Both modes share the same kanban, task logs, and code review surfaces.
## Task lifecycle ## Task lifecycle
Agent Teams tracks each task along two independent dimensions: work status and review state.
| Dimension | States | Description |
| --- | --- | --- |
| Work status | `pending`, `in_progress`, `completed` | Tracks whether the task is waiting, actively being worked on, or finished by the owner |
| Review state | `none`, `review`, `needsFix`, `approved` | Tracks where the task is in the post-completion review flow |
The kanban board shows the combined view, but the two dimensions move independently.
### Work status flow
| Stage | What happens | Owner | | Stage | What happens | Owner |
| --- | --- | --- | | --- | --- | --- |
| Provisioning | The app starts the runtime, confirms the process is alive, and waits for bootstrap confirmation | App | | Pending | Task is created and ready but no one has started work yet | Lead or user |
| Planning | The lead creates tasks, optionally assigns teammates, and sets dependencies | Lead or user | | In progress | Agents work and update task state via board MCP tools | Teammates |
| In progress | Agents work in parallel and update task state via board MCP tools | Teammates | | Completed | The owner posts a result comment and marks the task done | Teammate |
| Review | Changes are reviewed by agents or by you before final acceptance | Team lead or user |
| Done | Accepted work stays linked to its task history and can still be inspected later | User | ### Review state flow
| Stage | What happens | Owner |
| --- | --- | --- |
| None | Task is not yet in review (may be pending, in progress, or newly completed) | — |
| Review | Review has been requested; a reviewer inspects the diff and result | Reviewer |
| Needs fix | Changes were requested during review; the owner must update | Teammate (owner) |
| Approved | Review passed; the task is finalized | Reviewer |
### Planning → In progress ### Planning → In progress
When a teammate starts a task, the board status becomes `in_progress`. The agent creates a task comment with its plan and continues working. All native tool actions (read, bash, edit, write) are streamed into a task log. When a teammate starts a task, the work status becomes `in_progress`. The agent creates a task comment with its plan and continues working. All native tool actions (read, bash, edit, write) are streamed into a task log.
### In progress → Review ### Completed → Review
When the teammate finishes work, it posts a result comment and marks the task `completed`. The lead can then decide whether to accept it immediately or move it into review. When the teammate finishes work, it posts a result comment and marks the work status `completed`. The lead or reviewer can then request a review to start the review flow.
### Review → Done ### Review → Approved
If the review surface shows acceptable changes, approve the review. The task is finalized and linked to its diff. If the review surface shows acceptable changes, approve the review. The task is finalized and linked to its diff.

View file

@ -54,7 +54,7 @@ A healthy review loop looks like this:
Example request-changes comment: Example request-changes comment:
```text ```text
Please keep the copy improvements, but revert the unrelated runtime wording in the provider table. Add a docs build result before resubmitting. Please keep the copy improvements, but revert the unrelated runtime wording in the provider table. Add the `pnpm --dir landing docs:build` result before resubmitting.
``` ```
## Review states ## Review states
@ -72,6 +72,15 @@ Teams can review each other's work before you make the final call. This catches
Agent review is most useful when the reviewer has a clear rubric. For example, tell a reviewer to check only docs clarity, only IPC safety, or only test coverage. Broad "review everything" requests tend to produce weaker feedback. Agent review is most useful when the reviewer has a clear rubric. For example, tell a reviewer to check only docs clarity, only IPC safety, or only test coverage. Broad "review everything" requests tend to produce weaker feedback.
### MCP-driven review state
Review state changes (request review, request changes, approve) are tool-driven. Leaving a "request changes" comment on a task does **not** move the kanban column to `needsFix` — a lead or agent must call the appropriate MCP tool:
- `review_request_changes` — moves the task to `needsFix` and notifies the owner
- `review_approve` — moves the task to `approved` and finalizes the review
Comments alone are insufficient for state transitions. For the full list of review MCP tools and their parameters, see [MCP Integration](/guide/mcp-integration).
## Review participants ## Review participants
The team lead is the default reviewer. You can configure additional reviewers in the Kanban settings if you want peers to review each other's work. The team lead is the default reviewer. You can configure additional reviewers in the Kanban settings if you want peers to review each other's work.
@ -82,7 +91,7 @@ Prioritize these areas when reviewing:
- **Provider auth and runtime detection** — did the agent change runtime setup in a way that would break other paths? - **Provider auth and runtime detection** — did the agent change runtime setup in a way that would break other paths?
- **IPC, preload, and filesystem boundaries** — keep Electron responsibilities separated - **IPC, preload, and filesystem boundaries** — keep Electron responsibilities separated
- **Git and worktree behavior** — verify branch naming, commits, and pushes - **Git and worktree behavior** - verify branch naming, commits, and pushes; see [Git and worktree strategy](/guide/git-worktree-strategy) for isolation patterns.
- **Parsing and task lifecycle logic** — changes to task references, chunking, or filtering can break message delivery - **Parsing and task lifecycle logic** — changes to task references, chunking, or filtering can break message delivery
- **Persistence and code review flows** — changes to task storage or review state must stay consistent across IPC layers - **Persistence and code review flows** — changes to task storage or review state must stay consistent across IPC layers

View file

@ -30,7 +30,7 @@ Each team member runs on a provider backend. In the team editor, pick a provider
Mixing providers in one team is supported — for example, a Claude lead with OpenCode builders. Mixing providers in one team is supported — for example, a Claude lead with OpenCode builders.
::: info ::: info
Gemini provider support is in development. See [Providers and runtimes](/reference/providers-runtimes) for current provider status. Gemini is available as a supported provider path. See [Providers and runtimes](/reference/providers-runtimes) for auth options and current provider status.
::: :::
## Write a good team brief ## Write a good team brief

View file

@ -1,5 +1,5 @@
--- ---
title: Git and Worktree Strategy - Agent Teams Docs title: Git and Worktree Strategy Agent Teams Docs
description: Decide when to use the main worktree, feature branches, or OpenCode worktree isolation for parallel agent work. description: Decide when to use the main worktree, feature branches, or OpenCode worktree isolation for parallel agent work.
--- ---
@ -98,3 +98,4 @@ This prompt works because it names the allowed area, sensitive boundaries, and c
- [Create a team](/guide/create-team) - [Create a team](/guide/create-team)
- [Code review](/guide/code-review) - [Code review](/guide/code-review)
- [Team brief examples](/guide/team-brief-examples) - [Team brief examples](/guide/team-brief-examples)
- [Runtime setup](/guide/runtime-setup)

View file

@ -9,7 +9,7 @@ Agent Teams is distributed as a desktop app for macOS, Windows, and Linux.
## Download builds ## Download builds
Use the <a href="https://github.com/777genius/agent-teams-ai/releases" target="_self">download page</a> or the latest [GitHub release](https://github.com/777genius/agent-teams-ai/releases) when you want the packaged app: Use the <a href="/download/" target="_self">download page</a> or the latest [GitHub release](https://github.com/777genius/agent-teams-ai/releases) when you want the packaged app:
- macOS Apple Silicon: `.dmg` - macOS Apple Silicon: `.dmg`
- macOS Intel: `.dmg` - macOS Intel: `.dmg`
@ -30,11 +30,11 @@ To use agent runtimes, you need access to at least one provider:
| ------------------ | ------------------------------------------------- | | ------------------ | ------------------------------------------------- |
| Claude (Anthropic) | Claude Code CLI login or API key | | Claude (Anthropic) | Claude Code CLI login or API key |
| Codex (OpenAI) | Codex CLI login or API key | | Codex (OpenAI) | Codex CLI login or API key |
| Gemini (Google) | _In development_ | | Gemini (Google) | Google ADC, Gemini CLI, or API key |
| OpenCode | API key for a supported backend (e.g. OpenRouter) | | OpenCode | API key for a supported backend (e.g. OpenRouter) |
::: info ::: info
Gemini provider support is in development. See [Providers and runtimes](/reference/providers-runtimes) for current status across all providers. Gemini is available as a supported provider path. See [Providers and runtimes](/reference/providers-runtimes) for auth options and current status across all providers.
::: :::
For source development, you also need: For source development, you also need:

View file

@ -1,5 +1,5 @@
--- ---
title: MCP Integration - Agent Teams Docs title: MCP Integration Agent Teams Docs
description: Configure MCP in Agent Teams for board operations, teammate coordination, external tool servers, and custom tool development. description: Configure MCP in Agent Teams for board operations, teammate coordination, external tool servers, and custom tool development.
--- ---
@ -200,7 +200,7 @@ After install, run diagnostics and create a small read-only task to prove the to
## Task example ## Task example
```text ```text
Audit the docs home page with the browser MCP. Check desktop and mobile widths, capture any layout issue as a task comment, and only edit landing/product-docs files. Run the docs build before completion. Audit the docs home page with the browser MCP. Check desktop and mobile widths, capture any layout issue as a task comment, and only edit landing/product-docs files. Run `pnpm --dir landing docs:build` before completion.
``` ```
This works because it names the tool, the surface, the write boundary, and the verification step. This works because it names the tool, the surface, the write boundary, and the verification step.

View file

@ -9,7 +9,7 @@ This guide gets you from a fresh install to a running team in a few minutes.
## 1. Install Agent Teams ## 1. Install Agent Teams
Download the latest release for your platform from the <a href="https://github.com/777genius/agent-teams-ai/releases" target="_self">download page</a> or [GitHub releases](https://github.com/777genius/agent-teams-ai/releases). Download the latest release for your platform from the <a href="/download/" target="_self">download page</a> or [GitHub releases](https://github.com/777genius/agent-teams-ai/releases).
::: tip ::: tip
The app is free and open source. The agent runtime you choose may still require provider access — see [Installation](/guide/installation) for details. The app is free and open source. The agent runtime you choose may still require provider access — see [Installation](/guide/installation) for details.
@ -46,7 +46,7 @@ The setup flow auto-detects installed runtimes on your machine. A common first s
| OpenCode | Multi-model teams and many provider backends | | OpenCode | Multi-model teams and many provider backends |
::: info ::: info
Gemini provider support is in development. See [Providers and runtimes](/reference/providers-runtimes) for current provider status. Gemini is available as a supported provider path. See [Providers and runtimes](/reference/providers-runtimes) for auth options and current provider status.
::: :::
See [Runtime setup](/guide/runtime-setup) for detailed configuration per provider. See [Runtime setup](/guide/runtime-setup) for detailed configuration per provider.
@ -88,7 +88,7 @@ Improve the onboarding flow. Split the work into tasks, keep changes small, and
Good first prompts include concrete scope, safety boundaries, and verification: Good first prompts include concrete scope, safety boundaries, and verification:
```text ```text
Improve the docs quickstart. Keep edits inside landing/product-docs. Add practical examples, preserve existing VitePress syntax, and run the docs build before marking tasks done. Improve the docs quickstart. Keep edits inside landing/product-docs. Add practical examples, preserve existing VitePress syntax, and run `pnpm --dir landing docs:build` before marking tasks done.
``` ```
Avoid vague prompts such as "make the app better" for the first run. The lead can break down large goals, but better input produces smaller tasks and cleaner review. Avoid vague prompts such as "make the app better" for the first run. The lead can break down large goals, but better input produces smaller tasks and cleaner review.

View file

@ -7,6 +7,17 @@ description: Configure Claude Code, Codex, or OpenCode runtimes. Covers auth, pr
Agent Teams is a coordination layer. The actual model work runs through supported local runtimes and providers. Agent Teams is a coordination layer. The actual model work runs through supported local runtimes and providers.
::: tip Quick start - choosing your first runtime
| If you ... | Start with |
| --- | --- |
| Already use Claude Code or have Anthropic access | **Claude** - familiar auth, minimal setup |
| Use Codex or OpenAI-based workflows | **Codex** - native integration |
| Want multi-model routing or broad provider coverage | **OpenCode** - most flexible, one config for many backends |
| Are not sure which runtime fits | **OpenCode** - covers the most provider options and lets you switch later |
Start with one runtime and one teammate. Confirm one launch works before expanding to multimodel.
:::
## Prerequisites ## Prerequisites
Before launching a team, make sure: Before launching a team, make sure:
@ -40,7 +51,7 @@ Run the command for the runtime you plan to use. If it prints nothing, install t
The app detects supported runtimes and guides setup from the UI when possible. The app detects supported runtimes and guides setup from the UI when possible.
Gemini appears in some internal provider lists but is currently hidden from the main team creation UI while its launch experience is still marked in development. Gemini is available as a supported provider path with Google ADC (`gcloud auth`), Gemini CLI OAuth, and API key authentication. Configure it from the runtime setup UI when the Gemini backend is detected.
## Provider access ## Provider access
@ -109,6 +120,16 @@ Example model strings:
If OpenCode launches but a teammate never becomes deliverable, inspect lane evidence before assuming the model ignored the prompt. See [Troubleshooting](/guide/troubleshooting#opencode-registered-but-bootstrap-unconfirmed). If OpenCode launches but a teammate never becomes deliverable, inspect lane evidence before assuming the model ignored the prompt. See [Troubleshooting](/guide/troubleshooting#opencode-registered-but-bootstrap-unconfirmed).
### Gemini
Gemini supports three authentication methods:
- **Google ADC** — run `gcloud auth application-default login` to authenticate via Google Application Default Credentials.
- **Gemini CLI** — run `gemini login` if the Gemini CLI is installed.
- **API key** — set `GEMINI_API_KEY` in your environment or configure it through the app's Manage Providers UI.
The app auto-detects which auth method is available and shows the Gemini provider in the runtime setup and team creation UI when the backend is reachable.
## Multimodel mode ## Multimodel mode
Multimodel mode can route work through many provider backends via OpenCode-compatible configuration. Use it when you need provider flexibility or want teammates to use different model lanes. Multimodel mode can route work through many provider backends via OpenCode-compatible configuration. Use it when you need provider flexibility or want teammates to use different model lanes.

View file

@ -1,5 +1,5 @@
--- ---
title: Team Brief Examples - Agent Teams Docs title: Team Brief Examples Agent Teams Docs
description: Practical team brief templates for small fixes, docs work, implementation tasks, reviews, and high-risk areas. description: Practical team brief templates for small fixes, docs work, implementation tasks, reviews, and high-risk areas.
--- ---
@ -27,7 +27,7 @@ Outcome: Improve the quickstart so a new user can launch one team successfully.
Scope: Keep edits inside landing/product-docs. Scope: Keep edits inside landing/product-docs.
Boundaries: Do not rewrite the whole docs structure. Boundaries: Do not rewrite the whole docs structure.
Coordination: Create one or two tasks, keep comments on the task. Coordination: Create one or two tasks, keep comments on the task.
Verification: Run the docs build. Verification: Run `pnpm --dir landing docs:build`.
Review: Summarize changed pages and any remaining gaps. Review: Summarize changed pages and any remaining gaps.
``` ```
@ -53,7 +53,7 @@ Outcome: Draft practical workflow guides from the docs audit.
Scope: Add concise VitePress pages under landing/product-docs/guide. Scope: Add concise VitePress pages under landing/product-docs/guide.
Boundaries: Avoid moving existing navigation hubs owned by other tasks. Boundaries: Avoid moving existing navigation hubs owned by other tasks.
Coordination: Check related docs tasks before editing nav. Coordination: Check related docs tasks before editing nav.
Verification: Run the VitePress docs build. Verification: Run `pnpm --dir landing docs:build`.
Review: Include links added to sidebar and any pages intentionally left as drafts. Review: Include links added to sidebar and any pages intentionally left as drafts.
``` ```
@ -83,6 +83,24 @@ Verification: Builder runs focused tests. Reviewer checks failure output and cha
Review: Lead approves only after reviewer comments are resolved. Review: Lead approves only after reviewer comments are resolved.
``` ```
## Agent blocks in briefs
Agent blocks are hidden agent-only text wrapped in markers such as `<info_for_agent>...</info_for_agent>`. The app strips them from normal display but keeps them available for agent coordination. Use them when the brief needs to say something to agents that would be noise for a human reader.
Example - a brief that tells the lead how to split work without exposing coordination instructions to the user:
```text
Outcome: Add a dark mode toggle to the application settings.
Scope: Settings UI, theme context, and CSS variables.
Boundaries: Do not change existing light theme values or provider auth screens.
<info_for_agent>
Split this into three tasks: (1) theme context and CSS vars, (2) toggle component and settings wiring, (3) dark mode preview in existing docs screenshots if practical.
</info_for_agent>
```
The block keeps the human-facing brief clean while giving the lead structured task-splitting guidance.
## What to avoid ## What to avoid
| Weak brief | Better replacement | | Weak brief | Better replacement |

View file

@ -51,6 +51,57 @@ jq '.activeRunId, .entries' ~/.claude/teams/<team>/.opencode-runtime/lanes/<lane
Always correlate UI diagnostics with persisted files (`launch-state.json`, `bootstrap-journal.jsonl`) and runtime-specific evidence. Always correlate UI diagnostics with persisted files (`launch-state.json`, `bootstrap-journal.jsonl`) and runtime-specific evidence.
::: :::
## General diagnostics
Start with persisted files on disk rather than the UI alone.
### Team root
```bash
~/.claude/teams/<team>/
```
Key files and what they tell you:
- `launch-state.json` — member launch/liveness state (`.teamLaunchState`, `.summary`, `.members`)
- `bootstrap-journal.jsonl` — ordered bootstrap events from CLI/runtime (`tail -80`)
- `bootstrap-state.json` — bootstrap phase summary
- `config.json` — provider, model, and project configuration
- `inboxes/*.json` and `sentMessages.json` — message delivery state
```bash
jq '.teamLaunchState, .summary, .members' ~/.claude/teams/<team>/launch-state.json
tail -80 ~/.claude/teams/<team>/bootstrap-journal.jsonl 2>/dev/null
```
### OpenCode runtime evidence
For OpenCode teammates, session proof is in the lane runtime store:
- `.opencode-runtime/lanes.json` — lane index with state
- `.opencode-runtime/lanes/<lane>/manifest.json``activeRunId` and evidence entries
- `.opencode-runtime/lanes/<lane>/opencode-sessions.json` — committed session records
Expected healthy state: lane state `active`, manifest has `activeRunId` with at least one evidence entry, member has `bootstrapConfirmed: true`.
```bash
jq '.lanes' ~/.claude/teams/<team>/.opencode-runtime/lanes.json 2>/dev/null
find ~/.claude/teams/<team>/.opencode-runtime -maxdepth 3 -type f | sort
```
### Launch failure artifacts
When a launch is marked as a failure, inspect `latest.json`:
```bash
~/.claude/teams/<team>/launch-failure-artifacts/latest.json
```
The manifest includes:
- `classification` — why the launch was considered a failure
- `bootstrapTransportBreadcrumb` — delivery path used
- Member spawn statuses and redacted logs/traces
## Agent replies are missing ## Agent replies are missing
Open task logs and teammate messages. Missing replies often come from: Open task logs and teammate messages. Missing replies often come from:

View file

@ -57,6 +57,18 @@ Agent Teams is a free desktop app for orchestrating AI agent teams. You are not
<DocsCardGrid /> <DocsCardGrid />
## Next steps after launch
After creating your first team, explore these guides to go further:
- **Runtime setup** - configure Claude, Codex, OpenCode, or multimodel providers: [Configure runtimes](/guide/runtime-setup)
- **Agent workflow** - understand how agents coordinate through the task board: [Understand workflow](/guide/agent-workflow)
- **Team brief examples** - learn prompt patterns from real-world briefs: [See examples](/guide/team-brief-examples)
- **Code review** - inspect diffs, accept or reject changes: [Review changes](/guide/code-review)
- **Troubleshooting** - diagnose stuck launches, missing teammates, and task failures: [Troubleshoot](/guide/troubleshooting)
- **Git worktree strategy** - use worktree isolation when multiple teammates edit the same repo in parallel: [Learn about worktrees](/guide/git-worktree-strategy)
- **Release notes** - see what's new in each version: [View releases](/reference/release-notes)
## Reference ## Reference
Use the reference pages when you need exact terminology, provider behavior, contributor architecture, or privacy boundaries. Use the reference pages when you need exact terminology, provider behavior, contributor architecture, or privacy boundaries.

View file

@ -1,5 +1,5 @@
--- ---
title: Concepts title: Concepts Agent Teams Docs
description: Core vocabulary for Agent Teams — teams, leads, teammates, tasks, kanban, inboxes, runtimes, and review. description: Core vocabulary for Agent Teams — teams, leads, teammates, tasks, kanban, inboxes, runtimes, and review.
--- ---
@ -45,7 +45,7 @@ Messages are durable local records. Delivery still depends on the selected runti
An agent block is hidden, agent-only instruction text wrapped with `<info_for_agent>...</info_for_agent>`. The UI strips these blocks from normal human-facing display, but agents and runtime delivery can use them for coordination details. An agent block is hidden, agent-only instruction text wrapped with `<info_for_agent>...</info_for_agent>`. The UI strips these blocks from normal human-facing display, but agents and runtime delivery can use them for coordination details.
The current canonical marker is `info_for_agent`. Older documents may use block formats wrapped with `<opencode_agent_info>` or `[AGENT_BLOCK]` markers — these are legacy patterns and should be migrated to `info_for_agent` when encountered. The current canonical marker is `info_for_agent`. Older documents may use fenced code blocks with an `info_for_agent` marker, or XML-style `<agent_block>` tags — these are legacy patterns and should be migrated to `info_for_agent` when encountered. (The original tag name was `agent-block`; the underscore form `<agent_block>` is used in VitePress source to avoid HTML parsing.)
## Context Phase ## Context Phase

View file

@ -56,7 +56,7 @@ Yes. Agents can message teammates, comment on tasks, coordinate across teams, an
Give the lead a concrete outcome, file or feature boundaries, risk limits, and verification expectations. For example: Give the lead a concrete outcome, file or feature boundaries, risk limits, and verification expectations. For example:
```text ```text
Improve the docs quickstart. Keep edits inside landing/product-docs, add practical examples, and run the docs build before marking work done. Improve the docs quickstart. Keep edits inside landing/product-docs, add practical examples, and run `pnpm --dir landing docs:build` before marking work done.
``` ```
## Can I review code before accepting it? ## Can I review code before accepting it?

View file

@ -38,7 +38,7 @@ The runtime provides:
| Codex | Codex / OpenAI-backed models | Codex-native workflows | Uses Codex runtime integration and Codex auth/account state where available. Some diagnostics are different from Claude transcripts. | | Codex | Codex / OpenAI-backed models | Codex-native workflows | Uses Codex runtime integration and Codex auth/account state where available. Some diagnostics are different from Claude transcripts. |
| OpenCode | OpenCode-managed model routing | Multi-provider teams and broad model coverage | OpenCode can route through many model providers. Agent Teams treats OpenCode lanes as runtime-specific evidence and avoids guessing when lane identity is ambiguous. | | OpenCode | OpenCode-managed model routing | Multi-provider teams and broad model coverage | OpenCode can route through many model providers. Agent Teams treats OpenCode lanes as runtime-specific evidence and avoids guessing when lane identity is ambiguous. |
Gemini provider ids exist in internal configuration paths, but Gemini is currently hidden from the main team creation UI while the launch flow remains in development. Gemini is available as a supported provider path with Google ADC (gcloud auth), Gemini CLI OAuth, and API key authentication. It appears alongside other providers in the team creation and runtime setup UI when the runtime reports it as available.
## Provider ids ## Provider ids
@ -48,7 +48,7 @@ The app currently recognizes these provider ids in team/runtime configuration:
| --- | --- | | --- | --- |
| `anthropic` | Anthropic / Claude Code path | | `anthropic` | Anthropic / Claude Code path |
| `codex` | Codex path | | `codex` | Codex path |
| `gemini` | Gemini provider path when exposed by the runtime | | `gemini` | Gemini provider path (Google ADC, Gemini CLI, or API key) |
| `opencode` | OpenCode path, including OpenCode-managed provider routing | | `opencode` | OpenCode path, including OpenCode-managed provider routing |
Do not read this table as a guarantee that every provider is authenticated, installed, or available for every model on every machine. The runtime status and capability checks are the source of truth for a given launch. Do not read this table as a guarantee that every provider is authenticated, installed, or available for every model on every machine. The runtime status and capability checks are the source of truth for a given launch.

View file

@ -5,7 +5,7 @@ description: Release notes and changelog for Agent Teams. Links to the canonical
# Release Notes # Release Notes
Current version: **v1.2.0** (2026-03-31) Current release: **v1.2.0** (2026-03-31). Active development continues on the `main` branch with unreleased changes for member work-sync, OpenCode delivery hardening, and CI stabilization.
## How releases work ## How releases work

View file

@ -1,5 +1,5 @@
--- ---
title: Разработчикам - Agent Teams Docs title: Разработчикам Agent Teams Docs
description: Входная страница для contributor docs, архитектуры, guardrails, debugging и MCP extension paths в Agent Teams. description: Входная страница для contributor docs, архитектуры, guardrails, debugging и MCP extension paths в Agent Teams.
--- ---
@ -17,6 +17,7 @@ description: Входная страница для contributor docs, архит
| Структура medium и large features | [Feature architecture standard](https://github.com/777genius/agent-teams-ai/blob/main/docs/FEATURE_ARCHITECTURE_STANDARD.md) | | Структура medium и large features | [Feature architecture standard](https://github.com/777genius/agent-teams-ai/blob/main/docs/FEATURE_ARCHITECTURE_STANDARD.md) |
| Debugging launch, bootstrap и teammate messaging | [Agent team debugging runbook](https://github.com/777genius/agent-teams-ai/blob/main/docs/team-management/debugging-agent-teams.md) | | Debugging launch, bootstrap и teammate messaging | [Agent team debugging runbook](https://github.com/777genius/agent-teams-ai/blob/main/docs/team-management/debugging-agent-teams.md) |
| Contribution process | [Contributing guide](https://github.com/777genius/agent-teams-ai/blob/main/.github/CONTRIBUTING.md) | | Contribution process | [Contributing guide](https://github.com/777genius/agent-teams-ai/blob/main/.github/CONTRIBUTING.md) |
| Приватность и модель данных | [Privacy and local data](/ru/reference/privacy-local-data) |
| Релизы / Changelog | [RELEASE.md](https://github.com/777genius/agent-teams-ai/blob/main/docs/RELEASE.md) — [CHANGELOG.md](https://github.com/777genius/agent-teams-ai/blob/main/docs/CHANGELOG.md) | | Релизы / Changelog | [RELEASE.md](https://github.com/777genius/agent-teams-ai/blob/main/docs/RELEASE.md) — [CHANGELOG.md](https://github.com/777genius/agent-teams-ai/blob/main/docs/CHANGELOG.md) |
## Локальный development path ## Локальный development path
@ -61,7 +62,7 @@ Agent Teams использует встроенный MCP server `agent-teams`
## Related docs ## Related docs
- [Contributor architecture](/ru/reference/contributor-architecture) - [Архитектура для контрибьюторов](/ru/reference/contributor-architecture)
- [Настройка рантайма](/ru/guide/runtime-setup) - [Настройка рантайма](/ru/guide/runtime-setup)
- [MCP integration](/ru/guide/mcp-integration) - [MCP интеграция](/ru/guide/mcp-integration)
- [Диагностика](/ru/guide/troubleshooting) - [Диагностика](/ru/guide/troubleshooting)

View file

@ -19,25 +19,43 @@ Agent Teams делает работу агентов видимой через t
## Жизненный цикл задачи ## Жизненный цикл задачи
Agent Teams отслеживает каждую задачу в двух независимых измерениях: work status и review state.
| Измерение | Состояния | Описание |
|-----------|-----------|----------|
| Work status | `pending`, `in_progress`, `completed` | Отслеживает, ожидает ли задача, активно выполняется или завершена исполнителем |
| Review state | `none`, `review`, `needsFix`, `approved` | Отслеживает положение задачи в процессе ревью после завершения |
На канбан-доске отображается комбинированное представление, но два измерения движутся независимо.
### Рабочий статус
| Этап | Что происходит | Ответственный | | Этап | Что происходит | Ответственный |
|------|---------------|---------------| |------|---------------|---------------|
| Provisioning | Приложение запускает runtime, проверяет, что процесс жив, и ждёт подтверждения bootstrap | Приложение | | Pending | Задача создана, но никто ещё не начал работу | Lead или пользователь |
| Planning | Lead создаёт задачи, назначает teammates и задаёт зависимости | Lead или пользователь | | In progress | Агенты работают и обновляют статус через board MCP tools | Teammates |
| In progress | Агенты работают параллельно и обновляют статус задач через board MCP tools | Teammates | | Completed | Исполнитель публикует result comment и помечает задачу завершённой | Teammate |
| Review | Изменения проверяют агенты или вы перед финальным принятием | Team lead или пользователь |
| Done | Принятая работа остаётся связанной с историей задачи и доступна для инспекции | Пользователь | ### Статус ревью
| Этап | Что происходит | Ответственный |
|------|---------------|---------------|
| None | Задача ещё не на ревью (может быть pending, in progress или только что completed) | — |
| Review | Запрошено ревью; reviewer проверяет diff и результат | Reviewer |
| Needs fix | В ходе ревью запрошены правки; исполнитель должен обновить задачу | Teammate (owner) |
| Approved | Ревью пройдено; задача финализирована | Reviewer |
### Planning → In progress ### Planning → In progress
Когда teammate берёт задачу, статус на доске меняется на `in_progress`. Агент создаёт task comment с планом работы и продолжает. Все нативные инструменты (read, bash, edit, write) попадают в task log. Когда teammate берёт задачу, work status меняется на `in_progress`. Агент создаёт task comment с планом работы и продолжает. Все нативные инструменты (read, bash, edit, write) попадают в task log.
### In progress → Review ### Completed → Review
Когда teammate завершает работу, он публикует result comment и помечает задачу `completed`. Lead затем решает — принять сразу или отправить на ревью. Когда teammate завершает работу, он публикует result comment и помечает work status как `completed`. Lead или reviewer могут запросить ревью для начала проверки.
### Review → Done ### Review → Approved
Если изменения в review surface выглядят приемлемо, approve the review. Задача финализируется и связывается со своим diff. Если изменения в review surface выглядят приемлемо, утвердите ревью. Задача финализируется и связывается со своим diff.
::: warning Ревью с правками ::: warning Ревью с правками
Если teammate попросили внести правки во время ревью, он должен добавить follow-up comment с исправлениями, после чего lead может approve. Если teammate попросили внести правки во время ревью, он должен добавить follow-up comment с исправлениями, после чего lead может approve.

View file

@ -55,7 +55,7 @@ lang: ru-RU
Пример request-changes comment: Пример request-changes comment:
```text ```text
Please keep the copy improvements, but revert the unrelated runtime wording in the provider table. Add a docs build result before resubmitting. Please keep the copy improvements, but revert the unrelated runtime wording in the provider table. Add the `pnpm --dir landing docs:build` result before resubmitting.
``` ```
## Состояния ревью ## Состояния ревью

View file

@ -31,7 +31,7 @@ lang: ru-RU
Микс провайдеров в одной команде поддерживается — например, Claude lead с OpenCode builder-ами. Микс провайдеров в одной команде поддерживается — например, Claude lead с OpenCode builder-ами.
::: info ::: info
Поддержка провайдера Gemini в разработке. Текущий статус провайдеров смотрите в разделе [Провайдеры и рантаймы](/ru/reference/providers-runtimes). Gemini — поддерживаемый провайдер. Варианты auth смотрите в разделе [Провайдеры и рантаймы](/ru/reference/providers-runtimes).
::: :::
## Хороший team brief ## Хороший team brief

View file

@ -1,13 +1,14 @@
--- ---
title: Git and Worktree Strategy - Agent Teams Docs title: Git и стратегия worktree Документация Agent Teams
description: Как выбирать main worktree, feature branches или OpenCode worktree isolation для parallel agent work. description: Как выбирать main worktree, feature branches или OpenCode worktree isolation для parallel agent work.
lang: ru-RU
--- ---
# Git and Worktree Strategy # Git и стратегия worktree
Git даёт Agent Teams самый сильный review path: narrow diffs, branch visibility, task-scoped changes и более безопасную parallel work. Git даёт Agent Teams самый сильный review path: narrow diffs, branch visibility, task-scoped changes и более безопасную parallel work.
## Choose a strategy ## Выбор стратегии
| Strategy | Когда использовать | Tradeoff | | Strategy | Когда использовать | Tradeoff |
| --- | --- | --- | | --- | --- | --- |
@ -17,7 +18,7 @@ Git даёт Agent Teams самый сильный review path: narrow diffs, br
Начинайте просто. Включайте worktree isolation, когда parallel edits вероятны, а не потому что каждому task нужен отдельный checkout. Начинайте просто. Включайте worktree isolation, когда parallel edits вероятны, а не потому что каждому task нужен отдельный checkout.
## When to enable worktree isolation ## Когда включать изоляцию worktree
Включайте для OpenCode teammates, когда: Включайте для OpenCode teammates, когда:
@ -37,7 +38,7 @@ Git даёт Agent Teams самый сильный review path: narrow diffs, br
Worktree isolation сейчас применяется к OpenCode members и требует Git-tracked project. Worktree isolation сейчас применяется к OpenCode members и требует Git-tracked project.
::: :::
## Branch hygiene ## Гигиена веток
Перед parallel work: Перед parallel work:
@ -62,7 +63,7 @@ agent/review/task-log-filtering
agent/ui/code-review-polish agent/ui/code-review-polish
``` ```
## Review flow ## Процесс ревью
Для isolated worktrees проверяйте diff teammate до merge или apply в main workspace. Для isolated worktrees проверяйте diff teammate до merge или apply в main workspace.
@ -74,7 +75,7 @@ agent/ui/code-review-polish
Не auto-merge worktree output только потому, что task complete. Completion значит, что agent считает работу ready for review. Не auto-merge worktree output только потому, что task complete. Completion значит, что agent считает работу ready for review.
## Conflict policy ## Политика разрешения конфликтов
| Situation | Action | | Situation | Action |
| --- | --- | | --- | --- |
@ -83,7 +84,7 @@ agent/ui/code-review-polish
| Main worktree имеет unrelated changes | Preserve them и review только task-owned changes | | Main worktree имеет unrelated changes | Preserve them и review только task-owned changes |
| Worktree branch diverges | Rebase или merge manually после review, не внутри vague agent task | | Worktree branch diverges | Rebase или merge manually после review, не внутри vague agent task |
## Task prompt example ## Пример промпта для задачи
```text ```text
Implement the settings validation fix in your assigned worktree. Keep edits inside src/features/settings and focused tests. Do not touch provider auth or task storage. Post the test command and result before completing the task. Implement the settings validation fix in your assigned worktree. Keep edits inside src/features/settings and focused tests. Do not touch provider auth or task storage. Post the test command and result before completing the task.
@ -91,8 +92,8 @@ Implement the settings validation fix in your assigned worktree. Keep edits insi
Этот prompt работает, потому что называет allowed area, sensitive boundaries и completion evidence. Этот prompt работает, потому что называет allowed area, sensitive boundaries и completion evidence.
## Related guides ## Связанные руководства
- [Создание команды](/ru/guide/create-team) - [Создание команды](/ru/guide/create-team)
- [Код-ревью](/ru/guide/code-review) - [Код-ревью](/ru/guide/code-review)
- [Team brief examples](/ru/guide/team-brief-examples) - [Примеры team brief](/ru/guide/team-brief-examples)

View file

@ -31,11 +31,11 @@ Agent Teams распространяется как desktop-приложение
| ------------------ | ---------------------------------------------------------- | | ------------------ | ---------------------------------------------------------- |
| Claude (Anthropic) | Claude Code CLI login или API key | | Claude (Anthropic) | Claude Code CLI login или API key |
| Codex (OpenAI) | Codex CLI login или API key | | Codex (OpenAI) | Codex CLI login или API key |
| Gemini (Google) | _В разработке_ | | Gemini (Google) | Google ADC, Gemini CLI или API key |
| OpenCode | API key для поддерживаемого бэкенда (например, OpenRouter) | | OpenCode | API key для поддерживаемого бэкенда (например, OpenRouter) |
::: info ::: info
Поддержка провайдера Gemini в разработке. Текущий статус всех провайдеров смотрите в разделе [Провайдеры и рантаймы](/ru/reference/providers-runtimes). Gemini — поддерживаемый провайдер. Варианты auth смотрите в разделе [Провайдеры и рантаймы](/ru/reference/providers-runtimes).
::: :::
Для запуска из исходников также нужны: Для запуска из исходников также нужны:

View file

@ -1,9 +1,10 @@
--- ---
title: MCP Integration - Agent Teams Docs title: MCP интеграция Документация Agent Teams
description: Как использовать MCP в Agent Teams для board operations, координации teammates и внешних tool servers. description: Как использовать MCP в Agent Teams для board operations, координации teammates и внешних tool servers.
lang: ru-RU
--- ---
# MCP Integration # MCP интеграция
Agent Teams использует MCP двумя практическими способами: Agent Teams использует MCP двумя практическими способами:
@ -81,7 +82,7 @@ Agent Teams распознаёт shared и project-oriented MCP scopes.
## Task example ## Task example
```text ```text
Audit the docs home page with the browser MCP. Check desktop and mobile widths, capture any layout issue as a task comment, and only edit landing/product-docs files. Run the docs build before completion. Audit the docs home page with the browser MCP. Check desktop and mobile widths, capture any layout issue as a task comment, and only edit landing/product-docs files. Run `pnpm --dir landing docs:build` before completion.
``` ```
Такой task работает, потому что называет tool, surface, write boundary и verification step. Такой task работает, потому что называет tool, surface, write boundary и verification step.
@ -96,6 +97,6 @@ Audit the docs home page with the browser MCP. Check desktop and mobile widths,
## Related guides ## Related guides
- [Runtime setup](/ru/guide/runtime-setup) - [Настройка рантайма](/ru/guide/runtime-setup)
- [Team brief examples](/ru/guide/team-brief-examples) - [Примеры team brief](/ru/guide/team-brief-examples)
- [Работа агентов](/ru/guide/agent-workflow) - [Работа агентов](/ru/guide/agent-workflow)

View file

@ -47,7 +47,7 @@ git status --short
| OpenCode | Для multi-model команд и большого числа provider backends | | OpenCode | Для multi-model команд и большого числа provider backends |
::: info ::: info
Поддержка провайдера Gemini в разработке. Текущий статус провайдеров смотрите в разделе [Провайдеры и рантаймы](/ru/reference/providers-runtimes). Gemini — поддерживаемый провайдер. Варианты auth смотрите в разделе [Провайдеры и рантаймы](/ru/reference/providers-runtimes).
::: :::
Подробная настройка каждого провайдера — в разделе [Настройка рантайма](/ru/guide/runtime-setup). Подробная настройка каждого провайдера — в разделе [Настройка рантайма](/ru/guide/runtime-setup).
@ -89,7 +89,7 @@ opencode --version
Хороший первый prompt содержит scope, safety boundaries и verification: Хороший первый prompt содержит scope, safety boundaries и verification:
```text ```text
Improve the docs quickstart. Keep edits inside landing/product-docs. Add practical examples, preserve existing VitePress syntax, and run the docs build before marking tasks done. Improve the docs quickstart. Keep edits inside landing/product-docs. Add practical examples, preserve existing VitePress syntax, and run `pnpm --dir landing docs:build` before marking tasks done.
``` ```
Избегайте размытых prompts вроде "make the app better" для первого запуска. Lead может дробить большие цели, но хороший input даёт более маленькие tasks и чище review. Избегайте размытых prompts вроде "make the app better" для первого запуска. Lead может дробить большие цели, но хороший input даёт более маленькие tasks и чище review.

View file

@ -1,8 +1,3 @@
---
title: Настройка рантайма
description: Настройте Claude Code, Codex или OpenCode рантаймы и аутентификацию провайдеров для команд агентов.
---
--- ---
title: Настройка рантайма Документация Agent Teams title: Настройка рантайма Документация Agent Teams
description: Конфигурация Claude Code, Codex или OpenCode. Авторизация, провайдеры, multimodel mode и предзапусковые проверки. description: Конфигурация Claude Code, Codex или OpenCode. Авторизация, провайдеры, multimodel mode и предзапусковые проверки.
@ -11,7 +6,7 @@ lang: ru-RU
# Настройка рантайма # Настройка рантайма
Agent Teams — coordination layer. Model work выполняется через локальные runtimes и providers. Agent Teams - координационный слой. Работа моделей выполняется через локальные рантаймы и провайдеры.
## Предварительные требования ## Предварительные требования
@ -46,7 +41,7 @@ command -v opencode
Приложение по возможности определяет доступные runtimes и ведёт настройку через UI. Приложение по возможности определяет доступные runtimes и ведёт настройку через UI.
Gemini встречается во внутренних provider lists, но сейчас скрыт из основного team creation UI, пока launch experience отмечен как in development. Gemini — поддерживаемый провайдер с Google ADC (`gcloud auth`), Gemini CLI OAuth и API key аутентификацией. Настройка доступна через UI управления провайдерами, когда Gemini backend обнаружен.
## Доступ к провайдеру ## Доступ к провайдеру
@ -115,6 +110,16 @@ Codex-native launches используют Codex account state и model catalog
Если OpenCode запускается, но teammate не становится deliverable, сначала смотрите lane evidence, а не предполагаете, что model проигнорировала prompt. См. [Диагностика](/ru/guide/troubleshooting#opencode-registered-но-bootstrap-не-подтверждён). Если OpenCode запускается, но teammate не становится deliverable, сначала смотрите lane evidence, а не предполагаете, что model проигнорировала prompt. См. [Диагностика](/ru/guide/troubleshooting#opencode-registered-но-bootstrap-не-подтверждён).
### Gemini
Gemini поддерживает три метода аутентификации:
- **Google ADC** — запустите `gcloud auth application-default login` для авторизации через Google Application Default Credentials.
- **Gemini CLI** — запустите `gemini login`, если Gemini CLI установлен.
- **API key** — установите `GEMINI_API_KEY` в переменные окружения или настройте через UI управления провайдерами.
Приложение автоматически определяет доступный метод auth и показывает провайдера Gemini в UI настройки рантайма и создания команд, когда backend доступен.
## Multimodel-режим ## Multimodel-режим
Multimodel-режим может направлять работу через разные provider backends в OpenCode-совместимой конфигурации. Используйте его, когда нужна гибкость провайдеров или разные model lanes для teammates. Multimodel-режим может направлять работу через разные provider backends в OpenCode-совместимой конфигурации. Используйте его, когда нужна гибкость провайдеров или разные model lanes для teammates.

View file

@ -1,9 +1,10 @@
--- ---
title: Team Brief Examples - Agent Teams Docs title: Примеры team brief Документация Agent Teams
description: Практические шаблоны team brief для small fixes, docs work, implementation tasks, review и risky areas. description: Практические шаблоны team brief для small fixes, docs work, implementation tasks, review и risky areas.
lang: ru-RU
--- ---
# Team Brief Examples # Примеры team brief
Хороший team brief даёт lead достаточно структуры, чтобы создать small tasks, но не требует заранее расписать каждую деталь реализации. Хороший team brief даёт lead достаточно структуры, чтобы создать small tasks, но не требует заранее расписать каждую деталь реализации.
@ -27,7 +28,7 @@ Outcome: Improve the quickstart so a new user can launch one team successfully.
Scope: Keep edits inside landing/product-docs. Scope: Keep edits inside landing/product-docs.
Boundaries: Do not rewrite the whole docs structure. Boundaries: Do not rewrite the whole docs structure.
Coordination: Create one or two tasks, keep comments on the task. Coordination: Create one or two tasks, keep comments on the task.
Verification: Run the docs build. Verification: Run `pnpm --dir landing docs:build`.
Review: Summarize changed pages and any remaining gaps. Review: Summarize changed pages and any remaining gaps.
``` ```
@ -53,7 +54,7 @@ Outcome: Draft practical workflow guides from the docs audit.
Scope: Add concise VitePress pages under landing/product-docs/guide. Scope: Add concise VitePress pages under landing/product-docs/guide.
Boundaries: Avoid moving existing navigation hubs owned by other tasks. Boundaries: Avoid moving existing navigation hubs owned by other tasks.
Coordination: Check related docs tasks before editing nav. Coordination: Check related docs tasks before editing nav.
Verification: Run the VitePress docs build. Verification: Run `pnpm --dir landing docs:build`.
Review: Include links added to sidebar and any pages intentionally left as drafts. Review: Include links added to sidebar and any pages intentionally left as drafts.
``` ```
@ -83,6 +84,24 @@ Verification: Builder runs focused tests. Reviewer checks failure output and cha
Review: Lead approves only after reviewer comments are resolved. Review: Lead approves only after reviewer comments are resolved.
``` ```
## Agent blocks в briefs
Agent blocks - это скрытый текст для агентов, обёрнутый в маркеры `<info_for_agent>...</info_for_agent>`. Приложение убирает их из обычного отображения, но оставляет для координации агентов. Используйте их, когда brief должен сказать агентам то, что будет шумом для человека.
Пример - brief, который указывает lead, как разделить работу, не показывая инструкции пользователю:
```text
Outcome: Add a dark mode toggle to the application settings.
Scope: Settings UI, theme context, and CSS variables.
Boundaries: Do not change existing light theme values or provider auth screens.
<info_for_agent>
Split this into three tasks: (1) theme context and CSS vars, (2) toggle component and settings wiring, (3) dark mode preview in existing docs screenshots if practical.
</info_for_agent>
```
Блок оставляет human-facing brief чистым, а lead получает структурированные указания по разделению задач.
## What to avoid ## What to avoid
| Weak brief | Better replacement | | Weak brief | Better replacement |
@ -108,5 +127,5 @@ Review: Lead approves only after reviewer comments are resolved.
## Related guides ## Related guides
- [Создание команды](/ru/guide/create-team) - [Создание команды](/ru/guide/create-team)
- [MCP integration](/ru/guide/mcp-integration) - [MCP интеграция](/ru/guide/mcp-integration)
- [Git and worktree strategy](/ru/guide/git-worktree-strategy) - [Git и стратегия worktree](/ru/guide/git-worktree-strategy)

View file

@ -1,8 +1,3 @@
---
title: Диагностика
description: Исправление ошибок запуска, пропавших ответов агентов, rate limits, проблем auth и lane bootstrap в Agent Teams.
---
--- ---
title: Диагностика Документация Agent Teams title: Диагностика Документация Agent Teams
description: Решение проблем с запуском команд, отсутствующими ответами агентов, rate limits, CLI auth и lane bootstrap stalls через локальные диагностики. description: Решение проблем с запуском команд, отсутствующими ответами агентов, rate limits, CLI auth и lane bootstrap stalls через локальные диагностики.
@ -57,6 +52,57 @@ jq '.activeRunId, .entries' ~/.claude/teams/<team>/.opencode-runtime/lanes/<lane
Всегда сопоставляйте UI-диагностику с сохранёнными файлами (`launch-state.json`, `bootstrap-journal.jsonl`) и runtime-специфичными доказательствами. Всегда сопоставляйте UI-диагностику с сохранёнными файлами (`launch-state.json`, `bootstrap-journal.jsonl`) и runtime-специфичными доказательствами.
::: :::
## Общая диагностика
Начинайте с сохранённых файлов на диске, а не только с UI.
### Корневая директория команды
```bash
~/.claude/teams/<team>/
```
Ключевые файлы и что они показывают:
- `launch-state.json` — состояние запуска/активности участников (`.teamLaunchState`, `.summary`, `.members`)
- `bootstrap-journal.jsonl` — упорядоченные события bootstrap от CLI/runtime (`tail -80`)
- `bootstrap-state.json` — сводка фазы bootstrap
- `config.json` — конфигурация провайдера, модели и проекта
- `inboxes/*.json` и `sentMessages.json` — состояние доставки сообщений
```bash
jq '.teamLaunchState, .summary, .members' ~/.claude/teams/<team>/launch-state.json
tail -80 ~/.claude/teams/<team>/bootstrap-journal.jsonl 2>/dev/null
```
### OpenCode runtime evidence
Для OpenCode участников доказательство сессии находится в lane runtime store:
- `.opencode-runtime/lanes.json` — индекс lane с состоянием
- `.opencode-runtime/lanes/<lane>/manifest.json``activeRunId` и записи evidence
- `.opencode-runtime/lanes/<lane>/opencode-sessions.json` — зафиксированные записи сессий
Ожидаемое здоровое состояние: состояние lane `active`, manifest содержит `activeRunId` хотя бы с одной записью evidence, участник имеет `bootstrapConfirmed: true`.
```bash
jq '.lanes' ~/.claude/teams/<team>/.opencode-runtime/lanes.json 2>/dev/null
find ~/.claude/teams/<team>/.opencode-runtime -maxdepth 3 -type f | sort
```
### Артефакты неудачного запуска
Когда запуск помечен как неудачный, проверьте `latest.json`:
```bash
~/.claude/teams/<team>/launch-failure-artifacts/latest.json
```
Манифест включает:
- `classification` — почему запуск считался неудачным
- `bootstrapTransportBreadcrumb` — использованный путь доставки
- Статусы старта участников и редактированные логи/трейсы
## Не видны ответы агента ## Не видны ответы агента
Откройте task logs и teammate messages. Пропавшие replies часто связаны с: Откройте task logs и teammate messages. Пропавшие replies часто связаны с:

View file

@ -1,6 +1,7 @@
--- ---
title: Документация Agent Teams Запускайте команды AI-агентов из локального desktop-приложения title: Документация Agent Teams Запускайте команды AI-агентов из локального desktop-приложения
description: Документация Agent Teams, бесплатного desktop-приложения для оркестрации AI-агентов. Создавайте команды, наблюдайте за канбан-доской, ревьюйте изменения и координируйте Claude, Codex, OpenCode и multimodel workflows. description: Документация Agent Teams, бесплатного desktop-приложения для оркестрации AI-агентов. Создавайте команды, наблюдайте за канбан-доской, ревьюйте изменения и координируйте Claude, Codex, OpenCode и multimodel workflows.
lang: ru-RU
layout: home layout: home
hero: hero:
name: Документация Agent Teams name: Документация Agent Teams
@ -57,6 +58,18 @@ Agent Teams - бесплатное desktop-приложение для орке
<DocsCardGrid /> <DocsCardGrid />
## Что дальше после запуска
После создания первой команды изучите эти руководства:
- **Настройка рантайма** - настройте Claude, Codex, OpenCode или multimodel-провайдеров: [Настроить рантаймы](/ru/guide/runtime-setup)
- **Workflow агентов** - как агенты координируются через task board: [Разобрать workflow](/ru/guide/agent-workflow)
- **Примеры team briefs** - паттерны промптов из реальных примеров: [Примеры](/ru/guide/team-brief-examples)
- **Код-ревью** - проверяйте diff, принимайте или отклоняйте изменения: [Ревью изменений](/ru/guide/code-review)
- **Диагностика** - исправляйте проблемы запуска и missing teammates: [Диагностика](/ru/guide/troubleshooting)
- **Стратегия git worktree** - используйте изоляцию worktree, когда несколько участников редактируют один репозиторий параллельно: [О работе с worktree](/ru/guide/git-worktree-strategy)
- **Релизы** - что нового в каждой версии: [Релизы](/ru/reference/release-notes)
## Справочник ## Справочник
Используйте справочник, когда нужны точные термины, поведение провайдеров, contributor architecture или границы приватности. Используйте справочник, когда нужны точные термины, поведение провайдеров, contributor architecture или границы приватности.

View file

@ -1,11 +1,6 @@
---
title: Концепции
description: Основной словарь Agent Teams — команды, lead-агенты, teammates, задачи, канбан, inboxes, рантаймы и review.
---
--- ---
title: Концепции Документация Agent Teams title: Концепции Документация Agent Teams
description: Основные термины Agent Teams: teams, leads, teammates, tasks, kanban, inboxes, agent blocks, context phases, runtimes, providers. description: "Основные термины Agent Teams: teams, leads, teammates, tasks, kanban, inboxes, agent blocks, context phases, runtimes, providers."
lang: ru-RU lang: ru-RU
--- ---
@ -51,7 +46,7 @@ Messages - долговечные локальные записи. Но дост
Agent Block - скрытый agent-only instruction text, обёрнутый в `<info_for_agent>...</info_for_agent>`. UI убирает такие блоки из обычного human-facing display, но agents и runtime delivery могут использовать их для coordination details. Agent Block - скрытый agent-only instruction text, обёрнутый в `<info_for_agent>...</info_for_agent>`. UI убирает такие блоки из обычного human-facing display, но agents и runtime delivery могут использовать их для coordination details.
Текущий canonical marker - `info_for_agent`. В старых документах могут встречаться block formats с маркерами `<opencode_agent_info>` или `[AGENT_BLOCK]` — это устаревшие паттерны, которые стоит заменить на `info_for_agent` при встрече. Текущий canonical marker `info_for_agent`. В старых документах могут встречаться fenced code blocks с маркером ````info_for_agent```` или XML-подобные теги `<agent_block>` — это устаревшие паттерны, которые стоит заменить на `info_for_agent` при встрече.
## Context Phase ## Context Phase

View file

@ -1,8 +1,3 @@
---
title: FAQ
description: Часто задаваемые вопросы об Agent Teams — цена, доступ к моделям, рантаймы, приватность, ревью и диагностика.
---
--- ---
title: FAQ Документация Agent Teams title: FAQ Документация Agent Teams
description: Часто задаваемые вопросы о цене, доступе к моделям, настройке рантаймов, приватности данных, worktree isolation и код-ревью. description: Часто задаваемые вопросы о цене, доступе к моделям, настройке рантаймов, приватности данных, worktree isolation и код-ревью.
@ -62,7 +57,7 @@ Prompt context, selected file contents, tool results, command output, task text,
Дайте lead конкретный outcome, file или feature boundaries, risk limits и verification expectations. Например: Дайте lead конкретный outcome, file или feature boundaries, risk limits и verification expectations. Например:
```text ```text
Improve the docs quickstart. Keep edits inside landing/product-docs, add practical examples, and run the docs build before marking work done. Improve the docs quickstart. Keep edits inside landing/product-docs, add practical examples, and run `pnpm --dir landing docs:build` before marking work done.
``` ```
## Можно ревьюить код перед принятием? ## Можно ревьюить код перед принятием?

View file

@ -1,8 +1,3 @@
---
title: Приватность и локальные данные
description: Что desktop-приложение Agent Teams хранит локально и какие данные могут покинуть машину через provider-backed models.
---
--- ---
title: Приватность и локальные данные Документация Agent Teams title: Приватность и локальные данные Документация Agent Teams
description: Что Agent Teams хранит локально, что может покинуть машину через provider-backed model calls, и практические рекомендации по приватности. description: Что Agent Teams хранит локально, что может покинуть машину через provider-backed model calls, и практические рекомендации по приватности.

View file

@ -1,8 +1,3 @@
---
title: Провайдеры и рантаймы
description: Поддерживаемые runtime paths, provider ids, model ids, multi-provider стратегия и capability checks в Agent Teams.
---
--- ---
title: Провайдеры и рантаймы Документация Agent Teams title: Провайдеры и рантаймы Документация Agent Teams
description: Поддерживаемые runtime paths (Claude Code, Codex, OpenCode), provider IDs, модели, multi-provider стратегии и capability checks. description: Поддерживаемые runtime paths (Claude Code, Codex, OpenCode), provider IDs, модели, multi-provider стратегии и capability checks.
@ -44,7 +39,7 @@ Runtime отвечает за:
| Codex | Codex / OpenAI-backed models | Для Codex-native workflows | Использует Codex runtime integration и Codex auth/account state, когда они доступны. Часть diagnostics отличается от Claude transcripts. | | Codex | Codex / OpenAI-backed models | Для Codex-native workflows | Использует Codex runtime integration и Codex auth/account state, когда они доступны. Часть diagnostics отличается от Claude transcripts. |
| OpenCode | OpenCode-managed model routing | Для multi-provider teams и широкой model coverage | OpenCode может маршрутизировать через множество model providers. Agent Teams считает OpenCode lanes runtime-specific evidence и не угадывает attribution при ambiguous lane identity. | | OpenCode | OpenCode-managed model routing | Для multi-provider teams и широкой model coverage | OpenCode может маршрутизировать через множество model providers. Agent Teams считает OpenCode lanes runtime-specific evidence и не угадывает attribution при ambiguous lane identity. |
Gemini provider ids существуют во внутренних configuration paths, но Gemini сейчас скрыт из основного team creation UI, пока launch flow остаётся in development. Gemini — поддерживаемый провайдер с Google ADC, Gemini CLI и API key аутентификацией. Он доступен в UI создания команд и настройки рантайма, когда runtime сообщает о его доступности.
## Provider ids ## Provider ids
@ -54,7 +49,7 @@ Gemini provider ids существуют во внутренних configuration
| --- | --- | | --- | --- |
| `anthropic` | Anthropic / Claude Code path | | `anthropic` | Anthropic / Claude Code path |
| `codex` | Codex path | | `codex` | Codex path |
| `gemini` | Gemini provider path, когда его отдаёт runtime | | `gemini` | Gemini provider path (Google ADC, Gemini CLI или API key) |
| `opencode` | OpenCode path, включая OpenCode-managed provider routing | | `opencode` | OpenCode path, включая OpenCode-managed provider routing |
Эта таблица не гарантирует, что каждый provider authenticated, installed или доступен для каждой модели на каждой машине. Runtime status и capability checks - source of truth для конкретного launch. Эта таблица не гарантирует, что каждый provider authenticated, installed или доступен для каждой модели на каждой машине. Runtime status и capability checks - source of truth для конкретного launch.

View file

@ -6,7 +6,7 @@ lang: ru-RU
# Релизы # Релизы
Текущая версия: **v1.2.0** (2026-03-31) Текущий релиз: **v1.2.0** (2026-03-31). Активная разработка продолжается в ветке `main` с незарелизенными изменениями для member work-sync, OpenCode delivery hardening и CI stabilization.
## Как публикуются релизы ## Как публикуются релизы

View file

@ -56,6 +56,7 @@
"check:ci": "pnpm check:workspace:ci && pnpm lint && pnpm lint:mcp", "check:ci": "pnpm check:workspace:ci && pnpm lint && pnpm lint:mcp",
"fix": "pnpm lint:fix && pnpm format", "fix": "pnpm lint:fix && pnpm format",
"quality": "pnpm check && pnpm format:check && npx knip", "quality": "pnpm check && pnpm format:check && npx knip",
"guard:runtime-artifacts": "node ./scripts/ci/forbid-runtime-artifacts.cjs",
"test:chunks": "tsx test/test-chunk-building.ts", "test:chunks": "tsx test/test-chunk-building.ts",
"test:semantic": "tsx test/test-semantic-steps.ts", "test:semantic": "tsx test/test-semantic-steps.ts",
"test:noise": "tsx test/test-noise-filtering.ts", "test:noise": "tsx test/test-noise-filtering.ts",

View file

@ -1 +0,0 @@
4968c54bb28f62ce55220de3437fa6d610729736

View file

@ -1 +0,0 @@
0.0.32

Binary file not shown.

View file

@ -1,27 +1,27 @@
{ {
"version": "0.0.32", "version": "0.0.33",
"sourceRef": "v0.0.32", "sourceRef": "v0.0.33",
"sourceRepository": "777genius/agent_teams_orchestrator", "sourceRepository": "777genius/agent_teams_orchestrator",
"releaseRepository": "777genius/agent-teams-ai", "releaseRepository": "777genius/agent-teams-ai",
"releaseTag": "v1.2.0", "releaseTag": "v1.2.0",
"assets": { "assets": {
"darwin-arm64": { "darwin-arm64": {
"file": "agent-teams-runtime-darwin-arm64-v0.0.32.tar.gz", "file": "agent-teams-runtime-darwin-arm64-v0.0.33.tar.gz",
"archiveKind": "tar.gz", "archiveKind": "tar.gz",
"binaryName": "claude-multimodel" "binaryName": "claude-multimodel"
}, },
"darwin-x64": { "darwin-x64": {
"file": "agent-teams-runtime-darwin-x64-v0.0.32.tar.gz", "file": "agent-teams-runtime-darwin-x64-v0.0.33.tar.gz",
"archiveKind": "tar.gz", "archiveKind": "tar.gz",
"binaryName": "claude-multimodel" "binaryName": "claude-multimodel"
}, },
"linux-x64": { "linux-x64": {
"file": "agent-teams-runtime-linux-x64-v0.0.32.tar.gz", "file": "agent-teams-runtime-linux-x64-v0.0.33.tar.gz",
"archiveKind": "tar.gz", "archiveKind": "tar.gz",
"binaryName": "claude-multimodel" "binaryName": "claude-multimodel"
}, },
"win32-x64": { "win32-x64": {
"file": "agent-teams-runtime-win32-x64-v0.0.32.zip", "file": "agent-teams-runtime-win32-x64-v0.0.33.zip",
"archiveKind": "zip", "archiveKind": "zip",
"binaryName": "claude-multimodel.exe" "binaryName": "claude-multimodel.exe"
} }

View file

@ -0,0 +1,26 @@
const { execFileSync } = require('node:child_process');
const allowedRuntimeFiles = new Set(['resources/runtime/.gitkeep']);
function trackedFiles() {
return execFileSync('git', ['ls-files', '-z'], { encoding: 'utf8' })
.split('\0')
.filter(Boolean);
}
const forbidden = trackedFiles().filter((file) => {
if (file.startsWith('.runtime-download/')) return true;
if (file.startsWith('resources/runtime/') && !allowedRuntimeFiles.has(file)) return true;
return false;
});
if (forbidden.length > 0) {
console.error('Runtime release artifacts must not be committed.');
console.error('These files are downloaded from GitHub Releases during dev/release builds:');
for (const file of forbidden) {
console.error(`- ${file}`);
}
process.exit(1);
}
console.log('Runtime artifact guard passed.');

View file

@ -7732,6 +7732,7 @@ export class TeamProvisioningService {
ledgerRecord?: OpenCodePromptDeliveryLedgerRecord | null; ledgerRecord?: OpenCodePromptDeliveryLedgerRecord | null;
readAllowed: boolean; readAllowed: boolean;
pendingReason: string; pendingReason: string;
controlUrl?: string | null;
}): string | null { }): string | null {
const record = input.ledgerRecord; const record = input.ledgerRecord;
if (!record) { if (!record) {
@ -7758,6 +7759,7 @@ export class TeamProvisioningService {
toolCallNames: record.observedToolCallNames, toolCallNames: record.observedToolCallNames,
acceptanceUnknown: record.acceptanceUnknown, acceptanceUnknown: record.acceptanceUnknown,
hardFailureKind: this.getOpenCodeDeliveryHardFailureKind(record), hardFailureKind: this.getOpenCodeDeliveryHardFailureKind(record),
controlUrl: input.controlUrl,
}).controlText; }).controlText;
} }
@ -9743,6 +9745,10 @@ export class TeamProvisioningService {
} }
if (!this.isOpenCodePromptDeliveryWatchdogEnabled()) { if (!this.isOpenCodePromptDeliveryWatchdogEnabled()) {
const controlUrl =
input.messageKind === 'member_work_sync_nudge'
? await this.resolveControlApiBaseUrl()
: null;
const result = await adapter.sendMessageToMember({ const result = await adapter.sendMessageToMember({
...(runtimeRunId ? { runId: runtimeRunId } : {}), ...(runtimeRunId ? { runId: runtimeRunId } : {}),
teamName, teamName,
@ -9757,6 +9763,7 @@ export class TeamProvisioningService {
messageKind: input.messageKind, messageKind: input.messageKind,
workSyncIntent: input.workSyncIntent, workSyncIntent: input.workSyncIntent,
workSyncReviewRequestEventIds: input.workSyncReviewRequestEventIds, workSyncReviewRequestEventIds: input.workSyncReviewRequestEventIds,
controlUrl: controlUrl ?? undefined,
taskRefs: input.taskRefs, taskRefs: input.taskRefs,
}); });
await this.rememberOpenCodeRuntimePidFromBridge({ await this.rememberOpenCodeRuntimePidFromBridge({
@ -10154,12 +10161,15 @@ export class TeamProvisioningService {
ledgerRecord, ledgerRecord,
}) })
: 'opencode_delivery_response_pending'; : 'opencode_delivery_response_pending';
const controlUrl =
input.messageKind === 'member_work_sync_nudge' ? await this.resolveControlApiBaseUrl() : null;
const deliveryText = this.buildOpenCodePromptDeliveryAttemptText({ const deliveryText = this.buildOpenCodePromptDeliveryAttemptText({
text: input.text, text: input.text,
controlText: this.buildOpenCodePromptDeliveryRepairControlText({ controlText: this.buildOpenCodePromptDeliveryRepairControlText({
ledgerRecord, ledgerRecord,
readAllowed: retryReadAllowed, readAllowed: retryReadAllowed,
pendingReason: retryPendingReason, pendingReason: retryPendingReason,
controlUrl,
}), }),
}); });
let result: OpenCodeTeamRuntimeMessageResult; let result: OpenCodeTeamRuntimeMessageResult;
@ -10179,6 +10189,7 @@ export class TeamProvisioningService {
messageKind: input.messageKind, messageKind: input.messageKind,
workSyncIntent: input.workSyncIntent, workSyncIntent: input.workSyncIntent,
workSyncReviewRequestEventIds: input.workSyncReviewRequestEventIds, workSyncReviewRequestEventIds: input.workSyncReviewRequestEventIds,
controlUrl: controlUrl ?? undefined,
taskRefs: input.taskRefs, taskRefs: input.taskRefs,
}); });
} catch (error) { } catch (error) {

View file

@ -41,6 +41,7 @@ export interface OpenCodePromptDeliveryRepairInput {
toolCallNames: string[]; toolCallNames: string[];
acceptanceUnknown: boolean; acceptanceUnknown: boolean;
hardFailureKind: OpenCodePromptDeliveryHardFailureKind; hardFailureKind: OpenCodePromptDeliveryHardFailureKind;
controlUrl?: string | null;
} }
const SIDE_EFFECT_TOOL_NAMES = new Set([ const SIDE_EFFECT_TOOL_NAMES = new Set([
@ -134,6 +135,15 @@ function taskIdList(taskRefs: TaskRef[]): string | null {
return ids.length > 0 ? ids.map((id) => `"${id}"`).join(', ') : null; return ids.length > 0 ? ids.map((id) => `"${id}"`).join(', ') : null;
} }
function workSyncToolArgs(input: OpenCodePromptDeliveryRepairInput): string {
const args = [`teamName="${input.teamName}"`, `memberName="${input.memberName}"`];
const controlUrl = input.controlUrl?.trim();
if (controlUrl) {
args.push(`controlUrl=${JSON.stringify(controlUrl)}`);
}
return args.join(', ');
}
function messageSendControlLines(input: OpenCodePromptDeliveryRepairInput): string[] { function messageSendControlLines(input: OpenCodePromptDeliveryRepairInput): string[] {
const replyRecipient = input.replyRecipient.trim() || 'user'; const replyRecipient = input.replyRecipient.trim() || 'user';
const taskRefsJson = input.taskRefs.length > 0 ? JSON.stringify(input.taskRefs) : null; const taskRefsJson = input.taskRefs.length > 0 ? JSON.stringify(input.taskRefs) : null;
@ -148,19 +158,20 @@ function messageSendControlLines(input: OpenCodePromptDeliveryRepairInput): stri
function workSyncControlLines(input: OpenCodePromptDeliveryRepairInput): string[] { function workSyncControlLines(input: OpenCodePromptDeliveryRepairInput): string[] {
const taskIds = taskIdList(input.taskRefs); const taskIds = taskIdList(input.taskRefs);
const args = workSyncToolArgs(input);
if (input.workSyncIntent === 'review_pickup') { if (input.workSyncIntent === 'review_pickup') {
return [ return [
'This is a targeted member-work-sync review pickup control message. A plain acknowledgement is not sufficient proof.', 'This is a targeted member-work-sync review pickup control message. A plain acknowledgement is not sufficient proof.',
'Open the current task, verify reviewState/status, then start or continue the review only if it is still assigned to you.', 'Open the current task, verify reviewState/status, then start or continue the review only if it is still assigned to you.',
'Do not mark the review complete from this retry text alone.', 'Do not mark the review complete from this retry text alone.',
`If you cannot pick up the review now, call agent-teams_member_work_sync_status or mcp__agent-teams__member_work_sync_status with teamName="${input.teamName}" and memberName="${input.memberName}", then report state "blocked" or "still_working" only for the real current state.`, `If you cannot pick up the review now, call agent-teams_member_work_sync_status or mcp__agent-teams__member_work_sync_status with ${args}, then report state "blocked" or "still_working" only for the real current state.`,
taskIds ? `Relevant taskIds: ${taskIds}.` : null, taskIds ? `Relevant taskIds: ${taskIds}.` : null,
'Do not invent or reuse a raw report token from this retry text.', 'Do not invent or reuse a raw report token from this retry text.',
].filter((line): line is string => line !== null); ].filter((line): line is string => line !== null);
} }
return [ return [
'This is a member-work-sync control message. A plain acknowledgement is not sufficient proof.', 'This is a member-work-sync control message. A plain acknowledgement is not sufficient proof.',
`Call agent-teams_member_work_sync_status or mcp__agent-teams__member_work_sync_status with teamName="${input.teamName}" and memberName="${input.memberName}".`, `Call agent-teams_member_work_sync_status or mcp__agent-teams__member_work_sync_status with ${args}.`,
'Then call agent-teams_member_work_sync_report or mcp__agent-teams__member_work_sync_report using the agendaFingerprint/reportToken returned by status.', 'Then call agent-teams_member_work_sync_report or mcp__agent-teams__member_work_sync_report using the agendaFingerprint/reportToken returned by status.',
taskIds ? `Include taskIds ${taskIds} when reporting if those tasks are still relevant.` : null, taskIds ? `Include taskIds ${taskIds} when reporting if those tasks are still relevant.` : null,
'Use state "still_working", "blocked", or "caught_up" according to the status result. Do not invent or reuse a raw report token from this retry text.', 'Use state "still_working", "blocked", or "caught_up" according to the status result. Do not invent or reuse a raw report token from this retry text.',

View file

@ -69,6 +69,7 @@ export interface OpenCodeTeamRuntimeMessageInput {
messageKind?: InboxMessageKind; messageKind?: InboxMessageKind;
workSyncIntent?: InboxMessage['workSyncIntent']; workSyncIntent?: InboxMessage['workSyncIntent'];
workSyncReviewRequestEventIds?: string[]; workSyncReviewRequestEventIds?: string[];
controlUrl?: string;
taskRefs?: TaskRef[]; taskRefs?: TaskRef[];
bootstrapCheckinRetry?: { bootstrapCheckinRetry?: {
runtimeSessionId: string; runtimeSessionId: string;
@ -930,6 +931,7 @@ function buildOpenCodeRuntimeMessageText(input: OpenCodeTeamRuntimeMessageInput)
: null; : null;
const isWorkSyncNudge = input.messageKind === 'member_work_sync_nudge'; const isWorkSyncNudge = input.messageKind === 'member_work_sync_nudge';
const isReviewPickupNudge = isWorkSyncNudge && input.workSyncIntent === 'review_pickup'; const isReviewPickupNudge = isWorkSyncNudge && input.workSyncIntent === 'review_pickup';
const workSyncToolArgs = buildOpenCodeWorkSyncToolArgs(input);
const taskIds = const taskIds =
input.taskRefs input.taskRefs
?.map((ref) => ref.taskId?.trim()) ?.map((ref) => ref.taskId?.trim())
@ -944,7 +946,7 @@ function buildOpenCodeRuntimeMessageText(input: OpenCodeTeamRuntimeMessageInput)
'Process the current review request now if it is still assigned to you. Open the task, verify reviewState/status, then use the review workflow tools to start or continue the review.', 'Process the current review request now if it is still assigned to you. Open the task, verify reviewState/status, then use the review workflow tools to start or continue the review.',
'Do not mark the review complete from this prompt alone.', 'Do not mark the review complete from this prompt alone.',
'A visible agent-teams_message_send reply is optional. Concrete review progress, review tool usage, or agent-teams_member_work_sync_report (or mcp__agent-teams__member_work_sync_report) is sufficient response proof.', 'A visible agent-teams_message_send reply is optional. Concrete review progress, review tool usage, or agent-teams_member_work_sync_report (or mcp__agent-teams__member_work_sync_report) is sufficient response proof.',
`If you cannot pick up the review now, call agent-teams_member_work_sync_status (or mcp__agent-teams__member_work_sync_status) with teamName="${input.teamName}" and memberName="${input.memberName}", then report state "blocked" or "still_working" only for the real current state.`, `If you cannot pick up the review now, call agent-teams_member_work_sync_status (or mcp__agent-teams__member_work_sync_status) with ${workSyncToolArgs}, then report state "blocked" or "still_working" only for the real current state.`,
taskIds.length ? `Relevant taskIds: ${taskIds.map((id) => `"${id}"`).join(', ')}.` : null, taskIds.length ? `Relevant taskIds: ${taskIds.map((id) => `"${id}"`).join(', ')}.` : null,
`Do not use provider names, runtime names, or team names as memberName; use exactly "${input.memberName}".`, `Do not use provider names, runtime names, or team names as memberName; use exactly "${input.memberName}".`,
'Do not reply only with acknowledgement.', 'Do not reply only with acknowledgement.',
@ -953,8 +955,8 @@ function buildOpenCodeRuntimeMessageText(input: OpenCodeTeamRuntimeMessageInput)
? [ ? [
'This delivered app message is a member-work-sync nudge.', 'This delivered app message is a member-work-sync nudge.',
'A visible agent-teams_message_send reply is optional. Concrete task progress or agent-teams_member_work_sync_report (or mcp__agent-teams__member_work_sync_report) is sufficient response proof.', 'A visible agent-teams_message_send reply is optional. Concrete task progress or agent-teams_member_work_sync_report (or mcp__agent-teams__member_work_sync_report) is sufficient response proof.',
`Call agent-teams_member_work_sync_status (or mcp__agent-teams__member_work_sync_status) with teamName="${input.teamName}" and memberName="${input.memberName}".`, `Call agent-teams_member_work_sync_status (or mcp__agent-teams__member_work_sync_status) with ${workSyncToolArgs}.`,
`Then call agent-teams_member_work_sync_report (or mcp__agent-teams__member_work_sync_report) with teamName="${input.teamName}", memberName="${input.memberName}", the returned agendaFingerprint/reportToken, and state "still_working" or "blocked".`, `Then call agent-teams_member_work_sync_report (or mcp__agent-teams__member_work_sync_report) with ${workSyncToolArgs}, the returned agendaFingerprint/reportToken, and state "still_working" or "blocked".`,
taskIds.length taskIds.length
? `When reporting, include taskIds: ${taskIds.map((id) => `"${id}"`).join(', ')}.` ? `When reporting, include taskIds: ${taskIds.map((id) => `"${id}"`).join(', ')}.`
: null, : null,
@ -1000,6 +1002,15 @@ function buildOpenCodeRuntimeMessageText(input: OpenCodeTeamRuntimeMessageInput)
.join('\n'); .join('\n');
} }
function buildOpenCodeWorkSyncToolArgs(input: OpenCodeTeamRuntimeMessageInput): string {
const args = [`teamName="${input.teamName}"`, `memberName="${input.memberName}"`];
const controlUrl = input.controlUrl?.trim();
if (controlUrl) {
args.push(`controlUrl=${JSON.stringify(controlUrl)}`);
}
return args.join(', ');
}
function validateOpenCodeRuntimeMembers( function validateOpenCodeRuntimeMembers(
members: TeamRuntimeLaunchInput['expectedMembers'], members: TeamRuntimeLaunchInput['expectedMembers'],
launchCwd?: string launchCwd?: string

View file

@ -1815,14 +1815,6 @@ export const CreateTeamDialog = ({
</p> </p>
) : null} ) : null}
<TeammateRuntimeCompatibilityNotice
analysis={teammateRuntimeCompatibility}
onOpenDashboard={() => {
onClose();
openDashboard();
}}
/>
<div className="grid grid-cols-1 gap-4 md:grid-cols-2"> <div className="grid grid-cols-1 gap-4 md:grid-cols-2">
<div className="space-y-1.5 md:col-span-2"> <div className="space-y-1.5 md:col-span-2">
<Label htmlFor="team-name">Team name</Label> <Label htmlFor="team-name">Team name</Label>
@ -1920,23 +1912,34 @@ export const CreateTeamDialog = ({
</div> </div>
} }
headerBottom={ headerBottom={
<div className="space-y-2"> teammateRuntimeCompatibility.visible ||
{soloTeam ? ( soloTeam ||
<div className="flex items-start gap-2 rounded-md border border-sky-500/20 bg-sky-500/5 px-3 py-2"> (canCreate && hasSelectedWorktreeIsolation) ? (
<Info className="mt-0.5 size-3.5 shrink-0 text-sky-400" /> <div className="space-y-2">
<p className="text-[11px] leading-relaxed text-sky-300"> <TeammateRuntimeCompatibilityNotice
Only the team lead (main process) will be started &mdash; no teammates will analysis={teammateRuntimeCompatibility}
be spawned. Works like a regular agent session in your chosen runtime onOpenDashboard={() => {
(Claude Code, Codex, OpenCode, Gemini) but with access to the task board for onClose();
planning. Saves tokens by avoiding teammate coordination overhead. You can openDashboard();
add members later from the team settings. }}
</p> />
</div> {soloTeam ? (
) : null} <div className="flex items-start gap-2 rounded-md border border-sky-500/20 bg-sky-500/5 px-3 py-2">
{canCreate && hasSelectedWorktreeIsolation ? ( <Info className="mt-0.5 size-3.5 shrink-0 text-sky-400" />
<WorktreeGitReadinessBanner state={worktreeGitReadiness} /> <p className="text-[11px] leading-relaxed text-sky-300">
) : null} Only the team lead (main process) will be started &mdash; no teammates
</div> will be spawned. Works like a regular agent session in your chosen runtime
(Claude Code, Codex, OpenCode, Gemini) but with access to the task board
for planning. Saves tokens by avoiding teammate coordination overhead. You
can add members later from the team settings.
</p>
</div>
) : null}
{canCreate && hasSelectedWorktreeIsolation ? (
<WorktreeGitReadinessBanner state={worktreeGitReadiness} />
) : null}
</div>
) : null
} }
/> />
</div> </div>

View file

@ -2358,16 +2358,6 @@ export const LaunchTeamDialog = (props: LaunchTeamDialogProps): React.JSX.Elemen
</div> </div>
) : null} ) : null}
{isLaunchMode ? (
<TeammateRuntimeCompatibilityNotice
analysis={teammateRuntimeCompatibility}
onOpenDashboard={() => {
closeDialog();
openDashboard();
}}
/>
) : null}
<div className="space-y-4"> <div className="space-y-4">
{/* {/*
Schedule-only: Team selector (standalone mode) Schedule-only: Team selector (standalone mode)
@ -2612,8 +2602,19 @@ export const LaunchTeamDialog = (props: LaunchTeamDialogProps): React.JSX.Elemen
softDeleteMembers softDeleteMembers
disableGeminiOption={isGeminiUiFrozen()} disableGeminiOption={isGeminiUiFrozen()}
headerBottom={ headerBottom={
hasSelectedWorktreeIsolation ? ( teammateRuntimeCompatibility.visible || hasSelectedWorktreeIsolation ? (
<WorktreeGitReadinessBanner state={worktreeGitReadiness} /> <div className="space-y-2">
<TeammateRuntimeCompatibilityNotice
analysis={teammateRuntimeCompatibility}
onOpenDashboard={() => {
closeDialog();
openDashboard();
}}
/>
{hasSelectedWorktreeIsolation ? (
<WorktreeGitReadinessBanner state={worktreeGitReadiness} />
) : null}
</div>
) : null ) : null
} }
/> />

View file

@ -48,12 +48,14 @@ describe('OpenCodePromptDeliveryRepairPolicy', () => {
taskRefs: [{ taskId: 'task-1', displayId: '#1', teamName: 'team-a' }], taskRefs: [{ taskId: 'task-1', displayId: '#1', teamName: 'team-a' }],
responseState: 'responded_plain_text', responseState: 'responded_plain_text',
pendingReason: 'plain_text_ack_only_still_requires_answer', pendingReason: 'plain_text_ack_only_still_requires_answer',
controlUrl: 'http://127.0.0.1:43123',
}) })
); );
expect(decision.kind).toBe('work_sync_report_required'); expect(decision.kind).toBe('work_sync_report_required');
expect(decision.controlText).toContain('member_work_sync_status'); expect(decision.controlText).toContain('member_work_sync_status');
expect(decision.controlText).toContain('member_work_sync_report'); expect(decision.controlText).toContain('member_work_sync_report');
expect(decision.controlText).toContain('controlUrl="http://127.0.0.1:43123"');
expect(decision.controlText).toContain('"task-1"'); expect(decision.controlText).toContain('"task-1"');
expect(decision.controlText).not.toContain('reportToken='); expect(decision.controlText).not.toContain('reportToken=');
}); });

View file

@ -673,6 +673,7 @@ describe('OpenCodeTeamRuntimeAdapter', () => {
replyRecipient: 'team-lead', replyRecipient: 'team-lead',
actionMode: 'do', actionMode: 'do',
messageKind: 'member_work_sync_nudge', messageKind: 'member_work_sync_nudge',
controlUrl: 'http://127.0.0.1:43123',
taskRefs: [{ taskId: 'task-1', displayId: 'abcd1234', teamName: 'team-a' }], taskRefs: [{ taskId: 'task-1', displayId: 'abcd1234', teamName: 'team-a' }],
}); });
@ -690,6 +691,7 @@ describe('OpenCodeTeamRuntimeAdapter', () => {
expect(sentText).toContain('mcp__agent-teams__member_work_sync_report'); expect(sentText).toContain('mcp__agent-teams__member_work_sync_report');
expect(sentText).toContain('teamName="team-a"'); expect(sentText).toContain('teamName="team-a"');
expect(sentText).toContain('memberName="bob"'); expect(sentText).toContain('memberName="bob"');
expect(sentText).toContain('controlUrl="http://127.0.0.1:43123"');
expect(sentText).toContain('taskIds: "task-1"'); expect(sentText).toContain('taskIds: "task-1"');
expect(sentText).toContain( expect(sentText).toContain(
'Do not use provider names, runtime names, or team names as memberName' 'Do not use provider names, runtime names, or team names as memberName'

View file

@ -8462,6 +8462,7 @@ describe('TeamProvisioningService', () => {
diagnostics: [], diagnostics: [],
})); }));
await configureOpenCodeBobDeliveryService({ svc, sendMessageToMember }); await configureOpenCodeBobDeliveryService({ svc, sendMessageToMember });
svc.setControlApiBaseUrlResolver(async () => 'http://127.0.0.1:43123');
await expect( await expect(
svc.deliverOpenCodeMemberMessage('team-a', { svc.deliverOpenCodeMemberMessage('team-a', {
@ -8488,6 +8489,11 @@ describe('TeamProvisioningService', () => {
responseState: 'responded_non_visible_tool', responseState: 'responded_non_visible_tool',
ledgerStatus: 'responded', ledgerStatus: 'responded',
}); });
expect(sendMessageToMember).toHaveBeenCalledWith(
expect.objectContaining({
controlUrl: 'http://127.0.0.1:43123',
})
);
}); });
it('accepts review workflow tools as review pickup delivery response proof', async () => { it('accepts review workflow tools as review pickup delivery response proof', async () => {

View file

@ -179,7 +179,13 @@ vi.mock('@renderer/components/team/members/MembersEditorSection', () => ({
vi.mock('@renderer/components/team/members/TeamRosterEditorSection', () => ({ vi.mock('@renderer/components/team/members/TeamRosterEditorSection', () => ({
TeamRosterEditorSection: (props: any) => { TeamRosterEditorSection: (props: any) => {
teamRosterEditorSectionMock.lastProps = props; teamRosterEditorSectionMock.lastProps = props;
return React.createElement('div', null, 'team-roster-editor'); return React.createElement(
'div',
null,
props.headerTop,
'team-roster-editor',
props.headerBottom
);
}, },
})); }));