teleton-plugin-builder
Build and maintain Teleton plugins that comply with the SDK v2 capability and marketplace policy.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Build and maintain Teleton plugins that comply with the SDK v2 capability and marketplace policy.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
| name | teleton-plugin-builder |
| description | Build and maintain Teleton plugins that comply with the SDK v2 capability and marketplace policy. |
Use this workflow when creating or updating a plugin in this repository.
Before editing, read:
CONTRIBUTING.md for the normative contract.compatibility.json for the current SDK policy.plugins/example/index.js for a static tool.plugins/example-sdk/index.js for an SDK v2 plugin.references/patterns.md for safe implementation patterns.The public API is defined by @teleton-agent/sdk@^2. Do not infer APIs from old plugins.
tools array or tools(sdk).index.js, manifest.json and README.md.package.json and lockfile only when external dependencies are necessary.compatibility.json entry.npm run generate; supported production-ready plugins enter registry.json automatically.Use a static tools array when the plugin only performs local computation or calls an external API
without Teleton state, Telegram actions, wallet operations, secrets or persistence.
Use tools(sdk) when the plugin needs any public SDK capability:
sdk.telegram;sdk.ton;sdk.secrets;sdk.storage or sdk.db;sdk.pluginConfig;sdk.log;sdkVersion: "^2.0.0" in both runtime and disk manifests.scope and category.sdk.secrets.Never use:
sdk.telegram.getRawClient();context.bridge or ctx.bridge;wallet.json, mnemonic reads or direct signing;If the SDK lacks a required capability, do not create an escape hatch. Preserve the plugin as
quarantined, set its range to ^1.0.0, explain the blocker in compatibility.json, and keep it out
of the generated registry.json.
export const manifest = {
name: "my-plugin",
version: "1.0.0",
sdkVersion: "^2.0.0",
description: "Describe the capability",
};
export const tools = (sdk) => [
{
name: "my_plugin_lookup",
description: "Look up a value without changing external state",
scope: "always",
category: "data-bearing",
parameters: {
type: "object",
properties: {
query: { type: "string", minLength: 1, maxLength: 200 },
},
required: ["query"],
},
async execute(params) {
try {
const response = await fetch(
`https://api.example.com/search?q=${encodeURIComponent(params.query)}`,
{ signal: AbortSignal.timeout(15_000) }
);
if (!response.ok) return { success: false, error: `Upstream returned ${response.status}` };
return { success: true, data: await response.json() };
} catch (error) {
sdk.log.warn("Lookup failed");
return { success: false, error: String(error?.message ?? error).slice(0, 500) };
}
},
},
];
Run from the repository root with ../teleton-agent available:
npm ci --ignore-scripts
npm run install:plugins
npm run generate
npm run validate
npm test
npm --prefix ../teleton-agent run build:sdk
npm run validate:runtime
npm run audit:plugins
Do not claim completion if any command fails. Do not push, publish or install into a live agent unless the user explicitly requests it.