Плагин — это unitплатформы
Устанавливаешь один пакет — движок регистрирует CLI команды, REST роуты и страницу в Studio. Без ручных конфигов. Права объявлены в манифесте — видишь до установки.
import { defineCommand, type CLIInput, type PluginContextV3 } from '@kb-labs/sdk';
import { requireApiKey, createTask } from '@kb-labs/clickup-core';
export default defineCommand({
id: 'clickup:task.create',
handler: {
// intent() — declare what the plugin will do before it does it
async intent(_ctx, input: CLIInput<TaskCreateFlags>) {
const { list, name } = input.flags;
return {
summary: `Create task "${name}" in list ${list}`,
operations: [{ type: 'create', resource: 'task' }],
};
},
async execute(ctx: PluginContextV3, input: CLIInput<TaskCreateFlags>) {
const { list, name, desc, status, json } = input.flags;
// business logic — the only thing the plugin author writes
const task = await createTask(requireApiKey(), list, {
name,
markdown_content: desc,
status,
});
// ctx.ui — same code, different surface: CLI, REST, Studio
if (json) {
ctx.ui.json({ id: task.id, name: task.name, url: task.url });
} else {
ctx.ui.success('Task created', {
sections: [{ items: [`id: ${task.id}`, `url: ${task.url}`] }],
});
}
return { exitCode: 0, result: task };
},
},
});Только бизнес-логика
Плагин общается с абстракциями — ctx.ui, useLLM(). Какой провайдер стоит за ними, как роутится запрос, куда идут логи — всё это платформа.
ctx.ui.success() работает одинаково из CLI, Workflow вызова.
kb review --stagedkb review runPOST /api/reviewGET /api/review/runs/p/reviewfull pageОдин манифест — три поверхности
Плагин объявляет CLI команды, REST роуты и Studio страницу в одном файле — manifest.ts. При установке движок регистрирует всё автоматически.
Не нужно настраивать роутер, регистрировать команды или писать конфиг Studio. Поставил пакет — всё работает.
Плагины изолированы: каждый получает только те ресурсы платформы, которые объявил. Полная OS-изоляция — с container/remote режимом исполнения.
Жизненный цикл плагина
После установки платформа записывает пакет в .kb/marketplace.lock с SHA-256 чексуммой. При каждом старте discovery проверяет целостность и загружает манифест.
Из манифеста извлекаются entity kinds — семь типов сущностей: CLI команды, REST роуты, Studio страницы, workflow handlers, webhook handlers, WebSocket каналы, cron расписания. Один плагин может регистрировать любое их сочетание.
При вызове команды движок выбирает execution backend. In-process — дефолт, минимальный overhead. Subprocess и worker-pool — изоляция процесса. Remote — полная OS-изоляция на отдельной машине.
Видишь права до установки
Каждый плагин декларирует в манифесте что ему нужно: читать git, вызывать LLM, писать в fs. Ты видишь это ещё до install.
Это не жёсткая гарантия — при in-process исполнении платформа проверяет запрошенные права, но полная OS-изоляция требует container или remote режима.
Как permissions в мобильных приложениях: ты знаешь что плагин хочет и принимаешь осознанное решение.
import { combinePermissions, kbPlatformPreset } from '@kb-labs/sdk';
export default {
schema: 'kb.plugin/3',
id: '@kb-labs/review',
version: '2.94.0',
permissions: combinePermissions()
.with(kbPlatformPreset)
.allow('git.read') // can read git history
.allow('llm.call') // can call LLM
.deny('fs.write') // no filesystem writes
.deny('shell.exec') // no shell access
.build(),
cli: {
commands: [
{ id: 'review', handler: './commands/run.js#default' },
{ id: 'review:ci', handler: './commands/ci.js#default' },
],
},
} as const;# 1. scaffold
kb scaffold run plugin my-plugin
# 2. build
pnpm build
# 3. publish to KB Labs Registry
kb marketplace publish
# --- anyone can now install ---
kb marketplace install @you/my-plugin
# or share privately
kb marketplace share --with user123
kb marketplace share --linkСоздай и опубликуй свой плагин
Первый плагин — за 5 минут.
Установите KB Labs, запустите scaffold, добавьте логику. CLI, REST API и Studio готовы автоматически.