create-plugin skill
✓ DoğrulandıiPolloWork için doğru API yapıları, araç tanımları ve hook kayıtları ile OpenCode eklentileri oluşturun.
- GitHub yıldızları
- 7.451
- Dosyalar
- 1
- Son commit
- 11 Kas 2026
- Lisans
- —
- İzin verilen araçlar
- —
create-plugin skill ne işe yarar?
create-plugin bir agent skill'dir. iPolloWork için doğru API yapıları, araç tanımları ve hook kayıtları ile OpenCode eklentileri oluşturun.
Özet, skill'in SKILL.md dosyasından oluşturuldu.
create-plugin skilli hakkında
Bu SKILL, çalışma zamanını özel araçlar ve hooklar ile genişletmek isteyen geliştiriciler için iPolloWork üzerinde OpenCode eklentileri iskeleti oluşturmayı sağlar. Bir agent, bir eklenti oluşturma veya yazma isteği aldığında, async bir factory fonksiyonu içeren bir TypeScript dosyası üretmek için bu SKILL'i kullanır. Bu fonksiyon; araç davranışlarını, sistem prompt dönüşümlerini ve yaşam döngüsü olay tepkilerini tanımlayan bir hooks nesnesi üretir.
SKILL, üretilen kodun belirli gereksinimleri karşılamasını sağlar; örneğin araç argümanları için Zod şema yapılarının kullanılması ve yürütme fonksiyonlarından string veya belirli metadata nesnelerinin döndürülmesi gibi. Proje dizinlerinde, global yapılandırma klasörlerinde veya harici npm paketlerinde bulunan eklentiler için yapısal kurulumu yönetir. Bu dosyaların oluşturulmasını otomatize ederek ve opencode.json yapılandırması için gerekli kayıt adımlarını sağlayarak, geliştiricilerin fetch ve dosya sistemi erişimi gibi standart Node veya Bun yeteneklerini kullanarak süreç içi mantık uygulamalarına yardımcı olur.
Bir agent bununla neler yapabilir
- 1Yeni bir eklenti dosyası oluşturuniPolloWork'e yeni yetenekler eklemek için yerel proje dizininde bir TypeScript eklenti dosyası oluşturun.
- 2Özel agent araçları tanımlayınBir agent'ın çağırabilmesi için belirli Zod argüman yapılarına ve yürütme mantığına sahip yeni araçlar geliştirin.
- 3Sistem talimatlarını değiştirinAgent'ın sistem prompt'una ekstra talimatlar enjekte eden bir hook uygulayın.
- 4Yapılandırmada eklentileri kaydedinYeni oluşturulan eklentinin otomatik olarak keşfedilmesini sağlamak için opencode.json dosyasını güncelleyin.
Skill'in SKILL.md dosyasından yazılmıştır. Her kullanım durumu oradaki bir alıntı ile kontrol edilir.
create-plugin skill nasıl kurulur
Her komut, skill klasörünü istemcinin skills dizinine kopyalar. Yüklemek için istemciyi yeniden başlatın veya yeni bir oturum başlatın.create-plugin skill'ini Claude Code uygulamasına kur
~/.claude/skills/create-plugin/SKILL.md
$ npx degit Devin-AXIS/iPolloWork/.opencode/skills/create-plugin ~/.claude/skills/create-plugincreate-plugin skill'ini Claude Code (project) uygulamasına kur
.claude/skills/create-plugin/SKILL.md
$ npx degit Devin-AXIS/iPolloWork/.opencode/skills/create-plugin .claude/skills/create-plugincreate-plugin skill'ini Codex uygulamasına kur
~/.agents/skills/create-plugin/SKILL.md
$ npx degit Devin-AXIS/iPolloWork/.opencode/skills/create-plugin ~/.agents/skills/create-plugincreate-plugin skill'ini Gemini CLI uygulamasına kur
~/.gemini/skills/create-plugin/SKILL.md
$ npx degit Devin-AXIS/iPolloWork/.opencode/skills/create-plugin ~/.gemini/skills/create-plugincreate-plugin skill'ini Claude.ai uygulamasına kur
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
Otomatik kontroller
Çalıştırıldı 14 Kas 2026Tam rapor →Otomatik kontrollerimizi geçti. Bu bir güvenlik denetimi değil: bir ajanın çalıştırmasına izin vermeden önce betikleri okuyun. Kontroller nasıl çalışır
- Kaynak deposu bağlantılı ve erişilebilirdevin-axis/ipollowork/.opencode/skills/create-plugin is public and reachablegithub.com/devin-axis/ipollowork/tree/HEAD/.opencode/skills/ ↗Geçti
- Açık kaynak lisansı (OSI)No licenseBulgu
- Son bir yıl içinde commit veya sürüm mevcutLast commit 2026-11-11github.com/devin-axis/ipollowork/commits ↗Geçti
- Betiklerde indir-çalıştır veya kimlik bilgisi hırsızlığı yokNo scripts in the skill folderGeçti
- SKILL.md içinde gizli talimat yokNo override phrases, safeguard switches, credential requests or hidden charactersgithub.com/devin-axis/ipollowork/blob/HEAD/.opencode/skills/ ↗Geçti
- Önceden izin verilen araçlar sınırlıNo pre-approved tools; the agent asks before using onegithub.com/devin-axis/ipollowork/blob/HEAD/.opencode/skills/ ↗Geçti
SKILL.md
GitHub'da görüntüleSkill: 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.
Bu becerideki dosyalar
1create-plugin skill soruları
create-plugin skill'ini Claude Code uygulamasına nasıl kurarım?
npx degit Devin-AXIS/iPolloWork/.opencode/skills/create-plugin ~/.claude/skills/create-plugin komutunu çalıştırın. Claude Code, skill'leri ~/.claude/skills (tüm projeler) veya .claude/skills (tek proje) konumundan yükler ve açıklaması görevle eşleştiğinde skill'i kullanır.
create-plugin skill'ini hangi istemciler kullanabilir?
Agent Skills biçimini okuyan her istemci: Claude Code, Codex, Gemini CLI ve claude.ai (ZIP olarak yükleyin). Skill içindeki betikler yalnızca istemcinin kod çalıştırmaya izin verdiği yerlerde çalışır.
OpenCode eklentileri Anthropic eklentileri ile uyumlu mu?
Hayır, farklıdırlar. OpenCode eklentileri async bir factory fonksiyonu ve Zod şemaları kullanırken, Anthropic eklentileri Manifest JSON ve JSON Schema kullanır.