# PROGRESS - t3code-mcp > Что сделано, что нет, что проверить руками. Свежие записи сверху. Архитектурная правда - `архитектура.md` §5 (vault, симлинк в `../../архитектура.md`), журнал всей второй итерации - `../../PROGRESS.md`. ## 2026-08-29 - S10 (M6b): коннектор, две машины, dell как фоновые руки Сделано: репа `beaver/t3code-mcp` (Python 3.13, FastMCP 3.4.7, httpx, pydantic-settings; ruff ALL + ty + pytest, `make check` чистый, 9 тестов на фейковом T3 через `httpx` transport). Тулзы `t3_machines`, `t3_projects`, `t3_dispatch` (`thread.create` + `thread.turn.start`, или только `turn.start` при `thread_id=`), `t3_thread`, `t3_wait`, `t3_interrupt` - по `packages/contracts/src/environmentHttp.ts` + `orchestration.ts` из `~/projects/playgrounds/t3code` (HEAD 2026-08-29, серверы 0.0.36). Конфиг `t3code.toml` (машины, `token_env`, allowlist fnmatch по названию и workspace root, модель по умолчанию), токены только из env. Проверено живьём: диспатч в `t3-smoke` на маке (`~/projects/playgrounds/t3-smoke`, заведён `t3 project add`) → `turn.completed` за 10 с, ответ и `smoke.txt` на месте; диспатч в `projects` на dell → Клод прочитал `~/.claude/CLAUDE.md`, склонировал `beaver/beaver-land` по ssh как `hh`, сделал `t3 project add`, проверил `gh` и токен Gitea - 25 с. Dell поднят как вторая машина: node 22 + `t3@0.0.36` (`npm -g`, нужен `build-essential` для node-pty), `claude` CLI 2.1.251, `uv`, `gh` (залогинен как haikesan), `t3 service install` (user-unit `t3code.service`, linger включён) с drop-in `EnvironmentFile=/root/.t3/service.env` (`T3CODE_HOST=100.76.140.93`, `T3CODE_PORT=3773`, `CLAUDE_CODE_OAUTH_TOKEN` из `beaver-agent/.env`, PATH с bun/uv, `IS_SANDBOX=1` - иначе Claude Code отказывает в `bypassPermissions` под root), `textGenerationModelSelection` → claudeAgent/sonnet (иначе заголовки тредов пытаются звать codex, которого нет). На dell: `/root/.claude/{CLAUDE.md,commands/commit.md,skills/komodo,settings.json}` (те же `/commit` и `komodo`, что на маке; CLAUDE.md - раскладка `~/projects//` как организации Gitea, правила пуша), `~/.gitconfig`, `~/.config/komodo/credentials`, `~/.config/gitea/token` (новый токен `dell-claude-2026-08`: repository/organization/issue/package), свой ssh-ключ `id_ed25519_gitea` в аккаунте hh (старый `id_ed25519` - read-only deploy key cars-demo), `/root/projects` заведён проектом `projects`. Токены `t3 auth session issue --ttl 365d --label beaver-t3code-mcp` с обеих машин записаны в `/root/beaver-agent/.env` как `T3_MAC_TOKEN`/`T3_DELL_TOKEN`, там же `COMPOSE_PROFILES=…,t3` и `T3CODE_MCP_REF=main`. В `beaver-agent`: сервис `t3code-mcp` в compose (профиль `t3`, образ из git), `t3code.toml`, `McpServer.http("t3code")` в `config.py`, отдаётся только диспетчеру; `.env.example` без `T3_URL`/`T3_TOKEN`. Скилл `мета/бобер/скиллы/диспетчер/t3code/SKILL.md` написан целиком. Решения по ходу (легко откатить): (1) `t3_wait` - обычный долгий вызов, не MCP Task: расширение Tasks в 2026-07-28 вынесено в `io.modelcontextprotocol/tasks`, python-SDK 1.29 на 2025-11-25, Claude Code Tasks не поддерживает и сам уводит вызов > 2 мин в фон (`CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS`); потолок ожидания 3600 с, опрос 5 с, флаги `pending` из shell-снапшота раз в 30 с. (2) Сразу после `turn.start` у треда ещё нет `latestTurn` - это состояние `starting`; `t3_wait` не выходит из него, пока не появится тёрн, сессия не упадёт (`lastError`) или тред не простоит `stopped` три опроса. (3) На маке отдельный `t3 serve` не поднимал: сервер десктопного T3 Code уже слушает `0.0.0.0:3773`, из tailnet и из контейнера на dell доступен по `http://100.65.207.48:3773`; жив, пока запущено приложение. Tailscale Serve/HTTPS не включал - внутри tailnet хватает http. (4) Треды без worktree (`branch`/`worktreePath` = null), в workspace root. (5) `t3_dispatch` умеет `thread_id=` для продолжения треда - шестая тулза из §5 не добавлялась, это параметр. (6) Dell работает под root (так устроен весь `/root/*`), граница - allowlist проектов и `IS_SANDBOX`; отдельный пользователь для t3 - если понадобится. Не сделано: деплой (пуш `beaver-agent main:stable` - за h; после него `t3code-mcp` соберётся из Gitea `main`); ответ на `pending.user_input`/аппрувы через MCP (`thread.user-input.respond` не обёрнут - тред прерывается и продолжается новым `t3_dispatch(thread_id=)`); вложения; worktree-режим; codex на dell; pre-commit на dell не ставил. Расхождения с `архитектура.md` §5, не правил: «`t3 serve --tailscale-serve` на маке» - фактически сервер десктопа по http в tailnet; «Tasks вместо `t3_wait`» - проверено, неприменимо (см. выше); `t3_thread(thread_id)` без машины - тред ищется по всем машинам. Проверить руками: ```sh cd t3code-mcp && make check # живой диспатч с мака (токен - `t3 auth session issue --token-only --ttl 1h`): T3_MAC_TOKEN=... T3CODE_MCP_CONFIG=t3code.example.toml uv run python -m t3code_mcp # в другом окне uv run python scripts/smoke.py http://127.0.0.1:8000/mcp mac t3-smoke # dell: ssh root@100.76.140.93 'XDG_RUNTIME_DIR=/run/user/0 systemctl --user status t3code.service | head -5; curl -s http://100.76.140.93:3773/.well-known/t3/environment' # после `make deploy` в beaver-agent: ssh root@100.76.140.93 'docker logs beaver-t3code-mcp --tail 5; docker exec beaver-gateway python -c "import urllib.request;print(urllib.request.urlopen(\"http://t3code-mcp:8000/healthz\").read())"' # в телеге: «запусти на dell в проекте projects: …» → диспетчер зовёт t3_dispatch, t3_wait ```