OpenCode Plugin Creator
Devin-AXIS/iPolloWork
Scaffolds an OpenCode plugin for iPolloWork with the right async factory shape, zod-based tool definitions and hook registration, and explains where to place and register it.
Packages repository skills as installable Copilot plugins: marketplace registration, plugin.json manifests, generated skill copies, and the sync check CI enforces.
$ npx skills add jaktestowac/awesome-copilot-for-testers --skill creating-plugins -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install jaktestowac/awesome-copilot-for-testers creating-plugins --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/jaktestowac/awesome-copilot-for-testers.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/creating-plugins .claude/skills/creating-plugins && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "creating-plugins" agent skill from https://github.com/jaktestowac/awesome-copilot-for-testers/tree/main/skills/creating-plugins into .claude/skills/creating-plugins/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "creating-plugins", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/jaktestowac/awesome-copilot-for-testers/tree/main/skills/creating-pluginsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add jaktestowac/awesome-copilot-for-testers --skill creating-plugins -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install jaktestowac/awesome-copilot-for-testers creating-plugins --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jaktestowac/awesome-copilot-for-testers.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/creating-plugins .agents/skills/creating-plugins && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "creating-plugins" agent skill from https://github.com/jaktestowac/awesome-copilot-for-testers/tree/main/skills/creating-plugins into .agents/skills/creating-plugins/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "creating-plugins", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jaktestowac/awesome-copilot-for-testers --skill creating-plugins -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install jaktestowac/awesome-copilot-for-testers creating-plugins --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jaktestowac/awesome-copilot-for-testers.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/creating-plugins .cursor/skills/creating-plugins && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "creating-plugins" agent skill from https://github.com/jaktestowac/awesome-copilot-for-testers/tree/main/skills/creating-plugins into .cursor/skills/creating-plugins/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "creating-plugins", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/jaktestowac/awesome-copilot-for-testers.git --path skills/creating-plugins--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add jaktestowac/awesome-copilot-for-testers --skill creating-plugins -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install jaktestowac/awesome-copilot-for-testers creating-plugins --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jaktestowac/awesome-copilot-for-testers.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/creating-plugins .gemini/skills/creating-plugins && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "creating-plugins" agent skill from https://github.com/jaktestowac/awesome-copilot-for-testers/tree/main/skills/creating-plugins into .gemini/skills/creating-plugins/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "creating-plugins", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install jaktestowac/awesome-copilot-for-testers creating-pluginsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add jaktestowac/awesome-copilot-for-testers --skill creating-plugins -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/jaktestowac/awesome-copilot-for-testers.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/creating-plugins .github/skills/creating-plugins && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "creating-plugins" agent skill from https://github.com/jaktestowac/awesome-copilot-for-testers/tree/main/skills/creating-plugins into .github/skills/creating-plugins/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "creating-plugins", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jaktestowac/awesome-copilot-for-testers --skill creating-plugins -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install jaktestowac/awesome-copilot-for-testers creating-plugins --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jaktestowac/awesome-copilot-for-testers.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/creating-plugins .opencode/skills/creating-plugins && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "creating-plugins" agent skill from https://github.com/jaktestowac/awesome-copilot-for-testers/tree/main/skills/creating-plugins into .opencode/skills/creating-plugins/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "creating-plugins", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
creating-pluginsPackages repository skills as installable Copilot plugins: marketplace registration, plugin.json manifests, generated skill copies, and the sync check CI enforces.
Creating Plugins is an agent skill from jaktestowac/awesome-copilot-for-testers. Packages repository skills as installable Copilot plugins: marketplace registration, plugin.json manifests, generated skill copies, and the sync check CI enforces. Use when bundling one or more skills for installation, when adding a plugin to the marketplace, or when npm run lint reports that a plugin copy has drifted from its source skill.
Its SKILL.md is about 3.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files (for example `resources/plugin-manifest.template.md`, `resources/plugin-packaging-checklist.md` and `resources/plugin-readme.template.md`).
It sits in Agent Workflows, covering Hooks and plugins and Linting and formatting. It works with npm. The repository describes itself as: 👨💻 Instructions, prompts, and chat modes to help You with test automation for GitHub Copilot 🤖. The licence is MIT.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 8910672. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
npmnodeFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npm, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Creating Plugins loads about 3.3k tokens when it runs. Until then it costs about 91 tokens; SKILL.md has 1,615 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from jaktestowac/awesome-copilot-for-testers at commit 8910672, republished under its MIT licence (© jaktestowac). 1,615 words, ~3,346 tokens.
.claude/skills/creating-plugins/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.Use this skill when a skill or a small group of skills should be installable as a unit rather than copied by hand.
The rule that governs everything here: skills/ at the repository root is the source of truth, and everything under plugins/*/skills/ is generated output that happens to be committed. The generator is npm run plugin:materialize; the guard is scripts/check-plugin-sync.js, which CI runs as part of npm run lint. Editing a plugin copy directly produces a drift error and loses the edit on the next materialize.
npm run lint reports a plugin copy that does not match its source skillskills/<name>/ and flows outward.skills/ at the repository root. That is why the copies exist.A plugin ships one skill, or a small group used together.
| Shape | Justified when |
|---|---|
| One skill | It stands alone, and nothing else is needed to use it |
| A skill plus its quick variant | The pair covers routine and deep use of the same capability, like writing-unit-tests |
| Several cooperating skills | A user reaching for one reliably reaches for the others in the same session |
Not justified: grouping by topic. "All the testing skills" is a directory listing, not a plugin. The user installs it, gets fifteen descriptions competing for the same triggers, and picks worse than they would have with three.
Before bundling, confirm the skills are distinct enough to coexist. Two skills whose descriptions overlap will collide harder inside one plugin than they do in a repository, because the user installed both deliberately.
npm run plugin:generate -- planning-exploratory-testingscripts/generate-plugins.js writes the entry into .github/plugin/marketplace.json, taking the
description from plugins/<name>/.github/plugin/plugin.json if the plugin folder already exists,
otherwise from the frontmatter of skills/<name>/SKILL.md. Entry order is preserved and new
entries are appended, so the file stays readable in diffs.
| Command | Does |
|---|---|
npm run plugin:generate -- <name> | add the entry for one plugin or root skill |
npm run plugin:generate -- <name> --description='...' | add it with a written description instead of the skill's |
npm run plugin:generate | backfill entries for every plugin folder missing one |
npm run plugin:generate:all | register every root skill, refreshing existing entries from their SKILL.md |
npm run plugin:generate -- --dry-run | print what would change, write nothing |
npm run plugin:generate -- --no-overwrite | report drift instead of rewriting an entry |
npm run plugin:generate -- --verbose | list every item instead of a count |
node scripts/generate-plugins.js --check | fail if a plugin folder has no entry (CI, part of npm run lint) |
Which file wins. The pipeline flows one way, and each step overwrites what is downstream of it:
skills/<name>/SKILL.md → marketplace.json → plugins/<name>/ → README.md
(frontmatter) (the registry) (plugin.json, (the tables)
README description)plugin:generate:all therefore rewrites an existing entry's description from the skill's
frontmatter - a marketplace description edited by hand does not survive it. Write the listing
description in the skill's frontmatter, or use --description= per plugin, or pass
--no-overwrite to keep what is there and have the drift reported instead. A version somebody
bumped is never reset by a refresh; only --version= changes it.
plugin:generate:all packages the repository in bulk. It skips a skill another plugin already
ships, and it skips <name>-quick when skills/<name>/ exists, printing the plugin.json line
that bundles the quick variant with its parent instead. Pair it with --dry-run first, and read
Phase 0 before accepting the result: one plugin per skill is a defensible default, but a pair used
together belongs in one plugin. --check never demands a plugin for a root skill - an unpackaged
skill is a normal state - so bulk mode stays opt-in and CI stays quiet about it.
A description derived from the skill frontmatter is a starting point, not the finished entry - the generator says so when it uses one. Rewrite it as a marketplace listing, then continue.
The resulting entry, hand-written or generated:
{
"name": "planning-exploratory-testing",
"source": "plugins/planning-exploratory-testing",
"description": "Runs session-based exploratory testing: charters, timeboxed sessions, coverage heuristics, evidence-carrying notes, and debriefs that route every finding somewhere. Bundles the charter format with worked examples per context, the SFDIPOT and tour heuristics, a session note template with a coverage summary, and the PROOF debrief. Use when a feature needs testing before requirements settle, or when scripted cases keep passing while users hit problems.",
"version": "1.0.0"
}The name matches the plugin directory under source. The description is what a user reads before installing, so it says what is inside and when to reach for it, in more detail than the skill's own description needs to.
npm run plugin:materializeThis does two things, per scripts/materialize-plugins.js:
Scaffold - creates the plugin directory, a .github/plugin/plugin.json, and a README.md for every marketplace entry with a local source, then rewrites the generated fields on every run so the plugin always matches its marketplace entry:
| File | Overwritten | Preserved |
|---|---|---|
plugin.json | name, description, version, author, repository, license | keywords and skills - curated by hand, and not derivable from the entry |
README.md | the frontmatter description | the whole body, which is hand-written prose |
--force-readme rewrites plugin READMEs wholesale from the template, discarding that prose. Use it to reset a README the scaffolder generated, not one somebody wrote.
Materialize - copies each skill declared in each plugin.json from skills/ into the plugin, and prunes copies no longer declared. A copy that already matches its source is left alone, so the output names only what changed.
The generated tree:
plugins/<plugin-name>/
.github/plugin/plugin.json
README.md
skills/<skill-name>/
SKILL.md
resources/...The scaffolder writes a plugin.json; fill in what it cannot know.
{
"name": "planning-exploratory-testing",
"description": "...",
"version": "1.0.0",
"author": { "name": "jaktestowac.pl" },
"repository": "https://github.com/jaktestowac/awesome-copilot-for-testers.git",
"license": "MIT",
"keywords": [
"exploratory testing", "session-based testing", "charters",
"test heuristics", "SFDIPOT", "tours", "manual testing", "QA"
],
"skills": ["./skills/planning-exploratory-testing/"]
}skills paths are relative to the plugin root and resolve to skills/<name>/ at the repository root during materializekeywords are how a user finds the plugin; include the terms they would search, including the ones the skill's own description does not needkeywords and skills are the two fields a re-materialize leaves alone - edit them heredescription and version come from the marketplace entry and are rewritten on every materialize; change them there, not hereThe body is yours to write and survives every re-materialize; the frontmatter description is
taken from the marketplace entry, so change it there. Then:
The resource list matters more than it looks. It is the difference between "a skill about exploratory testing" and "the charter format, the SFDIPOT heuristics, the note template, and the PROOF debrief", and it is what tells a user whether the plugin is worth installing.
Use ./resources/plugin-readme.template.md.
npm run plugin:materialize # regenerate the copies
npm run generate # regenerate the repository README tables
npm run check # verify the README is in sync
npm run lint # frontmatter, orchestration, plugin synccheck-plugin-sync.js performs two checks:
plugin.json has a materialized copy with a SKILL.mdA drift error means a plugin copy was edited directly, or a root skill changed without a re-materialize. Both are fixed by editing the root skill and running npm run plugin:materialize.
The recurring rule for anyone changing a skill that a plugin vendors:
Edit
skills/<name>/. Then runnpm run plugin:materialize && npm run generate.
Add it to the pull request habit. The lint catches it, but catching it in CI costs a round trip that a one-line habit avoids.
plugins/*/skills/, which fails the sync check and is lost on the next materializeplugin.json declaring a skill that does not exist at the repository rootdescription or version in plugin.json, which the next materialize overwrites from the marketplace entryplugin:generate:all, which takes the skill's frontmatter back./resources/plugin-manifest.template.md - plugin.json and marketplace entry, annotated field by field, with a worked example./resources/plugin-readme.template.md - README structure, the resource-listing pattern, and a worked example./resources/plugin-packaging-checklist.md - pre-ship checks and the drift-error troubleshooting tablecreating-skills - for the skill that the plugin ships; the skill has to be good before packaging matterscreating-orchestration-packs - when the thing being packaged is a pack of agents rather than skillscreating-custom-agents - when the capability belongs in an agentdocumenting-test-suites - for the same instinct applied to a test suite: say what is inside and how to startThis skill is complete when:
plugin.json carries author, repository, license, searchable keywords, and correct relative skill pathsplugins/*/skills/ was hand-editednpm run plugin:materialize, npm run generate, npm run check, and npm run lint all passplugin.json and the marketplace entry© jaktestowac, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 3 other files in skills/creating-plugins of jaktestowac/awesome-copilot-for-testers.
Open the folder on GitHubat commit 8910672
Creating Plugins next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Creating Plugins this skilljaktestowac/awesome-copilot-for-testers | 116 | — | ~3.3k | Automated safety check: Pass | MIT | |
| OpenCode Plugin CreatorDevin-AXIS/iPolloWork | 6.8k | 1 repos | ~1.3k | Automated safety check: Pass | Custom licence | |
| Paseo Plugin Buildergetpaseo/paseo | 20k | — | ~9.4k | Automated safety check: Pass | Custom licence | |
| Create Harnessruvnet/metaharness | 690 | — | ~777 | Automated safety check: Pass | MIT | |
| OpenGUI Installer for DSHCore-Mate/OpenGUI | 1.8k | — | ~1.1k | Automated safety check: Pass | Custom licence | |
| Plugins ManagementCodeAlive-AI/ai-driven-development | 157 | 1 repos | ~3.1k | Automated safety check: Notes | MIT |
Devin-AXIS/iPolloWork
Scaffolds an OpenCode plugin for iPolloWork with the right async factory shape, zod-based tool definitions and hook registration, and explains where to place and register it.
getpaseo/paseo
Builds, installs and troubleshoots trusted local Paseo plugins, from lifecycle hooks and slash commands to screens, themes and timeline renderers.
ruvnet/metaharness
Scaffold your own focused AI agent harness — pick host (Claude Code, Codex, pi.dev, Hermes), template, agents, skills, and ship a npm-publishable harness with its own npx CLI.
Core-Mate/OpenGUI
Installs and verifies the latest stable OpenGUI release in a DeepSeek Harness web profile on macOS without disturbing existing plugins or settings.
CodeAlive-AI/ai-driven-development
Create, publish, delete, and submit plugins for coding agents (Claude Code, OpenCode, Devin CLI/Desktop).
databuddy-analytics/Databuddy
Build multi-platform chat bots with Chat SDK (chat npm package).
jaktestowac/awesome-copilot-for-testers
Writes and reviews API automation tests with Playwright Test, covering setup/teardown, assertions, data management, and hybrid API+UI flows.
jaktestowac/awesome-copilot-for-testers
Measures the risk that code shipped without anyone understanding it: a teach-back attestation on high-risk changes, a risk band from changed-code complexity, diff size and whether a human…
jaktestowac/awesome-copilot-for-testers
Creates agent orchestration packs: cooperating .agent.md files with an orchestrator, subagents, matched handoffs, minimal tool grants, and a shared handoff packet contract.
jaktestowac/awesome-copilot-for-testers
Turns "we will skip this check for now" into a dated, attributed, expiring waiver with a stated reason and owner, inventories the silent skips already hiding in a repo - skipped tests, disabled lint…
jaktestowac/awesome-copilot-for-testers
Requires an externalised rationale for high-risk changes - new public exports, new endpoints, auth edits, migrations, removed guards - recorded as an Intent commit trailer, an ADR reference, or a…
jaktestowac/awesome-copilot-for-testers
Sets up and maintains visual regression testing: what to snapshot, baseline strategy, masking dynamic regions, threshold tuning, containerized baselines, and the review-and-update workflow.
Works with
Categories
Packages repository skills as installable Copilot plugins: marketplace registration, plugin.json manifests, generated skill copies, and the sync check CI enforces. Creating Plugins is an agent skill from jaktestowac/awesome-copilot-for-testers.json manifests, generated skill copies, and the sync check CI enforces.
Creating Plugins fits situations like: more skills for installation; adding a plugin to the marketplace; npm run lint reports that a plugin copy has drifted from its source skill.
Run `npx skills add jaktestowac/awesome-copilot-for-testers --skill creating-plugins -a claude-code`. Or copy the skill folder (skills/creating-plugins in jaktestowac/awesome-copilot-for-testers) into .claude/skills/creating-plugins in your project. Claude Code loads it when a task matches its description.
Run `npx skills add jaktestowac/awesome-copilot-for-testers --skill creating-plugins -a codex`. Or copy the skill folder (skills/creating-plugins in jaktestowac/awesome-copilot-for-testers) into .agents/skills/creating-plugins in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jaktestowac/awesome-copilot-for-testers --skill creating-plugins -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/creating-plugins, .gemini/skills/creating-plugins, .github/skills/creating-plugins and .opencode/skills/creating-plugins in your project.
Going by SKILL.md and its folder, Creating Plugins needs the command-line tools its instructions call (npm and node).
SKILL.md contains no URLs. Its commands use npm, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Creating Plugins is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.3k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Creating Plugins: OpenCode Plugin Creator (Devin-AXIS/iPolloWork, 6.8k stars), Paseo Plugin Builder (getpaseo/paseo, 20k stars), Create Harness (ruvnet/metaharness, 690 stars) and OpenGUI Installer for DSH (Core-Mate/OpenGUI, 1.8k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
jaktestowac (a GitHub user) maintains it in jaktestowac/awesome-copilot-for-testers, which has 116 GitHub stars. The repository holds 13 skills in this directory. The repository was last updated on August 26, 2026.
Source: jaktestowac/awesome-copilot-for-testers on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.