# Секреты (/ru/docs/workspaces/secrets)

Секрет — это переменная, значение которой остаётся в связке ключей на вашем Mac. В файле рабочего пространства лежит
только её имя, так что рабочее пространство можно коммитить и передавать, не раскрывая свои учётные данные. Используйте
секреты для паролей, токенов, API-ключей и всего, что вы не стали бы вставлять в чат.

## Как сделать переменную секретом [#make-a-variable-secret]

1. Откройте таблицу переменной: страницу [«Окружения»](/docs/workspaces/environments),
   **Настройки папки… › Переменные** или вкладку **Переменные** запроса.
2. Добавьте переменную или найдите её и отметьте **Секрет**.
3. Введите значение в поле (в нём написано **Не задано на этом Mac**) и нажмите <kbd>↩</kbd> или **Сохранить**.

Поле больше никогда не показывает значение. Когда значение задано, в нём написано **Хранится в Связке ключей** и
нарисован ключ. Чтобы изменить значение, введите новое и сохраните.

Секрет используется как любая переменная: `{{token}}`.

<Shot id="workspaces-secret-variable" alt="Переменные рабочего пространства на странице «Окружения»: token отмечена как секрет, в поле её значения написано «Хранится в Связке ключей»" />

В файле секрет — это имя и флаг, без значения:

```toml
[[variables]]
name = "token"
secret = true
```

У каждого уровня своё значение. Секрет `password` в окружении Staging и секрет в Production — это два элемента связки
ключей, так что у каждого окружения может быть свой пароль.

## Где лежат значения [#where-the-values-live]

Значения хранятся в вашей связке ключей входа, по одному элементу на секрет, с меткой `Echolot secret <name>`. Они
принадлежат рабочему пространству (по его ID, который записан в `workspace.toml`) и уровню, на котором определена
переменная. Инструмент командной строки на том же Mac читает те же элементы.

Секрет без значения на этом Mac не подменяется значением другого уровня. Запрос сообщает
`the secret {{password}} has no value on this Mac`, пока вы не зададите значение.

<Edition only="appstore">
  Редакция для App Store использует ту же связку ключей. Элементы, созданные загрузкой с сайта или инструментом
  командной строки, могут один раз запросить доступ; выберите **Всегда разрешать**.
</Edition>

## Что никогда не попадает в файлы [#what-never-goes-into-files]

Echolot не пишет в файлы рабочего пространства:

- Значения секретных переменных.
- Секреты, которые сохраняют [захваты из ответов](/docs/requests/captures): захват, помеченный как секретный, пишет
  только в связку ключей. В Alpenglow **Auth › Sign in** захватывает `access_token` в секрет `{{token}}`.
- Токены OAuth 2.0 и входы в MCP.
- Значения, которые вы переносите командой **Переместить в Связку ключей** (см. ниже).

То, что вы вводите открытым текстом, остаётся открытым текстом. Если поле пароля авторизации или прокси содержит
буквальное значение вместо переменной, Echolot предупреждает под ним:
**Сохраняется открытым текстом в файле рабочего пространства.** Нажмите **Переместить в Связку ключей**: значение станет секретной переменной рабочего пространства, а
в поле вместо него появится `{{name}}`.

Секреты скрываются и везде, где Echolot показывает или передаёт дальше разрешённый запрос: в предпросмотрах, Быстром
просмотре, панели «Переменные», поиске по истории и во всём, что получают агенты.
[Сгенерировать код…](/docs/workspaces/exporting#copy-a-request-as-code) и **Скопировать как cURL** — исключение: они
записывают запрос в том виде, в каком он будет отправлен, вместе с секретами.

## Импорт переносит учётные данные в секреты [#imports-move-credentials-into-secrets]

Когда вы [импортируете](/docs/get-started/importing) коллекцию Postman, экспорт Insomnia или другой файл, пароли,
токены и API-ключи, найденные в настройках авторизации и заголовках с учётными данными, становятся секретными
переменными. Их значения уходят в связку ключей, а в запросе вместо них появляется `{{name}}`: имя запроса и поле,
например `{{me_password}}`. Отчёт об импорте перечисляет имена сохранённых секретов, но не значения.

Учётные данные, записанные в адресах (`https://user:pass@…`), строках запроса и телах, пока не переносятся. После
импорта проверьте их.

## Экспорт оставляет значения за скобками [#exports-leave-values-out]

[Экспорт](/docs/workspaces/exporting) записывает секретные переменные только по имени, без значения, в любом формате.
Тот, кто открывает экспорт, задаёт значения у себя.

## Секреты в командной строке и в CI [#secrets-on-the-command-line-and-in-ci]

Инструмент командной строки ищет значение секрета в таком порядке:

1. Файл `--secrets`, переданный `echolot run`: строки вида `NAME=value`.
2. Переменная окружения `ECHOLOT_SECRET_<NAME>`: имя заглавными буквами, где каждый символ, кроме буквы и цифры,
   заменён на `_`. `{{token}}` читает `ECHOLOT_SECRET_TOKEN`; `{{api-key}}` читает `ECHOLOT_SECRET_API_KEY`.
3. На Mac — элементы связки ключей, которые ведёт приложение.

```sh
ECHOLOT_SECRET_TOKEN=… echolot run Alpenglow.echolot --folder orders
echolot run Alpenglow.echolot --env staging --secrets staging.secrets
```

Связка ключей пропускается, если задана `CI` и если `ECHOLOT_KEYCHAIN=0`. В CI задавайте переменные
`ECHOLOT_SECRET_…` из хранилища секретов вашей CI. См. [CI](/docs/cli/ci).

Секрет, найденный в окружении, действует для всех уровней: `ECHOLOT_SECRET_PASSWORD` отвечает на `{{password}}` в любом
окружении.

Импорт в командной строке переносит учётные данные в секреты так же, как приложение. Без связки ключей инструмент
сообщает, какие переменные `ECHOLOT_SECRET_…` нужно задать.

## Первое открытие у коллеги [#a-teammates-first-open]

Коллега, который клонирует рабочее пространство, получает имена всех секретов и ни одного значения. В его таблицах
написано **Не задано на этом Mac**. Он один раз задаёт свои значения, и дальше все работают с одними и теми же
файлами, каждый со своими учётными данными. См. [Git и команды](/docs/workspaces/git-and-teams).
