Communitygithub.com

grahama1970/plugin-creator

Codex 플러그인 디렉터리를 생성하고 스캐폴딩합니다. 필수 `.codex-plugin/plugin.json`, 옵션 플러그인 폴더/파일, 유효한 기본 매니페스트, 기본 개인 마켓플레이스 항목을 생성합니다. 새로운 개인 플러그인을 만들거나, 선택적 플러그인 구조를 추가하거나, 플러그인 순서 및 가용성 메타데이터를 위한 마켓플레이스 항목을 생성/업데이트하거나, CLI 기반 캐시버스터 및 재설치 흐름으로 개발 중인 기존 로컬 플러그인을 업데이트할 때 사용하세요.

plugin-creator란 무엇인가요?

이 스킬은 Codex 에이전트가 새로운 플러그인을 생성하고, 기존 플러그인을 업데이트하며, 마켓플레이스 항목을 관리할 수 있도록 지원하는 플러그인 생성기입니다. 개발자는 스캐폴딩 스크립트를 통해 플러그인 이름(소문자 하이픈-케이스, 최대 64자)을 전달하면 자동으로 `~/plugins/<plugin-name>` 경로에 필수 `.codex-plugin/plugin.json` 파일과 함께 선택적 폴더(skills, hooks, scripts, assets, .mcp.json, .app.json)를 생성합니다. 또한 `--with-marketplace` 옵션을 통해 개인 마켓플레이스 파일(`~/.agents/plugins/marketplace.json`)에 항목을 추가하거나 업데이트할 수 있으며, 정책(installation, authentication)과 카테고리를 포함한 완전한 JSON 구조를 제공합니다. 개발 중인 기존 로컬 플러그인을 업데이트할 때는 `scripts/update_plugin_cachebuster.py`를 사용하여 수동 편집 없이 캐시를 무효화하고 재설치 흐름을 따르도록 권장합니다. 모든 생성된 플러그인은 `scripts/validate_plugin.py`를 통해 유효성 검사를 거쳐야 하며, 완료 시 Codex 앱에서 볼 수 있는 딥링크를 제공합니다.

지원 대상✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/grahama1970/agent-skills/tree/main/skills/.system/plugin-creator

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

플러그인 생성기

빠른 시작

  1. 스캐폴딩 스크립트 실행:
# 플러그인 이름은 소문자 하이픈-케이스로 정규화되며 최대 64자여야 합니다.
# 생성된 폴더와 plugin.json의 이름은 항상 동일합니다.
# 스킬 루트(이 `SKILL.md`가 있는 디렉터리)에서 실행하세요.
# 기본적으로 `~/plugins/<plugin-name>`에 생성됩니다.
python3 scripts/create_basic_plugin.py <plugin-name>
  1. 요청에 특정 메타데이터가 있는 경우 <plugin-path>/.codex-plugin/plugin.json을 편집하세요. 스캐폴드는 유효한 기본값으로 시작하며 [TODO: ...] 플레이스홀더를 포함해서는 안 됩니다.

  2. 플러그인이 Codex UI 순서에 표시되어야 하는 경우 개인 마켓플레이스 항목을 생성하거나 업데이트하세요:

# 개인 마켓플레이스 항목은 기본적으로 `~/.agents/plugins/marketplace.json`에 생성됩니다.
python3 scripts/create_basic_plugin.py my-plugin --with-marketplace

기본 personal 마켓플레이스 이름이 이미 사용 중이거나 설치되어 있어 다른 새 마켓플레이스 파일을 생성해야 하는 경우에만 --marketplace-name <name>을 지정하세요:

python3 scripts/create_basic_plugin.py my-plugin \
  --with-marketplace \
  --marketplace-name team-local

사용자가 특별히 해당 대상을 요청한 경우에만 저장소/팀 마켓플레이스를 사용하세요:

python3 scripts/create_basic_plugin.py my-plugin \
  --path <repo-root>/plugins \
  --marketplace-path <repo-root>/.agents/plugins/marketplace.json \
  --with-marketplace

사용자가 마켓플레이스 경로를 지정하는 경우, 재설치를 안내하기 전에 해당 마켓플레이스가 실제로 설치되어 있는지 확인하세요. 기본 개인 마켓플레이스 파일(~/.agents/plugins/marketplace.json)은 암시적으로 발견되지만 다른 마켓플레이스 경로는 그렇지 않습니다. Windows에서는 사용자 프로필 아래의 동등한 경로를 사용하세요.

  1. 필요에 따라 선택적 동반 폴더를 생성/조정하세요:
