Plank help · updated 2026-11-02
Доступы (сохранённые логины и ключи)
Где Plank хранит логины, пароли, API-ключи и токены, которые вы ему даёте: скрыты из чата, зашифрованы и используются за вас — ассистент их больше не видит.
Agents: fetch the raw markdown of this page at /ru/help/credentials-vault.md
Доступы (сохранённые логины и ключи)
Доступы — это хранилище рабочего пространства: одно место для всех логинов, паролей, API-ключей и токенов, которые вы даёте Plank. Он открывается из «Источников»: строка «Доступы» там показывает, сколько входов сохранено, и открывает список (на телефоне: Ещё → Источники → Доступы). До 11 октября 2026 года это была вкладка страницы «Интеграции», а до 12 октября 2026 года — отдельная строка на боковой панели; старая ссылка по-прежнему его открывает.
Всё там зашифровано. Ничего из хранилища не показывается ассистенту обратно: Plank сам пользуется сохранённым входом за ассистента — вводит его на сайте или передаёт одному запуску скрипта, — так что значение больше не проходит через чат.
Как дать ассистенту пароль
Просто вставьте его в чат, как сказали бы коллеге:
zapis.kz Логин: anna Пароль: S3cret-pass
Прежде чем сообщение дойдёт до ассистента, Plank вынимает пароль и ставит на его место метку. Ассистент (и все участники общего чата) видят метку, а не пароль. Затем ассистент сохраняет его под названием и сообщает вам, например:
Сохранил вход для zapis.kz в хранилище «Доступы» — он виден только вам. В чате пароль скрыт. Изменить или удалить: Доступы.
Если сохранить не удалось, пароль всё равно убирается из сообщения — Plank никогда не пропускает его «на всякий случай». Ассистент попросит вас добавить доступ самостоятельно: Доступы → Добавить.
Можно добавить и напрямую: Доступы → Добавить, выберите вид (логин и пароль, API-ключ, токен…), дайте название и, для сайта, укажите сайт.
API-ключ, который вы вводите в форме подключения интеграции или в настройках (с названием вроде GITHUB_TOKEN), сразу же сохраняется и в хранилище и появляется в Доступах; если изменить или удалить его в той же форме, хранилище тоже обновится.
В ваших собственных чатах такой ключ есть в окружении команд ассистента ($GITHUB_TOKEN) только в том пространстве, для которого он сохранён. Ключ, сохранённый для вас во всех ваших пространствах, есть в каждом из них.
Интеграция, которую вы подключили через вход (например, Notion), тоже хранит свой токен доступа в хранилище — под названием «MCP: <интеграция>». Plank обновляет его сам и пользуется им только сам: токен отправляется этой интеграции и никогда не выдаётся ассистенту или скрипту. Чтобы получить новый, переподключите интеграцию в Интеграциях; чтобы удалить, нажмите Отключить у интеграции — токен удалится вместе с подключением. Пока интеграция подключена, удалить или заменить его в Доступах нельзя.
Личный или общий
- Личный — видите и используете только вы. Ваш ассистент пользуется им в ваших чатах.
- Общий — пользоваться может каждый участник пространства, в том числе ассистент в общем командном чате.
Выбора по умолчанию нет: в Добавить доступ вы выбираете Только мне или Всему пространству, а если отдаёте доступ ассистенту в своём чате, он сначала спросит. Доступ к системе, в которой работает вся команда, — 1С, банк, CRM, маркетплейс — обычно делают общим: личный не увидит никто из тех, кто придёт в пространство позже, а сделать его общим можете только вы. Доступ, введённый в общем командном чате, сохраняется как общий.
Личный доступ можно подключить и во всех ваших пространствах: тогда он следует за вами, и им пользуются ваши собственные чаты в любом пространстве, где вы единственный участник, — например, ваш Google-календарь из Telegram-бота, который живёт в другом пространстве. В пространстве, где есть другие люди (кроме того, из которого вы его подключили), он работает только после вашего «да» для этого пространства: бот или автоматизация, которые вы там создали, действуют от вашего имени для всех, кто им пишет. Ассистент спросит, когда он там впервые понадобится, и так же можно забрать разрешение. Если в пространство, где вы были одни, кто-то вступит, доступ там остановится до вашего «да». Собственный доступ пространства того же вида там всё равно идёт первым. Такой доступ нельзя сделать общим — сначала попросите ассистента вернуть его в одно пространство. Ассистент спрашивает, как подключить, когда сохраняет личный аккаунт. Чтобы поменять позже, откройте доступ в Доступах и выберите Сделать доступным во всех моих пространствах или, чтобы вернуть, Только в этом пространстве (разрешения, данные в других пространствах, забываются); или попросите ассистента.
Мои подключения
Вверху Доступов раздел Мои подключения показывает всё, что идёт с вами во все ваши пространства: доступы, подключённые во всех ваших пространствах, и коннекторы (MCP-серверы), которые вы подключили для всего аккаунта. У каждого доступа видно, работает ли он Во всех ваших пространствах или в скольких из них (Работает в 2 из 3), и когда и где им пользовались в последний раз. Откройте доступ — в блоке По пространствам по каждому из них: Работает — здесь только вы, Работает — вы разрешили (с кнопкой Отозвать), Не разрешён — здесь есть другие люди (с кнопкой Разрешить) или Не используется — здесь вы наблюдатель. Коннектор здесь можно только Отключить: у OAuth-коннектора удаляется вход во всех пространствах, и его можно подключить снова; любой другой удаляется сразу из всех. Этот список видите только вы — общий командный чат ваших доступов аккаунта не видит.
Личный доступ никогда не используется в общем командном чате — даже ассистентом владельца пространства. Чтобы дать его команде, откройте доступ и выберите Сделать общим; Сделать личным — вернуть обратно. Наблюдатели видят список, но не могут добавлять, менять или использовать доступы.
Удаление
Удалить стирает секрет сразу — он уничтожается, а не прячется, и восстановить его нельзя. Название остаётся в истории 90 дней, чтобы было видно, что доступ существовал и кто им пользовался. Если вы выходите из пространства, ваши личные доступы в нём стираются так же.
Сохранённые входы браузера
Когда вы входите на сайт в облачном браузере ассистента, вход хранится здесь как доступ вида Сессия браузера с названием по имени сессии, например «Браузер: Kaspi». Его никто не вводит и никто не может прочитать: им пользуется только облачный браузер, чтобы открыть сайт уже авторизованным, и он никогда не попадает к ассистенту, в скрипт или в файлы пространства.
- Ваш остаётся вашим. Вход, сделанный в вашей собственной сессии браузера, открывается авторизованным во всех пространствах, где вы работаете, и никогда — в браузере общего чата. Вход, сделанный в браузере общего чата, принадлежит пространству и используется только там.
- Его можно переименовать или удалить — но не изменить, не сделать общим и не выдать скрипту. Удаление выводит ассистента из аккаунта на этом сайте насовсем: следующая сессия начнётся со страницы входа. Сначала закройте открытую вкладку браузера для этого сайта, иначе при закрытии она сохранит вход снова.
Кто и когда пользовался
Откройте доступ и выберите История использования: каждое сохранение, изменение, открытие общего доступа, ввод на сайте или выдача скрипту — кто, когда и на каком сайте. Самого секрета в истории нет.
Что ассистент с ним делает
- Вход на сайт — ассистент просит Plank войти за него. Plank сам вводит логин и пароль на странице, и только на том сайте, для которого вход сохранён. Если пароль попросит страница другого сайта, Plank откажет.
- Скрипт или задача по расписанию — скрипт запрашивает значение при запуске. Оно выдаётся этому одному запуску и нигде в ваших файлах не записывается.
Пароль от сайта по умолчанию используется только самим Plank для входа — скрипту он не выдаётся. API-ключ или токен выдаётся скриптам, которым он нужен.
Для ассистента
Логины, пароли, API-ключи и токены хранятся в хранилище пространства. Никогда не записывайте секрет в файл, AGENTS.md, память, таблицу данных или строку источника — ни в token.json, ни в .env, ни в credentials.json. Никогда не печатайте его и не просите вставить повторно.
Инструменты
| Инструмент | Что делает |
|---|---|
plank_credentials_list | Список сохранённого (название, вид, сайты, имя переменной, личный/общий). Вызывайте первым, когда задаче нужен вход или ключ, — и прежде чем сказать, что сервис не подключён: доступ с пометкой «во всех пространствах человека» — личный доступ человека, и здесь он работает. Значений не возвращает. |
plank_credential_save | Сохраняет доступ. После того как человек вставил пароль, в сообщении стоит метка [plank:credential pending=<id> field=password] — передайте этот pending_id с label (и hosts для сайта). Если в метке только пароль, а логин (почту, имя пользователя) человек написал открытым текстом, передайте и его: pending_id и fields: {"username": "…"} (для вида connection ещё url), вид login — рядом с pending_id допустимы только username и url, секрет всегда берётся из метки, а логин никогда не сохраняется как note. fields без pending_id — когда метки нет: значение пришло иначе (файл, загруженный человеком) или человек напечатал секрет, а он дошёл до вас открытым текстом (платформа узнаёт подписанный «пароль: …» и известные форматы токенов, но не любую голую строку). Сохраните это значение через fields — не отказывайтесь и не просите прислать его снова. Оно считается увиденным: один раз скажите человеку, что пароль был виден в чате и его стоит потом сменить. |
plank_credential_request | Просит у человека пароль, ключ или логин карточкой-формой в чате: он вводит значение в карточку, приложение сразу сохраняет его в «Доступы», а вы значение не видите. Лучше так, чем просить напечатать секрет в чат. Сначала проверьте plank_credentials_list; инструмент отвечает сразу — закончите ход одной короткой строкой. Следующее сообщение человека скажет, что доступ сохранён (ровно под тем названием, что вы просили), или «Не сейчас» — тогда не просите снова: карточка остаётся, и «Заполнить» открывает её заново. Сохранённый ключ перестал работать — вызовите с replaces (его название или id), и карточка даст тому же доступу новое значение. Никогда в запуске по расписанию. |
plank_credential_update | Переименовывает, меняет сайты или имя переменной, делает общим (owner: "workspace") или личным, переносит личный доступ во все пространства человека (scope: "account") и обратно (scope: "space"), разрешает такой доступ в этом пространстве с другими участниками (allow_here: true, только по «да» человека) или останавливает (false). Только владелец и не из общего чата. |
plank_credential_delete | Удаляет (секрет стирается сразу). |
plank_credential_verify | Спрашивает сервис, работает ли доступ (сейчас — боты Telegram; остальные отвечают unsupported). |
plank_connections_list | Что подключено, по пространствам: доступы (название, вид, личный/общий, статус), MCP-серверы, вебхук-триггеры (название, вкл/выкл, последняя доставка) и установленные киты. В личном контейнере spaces ("all" или список слагов) охватывает все пространства, где вы участник, — каждое перепроверяется при каждом вызове. Только метаданные: ни значения, ни секрета триггера, ни личных доступов другого участника. |
browser_login_with_credential | Входит на открытой странице сохранённым логином. Поля заполняет Plank; страницу сайта, которого нет в hosts доступа, он отклоняет. |
Метка [plank:credential not-saved field=…] значит, что сохранить не удалось: значение из сообщения убрано, ничего не сохранено. Попросите человека добавить доступ в Доступы → Добавить; не просите вставить его ещё раз.
После сохранения одной строкой скажите, что сохранили, личный это доступ или общий, и что изменить или удалить его можно в Доступы.
Как скрипту взять ключ
Скрипт читает сохранённый ключ в момент запуска — ничего не копируется в файл и ничего не печатается. Называйте доступ его названием из Доступы.
На Python (только стандартная библиотека; plank_vault.py есть в песочнице и лежит в каждом наборе, которому он нужен):
from plank_vault import get
key = get("amoCRM key") # основное значение (ключ / токен / OAuth JSON)
conn = get("1C base") # логин или подключение: {"username": ..., "password": ...}
pwd = get("1C base", "password") # одно поле
Из оболочки — передать значение ровно одной команде:
plank-secret run --env API_KEY="amoCRM key" -- python3 sync.py
plank-secret run --env PASS="1C base:password" -- ./login.sh
plank-secret file "Google token" --as token.json --writeback -- python3 scripts/google/read-sheet.py {}
run кладёт значение только в окружение этой команды (доступ:поле — или доступ.поле — выбирает одно поле, и любая из форм достаёт любое поле этого доступа: "Support API.base_url" так же, как "Support API.key"). file пишет его во временный закрытый файл, подставляет путь вместо {} и удаляет файл после команды; с --writeback файл, который команда переписала (обновлённый OAuth-токен), сохраняется обратно. plank-secret get <доступ> --field <поле> ПЕЧАТАЕТ значение — это для человека, который отлаживает в терминале; ассистент его не запускает, и его вывод никогда не попадает в чат. В чате используйте plank-secret run --env или import plank_vault — get печатает значение в переписку, и хотя редактор маскирует знакомое ему значение, полагаться на это нельзя.
Помощника для Node пока нет: из Node запускайте программу через plank-secret run --env … и читайте process.env.
Доступы, которые Plank держит сам. Токен бота Telegram, переданный триггеру, переносится в общий доступ «Бот: <название триггера>»; список триггеров говорит только, что токен задан и в каком доступе он лежит (botTokenStatus.vaultItem), но не само значение. Подключение ChatApp линии поддержки хранится как «ChatApp (линия поддержки)»: Plank сам его обновляет, поэтому в Доступах его можно только переименовать — выдать скриптам, заменить или удалить там нельзя.
Где это работает. Те же вызовы работают в чате, при запуске @plank-button, по расписанию и по вебхуку. Какими доступами может пользоваться запуск:
- общим — любая автоматизация этого пространства;
- личным — только запуски, которые принадлежат его владельцу: триггер, который он создал, кнопка, которую он нажал, или его собственный чат. Такие запуски идут в собственном контейнере владельца. Личный доступ другого участника скрипту не выдаётся никогда.
Доступ с именем переменной окружения (env_name) ещё и кладётся прямо в окружение запуска кнопки или триггера — по тому же правилу; если у личного и общего доступа одно имя, побеждает личный. Разрешить автоматизации пользоваться чужим личным доступом можно будет позже.
Когда отказывает. Ошибка одной фразой говорит почему и никогда не содержит значения:
- «доступ <название> не найден — сохраните его в «Доступы» (список: plank_credentials_list)» — доступа с таким названием нет: сохраните его в Доступы или проверьте название.
- «нет прав на использование в автоматизации: «<название>» — личный доступ участника; …» — доступ есть, но это личный доступ участника, а запуск не его (общий контейнер или его автоматизации). Владелец может сделать его общим в Доступы.
- «этот доступ используется только платформой …» — вход на сайт по умолчанию
platform_only, и скрипт его не прочитает; используйтеbrowser_login_with_credentialили попросите человека изменить это в Доступы, если скрипту он действительно нужен. - «Доступ выдаётся только скрипту в вашем контейнере» — запрос пришёл не от скрипта в контейнере этого пространства.
- «Наблюдатель не может пользоваться сохранёнными доступами» — чат наблюдателя ничего не получает.
- «доступ удалён» — доступ удалили.
В Python они приходят как VaultNotFound, VaultRefused, VaultAmbiguous (подходят несколько — назовите один по названию) и VaultUnavailable (хранилища здесь нет), так что скрипт может вернуться к старому файлу. Наборы читают сначала хранилище, затем переменную окружения, затем свой старый файл — так что пространство с token.json продолжает работать. Настраивая новое, сохраняйте доступ в хранилище, а не в этот файл.
Скрипт, который сам получает доступ (OAuth-разрешение, обновлённый токен), сохраняет его через plank_vault.save(label, kind, fields, provider=…) — доступ записывается как сохранённый скриптом, и значение не проходит через чат. Два набора сами переносят свои старые файлы, когда вы их запускаете: scripts/google/oauth/authorize.py сохраняет разрешение Google в хранилище и удаляет token.json, а scripts/1c/odata/move-login-to-vault.py (сначала пробный запуск, затем --apply) переносит логин 1С из credentials.json. Другие файлы с токенами вручную не переносите.
Логин 1С, которым платформа записывает документы за вас, — общий доступ «только для платформы»: его нельзя открыть скриптам или сделать личным. Скрипты 1С пользуются своим доступом, который создаёт move-login-to-vault.py.