Към съдържанието

Valox Office

Open source 3D офис за агенти, който поех и превърнах в среда за управление на агентите

Роля
Собственик на продукта: ръководя екип от агенти върху мой fork на проект с MIT лиценз
Статус
В процес
Код
Частно хранилище
Технологии
TypeScriptNode.jsthree.jsVitenode-ptyxterm.jsWebSocketzodMCP SDKExcalidrawMermaidthree-mesh-bvhBlender (Python)Playwrightnode:testGitHub Actionssystemd
Изглед от трето лице към собствения 3D аватар на автора, който стои на откритото пространство на офисния етаж: мъж с тъмна къдрава коса и къса брада, в тъмносиньо сако с червени избродирани маншети, черна риза и маслиненозелени панталони. Зад него са бюрата на агентите-работници за програмиране с етикети с имена, таблото със задачи, опашката със задачи, табло за pull request, бяла дъска с диаграма на фунията за плащане, растение в саксия и гонг.
Разхождам се по етажа като собствен аватар, в моя fork на AgentSystemLabs/agent-office (лиценз MIT). Всеки работник е агент за програмиране. Проектът и имената са демонстрационни данни.

В числа

20

MCP инструмента, които управлява мениджърът на етажа, плюс 5 инструмента за бюрото, които получава всеки агент-работник

32

изолирани акаунта на работници в 16 групи по етажи, всеки непривилегирован потребител от общ набор

от 20,1 до 6,0 ms

медианно време за кадър при 12 агенти-работници с екран на живо

9

независими кръга на проверка, преди изпълнителят на лични компютри да бъде пуснат

Проблемът

Работя с Claude Code, Codex и OpenCode през няколко акаунта, много хранилища и повече от една машина и исках едно място, откъдето да виждам и ръководя всичко: проектите като етажи, агентите като служители на бюрата, а хората, с които работя, да могат да влязат, да гледат терминал и да поемат управлението. Намерих AgentSystemLabs/agent-office, MIT проект на друг разработчик, който вече имаше 3D офиса, споделени PTY терминали, отделен git worktree за всеки агент-работник, табла със задачи и pull request, WebRTC глас и бяла дъска Excalidraw. Беше добра сцена, зад която нямаше нищо, което да управлява агентите.

Подходът

Направих fork на проекта и го поех. Запазих сцената, терминалите и git worktree, махнах онова, което наричам AI боклук, и изградих инструментите, които превръщат един офис в среда за управление на агентите, а те са по-голямата част от това, което офисът прави днес. Моето копие запазва MIT бележката на оригиналния проект, а файл с име UPSTREAM.md отбелязва всеки прегледан от мен pull request от оригиналния проект като пренесен, адаптиран или пропуснат. Кодът е написан от екип агенти, които ръководех. Агенти на Codex и на Claude пишеха кода в git worktree; агент-интегратор на Opus правеше rebase, пускаше набора от тестове и проверяваше всяка крайна точка за автентикация и достъп до етажите; следваха независими кръгове на проверка и на преглед на сигурността; една координираща сесия само сливаше при зелени проверки и пускаше в продукция. Моята част беше посоката на продукта, тестването чрез игра, докладите за грешки и решенията да приема или отхвърлям. Резултатът от по-евтиния и по-бърз модел, който пише кода, се проверява повторно от най-силния модел, преди да бъде слят. Правилото дойде от функция за преглед на екрана, която мина повърхностните тестове и се счупи върху реални екрани на Claude Code. Когато тест с браузър без прозорец (headless) заключи истинския ми курсор в прозореца си, поправката влезе във всяко задание към агент: симулирано заключване на показалеца във всеки headless тест.

Изглед от първо лице, насочен право надолу към пода: тъмносиньото яке на аватара с червени избродирани маншети, тъмни панталони и кафяви обувки под камерата и двете му ръце, протегнати над бежови подови плочки.
От първо лице, поглед надолу към ръцете и обувките на аватара.