python3 scripts/create_basic_plugin.py my-plugin \
  --path <parent-plugin-directory> \
  --marketplace-path <marketplace-json-path> \
  --with-skills --with-hooks --with-scripts --with-assets --with-mcp --with-apps --with-marketplace

<parent-plugin-directory>는 플러그인 폴더 <plugin-name>이 생성될 디렉터리입니다(예: ~/plugins).

  1. 생성된 플러그인을 반환하기 전에 다음을 실행하세요:
python3 scripts/validate_plugin.py <plugin-path>

개발 중인 기존 로컬 플러그인 업데이트의 경우 스캐폴딩 흐름을 그대로 유지하고 마켓플레이스 파일을 수동 편집하는 대신 참조를 사용하세요:

python3 scripts/update_plugin_cachebuster.py <plugin-path>

사용자가 특정 재정의를 명시적으로 요청하지 않는 한 도우미 기본 캐시버스터를 선호하세요. 기존 로컬 플러그인을 반복 개발할 때 예상되는 캐시버스터 및 재설치 흐름은 references/installing-and-updating.md를 참조하세요.

이 스킬이 생성하는 것

  • 기본 마켓플레이스 기반 스캐폴드는 ~/.agents/plugins/marketplace.json의 개인 마켓플레이스 파일을 사용하며, 플러그인은 일반적으로 ~/plugins/<plugin-name>/에 저장됩니다.
  • /<parent-plugin-directory>/<plugin-name>/에 플러그인 루트를 생성합니다.
  • 항상 /<parent-plugin-directory>/<plugin-name>/.codex-plugin/plugin.json을 생성합니다.
  • 수집 경로가 허용하는 검증된 스키마 형태로 매니페스트를 채웁니다.
  • --with-marketplace가 설정된 경우 ~/.agents/plugins/marketplace.json을 생성하거나 업데이트합니다.
    • 마켓플레이스 파일이 아직 존재하지 않는 경우, 첫 번째 플러그인 항목을 추가하기 전에 개인 마켓플레이스 루트를 시드합니다.
  • <plugin-name>은 스킬 생성기 명명 규칙을 사용하여 정규화됩니다:
    • My Plugin → my-plugin
    • My--Plugin → my-plugin
    • 밑줄, 공백 및 구두점은 -로 변환됩니다.
    • 결과는 소문자 하이픈 구분이며 연속된 하이픈은 축소됩니다.
  • 다음의 선택적 생성을 지원합니다:
    • skills/
    • hooks/
    • scripts/
    • assets/
    • .mcp.json
    • .app.json

