Агентствам
Для агентств
- 5
- Ролей, от исполнителя до владельца
- 3 $ / мес
- Одно дополнительное место в команде
- 3
- Места в Business, владелец среди них
- 58
- Названных видов событий в журнале
Агентство теряет аккаунты на людях, а не на отпечатках
Двенадцать клиентов, четыре человека и таблица с паролями. Так живёт большинство агентств, и живёт ровно до первого входа не с той машины. Таблица никого не остановит.
ARMANOS собирает агентство в одно рабочее пространство. Подписка принадлежит одной учётной записи. Остальные входят по приглашению, и любой их запрос считается по владельцу: норма профилей, места машин, библиотека прокси, группы, журнал. Этим занят один файл, а все прочие части спрашивают его.
Человек состоит в одном пространстве за раз: строка участия у него единственная. Значит подрядчик не сидит в двух агентствах сразу. Чтобы войти к вам, он сначала уходит от других, а уход это событие с последствиями, они описаны ниже.
Норма профилей
Считается по владельцу и всем участникам вместе. В норму первыми входят профили владельца, потом участники по старшинству.
Места машин
Один запас на всю команду. Считается при регистрации машины и снова на каждом ударе сердца.
Библиотека прокси
Одна на пространство. Пароли выдаются по роли, а не всякому, кто сумел назвать номер записи.
Группы
Один набор папок для всех. Ими же вы сужаете то, что видит участник.
Библиотека креативов
До 500 материалов. Они принадлежат пространству и остаются, когда человек уходит.
Сценарии и расписания
Общие на пространство, правит их управляющий и старше.
Журнал
Дела всех участников в одном месте, читают администратор и владелец.
Место занимает человек, и одно уже занято владельцем
Места считаются по людям, а не по машинам. В Business их три: вы и двое коллег. В Professional одно, ваше, поэтому команда там начинается с докупленных мест. Дополнительное место стоит 3 доллара в месяц, в кассе их берут до пятидесяти.
У приглашённого уже должна быть учётная запись. Сервер откажет в приглашении на адрес, которого никто не регистрировал: владение почтой нигде не доказывается. Порядок такой: человек заводит запись, потом вы его приглашаете. Приглашение выписано на эту запись, живёт семь дней, и, пока им не воспользовались, его можно отозвать.
Места считаются трижды, и это нарочно. При выписке приглашения, чтобы отказ достался вам, а не коллеге. При приёме, под замком на строке вашей подписки, чтобы двое не заняли последнее место разом. И при каждом запуске профиля, чтобы кончившаяся оплата не кормила пятерых.
Когда тариф падает, ничего не удаляется. Живые места остаются у самых старших участников, остальные получают понятный отказ при запуске. Вернёте тариф, и человек работает дальше.
- Business, 200 профилей
- 42 $ / мес
- Два места сверх трёх включённых
- +6 $ / мес
- Итого в месяц
- 48 $
- Тот же заказ на год
- 38 $ / мес, 456 $ за год
Браузер только просит. Цену пересчитывает сервер при оформлении: packages/shared/src/index.js, priceForPlan.

