Releases: VKirill/antigravity-for-claude-code
Release list
v1.7.0 — Reliable async jobs · token-lean result handoff · deterministic stack detection
Languages: 🇬🇧 English · 🇷🇺 Русский
🇬🇧 English
Reliability + token-efficiency release. Async
agyjobs no longer report false deaths, the worker result handoff is fully structured (no transcript mining), and the planner now plans on the project's real stack instead of guessing. Verified end-to-end with 3 coders running in parallel — 0 false-deaths, 0 retries, 192/192 tests green.
🚀 Highlights
| Area | Before | After |
|---|---|---|
| Async job death detection | Jobs that succeeded were reported failed → wasted retries |
Grace window + sidecar authority → recovered as success |
| Result handoff | Mined from the raw transcript (regex, brittle, token-heavy) | Strict result.yaml sidecar + YAML.parse validation |
| Polling cost | async_status + sleep poll loop re-billed the whole conversation |
Blocking async_wait + slim _status (Layer 0/1) |
| Planner stack | Guessed .js / node:test on a TS/bun project (2 of 3 runs) |
Orchestrator injects a stack_profile → correct .ts / bun test, first try |
🐛 Reliability — the agy false-death arc (fixed)
Root cause (confirmed via docs/plans/agy-process-lifecycle/SPEC.md): agy --print spawns an internal engine grandchild that inherits the stdout pipe and outlives the tmux pane. The session vanishes (tmux has-session → false) while the grandchild is still flushing its output and its result.yaml a few seconds later — so declaring death the instant the session disappeared reported a succeeded job as failed, and sometimes triggered a wasteful retry.
Three layered fixes:
- Run
agydirectly in the pane — removed thesetsid -wwrapper that detachedagyinto its own session (it survived the pane'sSIGHUPand ran orphaned, widening the false-death window).45572c4 - Grace window — on “session gone + no exit code + no sidecar yet” the job stays
running(deathSuspectedAtstamped) forAGY_DEATH_GRACE_MS(default 30 s, ~2× the observed ~14 s flush gap), then the sidecar fallback marks itsuccessonceresult.yamllands. Bounded by the wall-clockAGY_TIMEOUT_MS.f53fa2b - Late sidecar recovery — a job already marked
failedonly via the premature-death path is re-checked againstresult.yamland upgraded tosuccessif the envelope parses (strictly scoped — never a real non-zero exit, parse error, or crash-monitor137).45572c4
Before: session gone @50s ──▶ FAILED ──▶ retry (work was already done)
After: session gone @50s ──▶ running (grace) ──▶ result.yaml @64s ──▶ SUCCESS
⚡ Token efficiency — structured result handoff
- Layer 0 — envelope only.
async_resultreturns just the worker'sresult:envelope, never the raw transcript.c7676c5 - Layer 1 — blocking wait + slim status. New
async_waitblocks server-side until the batch settles;async_statusslimmed. Kills thestatus-poll-sleeploop.179fcaf·f33dd6e result.yamlsidecar. The worker writes its envelope to a file as its last action; the server reads that file instead of scraping stdout.d8e230a- Strict validation. Server-side
YAML.parse(top-levelresult:mapping required).54571b7
📉 A monitored run went from ~158 antigravity calls + 10
sleeps to 6 calls, 0 sleeps.
🎯 Planner — deterministic stack detection
The planner runs on graph-only tools (gitnexus / serena), and package.json scripts.test is not in the code graph — so it couldn't see bun test vs node --test and fell back to a wrong guess. Fix (2b9564e):
- Orchestrator injects a
stack_profile— before dispatch itReadspackage.json+ls-es the target dir and passes authoritative facts (language,file_ext,test_command,test_file) into the contract. - Planner reads the manifest first — stack detection is now Step 1; the
NOT raw greprule was narrowed to repo-wide grep only (targeted single-file reads allowed any time).
✅ Verified live: planner produced
src/utils/*.ts+bun test+dependencies: []on the first try, no correction round.
🧰 Other improvements
- Skills catalog auto-generated from the runtime skill dir, 12 categories, + sync test.
a3430e3·a3c181d·5733777 - MCP config isolation into the per-session
agyworker home.ab80f2b - Usage metric — average successful-job duration.
d87eca2 async_waitadded to thedev-orchestrator-agytools allowlist + made the universal await.f33dd6e- 📚 Docs — comprehensive bilingual README (architecture, async engine, worker roster, full tool & env reference).
9c7c4c3
✅ Verification
bun run build— clean ·bun test— 192 pass / 0 fail (24 files).- End-to-end parallel run (
takeWhile/dropWhile/partition): 3 coders dispatched concurrently, planner emitted correct.ts/bun testwith no correction round, 2 of 3 coders hit the grandchild detach and were recovered assuccess— 0 false-deaths, 0 retries, clean fast-forward push.
🇷🇺 Русский
Релиз про надёжность и экономию токенов. Async-джобы
agyбольше не отчитываются ложной смертью, передача результата воркера полностью структурирована (без выскребания транскрипта), а планировщик теперь планирует на реальном стеке проекта, а не угадывает. Проверено сквозным прогоном с 3 кодерами параллельно — 0 ложных смертей, 0 ретраев, 192/192 теста зелёные.
🚀 Главное
| Область | Было | Стало |
|---|---|---|
| Детект смерти async-джобы | Успешные джобы отчитывались как failed → лишние ретраи |
Grace-окно + авторитет сайдкара → восстановление в success |
| Передача результата | Выскребалась из сырого транскрипта (регексп, хрупко, дорого по токенам) | Строгий сайдкар result.yaml + валидация YAML.parse |
| Стоимость поллинга | Петля async_status + sleep перебиливала весь диалог |
Блокирующий async_wait + слим _status (Layer 0/1) |
| Стек планировщика | Угадывал .js / node:test на TS/bun-проекте (2 из 3 прогонов) |
Оркестратор инжектит stack_profile → корректные .ts / bun test с первого раза |
🐛 Надёжность — арк ложной смерти agy (исправлено)
Корень (подтверждён через docs/plans/agy-process-lifecycle/SPEC.md): agy --print порождает внутренний engine-внук, который наследует stdout-pipe и переживает tmux-pane. Сессия исчезает (tmux has-session → false), пока внук ещё дописывает вывод и result.yaml через несколько секунд — поэтому объявление смерти в момент исчезновения сессии отчитывало успешную джобу как failed и иногда запускало лишний ретрай.
Три слоя фикса:
- Запуск
agyпрямо в pane — убран обёрткаsetsid -w, отвязывавшаяagyв свою сессию (он переживалSIGHUPpane и работал «сиротой», расширяя окно ложной смерти).45572c4 - Grace-окно — при «сессия исчезла + нет exit-кода + нет сайдкара» джоба остаётся
running(deathSuspectedAt) наAGY_DEATH_GRACE_MS(по умолчанию 30 с, ~2× от наблюдаемых ~14 с задержки записи), затем сайдкар-фолбэк помечает еёsuccess, как толькоresult.yamlприлетит. Ограничено wall-clockAGY_TIMEOUT_MS.f53fa2b - Позднее восстановление по сайдкару — джоба, помеченная
failedтолько через путь преждевременной смерти, перепроверяется противresult.yamlи апгрейдится доsuccess, если конверт парсится (строго — никогда для реального ненулевого кода, parse-error или kill-137 краш-монитора).45572c4
Было: сессия исчезла @50с ──▶ FAILED ──▶ ретрай (работа уже сделана)
Стало: сессия исчезла @50с ──▶ running (grace) ──▶ result.yaml @64с ──▶ SUCCESS
⚡ Экономия токенов — структурированная передача результата
- Layer 0 — только конверт.
async_resultвозвращает только конвертresult:воркера, никогда сырой транскрипт.c7676c5 - Layer 1 — блокирующее ожидание + слим-статус. Новый
async_waitблокирует на сервере до завершения батча;async_statusужат. Убивает петлюstatus-sleep.179fcaf·f33dd6e - Сайдкар
result.yaml. Воркер пишет конверт в файл последним действием; сервер читает файл, а не выскребает stdout.d8e230a - Строгая валидация. Серверный
YAML.parse(нужен top-levelresult:).54571b7
📉 Один прогон ушёл со ~158 вызовов antigravity + 10
sleepдо 6 вызовов, 0 sleep.
🎯 Планировщик — детерминированный детект стека
Планировщик работает на только графовых инструментах (gitnexus / serena), а scripts.test из package.json нет в графе кода — поэтому он не видел bun test против node --test и скатывался к неверной догадке. Фикс (2b9564e):
- Оркестратор инжектит
stack_profile— перед раздачей онRead-итpackage.json+ls-ит целевую папку и передаёт авторитетные факты (language,file_ext,test_command,test_file) в контракт. - Планировщик читает манифест первым — детект стека теперь Шаг 1; правило
NOT raw grepсужено до repo-wide grep (точечное чтение одного файла разрешено в любой момент).
✅ Проверено в живую: планировщик выдал
src/utils/*.ts+bun test+dependencies: []с первого раза, без круга коррекции.
🧰 Прочие улучшения
- Авто-генерация каталога скиллов из рантайм-папки, 12 категорий, + sync-тест.
a3430e3·a3c181d·5733777 - Изоляция MCP-конфига в per-session домашку воркера
agy.ab80f2b - Метрика usage — средняя длительность успешной джобы.
d87eca2 async_waitдобавлен в allowlist инструментовdev-orchestrator-agy+ сделан универсальным ожиданием.f33dd6e- 📚 Документация — подробный двуязычный README (архитектура, async-движок, реестр воркеров, полная справка по инструментам и env).
9c7c4c3
✅ Проверка
bun run build— чисто ·bun test— 192 pass / 0 fail (24 файла).- Сквозной параллельный прогон (
takeWhile/dropWhile/ `partit...
v1.6.1 — Enforce discovery-first; planner owns file placement
v1.6.1 — Enforce discovery-first; planner owns file placement (2026-05-25)
English
A live test run revealed the PM still self-composing a contract for a "trivial" task and skipping the planner — the prompt said "always discover" but didn't enforce it. Fixed:
- Enforcement hook (
scripts/guard-orchestrator-agy-require-planner.sh): blockstask insertof aworker-coder/worker-frontendcontract unless aworker-plannerdiscovery job has run this session. The PM can no longer skip discovery, even on trivial tasks. - Planner owns file placement + wiring: even a brand-new isolated file is the planner's call — it decides the exact path and how it is wired (imports / exports / registration / route table / DI), not the PM.
- Standing rule: the orchestrator never composes an implementation contract from its own judgment — every impl contract comes from a planner run.
- Observability:
orchestrator-tracehook now coversdev-orchestrator-agy+ allworker-*(wasdev-orchestratoronly), so PM tool calls are traced.
Русский
Живой прогон показал, что PM всё ещё сам сочиняет контракт на «тривиальной» задаче, минуя планировщика — промт говорил «всегда discovery», но не принуждал. Исправлено:
- Хук-принуждение (
scripts/guard-orchestrator-agy-require-planner.sh): блокируетtask insertконтрактаworker-coder/worker-frontend, если в этой сессии не было discovery-джобыworker-planner. PM больше не может пропустить discovery даже на тривиальном. - Планировщик владеет размещением + вшиванием файла: даже новый изолированный файл — его решение: где лежит и как вшит (импорты / экспорты / регистрация / роут-таблица / DI), а не PM.
- Standing-rule: оркестратор никогда не сочиняет implementation-контракт сам — только из прогона планировщика.
- Наблюдаемость: хук
orchestrator-traceтеперь покрываетdev-orchestrator-agy+ всеworker-*(был толькоdev-orchestrator), трейс PM пишется.
v1.6.0 — Pure-PM orchestrator + discovery-first
v1.6.0 — Pure-PM orchestrator + discovery-first (2026-05-25)
English
The agy orchestrator becomes a true project manager: it never reads source code — all code / symbol / graph discovery is delegated to the planner. Designed and reviewed end-to-end with Antigravity.
- Tools trimmed: dropped
Edit,Grep,Glob, allserena, and gitnexus discovery tools (query/context/impact/route_map/tool_map/rename/list_repos). KeptRead(docs / config / logs ONLY — never source),Bash(ops only),Write(docs/plans/only), antigravity dispatch, memory + perplexity, andgitnexus detect_changes+api_impact(release-gate checks). - Discovery-first ALWAYS: every task — including trivial ones — routes through
worker-planner. Newdepth: express(real file map + 1-2 flat contracts, no heavy SPEC) vsdepth: full(SPEC + contracts). The PM never scopes from its own reading — a "one-line" request can hide a large blast radius. - Planner reads project docs first (
architecture.md,docs/index.md,README,CLAUDE.md,glossary.md), then the code graph; the orchestrator feeds these viacontext_refs. - Phase 7 review gate strengthened — since the PM never reads code, the final gate is its only look at the diff; it now explicitly hunts shortcuts / gamed tests / design drift.
- Enforcement: PreToolUse hook (
scripts/guard-orchestrator-agy-no-source-read.sh) blocks source reading viaRead/Bashfor thedev-orchestrator-agyagent (fail-open; docs/config/logs allowed).
bun test: 109 passing.
Русский
agy-оркестратор становится настоящим проект-менеджером: он не читает исходный код — всё discovery (код/символы/граф) делегируется планировщику. Спроектировано и проверено end-to-end вместе с Antigravity.
- Урезаны инструменты: убраны
Edit,Grep,Glob, всяserenaи discovery-часть gitnexus. ОставленыRead(только доки/конфиги/логи — НЕ исходники),Bash(только ops),Write(толькоdocs/plans/), диспетч antigravity, memory + perplexity,gitnexus detect_changes+api_impact(релиз-гейты). - Discovery-first ВСЕГДА: любая задача (включая тривиальную) идёт через
worker-planner. Новыйdepth: express(карта файлов + 1-2 контракта, без тяжёлого SPEC) vsdepth: full(SPEC + контракты). PM не скоупит со своего чтения — «однострочная» правка может скрывать большой blast radius. - Планировщик сперва читает доки проекта (
architecture.md,docs/index.md,README,CLAUDE.md,glossary.md), потом граф; оркестратор передаёт их черезcontext_refs. - Усилен ревью-гейт Phase 7 — раз PM не видит код, это его единственный взгляд на дифф; теперь явно ищет костыли / подкрученные тесты / дрейф дизайна.
- Принуждение: PreToolUse-хук (
scripts/guard-orchestrator-agy-no-source-read.sh) блокирует чтение исходников черезRead/Bashдля агентаdev-orchestrator-agy(fail-open; доки/конфиги/логи разрешены).
bun test: 109 проходят.
v1.5.0 — Unified worker result envelope
v1.5.0 — Unified worker result envelope (2026-05-25)
English
Every worker now ends with exactly one result: YAML block — a single parse contract for the orchestrator. Verified coherent end-to-end with Antigravity.
- Verifiers (
test/security/payments/ui) +db-reader: flat text →result:YAML. reviewer/planner/doctor: role payload (findings/spec+contracts/diagnosis…) now nested underresult:(was top-level);refactor-architectwrapped inresult:.- Common keys for all roles:
summary,status(per-role verdict),errors,artifacts,verification_output; role payload nested. - Orchestrator now gates verifiers on
result.status == passed— aninconclusiveverifier (a check couldn't run) no longer false-passes to deploy. Phase 4 distinguishes the async job-status fromresult.status(and respectspaused/needs_decomposition). - Canonical contract documented in
prompts/skills-catalog.md→ "Result envelope".
Русский
Каждый воркер теперь заканчивает ответ ровно одним блоком result: — единый контракт парсинга для оркестратора. Связность проверена end-to-end вместе с Antigravity.
- Верификаторы (
test/security/payments/ui) +db-reader: плоский текст →result:YAML. reviewer/planner/doctor: role-payload (findings/spec+contracts/diagnosis…) теперь вложен подresult:(был на верхнем уровне);refactor-architectобёрнут вresult:.- Общие поля у всех ролей:
summary,status(вердикт роли),errors,artifacts,verification_output; role-payload вложен. - Оркестратор гейтит верификаторы по
result.status == passed—inconclusive(проверка не запустилась) больше не проходит ложно в деплой. Phase 4 различает async job-status иresult.status(учитываетpaused/needs_decomposition). - Канон описан в
prompts/skills-catalog.md→ раздел "Result envelope".
v1.4.0 — Security & robustness hardening + worker-prompt audit
v1.4.0 — Security & robustness hardening + worker-prompt audit (2026-05-25)
English
Post-verification hardening of the usage feature plus a full worker-prompt audit (done together with Antigravity).
Security
- All
tmuxcalls now useexecFileSync(file, argv)instead of a shell command string —jobId/projectCwd/ session names can no longer inject shell metacharacters (closes a pre-existing command-injection vector). Dropped the redundantcd(cwd set viatmux -c). async_status/async_resultreject anyjobIdthat isn't^[A-Za-z0-9._-]+$before it reaches the filesystem (path-traversal guard).worker-coder/worker-frontendnow explicitly forbid hardcoding secrets.
Robustness
- stdin close is now a shutdown trigger — a stdio client that disconnects without a signal no longer leaves a zombie process (the crash-monitor interval used to keep it alive).
- On startup the server records usage for jobs that finished while it was down, then sweeps their orphan tmux sessions.
- The sync
discuss_with_antigravitytool now records usage too (get_usage_statswas async-only). - Crash monitor skips finished-but-unpolled jobs (no false-kill when legitimate output contains a marker string).
Worker-prompt audit (with Antigravity)
- Replaced phantom skill references (
software-architecture,postgresql-optimization, …) with real bundled skills. worker-reviewer: explicit Phase-7 exception so the final-review gate can review the full diff vsorigin/main.index.ts: dropped a stale "role preset" mention (role presets were removed earlier).
bun test: 109 passing.
Русский
Укрепление фичи учёта после диагностики + полный аудит воркер-промтов (вместе с Antigravity).
Безопасность
- Все вызовы
tmuxтеперь черезexecFileSync(file, argv), а не строкой шелла —jobId/projectCwd/ имена сессий больше не могут инжектить метасимволы (закрыт пред-существующий вектор command-injection). Убран лишнийcd(cwd задаётся черезtmux -c). async_status/async_resultотвергаютjobId, не подходящий под^[A-Za-z0-9._-]+$, до обращения к ФС (защита от traversal).worker-coder/worker-frontendявно запрещают хардкод секретов.
Надёжность
- Закрытие stdin теперь триггерит shutdown — stdio-клиент, отвалившийся без сигнала, больше не оставляет zombie-процесс (его держал интервал кран-монитора).
- При старте сервер учитывает usage джоб, завершившихся пока он был выключен, затем подчищает их осиротевшие tmux-сессии.
- Sync-инструмент
discuss_with_antigravityтеперь тоже пишет usage (get_usage_statsсчитал только async). - Кран-монитор пропускает завершённые-но-неопрошенные джобы (нет ложного kill при строке-маркере в легитимном выводе).
Аудит воркер-промтов (с Antigravity)
- Фантомные ссылки на скиллы (
software-architecture,postgresql-optimization, …) заменены реальными из набора. worker-reviewer: явное исключение для Phase 7, чтобы финальный гейт мог ревьюить полный дифф противorigin/main.index.ts: убрано устаревшее упоминание "role preset".
bun test: 109 проходят.
v1.3.0 — agy usage accounting, tmux hygiene, bundled skill pack
v1.3.0 — agy usage accounting, tmux hygiene, bundled skill pack (2026-05-25)
English
Built end-to-end by the parallel dev-orchestrator-agy team (fan-out workers + lead integration), then hardened.
New feature — agy usage accounting + tmux session hygiene
get_usage_statsMCP tool: all-time counters (jobs started/succeeded/failed, prompt/output chars, agy seconds, estimated tokens) persisted to.claude/agy-usage.json.- New utils:
token-estimate,usage-store,usage-format,session-gc. - Startup sweep of completed/orphan tmux job sessions;
SIGTERM/SIGINTcleanup. Session names are allowlisted before anytmuxshell call.
Bundled programming skill pack (94 skills) under /skills + scripts/install-skills.sh (installs into ~/.agents/skills, the agy skills dir). Craft, languages, frontend, backend/data, integrations, testing. Marketing / SEO / design-creative / third-party skills excluded.
Post-verification hardening
- Crash monitor no longer false-kills a finished-but-unpolled job whose output happens to contain a marker string (skips jobs that already wrote
exit_code.txt). - Usage is now recorded on the exit-code-read failure path too; the best-effort telemetry catch blocks are documented (no silent swallow).
- Dropped the phantom
clean-codeskill reference fromworker-coderdefaults + catalog.
bun test: 109 passing.
Русский
Построено end-to-end параллельной командой dev-orchestrator-agy (воркеры веером + интеграция lead-агентом), затем укреплено.
Новая фича — учёт использования agy + гигиена tmux-сессий
- MCP-инструмент
get_usage_stats: счётчики за всё время (джобы запущены/успешно/упало, объём промптов/ответов, секунды agy, оценка токенов) в.claude/agy-usage.json. - Новые утилиты:
token-estimate,usage-store,usage-format,session-gc. - Уборка завершённых/осиротевших tmux-сессий при старте; очистка по
SIGTERM/SIGINT. Имена сессий проходят whitelist перед любым shell-вызовомtmux.
Набор программистских скиллов (94) в /skills + scripts/install-skills.sh (ставит в ~/.agents/skills — папку скиллов agy). Дисциплина кода, языки, фронтенд, бэкенд/данные, интеграции, тесты. Маркетинг / SEO / дизайн-креатив / сторонние — исключены.
Укрепление после диагностики
- Кран-монитор больше не убивает по ошибке завершённую-но-неопрошенную джобу, в выводе которой случайно есть строка-маркер (пропускает джобы с уже записанным
exit_code.txt). - Учёт теперь пишется и на пути сбоя чтения exit-code; best-effort telemetry-catch'и снабжены пояснениями (без молчаливого глотания).
- Убрана фантомная ссылка на скилл
clean-codeиз дефолтовworker-coderи каталога.
bun test: 109 проходят.
v1.2.0 — Parallel-safe dispatch & parallel orchestrator
Makes the async job engine safe to run many agy jobs in parallel, and ships an updated orchestrator agent that uses that parallelism. / Делает асинхронный движок безопасным для параллельного запуска многих agy-джоб и обновляет агент-оркестратор под этот параллелизм.
English
MCP server — concurrency fixes (src/utils/jobs.ts)
- Per-job crash detection. The crash monitor now scans each job's own
output.txt(new purescanFatalMarker()) instead of the shared newest~/.gemini/.../cli-*.log. Previously, when several jobs ran at once, one crashed job could trigger the kill of a healthy sibling (the monitor fired on whichever job the loop was iterating). Detection is now fully isolated per job. - Per-job conversation identity. Removed the global
sessionState.activeConversationIdwrite on job success (it was derived from the newest.pbby mtime, so near-simultaneous completions could attribute one job's conversation to another and leak context). The per-jobmeta.conversationIdis now the single source of truth. - Internal:
catch (e: any)→unknownwith narrowing; addedsrc/jobs.test.ts. 90 tests passing.
Bundled orchestrator agent
agents/dev-orchestrator-agy.md— Phase 4 rewritten from sequential to parallel fan-out / fan-in over the async MCP (async_start→async_status→async_result).- Guardrails:
MAX_PARALLEL=3, disjointfiles_to_touchper batch,risk_class: highruns solo, the orchestrator serializes all commits (workers never commit — avoids.git/index.lockraces), plus a live progress board. skills/orchestrator-workflow/SKILL.md— notes that the agy agent owns its parallel loop.
Verified: deterministic process-level smoke (a crashed job no longer kills siblings) and a live 3-job parallel run (concurrent, isolated conversations, no false kills).
Русский
MCP-сервер — фиксы конкурентности (src/utils/jobs.ts)
- Детекция падений — по каждой джобе отдельно. Кран-монитор теперь сканирует собственный
output.txtкаждой джобы (новая чистая функцияscanFatalMarker()), а не общий свежий~/.gemini/.../cli-*.log. Раньше при параллельной работе одна упавшая джоба могла спровоцировать убийство здоровой соседней (монитор срабатывал на той джобе, по которой шёл цикл). Теперь детекция полностью изолирована. - Идентичность беседы — по каждой джобе. Убрана глобальная запись
sessionState.activeConversationIdпри успехе джобы (бралась как самый свежий.pbпо mtime — при почти одновременном завершении могла приписать одной джобе беседу другой и утечь контекст). Источник истины —meta.conversationIdна джобу. - Внутреннее:
catch (e: any)→unknownс нарроингом; добавленsrc/jobs.test.ts. 90 тестов проходят.
Встроенный агент-оркестратор
agents/dev-orchestrator-agy.md— Phase 4 переписана с последовательной на параллельную fan-out / fan-in поверх async MCP (async_start→async_status→async_result).- Guardrails:
MAX_PARALLEL=3, непересекающиесяfiles_to_touchв батче,risk_class: highидёт solo, оркестратор сериализует все коммиты (воркеры не коммитят — нет гонки за.git/index.lock), плюс живая доска прогресса. skills/orchestrator-workflow/SKILL.md— помечено, что agy-агент владеет своим параллельным циклом.
Проверено: детерминированный process-level smoke (упавшая джоба больше не убивает соседей) и живой прогон 3 джоб параллельно (одновременность, изоляция бесед, без ложных убийств).
v1.1.0 - Tmux project Cwd support & Scoped Review optimizations
This release adds explicit workspace directory context for background tmux executions and optimizes the task-level code review process to be more focused and reliable.
New Features & Improvements
- Tmux project Cwd support:
- Added an optional
cwdparameter to thediscuss_with_antigravity_async_starttool. - The dev-orchestrator now explicitly passes the project's absolute path to the Antigravity MCP server.
- Added a guaranteed
cd <projectCwd>transition inside the background tmux session script before launchingagy. This prevents workers from starting in home/root directories and wasting time/logs on broadfindoperations.
- Added an optional
- Scoped Review for worker-reviewer:
- Implemented the
Scoped Reviewrules ensuringworker-revieweraudits only the specific files listed in the task'sfiles_to_touchusing targeted git diffs (git diff HEAD~1 -- <files_to_touch>). - Added constraints to forbid unscoped
git diffor repo-wide scans that cause HTTP 413 payload overflow crashes on the MCP executor. - Implemented optimization to avoid executing heavy global checks (like project-wide
tscoreslint) unless requested for the touched files.
- Implemented the
Files Changed
src/index.ts— Addedcwdargument to the start tool input schema.src/tools/discuss_async.ts— Propagatedcwdargument tostartTmuxJob.src/utils/jobs.ts— Accepted custom CWD instartTmuxJoband prependedcdcommand.agents/dev-orchestrator-agy.md&agents/dev-orchestrator.md— Updated review and dispatch logic to use focused task diffs and pass CWD.prompts/workers/worker-reviewer.md— Added target diff execution instructions and safety limits.- Global agent configs under
~/.claude/agents/have been updated locally.
v1.0.2 - Interactive Debate & Receipt Bilingual Support
v1.0.2 - Interactive Debate & Receipt Bilingual Support
Patch release adding multilingual support (Russian/English) and auto-detection for interactive debates and receipts.
🇷🇺 Описание патча (Russian)
- Интерактивные дебаты на английском:
- Инструмент
run_interactive_debateтеперь полноценно поддерживает английский язык. - Добавлены английские шаблоны и системные промпты для раундов с Оптимистом, Скептиком, Соглашателем, Хейтером и Синтезатором.
- Инструмент
- Двуязычные чеки дебатов:
- Инструмент
get_debate_receiptгенерирует отчет и аудит хуков на нативном английском языке, если дебаты велись на английском.
- Инструмент
- Автоопределение языка (Auto-detection):
- Язык дебатов теперь определяется автоматически на основе переданной темы (
topic) или комментариев пользователя (userComment). Если в тексте нет кириллицы, система автоматически переключается на английский язык (en), без необходимости передавать параметр вручную. - Сохранена возможность жестко переопределить язык через аргумент
language: "en" | "ru".
- Язык дебатов теперь определяется автоматически на основе переданной темы (
🇬🇧 English Description
- Bilingual Interactive Debates:
- Full English language support for the
run_interactive_debatetool. - English templates and instructions for all AI debate personas (Optimist, Skeptic, Agreer, Hater, and Synthesizer).
- Full English language support for the
- Bilingual Receipts:
- The
get_debate_receipttool now formats and translates reports (including Hooks Audit log) to native English.
- The
- Language Auto-Detection:
- Automatic language inference based on the provided
topicoruserCommenttext. If no Cyrillic characters are detected, it defaults to English (en). - Manual override is still available via
language: "en" | "ru"parameter.
- Automatic language inference based on the provided
v1.0.1 - Cyrillic UTF-8 Decoding Fix
v1.0.1 - Cyrillic UTF-8 Decoding Fix
Patch release fixing UTF-8 encoding issues in debate transcripts.
🇷🇺 Описание патча (Russian)
Исправлен баг, при котором в сгенерированных отчетах дебатов (debate-deliberation.md, debate-receipt.md) на кириллице появлялись битые символы `` (вопросительные знаки в ромбах).
Причина: Node.js чанки из потока stdout при выполнении дочернего процесса agy обрезались на границе двухбайтовых символов UTF-8. Использование data.toString() приводило к потере байт.
Решение: Для потоков child.stdout и child.stderr установлена явная кодировка "utf-8", что заставляет Node.js использовать внутренний StringDecoder и склеивать чанки корректно.
🇬🇧 English Description
Fixed UTF-8 decoding issue in child process stream read.
Cause: Multi-byte characters (like Cyrillic/Russian) were occasionally split on chunk boundaries when reading agy stdout stream, leading to replacement characters (``) in output markdown files.
Solution: Explicitly set stdout/stderr encoding to "utf-8" in child process configuration to force Node.js to use its internal `StringDecoder` for clean stream assembly.