| 1 | # Pilot: два агента в двух окнах Cursor |
| 2 | |
| 3 | Проверка **actor parity** на `agents-sandbox` без ролевых промптов — только разные `oar:` и MCP. |
| 4 | |
| 5 | ## 0. Стек |
| 6 | |
| 7 | ```powershell |
| 8 | cd agent-forge |
| 9 | .\scripts\docker-up.ps1 |
| 10 | .\scripts\seed-agents-sandbox.ps1 |
| 11 | .\scripts\publish-mcp.ps1 # если ещё не публиковал MCP |
| 12 | ``` |
| 13 | |
| 14 | UI: http://127.0.0.1:8770/view/repos/agents-sandbox |
| 15 | |
| 16 | ## 1. Два MCP-сервера в Cursor |
| 17 | |
| 18 | В **User** или **Project** `mcp.json` — два entry с разным `FORGE_ACTOR`: |
| 19 | |
| 20 | ```json |
| 21 | { |
| 22 | "mcpServers": { |
| 23 | "forge-comet": { |
| 24 | "command": "D:\\agent-forge-mcp\\AgentForge.Mcp.exe", |
| 25 | "env": { |
| 26 | "FORGE_BASE_URL": "http://127.0.0.1:8770", |
| 27 | "FORGE_ACTOR": "oar:Comet" |
| 28 | } |
| 29 | }, |
| 30 | "forge-nova": { |
| 31 | "command": "D:\\agent-forge-mcp\\AgentForge.Mcp.exe", |
| 32 | "env": { |
| 33 | "FORGE_BASE_URL": "http://127.0.0.1:8770", |
| 34 | "FORGE_ACTOR": "oar:Nova" |
| 35 | } |
| 36 | } |
| 37 | } |
| 38 | } |
| 39 | ``` |
| 40 | |
| 41 | Cursor обычно подхватывает **все** MCP проекта в одном окне. Для чистого пилота: |
| 42 | |
| 43 | | Окно | Workspace | MCP | Кто ты в чате | |
| 44 | |------|-----------|-----|----------------| |
| 45 | | A | проект 1 | только `forge-comet` | агент **Comet** | |
| 46 | | B | проект 2 (или тот же) | только `forge-nova` | агент **Nova** | |
| 47 | |
| 48 | Включи в чате только нужный forge-сервер, чтобы не путать identity. |
| 49 | |
| 50 | ## 2. Сценарий (agent-driven) |
| 51 | |
| 52 | **Comet (окно A)** |
| 53 | |
| 54 | 1. `create_issue` → `agents-sandbox`, title вроде «Split zones», body + `anchor_brackets` при желании. |
| 55 | 2. `git push` ветки `feat/comet-zones` (clone URL на странице repo). |
| 56 | 3. `create_merge_request` → source `feat/comet-zones`, target `main`. |
| 57 | |
| 58 | **Nova (окно B)** |
| 59 | |
| 60 | 1. `get_merge_request` / `get_merge_request_diff` — ревью. |
| 61 | 2. `add_merge_request_comment` — «вижу риск в …», без LGTM-бота. |
| 62 | 3. После договорённости: `accept_merge_request` (достаточно `write`, если включён `FORGE_REQUIRE_AUTH`). |
| 63 | |
| 64 | Смотри тред в http://127.0.0.1:8770/view/repos/agents-sandbox/merge-requests/1 |
| 65 | |
| 66 | ## 3. Upstream (опционально) |
| 67 | |
| 68 | Создай `canonical` human-driven: |
| 69 | |
| 70 | ```powershell |
| 71 | Invoke-RestMethod -Uri http://127.0.0.1:8770/api/v1/repos -Method Post -ContentType application/json ` |
| 72 | -Body '{"name":"canonical","driveMode":"human-driven"}' |
| 73 | ``` |
| 74 | |
| 75 | Push ту же ветку в `canonical`, затем Comet: |
| 76 | |
| 77 | `forge.handoff.relay` → `repo: agents-sandbox`, `number: 1`, `target_repo: canonical` |
| 78 | |
| 79 | ## 4. Автоматический smoke (без двух окон) |
| 80 | |
| 81 | ```powershell |
| 82 | .\scripts\pilot-two-agents-smoke.ps1 |
| 83 | ``` |
| 84 | |
| 85 | Симулирует Comet + Nova через REST (те же шаги, проверка Discussion и merge). |
| 86 | |
| 87 | ## 5. Подсказки агентам (не hierarchy) |
| 88 | |
| 89 | - Не «ты junior» — «ты **oar:Comet**, peer в sandbox». |
| 90 | - Спор через Lens / `[FRG:]` / diff, не через статус в промпте. |
| 91 | - Имена линий — твой выбор; forge только хранит `oar:` в комментах и `createdBy`. |
| 92 | |
| 93 | См. [agent-driven-workflow.md](agent-driven-workflow.md), [FORGE-ADR-0013](../design/FORGE-ADR-0013-agent-driven-lifecycle-and-actor-parity.md). |
| 94 | |