create-plugin skill
✓ 인증됨올바른 API 구조, 도구 정의 및 훅 등록을 포함한 iPolloWork용 OpenCode 플러그인 스캐폴딩을 생성합니다.
- GitHub 스타
- 7,451
- 파일
- 1
- 마지막 커밋
- 2026년 11월 11일
- 라이선스
- —
- 허용된 도구
- —
create-plugin skill은 무엇을 하나요?
create-plugin은(는) agent skill입니다. 올바른 API 구조, 도구 정의 및 훅 등록을 포함한 iPolloWork용 OpenCode 플러그인 스캐폴딩을 생성합니다.
skill의 SKILL.md에서 생성된 요약입니다.
create-plugin skill 정보
이 SKILL은 커스텀 도구와 훅을 통해 런타임을 확장하려는 개발자가 iPolloWork용 OpenCode 플러그인을 스캐폴딩할 수 있도록 지원합니다. 에이전트가 플러그인 생성 또는 작성 요청을 받으면, 이 SKILL을 사용하여 async factory function이 포함된 TypeScript 파일을 생성합니다. 이 함수는 도구 동작, 시스템 프롬프트 변환 및 라이프사이클 이벤트 반응을 정의하는 hooks 객체를 생성합니다.
이 SKILL은 생성된 코드가 도구 인수에 대한 Zod schema 형태 사용, 실행 함수에서 string 또는 특정 메타데이터 객체 반환과 같은 특정 요구 사항을 준수하도록 보장합니다. 프로젝트 디렉토리, 글로벌 설정 폴더 또는 외부 npm 패키지에 위치한 플러그인의 구조적 설정을 처리합니다. 이러한 파일 생성을 자동화하고 opencode.json 설정을 위한 필요한 등록 단계를 제공함으로써, 개발자가 fetch 및 파일 시스템 액세스와 같은 표준 Node 또는 Bun 기능을 사용하여 프로세스 내 로직을 구현할 수 있도록 돕습니다.
agent가 수행할 수 있는 작업
- 1새 플러그인 파일 생성iPolloWork에 새로운 기능을 추가하기 위해 로컬 프로젝트 디렉토리에 TypeScript 플러그인 파일을 생성합니다.
- 2커스텀 에이전트 도구 정의에이전트가 호출할 수 있도록 특정 Zod 인자 형태와 실행 로직을 갖춘 새로운 도구를 개발합니다.
- 3시스템 지침 수정에이전트의 시스템 프롬프트에 추가 지침을 주입하는 훅을 구현합니다.
- 4설정 내 플러그인 등록새로 생성된 플러그인이 자동으로 검색되도록 opencode.json 파일을 업데이트합니다.
skill의 SKILL.md를 기반으로 작성되었습니다. 모든 사용 사례는 해당 문서의 인용구와 대조 확인되었습니다.
create-plugin skill 설치 방법
각 명령은 skill 폴더를 클라이언트의 skills 디렉터리에 복사합니다. 클라이언트를 재시작하거나 새 세션을 시작하여 로드하세요.Claude Code에 create-plugin skill 설치
~/.claude/skills/create-plugin/SKILL.md
$ npx degit Devin-AXIS/iPolloWork/.opencode/skills/create-plugin ~/.claude/skills/create-pluginClaude Code (project)에 create-plugin skill 설치
.claude/skills/create-plugin/SKILL.md
$ npx degit Devin-AXIS/iPolloWork/.opencode/skills/create-plugin .claude/skills/create-pluginCodex에 create-plugin skill 설치
~/.agents/skills/create-plugin/SKILL.md
$ npx degit Devin-AXIS/iPolloWork/.opencode/skills/create-plugin ~/.agents/skills/create-pluginGemini CLI에 create-plugin skill 설치
~/.gemini/skills/create-plugin/SKILL.md
$ npx degit Devin-AXIS/iPolloWork/.opencode/skills/create-plugin ~/.gemini/skills/create-pluginClaude.ai에 create-plugin skill 설치
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
자동 검사
2026년 11월 14일에 실행됨전체 보고서 →자동 검사를 통과했습니다. 보안 감사는 아닙니다. 에이전트가 실행하기 전에 스크립트를 읽어 보세요. 검사 방식
- 소스 저장소 연결 및 접근 가능devin-axis/ipollowork/.opencode/skills/create-plugin is public and reachablegithub.com/devin-axis/ipollowork/tree/HEAD/.opencode/skills/ ↗통과
- 오픈 소스 라이선스 (OSI)No license결함 발견
- 최근 1년 내 커밋 또는 릴리스Last commit 2026-11-11github.com/devin-axis/ipollowork/commits ↗통과
- 스크립트에 다운로드 후 실행이나 자격 증명 탈취가 없음No scripts in the skill folder통과
- SKILL.md에 숨겨진 지침 없음No override phrases, safeguard switches, credential requests or hidden charactersgithub.com/devin-axis/ipollowork/blob/HEAD/.opencode/skills/ ↗통과
- 사전 허용 도구가 제한됨No pre-approved tools; the agent asks before using onegithub.com/devin-axis/ipollowork/blob/HEAD/.opencode/skills/ ↗통과
SKILL.md
GitHub에서 보기Skill: 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.
이 스킬의 파일
1create-plugin skill 질문
Claude Code에 create-plugin skill을 어떻게 설치하나요?
npx degit Devin-AXIS/iPolloWork/.opencode/skills/create-plugin ~/.claude/skills/create-plugin를 실행합니다. Claude Code는 ~/.claude/skills(모든 프로젝트) 또는 .claude/skills(한 프로젝트)에서 skills를 로드하며, 설명이 작업과 일치할 때 skill을 사용합니다.
create-plugin skill을 사용할 수 있는 클라이언트는 무엇인가요?
Agent Skills 형식을 읽는 모든 클라이언트(Claude Code, Codex, Gemini CLI, claude.ai(ZIP으로 업로드))가 사용할 수 있습니다. skill 내 스크립트는 클라이언트가 코드 실행을 허용하는 경우에만 실행됩니다.
OpenCode 플러그인이 Anthropic 플러그인과 호환되나요?
아니요, 서로 다릅니다. Anthropic 플러그인은 Manifest JSON과 JSON Schema를 사용하는 반면, OpenCode 플러그인은 async factory function과 Zod schema를 사용합니다.