fnl-plugin-packaging
Skill4 starsChanged 14 days agoMITView on GitHub
Package agent skills as a plugin that installs on Claude Code, Codex and Antigravity from one repository. Use when creating or restructuring a plugin or skill repository, writing or fixing a plugin manifest or marketplace catalog, designing a plugin icon, preparing listing metadata, adding a new host, or checking that a package validates before a release or directory submission.
1 other project uses a version of this.
Adopted by
Most recently taken up by
- finolabs/vibecodetheir own version, first seen Nov 15, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- finolabs/vibecode★ 4same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository19 other files it gives its agents.
- rules/AGENTS.mdAGENTS.md
- skills/fnl-delegate/references/agents.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- fnl-advisorSkill
- fnl-askSkill
- fnl-coding-routerSkill
- fnl-commit-messagesSkill
- fnl-delegateSkill
- fnl-handoffSkill
- fnl-open-source-reviewSkill
- fnl-restore-pointSkill
- fnl-review-gateSkill
- fnl-security-review-gateSkill
- fnl-session-hygieneSkill
- fnl-setupSkill
- fnl-statusSkill
- fnl-updateSkill
- fnl-verificationSkill
- fnl-versioningSkill
The file
We split this skill into the rules it gives an agent
5 rules. About 0 are common, 3 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 53
Write the install commands for every host in the README, verified against each host's --help.
- Distinctive: line 57
Run and read each one:
- Distinctive: line 59
every host validator above, strict where available.
- Very specific: line 61
after installing on Claude Code, /skill-doctor for each skill's listing cost, and from the second release on, whether it is ever used (an …
- Distinctive: line 63
when the plugin is listed in a shared catalog, run the catalog check and, if the catalog pins SHAs, update it after the tag.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Plugin packaging
One repository, one skills/ folder, one manifest per host. This skill holds the decisions that stay stable across hosts. Field-level schemas change often, so read them from each host's own tools and docs at the time you package (the authority column below) instead of copying them into the repository.
| Host | Manifest | Catalog | Authority for fields and checks |
| Claude Code | .claude-plugin/plugin.json | .claude-plugin/marketplace.json | plugin manifest reference, marketplace reference, claude plugin validate . --profile directory; the plugin-dev and skill-creator skills for authoring |
| Codex | .codex-plugin/plugin.json | .agents/plugins/marketplace.json | build plugins, submission fields; no local validator, the portal validates the upload |
| Antigravity | .antigravity-plugin/plugin.json | none; install from the repository URL | build plugins, agy plugin validate . --strict; the built-in plugin and agy-customizations skills |
1. Layout
- Skills live in
skills/<name>/SKILL.md; the folder name equals thenamefield. A shared name prefix keeps a pack's skills together and avoids collisions with other packs. - Each host's manifest sits in its own folder. A root
plugin.jsonis read by both Codex (its preferred location) and Antigravity (its native manifest, with a closed schema), so one file cannot satisfy both. - Keep every skill folder self-contained: single-skill installers (skills.sh) copy one folder and nothing around it. Disclose reference material into
references/and executables intoscripts/beside the skill that uses them; a file two skills need gets a copy in each, with a CI check that the copies match. A skill that cannot work without another names it as a dependency and says how to install it. Keep machine-specific facts in user configuration, never in the package. - Ship only what the host loads: no build output, caches, OS files, local notes or eval results.
Done when every host's validator finds the expected number of skills.
2. Manifests
- Fill the identity fields consistently on every host:
name(kebab-case, no host or vendor name as a prefix), display name, description, version, author, homepage, repository, license (SPDX). - Version: one manifest is the source of truth and the others copy it; CI fails when they differ. Bumps, tags and the changelog follow
fnl-versioning. - Description: what the plugin does and for whom, in the length each host recommends (Antigravity suggests 120–160 characters; Codex limits its short description to 30).
- Listing metadata: icon, documentation, support, privacy and terms URLs where the host reads them (Claude's directory fields, Codex's
interfaceblock). URLs point at files that exist in the public repository.
3. Skill frontmatter across hosts
nameanddescriptionare the portable core. The description carries the triggers: what the skill does, then each distinct case that should fire it.- Claude Code also reads keys such as
disable-model-invocation,user-invocableandargument-hint; other hosts ignore them, but a claude.ai skill upload rejects them. Keep that in mind before offering a skill as a standalone upload. - A skill the human should start by hand (a setup or a router) sets
disable-model-invocation: true, which removes its description from the agent's context. Hosts that ignore the key still list it, so its description also says to run it only when the user asks for it. Another skill then tells the human to type it rather than calling it.
4. Icon
Apply this section only when preparing a submission to a directory that asks for an icon; a plugin installed straight from its repository needs none of it.
- Square, transparent canvas, one simple glyph that reads at 32 px, in the project's brand family (stroke width, corner style, light and dark colors from the project's brand tokens).
- Light and dark variants with identical geometry. Keep the SVG sources and export 512 × 512 transparent PNGs; some directories accept only PNG.
- An
assets/NOTICE.mdrecords the concept, the owner's approval, that no third-party artwork or image-model output is included, and the SHA-256 of each file. - The owner approves the design. Show variants side by side on light and dark backgrounds at full size and at 32 px.
5. Distribution
- Make the repository its own marketplace on hosts that use catalogs when the plugin is outside any family catalog, so
owner/repoinstalls work before any directory listing; inside a family, install from the shared catalog (Codex shows each marketplace as its own group). - A family of plugins shares one catalog repository serving every host that uses catalogs; it either pins each plugin by commit SHA or tracks protected default branches, and says which; details in references/catalogs.md.
- Antigravity installs from the repository URL (see references/catalogs.md).
- Offer single-skill installs beside the plugin: skills.sh (
npx skills add owner/repo --skill <name>) findsskills/<name>/SKILL.mdon its own. Tell users to pick one path per agent, since both list every skill twice. - Write the install commands for every host in the README, verified against each host's
--help.
6. Checks before a release
Run and read each one:
- every host validator above, strict where available;
- the trigger suite: one
claude plugin evalcase per model-invoked skill that must fire it, plus negative cases that must fire nothing (--ablation nonekeepsSkillgraders scored). Run only the cases of skills whosedescriptionchanged since the last release (--case), and the whole suite before a MINOR release; a patch release with nodescriptionchange needs none; - after installing on Claude Code,
/skill-doctorfor each skill's listing cost, and from the second release on, whether it is ever used (an interactive check: where it cannot run, say so); fnl-open-source-reviewfor license, payload, leaks and community files;- when the plugin is listed in a shared catalog, run the catalog check and, if the catalog pins SHAs, update it after the tag.
A validator pass shows the package loads; only the trigger suite and real use show the skills help.
Authority
Creating a marketplace repository, submitting to a directory, tagging and publishing need the owner's explicit approval. Preparing manifests, icons and checks for review needs none.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