마켓플레이스 워크플로우

  • 개인 마켓플레이스 생성은 기본적으로 ~/.agents/plugins/marketplace.json을 사용합니다. 여기서 "개인 마켓플레이스"는 해당 경로에 파일이 있는 마켓플레이스를 의미합니다.
  • 저장소/팀 마켓플레이스 생성을 위해서는 사용자가 특별히 요청한 경우에만 --path와 --marketplace-path를 모두 사용해야 합니다.
  • --marketplace-name은 예외 경로입니다. 기본 personal 마켓플레이스 이름이 이미 사용 중이고 다른 새 마켓플레이스 파일을 생성해야 하는 경우에만 사용하세요.
  • 기존 마켓플레이스 파일의 이름을 변경하기 위해 --marketplace-name을 사용하지 마세요. 파일이 이미 존재하는 경우 최상위 name이 이미 일치해야 합니다.
  • 사용자가 다른 마켓플레이스 경로를 지정하는 경우, 해당 마켓플레이스를 codex plugin marketplace add를 통해 명시적으로 설치해야 하는 것으로 간주하세요.
  • 마켓플레이스 이름이 필요한 경우 scripts/read_marketplace_name.py를 선호하세요. 인수 없이 실행하면 기본 개인 마켓플레이스를 읽고, 명시적 경로를 제공하면 저장소/팀 마켓플레이스에서도 작동합니다.
  • 두 위치 모두 생성된 소스 경로는 ./plugins/<plugin-name>으로 유지됩니다.
  • 마켓플레이스 루트 메타데이터는 최상위 name과 선택적 interface.displayName을 지원합니다.
  • plugins[]의 플러그인 순서는 Codex의 렌더링 순서로 간주합니다. 사용자가 명시적으로 목록 재정렬을 요청하지 않는 한 새 항목을 추가하세요.
  • displayName은 개별 plugins[] 항목이 아닌 마켓플레이스 interface 객체에 속합니다.
  • 생성된 각 마켓플레이스 항목은 다음을 모두 포함해야 합니다:
    • policy.installation
    • policy.authentication
    • category
  • 새 항목의 기본값:
    • policy.installation: "AVAILABLE"
    • policy.authentication: "ON_INSTALL"
  • 사용자가 다른 허용 값을 명시적으로 지정하는 경우에만 기본값을 재정의하세요.
  • 허용되는 policy.installation 값:
    • NOT_AVAILABLE
    • AVAILABLE
    • INSTALLED_BY_DEFAULT
  • 허용되는 policy.authentication 값:
    • ON_INSTALL
    • ON_USE
  • policy.products는 재정의로 처리하세요. 사용자가 명시적으로 제품 게이팅을 요청하지 않는 한 생략하세요.
  • 생성된 플러그인 항목 형태는 다음과 같습니다:
{
  "name": "plugin-name",
  "source": {
    "source": "local",
    "path": "./plugins/plugin-name"
  },
  "policy": {
    "installation": "AVAILABLE",
    "authentication": "ON_INSTALL"
  },
  "category": "Productivity"
}
  • 동일한 플러그인 이름의 기존 마켓플레이스 항목을 의도적으로 교체하는 경우에만 --force를 사용하세요.

  • 대상 마켓플레이스 파일이 아직 존재하지 않는 경우, 최상위 "name", "interface" 객체("displayName" 포함) 및 plugins 배열을 사용하여 생성한 후 새 항목을 추가하세요.

  • 완전히 새로운 마켓플레이스 파일의 경우 루트 객체는 다음과 같아야 합니다:

{
  "name": "personal",
  "interface": {
    "displayName": "Personal"
  },
  "plugins": [
    {
      "name": "plugin-name",
      "source": {
        "source": "local",
        "path": "./plugins/plugin-name"
      },
      "policy": {
        "installation": "AVAILABLE",
        "authentication": "ON_INSTALL"
      },
      "category": "Productivity"
    }
  ]
}

