create-plugin Skill
✓ VerifiziertErstelle Scaffolds für OpenCode-Plugins für iPolloWork mit den korrekten API-Shapes, Tool-Definitionen und Hook-Registrierungen.
- GitHub Stars
- 7.451
- Dateien
- 1
- Letzter Commit
- 11. Nov. 2026
- Lizenz
- —
- Erlaubte Tools
- —
Was macht der create-plugin Skill?
create-plugin ist ein Agent Skill. Erstelle Scaffolds für OpenCode-Plugins für iPolloWork mit den korrekten API-Shapes, Tool-Definitionen und Hook-Registrierungen.
Zusammenfassung erzeugt aus der SKILL.md des Skills.
Über den create-plugin skill
Dieses Skill ermöglicht es Entwicklern, OpenCode-Plugins für iPolloWork zu scaffolden, um ihre Runtime mit benutzerdefinierten Tools und Hooks zu erweitern. Wenn ein Agent die Anfrage erhält, ein Plugin zu erstellen oder zu schreiben, nutzt er dieses Skill, um eine TypeScript-Datei zu generieren, die eine async Factory-Funktion enthält. Diese Funktion erzeugt ein Hooks-Objekt, das Tool-Verhalten, Transformationen des System Prompts und Reaktionen auf Lifecycle-Events definiert.
Das Skill stellt sicher, dass der generierte Code spezifische Anforderungen erfüllt, wie etwa die Verwendung von Zod-Schema-Shapes für Tool-Argumente und das Rückgeben von Strings oder spezifischen Metadaten-Objekten aus Execution-Funktionen. Es übernimmt das strukturelle Setup für Plugins, die in Projektverzeichnissen, globalen Config-Ordnern oder externen npm-Packages liegen. Durch die Automatisierung der Erstellung dieser Dateien und die Bereitstellung der notwendigen Registrierungsschritte für die opencode.json Config hilft es Entwicklern, In-Process-Logik mit Standard-Node- oder Bun-Capabilities wie fetch und Filesystem-Zugriff zu implementieren.
Was ein agent damit machen kann
- 1Ein neues Plugin-File generierenErstelle ein TypeScript-Plugin-File im lokalen Projektverzeichnis, um iPolloWork um neue Fähigkeiten zu erweitern.
- 2Custom Agent Tools definierenEntwickle neue Tools mit spezifischen Zod-Argument-Shapes und Execution-Logik, die ein Agent aufrufen kann.
- 3System Instructions modifizierenImplementiere einen Hook, der zusätzliche Anweisungen in den System Prompt des Agenten injiziert.
- 4Plugins in der Configuration registrierenAktualisiere die opencode.json Datei, um sicherzustellen, dass das neu erstellte Plugin automatisch erkannt wird.
Geschrieben basierend auf dem SKILL.md des skills. Jeder use case wurde gegen ein zitat daraus geprüft.
So installierst du den create-plugin Skill
Jeder Befehl kopiert den Skill-Ordner in das Skills-Verzeichnis des Clients. Starte den Client neu oder beginne eine neue Session, um ihn zu laden.Den create-plugin Skill in Claude Code installieren
~/.claude/skills/create-plugin/SKILL.md
$ npx degit Devin-AXIS/iPolloWork/.opencode/skills/create-plugin ~/.claude/skills/create-pluginDen create-plugin Skill in Claude Code (project) installieren
.claude/skills/create-plugin/SKILL.md
$ npx degit Devin-AXIS/iPolloWork/.opencode/skills/create-plugin .claude/skills/create-pluginDen create-plugin Skill in Codex installieren
~/.agents/skills/create-plugin/SKILL.md
$ npx degit Devin-AXIS/iPolloWork/.opencode/skills/create-plugin ~/.agents/skills/create-pluginDen create-plugin Skill in Gemini CLI installieren
~/.gemini/skills/create-plugin/SKILL.md
$ npx degit Devin-AXIS/iPolloWork/.opencode/skills/create-plugin ~/.gemini/skills/create-pluginDen create-plugin Skill in Claude.ai installieren
npx degit Devin-AXIS/iPolloWork/.opencode/skills/create-plugin create-plugin && zip -r create-plugin.zip create-plugin # claude.ai → Customize → Skills → + → Create skill → Upload a skill → create-plugin.zip
Automatisierte Checks
Geluften am 14. Nov. 2026Vollständiger Bericht →Hat unsere automatischen Prüfungen bestanden. Das ist kein Sicherheitsaudit: Lesen Sie die Skripte, bevor ein Agent sie ausführt. Wie die Checks funktionieren
- Source Repository verknüpft und erreichbardevin-axis/ipollowork/.opencode/skills/create-plugin is public and reachablegithub.com/devin-axis/ipollowork/tree/HEAD/.opencode/skills/ ↗Bestanden
- Open Source Lizenz (OSI)No licenseBefund
- Commit oder Release im letzten JahrLast commit 2026-11-11github.com/devin-axis/ipollowork/commits ↗Bestanden
- Keine Download-und-Ausführen-Muster oder Zugangsdatendiebstahl in SkriptenNo scripts in the skill folderBestanden
- Keine versteckten Anweisungen in SKILL.mdNo override phrases, safeguard switches, credential requests or hidden charactersgithub.com/devin-axis/ipollowork/blob/HEAD/.opencode/skills/ ↗Bestanden
- Vorab erlaubte Tools sind eingeschränktNo pre-approved tools; the agent asks before using onegithub.com/devin-axis/ipollowork/blob/HEAD/.opencode/skills/ ↗Bestanden
SKILL.md
Auf GitHub ansehenSkill: Create an OpenCode Plugin
Scaffold a working OpenCode plugin for use in iPolloWork.
When to use
- User asks "create a plugin that does X"
- User asks "write a plugin" or "make a plugin"
- User wants to extend iPolloWork/OpenCode with custom tools
Plugin API
An OpenCode plugin is an async factory function that returns a hooks object.
File location
Plugins can live in:
- Project:
.opencode/plugins/my-plugin.ts(auto-discovered) - Global:
~/.config/opencode/plugins/my-plugin.ts - npm: published as a package, referenced in
opencode.jsonpluginarray - URL:
file:orhttps:path in thepluginarray
Minimal shape
import { z } from "zod";
export default async () => ({
tool: {
my_tool_name: {
description: "What this tool does.",
args: z.object({
input: z.string().describe("The input parameter."),
}).shape, // NOTE: .shape, not the ZodObject itself
async execute(args: { input: string }) {
// Your logic here. Can use fetch(), fs, child_process, etc.
return `Result: ${args.input}`;
},
},
},
});
Key rules
- Export default an async function that returns the hooks object.
- Tool args use
zodSchema.shape(aZodRawShape), not theZodObject. executereturns astringor{ output: string; metadata?: Record<string, unknown> }.- Tools are declared, not registered imperatively — return them in the hooks object.
fetch()works — plugins run in-process inside the OpenCode runtime.process.envis accessible — use env vars for secrets/config.
Available hooks
{
// Modify the system prompt
"experimental.chat.system.transform": async (input, output: { system: string[] }) => {
output.system.push("Extra instruction for the agent.");
},
// Define tools the agent can call
tool: {
tool_name: { description, args, execute },
},
// Run code before/after a tool executes
"tool.execute.before": async ({ tool, args }) => { /* ... */ },
"tool.execute.after": async ({ tool, args, result }) => { /* ... */ },
// React to lifecycle events
event: async ({ event }) => { /* ... */ },
}
Registering the plugin
Add to opencode.json:
{
"plugin": [
".opencode/plugins/my-plugin.ts"
]
}
Or install from npm:
{
"plugin": [
"my-published-plugin"
]
}
Anthropic / Claude plugin compatibility
OpenCode plugins are NOT the same as Anthropic's plugin format. Key differences:
| Aspect | OpenCode Plugin | Anthropic Plugin |
|---|---|---|
| Entry point | Async factory function | Manifest JSON |
| Tool args | Zod schema .shape |
JSON Schema |
| Runtime | In-process (Bun/Node) | Sandboxed container |
| Auth | process.env |
OAuth/API key in manifest |
| Distribution | npm / file path / URL | Anthropic marketplace |
To adapt an Anthropic plugin for OpenCode:
- Rewrite the tool definitions using Zod instead of JSON Schema.
- Move any auth from the manifest to env vars or
opencode.jsonprovider config. - Export the async factory function instead of the manifest.
- HTTP-based Anthropic plugins can often be wrapped as MCP servers instead.
Example: plugin with multiple tools
import { z } from "zod";
export default async () => ({
"experimental.chat.system.transform": async (_input: unknown, output: { system: string[] }) => {
output.system.push("You have access to a note-taking system. Use save_note and list_notes.");
},
tool: {
save_note: {
description: "Save a note with a title and body.",
args: z.object({
title: z.string().describe("Note title"),
body: z.string().describe("Note content"),
}).shape,
async execute(args: { title: string; body: string }) {
const fs = await import("node:fs/promises");
const path = `.opencode/notes/${args.title.replace(/[^a-zA-Z0-9-_]/g, "_")}.md`;
await fs.mkdir(".opencode/notes", { recursive: true });
await fs.writeFile(path, `# ${args.title}\n\n${args.body}\n`);
return `Saved note: ${path}`;
},
},
list_notes: {
description: "List all saved notes.",
args: {},
async execute() {
const fs = await import("node:fs/promises");
try {
const files = await fs.readdir(".opencode/notes");
return files.filter(f => f.endsWith(".md")).join("\n") || "No notes yet.";
} catch {
return "No notes yet.";
}
},
},
},
});
Scaffold workflow
When the user describes what they want the plugin to do:
- Create
.opencode/plugins/<name>.tswith the plugin code. - Add it to
opencode.jsonpluginarray if not already present. - Tell the user to restart their session for the plugin to load.
Dateien in diesem Skill
1create-plugin Skill-Fragen
Wie installiere ich den create-plugin Skill in Claude Code?
Führe npx degit Devin-AXIS/iPolloWork/.opencode/skills/create-plugin ~/.claude/skills/create-plugin aus. Claude Code lädt Skills aus ~/.claude/skills (alle Projekte) oder .claude/skills (ein Projekt) und nutzt einen Skill, wenn seine Beschreibung zur Aufgabe passt.
Welche Clients können den create-plugin Skill nutzen?
Jeder Client, der das Agent Skills-Format liest: Claude Code, Codex, Gemini CLI und claude.ai (als ZIP hochladen). Skripte im Skill laufen nur dort, wo der Client Codeausführung erlaubt.
Sind OpenCode-Plugins mit Anthropic-Plugins kompatibel?
Nein, sie sind unterschiedlich. OpenCode-Plugins nutzen eine async Factory-Funktion und Zod-Schemas, während Anthropic-Plugins ein Manifest JSON und JSON Schema verwenden.