Перейти к содержимому

Манифест и API

yttri-plugin.json — единственный декларативный контракт плагина. Он валидируется до установки и перед каждым запуском; любая неоднозначность приводит к отказу.

yttri-plugin.json
{
"manifestVersion": "1",
"id": "acme.my-plugin",
"name": "My Plugin",
"version": "0.1.0",
"sdkVersion": "^1.0.0",
"yttriVersion": ">=0.80.0",
"runtime": {
"kind": "js_ts_v1",
"entry": "dist/index.js"
},
"permissions": [
{
"domain": "secrets",
"access": "write",
"reason": "Хранить API-токен"
},
{
"domain": "network",
"access": "read",
"hosts": ["api.acme.com"],
"reason": "Обращаться к API сервиса"
}
],
"capabilities": {
"tools": [
{
"name": "acme_ping",
"description": "Проверить сервис.",
"sideEffect": "read_only",
"requiredCapability": "network"
}
]
}
}
  • domain — один из capability-доменов: notes, tasks, projects, mail, calendar, contacts, documents, recordings, meetings, finance, search, integrations, accounts, editor, ui, mcp, agent, background, notifications, secrets или network. Неизвестный домен отклоняет весь манифест.
  • access: read | write — по умолчанию read; write включает read.
  • hosts обязателен для network: хосты указываются без схемы и пути, поддерживается wildcard, например *.acme.io.
  • reason показывается пользователю при установке, поэтому формулируйте его понятным языком.
  • tools — инструменты AI-агента: name, description, sideEffect (read_only | mutating | external) и requiredCapability.
  • jobs — ручные фоновые задачи или scheduled-задачи с cron-расписанием.
  • settings — схема настроек (string | number | boolean | select). Yttri генерирует форму, значения доступны через host.settings.getAll(). Токены храните только через host.secrets, а не в settings.

Система работает fail-closed, поэтому честный статус важен. Сегодня третьесторонние плагины могут исполнять домены notes, tasks, search, calendar, contacts и projects (чтение и создание), documents, mail и meetings (только чтение), а также secrets и network через хелперы.

Остальные домены манифест принимает, но вызовы в них пока вернут «операция не реализована». Собственный UI и коннекторы аккаунтов третьей стороне пока недоступны.