К содержимому
# Setting — несекретные параметры поведения
[Content hub](/ru/ai/content)
- type: article
- published_at: 2026-09-04
- tags: component, setting
Расширенный разбор setting: конфигурационный файл, область действия, MCP-имена и запрет на секреты.
## Content
# `setting` ![Component type: setting](/content/illustrations/kind-setting.jpg) `setting` — конфигурационная часть сетапа: параметры, режимы, feature flags, preferences, thresholds и другие значения, которые харнесс или provider умеет применять. Setting отвечает на вопрос: **какие несекретные параметры нужно закрепить?** Он не отвечает «какое постоянное правило агент должен помнить?» ([`instruction`](https://ai-stp.aiguild.space/ru/docs/components)), «что должно выполниться на событии?» ([`hook`](https://ai-stp.aiguild.space/ru/docs/components)) и «какие MCP-серверы объявлены в этом же файле?» (эта находка — вид [`mcp`](https://ai-stp.aiguild.space/ru/docs/components), `native_role` `mcp_client_config`). Setting не должен хранить секреты. Если значение является token, password, private key или credential, оно идёт через поддерживаемое хранилище секретов, а не через паспорт компонента. !!! warning "Один файл может быть setting и MCP-находкой" Codex, OpenCode и Grok Build держат клиентские MCP-серверы в файле, который также объявлен как `setting`: | Харнесс | Файл | Ключ MCP | | --- | --- | --- | | Codex | `config.toml` | `mcp_servers` | | OpenCode | `opencode.json` / `opencode.jsonc` | `mcp` | | Grok Build | `config.toml` | `mcp_servers` | Существование файла доказывает **setting**, никогда серверы. Файл становится находкой `mcp` только когда под этим ключом объявлен хотя бы один сервер. Один файл может дать две находки разных видов. Adopt с `--kind`, когда путь заявлен обоими. В `evidence_refs` читаются только **имена** серверов. Значения (command, args, URL, headers, env) никогда не читаются. ## Соседи | Вид | Главное отличие | | --- | --- | | `instruction` | instruction — проза; setting — типизированный параметр | | `mcp` | MCP-серверы могут жить *внутри* того же файла; они всё равно вид `mcp` | | `hook` | hook — действие; setting не срабатывает | | `command` | command вызывается; setting применяется | | `plugin` | plugin — пакет; setting — конфигурация | | `skill` | skill — workflow; setting — нет | | `agent` | agent — роль; setting — нет | Выбирайте `setting`, когда значение читает provider или CLI. Выбирайте `instruction`, когда агенту нужно сказать прозой. Выбирайте `hook` или `command`, если значение запускает действие. ## Рекомендуемая структура пакета `setting` декларативен. `--language` — `none`. `setting` требует конкретный харнесс: portable отклоняется. Claude Code проецирует `settings.json`; Codex и Grok — `config.toml`; OpenCode — `opencode.json`. ```text strict-mode/ # component-scaffold/3 ├── .ai-stp-template.json ├── .gitignore ├── README.md ├── component-passport.json ├── eval-profile.json ├── source/ │ └── settings.json └── projections/claude-code/ └── settings.json ``` ```bash ai-stp component scaffold plan \ --type setting \ --language none \ --harness claude-code \ --name strict-mode \ --output ./strict-mode \ --json ai-stp component scaffold apply \ --type setting \ --language none \ --harness claude-code \ --name strict-mode \ --output ./strict-mode \ --expected-plan-digest <digest> \ --json ``` `--language` для setting — `none`. Вид декларативный. В артефакт кладите только значения, которые можно хранить: | Можно | Нельзя | | --- | --- | | режим выполнения | API token | | язык интерфейса | password | | policy flag | private key | | лимит или threshold | содержимое `.env` | | путь внутри target, если он не секретный | OAuth refresh token | Для `required_env` в паспорт записывайте имена и назначение, никогда значения. Команды `ai-stp component setting validate` нет. Структурная готовность — `component passport validate`. Kind-specific проверка по спецификации есть только у [`skill`](https://ai-stp.aiguild.space/ru/docs/components). ## Стандарты и фреймворки Независимой спецификации setting, сравнимой с [Agent Skills Specification](https://agentskills.io/specification) или с [MCP](https://modelcontextprotocol.io), нет. Каждый харнесс документирует свой файл конфигурации. Ссылайтесь на `layout_source` из `ai-stp component discover --json`, когда классификация неясна. Не угадывайте путь соседа и не считайте файл настроек MCP только потому, что он существует. NVIDIA SkillSpector и Cisco Skill Scanner — сканеры skill. Они не проверяют settings. ## Нативные layout по харнессам Discovery сообщает только объявленные layout. Точные пути на машине даёт `ai-stp component discover --json`. У каждой находки есть `layout_source`. Если классификация неясна, покажите это поле; не угадывайте путь соседа. Из матрицы discovery: | Харнесс | Global | Project | Что есть в контракте discovery | | --- | --- | --- | --- | | Claude Code | да | да | | | Codex | да | да | `config.toml` может также дать находку `mcp`, когда заполнен `mcp_servers` | | Pi | да | да | | | OpenCode | да | да | `opencode.json` / `opencode.jsonc` могут также дать находку `mcp`, когда заполнен `mcp` | | Grok Build | да | да | `config.toml` может также дать находку `mcp`, когда заполнен `mcp_servers` | | Cursor | да | нет | global setting в ограниченной матрице; project setting — не объявленная ячейка | | Antigravity | да | нет | global setting в ограниченной матрице | | `undefined` | переносимые соглашения | переносимые соглашения | это не харнесс; автоматическая установка не считается безопасной | Объявленный путь всё равно принадлежит недоверенной машине. Discovery не читает секретные значения из файла настроек, чтобы их «проверить». ```bash ai-stp component discover --root . --json ai-stp toolchain harness-capabilities --json ``` Если один путь отвечает более чем одному виду, назовите `--kind` при adopt. ```bash ai-stp component adopt --path <source_path> --kind setting --json ``` ## Версии — `X.Y`, не SemVer Опубликованная версия setting неизменяема и имеет вид `X.Y`. Патч-номера нет. Изменение флага, режима или threshold — новая версия. Обновление setting внутри сетапа — новая версия сетапа. ```bash ai-stp component version list --id <stable_id> --json ai-stp component version release --id <stable_id> --json ``` `--major` открывает следующую мажорную линию. Мажорная линия — отдельная граница доступа. ## Что проверяет `ai_stp` Процент карточки каталога и разделение обязательных и необязательных проверок объяснены на странице [Проверки безопасности](https://ai-stp.aiguild.space/ru/docs/components). Для setting ожидайте как минимум: - структуру, digest, лицензию, tags, исходный репозиторий; - ограниченную распаковку и path denylist; - сканирование секретов (`secrets_heuristic` и Gitleaks, если включён); - правила prompt-injection и скрытого содержимого. Пройденное сканирование снижает известный риск. Это не гарантия, что конфигурация безвредна. Обязательные проверки, которые провалились или не смогли запуститься, блокируют публикацию. Перед установкой также смотрите: | Проверка | Почему важно | | --- | --- | | Ключи, похожие на секрет | setting — не место, чтобы прятать токены | | Diff значений | дрейф конфигурации — как поведение меняется без нового skill | | Двойные находки | тот же файл может быть и клиентским конфигом MCP | | Кто автор | verified-автор не делает значения автоматически безопасными | | Какой `X.Y` закреплён | обновление setting создаёт новую версию сетапа | | Линия доверия | `experimental` требует явного согласия | `author_verified` и `component_verified` независимы. Ни одно не является гарантией безопасности. ## Связанные команды CLI Только команды, которые существуют. Флаги всегда со страниц CLI и всегда `--json`. Исполняемый файл — `ai-stp` (пакет `ai-stp-cli`). Команд `component inspect` и `setup show` нет. Единственный kind-specific validate — `ai-stp component skill validate`. **Именно этот вид:** команды `component setting validate` нет. Используйте проверку паспорта. ```bash ai-stp component passport validate --id <stable_id> --json ``` **Автор, adopt, публикация:** ```bash ai-stp component discover --root . --json ai-stp component adopt --path <source_path> --json ai-stp component passport validate --id <stable_id> --json ai-stp component version release --id <stable_id> --json ai-stp publication plan --id <stable_id> --version 1.0 --json ai-stp publication confirm --plan-id <id> --plan-hash <hash> --confirm --json ``` **Найти, выбрать, установить:** ```bash ai-stp registry search --kind component --query <name> --json ai-stp select eligibility --harness <id> --json ai-stp install plan --json ``` Setting может быть embedded-членом compose-манифеста. См. [Сетапы](https://ai-stp.aiguild.space/ru/docs/components). ## Как setting проходит через `ai_stp` === "Автор" Автор публикует setting из публичного GitHub-источника или импортирует его локально. Версия закрепляет точный commit и подпуть. Секретные значения в дерево не входят. === "Каталог" Каталог показывает параметры, поддерживаемые харнессы, ограничения, trusted status автора и независимый status самого компонента. === "Сборщик" Сборщик проверяет конфликты с другими компонентами сетапа и что файловая структура подходит проекции provider. === "Provider" Provider показывает diff конфигурации и пишет нативную поверхность только после плана, digest и подтверждения. ## Красные флаги - Токены, пароли, закрытые ключи, OAuth refresh token или тела `.env` в setting, паспорте или примерах README. - Setting как удобное место для workflow, hook или command. - Пометка `config.toml` / `opencode.json` как MCP потому что файл существует, когда ключ MCP пуст. - Открытие MCP-блока файла настроек, чтобы скопировать command, args, URL, headers или env в паспорт. - Линия доверия `experimental` без `consent allow`. - Харнесс не в списке совместимости компонента. - «Latest» или имя ветки вместо точных `X.Y` и commit. - Обращение с `author_verified` как с `component_verified`. - Копирование файла настроек в target в обход плана provider. ??? question "Можно ли setting использовать без публикации" Да. Собственный, импортированный или точно закреплённый setting можно использовать после локальных проверок. Он от этого не становится platform-verified и должен быть показан именно как локальный или закреплённый объект (`local_owner_or_pinned`). Секреты в нём по-прежнему не место. ## Чеклист автора 1. Сделайте scaffold с `--type setting --language none` и держите нативный файл под `source/`. 2. Храните только несекретные параметры. Записывайте *имена* env в паспорт, если харнессу позже понадобится учётная запись. 3. Если файл также объявляет MCP-серверы, считайте это отдельной находкой [`mcp`](https://ai-stp.aiguild.space/ru/docs/components). Не кладите значения серверов в этот артефакт. 4. Объявите в паспорте, что меняют значения. 5. Запустите `ai-stp component discover --root . --json` и прочитайте `layout_source`, а также `native_role`, если появится вторая находка. 6. `component adopt --path <точный source_path>` — добавьте `--kind setting`, когда путь также является MCP. 7. Закрепите точный публичный GitHub commit и подпуть. Секретов в дереве нет. 8. `component passport validate` → `component version release`, чтобы выпустить неизменяемый `X.Y`. 9. Публикуйте через [путь публикации](https://ai-stp.aiguild.space/ru/docs/components). В сетапе закрепите этот `X.Y`. Связанное: [Авторство](https://ai-stp.aiguild.space/ru/docs/components), [Компоненты](https://ai-stp.aiguild.space/ru/docs/components), [`mcp`](https://ai-stp.aiguild.space/ru/docs/components), [`instruction`](https://ai-stp.aiguild.space/ru/docs/components).
ai_stp