필수 동작

  • 외부 폴더 이름과 plugin.json의 "name"은 항상 정규화된 동일한 플러그인 이름이어야 합니다.
  • 필수 구조를 제거하지 마세요. .codex-plugin/plugin.json이 존재해야 합니다.
  • 플러그인 매니페스트에 [TODO: ...] 플레이스홀더를 남기지 마세요.
  • 동반 파일이 실제로 생성되지 않는 한 plugin.json에 apps와 mcpServers를 포함하지 마세요.
  • 유효성 검사에서 거부하는 지원되지 않는 플러그인 매니페스트 필드(hooks 포함)는 생략하세요.
  • 기존 플러그인 경로 내에 파일을 생성하는 경우, 덮어쓰기가 의도적인 경우에만 --force를 사용하세요.
  • 기존 마켓플레이스 interface.displayName을 유지하세요.
  • 마켓플레이스 항목을 생성할 때 값이 기본값이더라도 항상 policy.installation, policy.authentication, category를 작성하세요.
  • 사용자가 명시적으로 해당 재정의를 요청하는 경우에만 policy.products를 추가하세요.
  • 마켓플레이스 source.path를 선택한 마켓플레이스 루트 기준 ./plugins/<plugin-name>으로 유지하세요.
  • --marketplace-name은 personal이라는 이름이 이미 다른 곳에서 사용 중이거나 설치되어 있어 새 마켓플레이스 파일의 이름이 personal이 아니어야 하는 경우에만 사용하세요.
  • 마켓플레이스 파일을 작성하는 데 Codex의 승인이 필요한 경우, 진행하기 전에 승인을 요청하세요. 사용자가 직접 작성을 선호하는 경우, 정확한 스캐폴드 명령을 제공한 다음 워크플로우를 모호하게 남기지 않고 유효성 검사 또는 후속 플러그인 편집부터 계속 진행하세요.
  • 개발 중인 기존 로컬 플러그인을 업데이트하는 경우 마켓플레이스 구성이나 marketplace.json을 수동 편집하지 마세요. references/installing-and-updating.md 및 scripts/update_plugin_cachebuster.py에 문서화된 업데이트 흐름을 사용하세요.
  • 기본 개인 마켓플레이스 흐름에 대해 사용자에게 codex plugin marketplace add를 실행하라고 지시하지 마세요. 이 명령은 표준 ~/.agents/plugins/marketplace.json 경로가 아닌 명시적인 비기본 마켓플레이스 구성을 위한 것입니다.
  • 사용자가 기본값이 아닌 --marketplace-path를 제공한 경우, 재설치 지침을 제공하기 전에 해당 마켓플레이스가 설치되어 있는지 확인하세요. 해당 명시적 마켓플레이스가 아직 구성되지 않은 경우 codex plugin marketplace add <path-to-marketplace-root>를 사용하세요.
  • 워크플로우가 마켓플레이스 기반 플러그인을 생성하거나 업데이트한 경우, 최종 사용자 응답을 짧은 Codex 앱 핸드오프로 끝내세요. Codex 앱에서 보려면:이라고 말하고 View <정규화된 플러그인 이름> 및 Share <정규화된 플러그인 이름>을 원시 URL이나 코드 범위가 아닌 Markdown 링크로 작성하세요.
  • 보기 딥링크는 codex://plugins/<정규화된 플러그인 이름>?marketplacePath=<절대 marketplace.json 경로>를 사용합니다. 공유 딥링크는 동일한 URL에 &mode=share를 추가하여 사용합니다.
  • 플레이스홀더를 실제 정규화된 플러그인 이름과 스캐폴드된 플러그인의 절대 marketplace.json 경로로 바꾸세요. 필요에 따라 경로 세그먼트와 쿼리 값을 URL 인코딩하세요.
  • 이러한 딥링크에 pluginName 또는 hostId 쿼리 매개변수를 추가하지 마세요. Codex는 사용자가 링크를 클릭한 후 둘 다 파생합니다.
  • 마켓플레이스 항목이 생성되거나 업데이트되지 않은 경우 View <정규화된 플러그인 이름> 또는 Share <정규화된 플러그인 이름> 링크를 내보내지 마세요.

정확한 사양 샘플 참조

플러그인 매니페스트 및 마켓플레이스 항목 모두에 대한 정확한 표준 샘플 JSON은 다음을 사용하세요:

  • references/plugin-json-spec.md
  • 기존 로컬 플러그인을 반복 개발할 때 업데이트/재설치 지침 및 재설치 후 새 스레드 동작에 대한 내용은 references/installing-and-updating.md를 참조하세요.

유효성 검사

SKILL.md를 편집한 후 다음을 실행하세요:

python3 ../skill-creator/scripts/quick_validate.py .

생성된 플러그인을 반환하기 전에 다음을 실행하세요:

python3 scripts/validate_plugin.py <plugin-path>

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

grahama1970/acceptance-contract

Turn a client brief, zip bundle, directory, or single requirements file into a typed acceptance-contract bundle with extracted requirements, acceptance checks, open questions, an immutable-goal draft, and a create-report-backed decision report. Use when users say acceptance contract, brief to requirements, freeze the goal, create immutable goal, amend immutable goal, build a Battle requirements bundle, or extract requirements from this bundle.

grahama1970/agent-ecosystem

Canonical map and shared contracts for the agent-governance ecosystem: the pi.receipt_envelope.v1 boundary envelope, the component graph, and the rules for which component owns which schema. Use when wiring a skill or extension into the shared receipt world, when asking how shame, triage-error, tau, ask, project-watchdog, ops-herdr, ponytail, and Memory fit together, or when validating an envelope.

grahama1970/agentic-evals

Agentic evaluation of skills using multi-trial fixtures, deterministic command assertions, trajectory checks, safety constraints, and evidence-backed readiness scoring. Use when users ask for agentic evals, multi-trial skill evaluation, skill trajectory validation, or readiness scoring for a skill workflow.

grahama1970/agent-inbox

File-based inter-agent messaging with headless dispatch. Check inbox, send bugs/requests to other projects, automatically spawn headless agents to fix bugs, and track progress via task-monitor.

grahama1970/agents-registry