Пять ролей, и на каждую сервер отвечает по-своему
Роли такие: владелец, администратор, управляющий, исполнитель и участник. Это ступени: старшая проходит там, где требуется младшая. Исполнитель и участник стоят на одной ступени, два имени нужны, чтобы подписать, кто чем занят.
Сторож стоит на самом ходе и выясняет вашу роль в вашем пространстве раньше, чем ход отработает. Управляющий когда-то был просто словом в списке и ничем не отличался от исполнителя. Теперь отличается: общие рабочие вещи, группы, библиотека прокси, сценарии и расписания, принадлежат управляющему и старше. Деньги, люди и журнал принадлежат администратору и владельцу.
Правка профиля вообще не про роль. Переименовать профиль, сменить ему прокси или удалить его может только та запись, которая его завела. Коллега, которому профиль открыли, запускает его и работает внутри. Всем прочим сервер отвечает «не найдено», поэтому перебором номеров чужого не нащупать.
Ключи для программ личные, до двадцати на человека, у каждого свои права. Ключ никогда не сильнее хозяина: на запросе с ключом работает тот же сторож ролей, и ключ участника с правом logs:read журнал всё равно не прочитает.
| Что можно | Участник, исполнитель | Управляющий | Администратор | Владелец |
|---|---|---|---|---|
| Открыть профиль, который ему дали | Да | Да | Да | Да |
| Заводить профили в общей норме | Да | Да | Да | Да |
| Переименовать или удалить свой профиль | Да | Да | Да | Да |
| Группы: завести, поправить, удалить | – | Да | Да | Да |
| Библиотека прокси: добавить, поправить, удалить, забрать с паролями | – | Да | Да | Да |
| Купить прокси в магазине | – | Да | Да | Да |
| Сценарии и расписания | – | Да | Да | Да |
| Прочитать пароль прокси из библиотеки | только вместе с открытым ему профилем | Да | Да | Да |
| Приглашать, менять роли, открывать папки | – | – | Да | Да |
| Тариф, места, доплата за профили, оплата | – | – | Да | Да |
| Читать журнал пространства | – | – | Да | Да |
| Отвязать чужую машину | – | – | Да | Да |
| Нельзя исключить и понизить | – | – | – | Да |
Участник видит только те папки, что вы ему открыли
Пока вы не сказали иначе, участник видит все профили, которые ему открыли. Задайте ему список групп, и вид сузится до них. Пустой список это осознанное снятие ограничения: сняв последнюю папку, вы не запираете человека молча.
Ограничение стоит в двух местах, потому что список это ещё не защита. Список профилей отбирает по разрешённым группам, а прямой запуск по номеру сверяет те же строки. Профиль без группы при заданном ограничении не показывается, иначе его обходили бы, просто не кладя профиль в папку.
Строки доступа записаны на ваше пространство, а не на человека. Ваше ограничение не поедет с подрядчиком к следующему клиенту и стирается в тот миг, когда он от вас уходит. Раздают доступ только владелец и администратор, а самого владельца ограничить нельзя.
- 1
Заведите папку под клиента
Окно «Группы», управляющий и старше. Назовите её так же, как клиент назван у вас в счетах.
- 2
Положите в неё профили этого клиента
У профиля одна группа. Профили вне папок ограниченному участнику не видны.
- 3
Пригласите подрядчика исполнителем
Сначала он заводит запись, потом вы приглашаете адрес, и он принимает в течение семи дней.
- 4
Откройте ему одну эту папку
Окно «Участники», папки. Одна выбранная группа значит один видимый клиент.
- 5
Отдайте те профили, которые он и правда будет открывать
Видимость и доступ это разные вещи. Папка сужает то, что видно, а запускать позволяет именно общий доступ.

