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.