--- title: Совместная работа description: Одновременное редактирование напрямую между участниками через WebRTC, без отдельного сервера и учётной записи. --- # Совместная работа Несколько пользователей могут одновременно редактировать один документ. Участники соединяются напрямую, поэтому центральный сервер не передаёт данные, а создавать учётную запись не требуется. ## Отправка ссылки 1. Нажмите кнопку «Поделиться» в правом верхнем углу. 2. Нажмите **Поделиться файлом** — ссылка `app.openpencil.dev/share/` будет скопирована. 3. Отправьте её другим участникам. Документ попадает в комнату только через «Поделиться»: вкладка, из которой вы делитесь, становится вкладкой комнаты и остаётся связанной со своим файлом. Присоединиться может любой, у кого есть ссылка. ## Вход в комнату Откройте ссылку или вставьте её (или только идентификатор комнаты) в поле **Войти** на панели «Поделиться» либо в **Войти в комнату…** на начальном экране. Комната открывается в отдельной вкладке, поэтому уже открытые документы не меняются. На компьютере браузер также предлагает **Открыть в настольном приложении** — комната откроется в OpenPencil по ссылке `openpencil://join`. Вы входите сразу под сгенерированным именем, например *Teal Fox*. Своё имя можно задать на панели «Поделиться» или в настройках; оно используется во всех комнатах. Комнаты не хранятся на сервере: файл находится на устройствах тех, кто был в комнате, поэтому вкладка комнаты открывает документ, только пока кто-то из них в сети. До тех пор она сообщает, что ждёт, объясняет почему и открывает файл, как только войдёт тот, у кого он есть. Комната, в которой вы уже были, сразу открывается из копии на этом устройстве, а ваши изменения синхронизируются, когда вернутся остальные. **Покинуть комнату** на панели «Поделиться» завершает ваше участие. Вкладка, которая поделилась своим документом, снова становится этим документом; вкладка, которая вошла в комнату, сохраняет файл комнаты как локальную несохранённую копию, которую можно сохранить. У каждой вкладки комнаты своё соединение, поэтому можно быть в нескольких комнатах одновременно. ## Что синхронизируется - **Документ:** фигуры, текст, свойства и компоновка обновляются после каждого изменения. - **Указатели:** видны положение, имя и цвет каждого участника. - **Выделение:** выбранные другими участниками объекты видны всем. - **Агенты:** встроенный чат с ИИ, чаты ACP и Pi harness и каждый подключённый клиент MCP отображаются как указатели у слоёв, которые они читают или редактируют; на их контурной подписи есть значок-искорка и позывной, например *Fern*. Пока чат передаёт JSX потоком, его указатель проходит по элементам по мере их появления и обводит их. Указатель и контур имеют цвет того, кто запустил агента, так что видно, чей это агент. Передаются только имя, тип, модель, состояние, страница, положение и изменяемые слои — но не запросы и ответы. ## Режим слежения Щёлкните аватар участника на верхней панели, чтобы следовать за его областью просмотра. Положение и масштаб вашего холста будут повторять его вид, а рамка его цвета с панелью «Вы следуете за …» показывает, за кем вы следите. Чтобы остановить слежение, снова щёлкните аватар, нажмите Esc либо сами щёлкните по холсту, прокрутите его, измените масштаб или переключите страницу. За вашими собственными агентами — чатом ИИ и MCP-клиентами вроде Claude Code или Cursor — вид следует автоматически, пока они работают, так что то, что они правят, остаётся на виду. Отключить это можно кнопкой с прицелом вверху панели ИИ. Если вы перестанете следовать за агентом во время работы, за ним не будут следовать до конца его работы, а при следующем запуске — снова. На аватаре отображается число агентов, которых запустил этот участник. Наведите на него указатель, чтобы увидеть каждого агента, чем он занят и на какой странице, и нажмите **Следовать** рядом с агентом, чтобы страница и слои, которые он редактирует, оставались в поле зрения. Слежение продолжается между его ответами и прекращается, когда агент уходит. Кнопка после аватаров показывает всех участников комнаты с их агентами и доступна с клавиатуры. Ваш собственный аватар перечисляет ваших агентов — щёлкните по одному, чтобы переименовать, — и содержит пункт **Покинуть комнату**. Панель «Поделиться» перечисляет всех участников комнаты с запущенными ими агентами, показывает, чем занят каждый агент и на какой странице. Следуйте за агентом так же, чтобы страница и слои, которые он редактирует, оставались в поле зрения; слежение продолжается между его ответами и прекращается, когда агент уходит. Дважды щёлкните своего агента, чтобы переименовать его. ## Как это работает Участники соединяются напрямую через WebRTC, поэтому данные документа передаются из одного браузера в другой без центрального сервера. Состояние документа синхронизируется с помощью Yjs CRDT. Одновременные изменения автоматически объединяются. Перемещение и изменение порядка слоёв тоже объединяются. Каждый слой помнит всех родителей, в которые его перемещали, и своё место среди соседних слоёв, и каждый участник выводит из этой истории одно и то же дерево слоёв ([CRDT дерева Эвана Уоллеса](https://madebyevan.com/algos/crdt-mutable-tree-hierarchy/)). Перемещения, изменения порядка и новые слои от разных людей применяются все; если двое одновременно переместят один и тот же слой, у всех побеждает одно и то же перемещение. Если одновременные перемещения вложили бы два слоя друг в друга, более позднее отменяется, а слой, нового родителя которого тем временем удалили, возвращается на прежнее место. Всем в комнате нужна версия OpenPencil, которая записывает дерево слоёв одинаково; версии, записывающие его по-разному, не видят комнат друг друга. IndexedDB хранит локальное состояние: после перезагрузки страницы вы автоматически возвращаетесь в комнату с тем же состоянием. ## Советы - Совместная работа доступна в браузере и настольном приложении. - Идентификаторы комнат создаются из криптографически стойких случайных значений. Присоединиться может только тот, кто знает ссылку. - Указатели и сведения о присутствии отключившихся участников удаляются автоматически.