The catalog is worth something only because people build for it. A plugin is a TypeScript project against a typed SDK: you declare which hooks you want, you get exactly that surface, and you publish under an immutable version. Untrusted code runs sandboxed, which means users can install yours without reading it first.
// index.ts — a SystemPromptBuilt middleware
// "middleware" is an ambient global from the SDK — no imports, no exports.
const GUIDANCE =
"\n\nAnswer in as few words as carry the meaning.\n" +
"Never abbreviate code, commands, error text\n" +
"or URLs — reproduce those exactly.";
globalThis.middleware.systemPrompt = async (context) => {
return context.systemPrompt + GUIDANCE;
};// index.ts — a compaction provider
// "compaction" and "host" are ambient globals from the SDK.
globalThis.compaction.summarize = async (context) => {
const { messages, focus } = context;
const result = await host.session!.llm!.complete({
messages: [
{ role: "system", content: SUMMARY_DOCTRINE },
{ role: "user", content: serialize(messages) },
],
});
return result.assistant.text ?? "";
};Every hook is typed, and the sandbox grants nothing you did not ask for. A plugin that declared only systemPrompt cannot read files, open sockets, or see another agent's session.
There's no CLI to install — a plugin is a folder package: a readme.md with your name and description in the frontmatter, and an index.ts against the typed SDK. What you publish can never change under a user; a version is a fixed artifact, and an upgrade is a decision they make with a diff in front of them.
$ zip -r caveman.zip . -x tsconfig.json
$ curl -X POST $BASE/plugins -H "Authorization: Bearer $TOKEN" \
-d '{"slug":"caveman","displayName":"Caveman"}'
$ curl -X POST $BASE/plugins/$ID/versions/zip -H "Authorization: Bearer $TOKEN" \
-F file=@caveman.zip -F semVer=2.1.0
→ caveman@2.1.0 published (immutable)
→ capabilities introspected: SystemPromptBuilt
→ tier: community · sandboxedCreate an account, add your model key, and write your first agent's soul. The rest of the crew can arrive in one click.