Профиль открывается в одном месте
Двое, открывшие один аккаунт с двух машин, это ровно то поведение, за которое аккаунты блокируют. Продукт для агентства не должен создавать его сам, поэтому у профиля есть замок.
Запуск берёт замок на вашу машину на три минуты, и программа продлевает его каждые шестьдесят секунд, пока окно открыто. Вторая машина получает отказ 409, где названы держатель и время, а не молчание и не тихий пропуск.
Перехват делается осознанно и с условием. Он побеждает, только пока замок у той самой машины, которую вам показали, поэтому два одновременных перехвата не проходят оба. Прежний держатель узнаёт об этом за минуту: продление ему отказывают, программа закрывает окна и говорит, что случилось.
Закрытие профиля снимает замок только этой машины, поэтому ваше окно никогда не освободит чужое. Выключенная машина не снимает ничего, и профиль освобождается сам через три минуты.
- Ответ
- 409 Conflict
- error
- profile_busy
- busy.name
- Анна, MacBook Pro
- busy.since
- 2026-09-10T09:14:02Z
- busy.sameUser
- false
Это то, что получает вторая машина: apps/server/src/profiles/profiles.service.ts, start().
Замок живёт на сервере
Журнал отвечает, кто это сделал, и переживает самого человека
Словарь событий это 58 названных видов в одном файле, общий для всех, кто пишет, и для всех, кто читает. Регистрация, входы и запирание после подбора пароля, заведение, запуск, остановка, правка и удаление профиля, жизнь прокси, регистрация и отвязка машин, приглашения, роли, выдача папок, смена тарифа, выпуск и отзыв ключей.
В каждую запись сразу вписан хозяин пространства. Одно это решение означает, что исключение участника не стирает его историю: раньше журнал читался по текущему списку людей, и вместе с человеком пропадали все его дела. В строках подставляются почта того, кто действовал, и имя профиля, поэтому вы читаете слова, а не коды.
Если действие пришло с ключом, в запись ложится номер ключа. Ключей у одного человека бывает несколько, и без номера утечка означала бы отзыв всех разом и сломанную автоматизацию.
Поверхностей три: все действия, открытие и закрытие браузера, входы и регистрации машин с адресом и страной. На странице до ста строк. Читают администратор и владелец, и ключ этого не поднимает.
Поверх тех же записей работает панель подозрительного, три правила. Вход из страны, которой у этого человека не было тридцать дней. Четыре и больше профилей на одном прокси. Пять запусков внутри одной минуты, причём наш собственный пакетный запуск исключён: он разносит старты на три-четырнадцать секунд.
Кто
Почта участника, подставленная по его номеру при сборке страницы.
Что
Одно из 58 названий, например profile.start, team.role, proxy.secret.read.
Какой профиль
Имя профиля и его сценарий, вынутые из подробностей записи.
Откуда
Адрес, страна и имя машины у входов и регистраций машин.
Чем сделано
Номер ключа, если действие пришло от ключа, а не от человека за клавиатурой.
Чьё пространство
Записано в саму строку, поэтому история переживает исключение участника.
Уход человека это одна сделка, которая забирает доступ
Машины это тоже места. Их считают при регистрации и на каждом ударе сердца, а отвязка машины в кабинете освобождает место сразу. Машина при этом помнит, что её отвязали, и не возвращает место себе сама на ближайшем ударе.
Отвязанная машина не запускает профиль и не продлевает замок. Запрет живёт на сервере, а не в программе, поэтому переписанная программа его не обойдёт. Свою машину отвязывает каждый, чужую только администратор и владелец.
Исключение и уход по своей воле идут одной дорогой, а журнал честно записывает, что именно было. Это одна сделка, и вот её порядок.
- 1
Общие доступы снимаются в обе стороны
И то, что открыли ему, и то, что он открыл из профилей, уходящих вместе с ним.
- 2
Его замок отпускается
Профиль, который он держал, не остаётся занятым после его ухода.
- 3
Профили, заведённые после вступления, переходят вам
Число перешедших профилей попадает в запись журнала.
- 4
У уходящих профилей стирается ссылка на вашу библиотеку
Профиль, с которым человек пришёл, сохраняет свой прокси и уходит с ним.
- 5
Слепки, совпавшие с вашей библиотекой, стираются
Сверяются адрес, порт и логин. Ваш рабочий прокси не уезжает внутри чужого профиля.
- 6
Его машины удаляются
Места под устройства возвращаются пространству.
- 7
Непринятые приглашения на этот адрес гасятся
Второй код, выписанный когда-то из-за недошедшего письма, не станет дорогой обратно.
- 8
Строка участия исчезает
Ваш тариф, норма и места перестают действовать для этого человека.
- 9
Строки доступа к папкам исчезают
Ваше ограничение не поедет с человеком к следующему клиенту.
Профили, заведённые до вступления, остаются его
Что агентство получает на каждом тарифе
Free это одно место, ваше, поэтому команды на нём нет. В Professional место тоже одно: это тариф для одного человека с несколькими машинами, и команда там начинается с докупленных мест. Business сделан ровно под работу, о которой эта страница: три места, пять машин, от 200 до 1000 профилей.
Enterprise кнопкой не продаётся. Касса отказывается выдумывать ему цену и отправляет к разговору: взять деньги за условия, о которых никто не договорился, хуже медленной продажи.
Норма общая, и спрашивается она не однажды при покупке, а при каждом запуске. Профили считаются по владельцу и участникам вместе, и первыми в норму входят профили владельца. Понизили ступень, и лишние профили замораживаются, а не исчезают: они видны в списке, их можно перенести или удалить, но открыть нельзя. Действующей подписке дают три дня сверх даты продления, а программа работает сутки без связи.
| Free | Professional | Business | Enterprise | |
|---|---|---|---|---|
| Профили | 2 | от 10 до 100 | от 200 до 1000 | 5000 и больше |
| Цена в месяц | 0 $ | от 6 до 25 $ | от 42 до 139 $ | по договору |
| Мест в команде, вместе с владельцем | 1 | 1 | 3 | 20 |
| Дополнительное место в месяц | не продаётся | 3 $ | 3 $ | по договору |
| Дополнительный профиль в месяц | не продаётся | 2 $ | 2 $ | по договору |
| Машины | 1 | 2 | 5 | 20 |
| Ключи для программ | – | Да | Да | Да |
Чего это не делает
- Роли, папки и замок решают, кто к чему прикасается внутри команды. О том, как площадка судит профиль, они не говорят ничего и обещанием про блокировки не являются.
- У общего доступа нет уровней. Открыть профиль «только на просмотр» нельзя: человек, которому вы его дали, работает со всем, что внутри, включая куки и входы.
- Куки за общим доступом не едут. Сессия лежит в папке профиля на той машине, где его открыли, а на сервере хранятся настройки, не куки. Чтобы перевезти живую сессию, нужна папка синхронизации, и профиль при этом должен быть закрыт.
- Замок это правило сервера. Без сети или при недоступном сервере программа профиль всё равно откроет, поэтому две машины без связи могут открыть один аккаунт.
- Ни единого входа по корпоративной учётной записи, ни домена компании нет. Каждый регистрируется сам, потом вы приглашаете адрес, а неиспользованное приглашение умирает через семь дней.
- Один человек, одно пространство. Фрилансер, работающий на два агентства, не может состоять в обоих сразу: войдя к вам, он уходит от других.
Как проверить
В каждой строке названы файл, который это делает, и проверка, которая не даёт ему испортиться.
- Места считаются при выписке приглашения, при приёме под замком строки и при каждом запуске профиля
- apps/server/src/team/team.service.ts · apps/server/src/common/workspace/workspace.service.ts · apps/server/test/team-money-seats.js
- Участник видит только открытые ему папки, и в списке, и при прямом запуске по номеру
- apps/server/src/profiles/profiles.service.ts · apps/server/src/team/team.service.ts · apps/server/test/group-access.js
- Две машины не держат один профиль: 409 с именем держателя, условный перехват, истечение через три минуты
- apps/server/src/profiles/profiles.service.ts (LOCK_TTL_MS) · apps/server/test/profile-lock.js
- Уход одной сделкой забирает доступы, замок, машины, непринятые приглашения и доступ к папкам
- apps/server/src/team/team.service.ts (detach) · apps/server/test/team-money-seats.js
- В журнале 58 названных видов, а строка несёт почту автора, хозяина пространства и номер ключа
- apps/server/src/common/audit/audit.service.ts · apps/server/test/audit-filters.js
- Пароль прокси из библиотеки выдаётся управляющему и старше или вместе с профилем, на котором он стоит
- apps/server/src/proxies/proxies.service.ts · apps/server/test/proxy-secret.js
Что читать дальше
Команда, места и роли
Те же механизмы со стороны продукта, окно за окном.
Машины и перенос сессий
Как живая сессия переезжает между двумя машинами и чего сервер не видит.
Тарифы и места
Ступени, цена места и то, что касса пересчитывает за вас.
Как мы проверяем свои слова
Проверки, которые стерегут каждую страницу этого сайта.
Соберите всё агентство на одной подписке
В Business три места и пять машин. Дополнительное место стоит три доллара в месяц, и касса считает их за вас.