Generate and query the centralized agent identity registry. Scans .pi/agents/*/AGENTS.md, parses frontmatter, outputs agents-registry.json and optionally syncs to /memory for semantic search.

grahama1970/agent-status

Artifact-driven status surfaces for long-running project-agent work. Maintains status.json, events.jsonl, proof manifests, and a stale-aware STATUS.html so humans can tell where the agent is, what passed, what is still unproven, and what decision or action is next — without dashboard theater.

grahama1970/align

Round-based context alignment before execution. Use when the human, project agent, WebGPT, scillm, ask, dogpile, memory, or project-knowledge may each hold different facts about a task; especially before ambiguous design, infographic, product workflow, high-stakes implementation, plan-iterate, project-infographic, or multi-review work.

grahama1970/analytics

Flexible data science analytics for any dataset. Auto-discovers schema, recommends charts, exports to create-figure. Works with JSONL, JSON, CSV from any source.

grahama1970/analyze-chatterbox-emotions

Evaluate generated Chatterbox voice files as voice-quality artifacts: affect match, arousal/valence proxies, pause placement, intelligibility inputs, clipping, loudness, and discontinuity flags. Use when reviewing Chatterbox emotional tags, pauses, Turbo/base affect delivery, Persona Dream utterance renders, or whether generated speech matches an intended product-facing affect.

grahama1970/analyze-elf

Reverse-engineer features from ELF binaries. Extracts CLI commands, state machines, protocols, Zod schemas, and data models. Automatically generates a /create-walkthrough prosecution brief with Mermaid diagrams. Uses /treesitter for AST analysis of bundled JS/TS source.

grahama1970/animation-vocabulary

Reverse-lookup glossary that turns a vague description of a web animation or motion effect into its exact term ("the bouncy thing when a popover opens" → Pop in; "the iOS rubber-band scroll" → Rubber-banding). Use when the user asks "what's it called when…", or describes a motion effect without knowing its name and wants the right word to prompt an AI or designer with. For naming an effect, not designing or building one.

grahama1970/anonymize-data

Anonymize supported CSV, JSON, UTF-8 text, and SQLite files using an explicit policy through the oai-trial project. Use for anonymize data, pseudonymize exports, redact policy literals, or discover and explicitly approve fuzzy name aliases. The skill is a thin CLI/Docker interface, not another engine.

grahama1970/anvil

Heavy-duty "No-Vibes" debugging and hardening orchestrator. Use this for complex, stubborn bugs where `review-code` has failed, or for "Red Teaming" (hardening) a codebase. Runs multiple agents in parallel (Thunderdome) using git worktree isolation.

grahama1970/apple-design

Apple's approach to interface design and fluid, physical motion, translated for the web. Use when building or reviewing gesture-driven UI, spring animations, drag/swipe/sheet interactions, momentum and interruptible transitions, translucent materials and depth, typography (optical sizing, tracking, leading), reduced-motion, or the design foundations (feedback, spatial consistency, restraint) behind Apple-style interfaces.

grahama1970/argue

Multi-persona structured debate orchestrator. Personas research via /dogpile, consult colleagues via /ask, and argue toward nuanced synthesis on complex questions.

grahama1970/arxiv

Search arXiv for papers and extract knowledge into memory. Use `search` to find papers, `learn` to extract knowledge.

grahama1970/ask

Use when the user asks to query project memory, ask an oracle, use supported browser-backed reviewers, run Tau roundtable/single-handler workflows, ask Pi-native subagents from within Pi, run persona/deep-review workflows, generate image prompts, check OS/project health through composed skills, or run an ask DAG. This skill is the executable /ask runtime; do not replace it with an informal subagent, plain web search, or hand-written review; inside Pi, explicit Pi-native subagent targets are routed through the pi-subagents tool as an Ask target type.

grahama1970/assess

Step back and critically reassess project state. Use when asked to "assess", "step back", "fresh eyes", "check alignment", "sanity check", "health check", "prune documentation", or "evaluate what's working". Offers documentation pruning and doc-code alignment analysis. Offer to run after major changes (don't auto-run).

grahama1970/assistant

Shared GPT + classifier inference gateway for persona monitor tasks. Routes validation and classification through a 4-tier cascade: heuristic → classifier → local GPT → scillm.

grahama1970/assistant-lab

Self-improvement workbench for /assistant. All the tools needed to diagnose, train, evaluate, and promote models in a continuous loop. The "warm pond" where /assistant evolves its own inference stack.

관련 스킬