Как работи

  1. Мениджър на етажа, който е обикновен агент-работник

    На всеки етаж един агент-работник на Claude Code или Codex е негов мениджър и управлява собствен MCP сървър с 20 инструмента за мениджъра (hire_worker, prompt_worker, read_worker_screen, merge_pull, start_meeting, ask_humans и други) плюс пет инструмента за бюрото, които получава всеки агент-работник. Отгоре няма допълнителна система за оркестрация. Мениджърът действа от името на този, който го е наел, наетите от него агенти могат да ползват само акаунти, които този човек може да ползва, и слива pull request само когато проверките му са зелени. Тест от край до край с истински MCP задейства всеки инструмент за всеки вид агент-работник. Агентите-работници получават имената си по подразбиране от моите белот ботове, а мениджърите са ханове и царе.

  2. Три агентски инструмента на един етаж

    Агенти-работници на Claude Code, Codex и OpenCode седят един до друг, а мениджърът може да наеме всеки от тях. Всеки човек носи собствените си AI акаунти за всеки доставчик, може да отстъпи един на колега с одобрението на собственика и вижда измервател на ползването за всеки акаунт; работещ агент-работник може да се премести между акаунти. На срещите сядат от двама до петима агенти-работници по схеми като дебат, map-reduce, червен и син екип или комисия за преглед, като всяко място избира свой доставчик, модел и акаунт, така че работник на Claude, на Codex и на OpenCode да спорят на една маса срещу краен срок.

  3. Агенти-работници, изолирани от операционната система

    На Linux всеки AI акаунт работи като собствен непривилегирован потребител от общ набор, 32 потребители в 16 групи по етажи, достъпни през един помощник, разрешен с правило в sudo. Hooks пристигат през unix сокет, а всяко четене, което офисът прави на файл, достъпен за запис от агент-работник, използва отваряне без следване на символни връзки и с проверка на собственика. Изолацията е тествана за отказан достъп върху еднократен набор от потребители на истински сървър, проверена е с мутационно тестване и е минала през преглед на сигурността от Opus, който откри критично инжектиране на команди в скрипт с root права през името на етаж, преди да се отвори pull request. Пусната е в действие, а работещите агенти-работници се рестартираха под потребители от набора.

  4. Изпълнители на лични и отдалечени компютри, които при грешка блокират

    Агент-работник може да работи на нечий собствен компютър, така че данните за вход остават на тази машина. Изпълнителят отваря една изходяща WebSocket връзка и приема фиксиран набор от именувани операции (spawn, attach, write, resize, kill, diff, commit, PR, worktree); от сокета не се приема нито изпълним файл, нито shell, нито среда, нито работна директория. Токените за регистриране са хеширани, за еднократна употреба и изтичат след 10 минути. Пуснат е изключен и отказва да работи, докато изолацията не е включена; в пети от девет кръга на проверка се откри, че shell на офиса може да прочете тайния ключ за подписване на сесии и да подправи бисквитка на собственик. Отдалечен компютър се свързва вместо това през SSH: агентите-работници работят в tmux зад принудителна команда (forced command) с фиксиран ключ на хоста, а поверителен етаж не записва нищо от работата си на диска на офиса.

  5. Роли, с отказ по подразбиране за гостите

    Всеки започва като гост, а администраторите и членовете получават права по етаж и по група. Ролята на госта е филтър за съобщения: всяко съобщение от клиента без изрично правило се отхвърля, а тест в CI пада, докато всеки нов вид съобщение няма такова. Интеграторът състави опис на 85 съобщения от клиента, 57 съобщения от сървъра и 37 входни точки по HTTP и WebSocket, след което пусна тестова среда с враждебен гост от 174 съобщения и 59 проверки, която не откри изтичане на работа към госта. Етаж, в който не може да се влезе, отговаря точно както етаж, който не съществува.

  6. Производителност като измерван цикъл

    В pull request #81 основният и новият клон бяха измервани на редуване върху една и съща предварително записана 30-секундна разходка с 12 агенти-работници с екран на живо, на RTX 2080 при 1080p. Слетите геометрии с цветове по върхове, лъчевото проследяване през BVH и предварителното компилиране на шейдърите свалиха медианното време за кадър от 20,1 ms на 6,0 ms, а извикванията за изчертаване от около 1 550 на около 355. Последва статистика върху екрана в играта с рекордер за 30 секунди, така че следващото влошаване да дойде като число.

Поглед през рамото на мениджъра на етажа: фигура на работник с оранжева шипеста глава седи на бюрото на шефа пред лаптоп, на който се вижда терминален текст. През стъклената стена зад него се виждат откритото пространство на етажа, табло „Task queue“, табло „Pull Requests“, диван за почивка и асансьор с надпис „Storefront“, а две празни столове са обърнати към бюрото.
Мениджърът на етажа на работа, а зад стъклото е етажът.

Какво избрах и какво отпадна

Избрах

Fork на оригиналния MIT проект и посочване на източника в хранилището

Пред

Изграждане на офиса от нулата

Вече имаше 3D сцената, PTY терминалите и git worktree, така че работата можеше да започне направо със средата за управление на агентите. UPSTREAM.md прави произхода проверим.

Избрах

Една изходяща връзка и фиксиран списък от именувани операции за изпълнителите на лични компютри

Пред

Допълнителна система за агенти, посредник (broker) и достъп до отдалечен shell

Именуваните операции покриват работния процес, а през сокет, който не приема команден ред, не може да се подаде и вреден команден ред. В README файла е записано, че честотата на отказите в продукция не е измервана.

Избрах

Оркестрацията да се премести в собствения мениджър и в изпълнителите на офиса

Пред

Да остане Orca, външен инструмент с MIT лиценз, като това, което пуска терминалите на агентите

Офисът скоро стана собствена среда за управление, с мениджър, git worktree и табла, така че втори оркестратор ги дублираше. Преместването е частично: координаторът на изграждането още беше сесия на Claude Code извън продукта, а започнах да ползвам офиса за собствената си работа през изпълнителите на лични компютри.

Резултатът

Промените (commit) в копието са на мое име в GitHub и са написани от агентите, които ръководех. Част от тази работа е пренесен код от оригиналния проект, а UPSTREAM.md отбелязва кой точно. Мениджърът на етажа, изолацията на агентите-работници, изпълнителите, ролите и работата по производителността са нови, така че офисът отива много отвъд проекта, който намерих. Оригиналният проект продължи да излиза с нови версии и по-късно изгради собствени варианти на няколко неща, които моето копие имаше първо, включително отделен вход за всеки акаунт и MCP сървър. Офисът работи на мой собствен сървър, а хранилището е частно. Още непроверено: преминаване на целия набор от тестове върху последната промяна (commit) и честотата на откази на изпълнителя в ежедневна употреба.

Какво следва

Страници с бяла дъска върху 3D таблото, заявки за одобрение за агентите-работници на лични компютри и преместване на ежедневната ми работа с агенти в офиса.