Agent skill

Publish Ability

by openvetta in openvetta/open-vetta

Publish a skill, scene, MCP server, plugin, or bundle to the Vetta ability marketplace.

Apache-2.0Auto-check passedAgent Workflows

Install Publish Ability

skills CLI
$ npx skills add openvetta/open-vetta --skill publish-ability -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install openvetta/open-vetta publish-ability --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/openvetta/open-vetta.git skills-src && mkdir -p .claude/skills && cp -r skills-src/packages/skill-presets/publish-ability .claude/skills/publish-ability && rm -rf skills-src

Use ~/.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/

Facts

Skill name
publish-ability
GitHub stars
291
Token cost
~1.6k tokens
SKILL.md length
838 words
Files
8 (incl. scripts, references)
Skills in repo
21
Repo updated
First seen
Licence
Apache-2.0

At a glance

Publish a skill, scene, MCP server, plugin, or bundle to the Vetta ability marketplace.

  • Works in 6 steps: Determine the type. Ask the user if it… → Source detail from the package. Do not… → Read the available categories before you… → …
  • The user asks to upload/publish/submit an ability
  • SKILL.md covers Procedure, Script contract, Review and Verify
  • Runs JavaScript scripts from its folder; calls node

What it does

Publish Ability is an agent skill from openvetta/open-vetta. Publish a skill, scene, MCP server, plugin, or bundle to the Vetta ability marketplace. Use when the user asks to upload/publish/submit an ability, put a plugin on the marketplace, share a skill with other users, or migrate an existing package into Vetta.

Its SKILL.md is about 1.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 9 other files, including scripts and reference files (for example `ability.json` and `references/payload.md`).

It sits in Agent Workflows, covering MCP servers. It works with Model Context Protocol. The repository describes itself as: Open-source, local-first AI agent for coding and real work. BYOK models, MCP, skills, plugins, workflows, and private knowledge bases. The licence is Apache-2.0.

When your agent uses it

  • The user asks to upload/publish/submit an ability
  • Put a plugin on the marketplace
  • Share a skill with other users
  • Migrate an existing package into Vetta

Example prompts

  • “/publish-ability”

Requirements

  • Node.js

Workflow steps

6 steps, taken from the first numbered list in SKILL.md.

  1. Determine the type. Ask the user if it is not obvious from the artifact.
  2. Source detail from the package. Do not invent it. name, description, author, and
  3. Read the available categories before you set one. category is matched by name —
  4. Write the payload to a JSON file, then pass it with --input. Never try to pass fields as
  5. Dry-run first when the payload is non-trivial. It runs the full validation without
  6. Submit. On failure the script returns all problems at once — fix the whole list before

What it can do on your machine

Read from SKILL.md and the folder at commit b983179. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Ships 5 files in scripts/ (JavaScript), which the agent can run.

    Shell commands in SKILL.md call:

    • node

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Publish Ability loads about 1.6k tokens when it runs, and up to ~4.2k if it reads all its reference files. Until then it costs about 68 tokens; SKILL.md has 838 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~68
When it runs · the whole SKILL.md, loaded when a task matches
~1.6k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~4.2k

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.

Safety

Auto-check passed

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); the scripts in this folder are not scanned.

SKILL.md

The full file from openvetta/open-vetta at commit b983179, republished under its Apache-2.0 licence (© openvetta). 838 words, ~1,636 tokens.

Download SKILL.mdSave it as .claude/skills/publish-ability/SKILL.md (or your agent's skills folder). This skill also uses 7 other files; get the full folder from GitHub.
name
publish-ability
description
Publish a skill, scene, MCP server, plugin, or bundle to the Vetta ability marketplace. Use when the user asks to upload/publish/submit an ability, put a plugin on the marketplace, share a skill with other users, or migrate an existing package into Vetta.
metadata.version
2.1.0
metadata.author
Vetta
metadata.category
开发

Publish an Ability to the Vetta Marketplace

Submitting is a local action: it reads an archive from the user's disk, so it runs through the bundled script rather than a tool call.

bash
node "$SKILL_DIR/scripts/publish.mjs" --input /abs/path/to/payload.json

Checking review status afterwards is a remote action — use the list_my_abilities tool from the built-in vetta MCP server. It is always available and needs no setup.

Procedure

  1. Determine the type. Ask the user if it is not obvious from the artifact.

    TypeWhat it isPhysical artifact
    skillA SKILL.md workflow.zip / .tar.gz containing SKILL.md
    sceneA skill installed into the scene directorysame as skill
    pluginA Vetta plugin.zip containing plugin.json
    mcpOne entry in the user's mcp.jsonnone — config only
    bundleA named group of already-published abilitiesnone — references only
  2. Source detail from the package. Do not invent it. name, description, author, and content are all required and the submission is rejected without them. Read plugin.json (name/description/author), SKILL.md frontmatter, README.md, LICENSE. Ask the user for anything you cannot source.

    For plugins, also list locales/*.json: those filenames are the exact locale keys your detail.i18n must use, and whatever they already translate is text you should not restate. See Multi-language.

    content is the detail-page body in markdown — it is what a user reads to decide whether to install. Write what the ability does, when to use it, and any setup it needs. A one-line content is not acceptable.

  3. Read the available categories before you set one. category is matched by name — a name that matches nothing is not an error, it silently lands in "uncategorised". So never invent one:

    bash
    node "$SKILL_DIR/scripts/categories.mjs"          # human-readable
    node "$SKILL_DIR/scripts/categories.mjs" --json   # machine-readable

    Put the name field verbatim into the payload's category. The i18n values are display translations only — matching accepts them, but the canonical name is what you should write. Omit category entirely if nothing fits.

  4. Write the payload to a JSON file, then pass it with --input. Never try to pass fields as command-line arguments: content is multi-line markdown containing backticks, quotes and $, and the shell will mangle it.

    Full field reference: references/payload.md — read it when you need anything beyond the four required detail fields. It is also where the valid icon names and the meaning of each showcase.canvas value are listed; both are closed sets, and a wrong value either fails validation or renders as a fallback.

  5. Dry-run first when the payload is non-trivial. It runs the full validation without submitting, so you spend no network round-trip on a payload that was never going to pass:

    bash
    node "$SKILL_DIR/scripts/publish.mjs" --input payload.json --dry-run

    For skill/scene/plugin this also opens the archive and cross-checks the payload against plugin.json, locales/*.json, and SKILL.md frontmatter. That is the only place the "same data, two sources" mistakes surface: a translation key that does not match the package's own locale files, a slug or version that the server will ignore, a vetta.json that your detail silently supersedes. None of these fail the upload — they just make part of what you wrote unreachable. Do not skip the dry-run on packaged types.

  6. Submit. On failure the script returns all problems at once — fix the whole list before retrying rather than resubmitting after each single fix.

Show full SKILL.md (321 more words)Show less

Script contract

  • stdout is a single JSON object; exit code 0 = success, 1 = failure.
  • Failure shape: {"ok": false, "message": "...", "errors": [...]} — errors is present for validation failures.
  • Success shape: {"ok": true, "message": "...", "slug": "...", "version": "...", "review_status": "...", "has_pending": bool, "warnings": [...]}.
  • warnings are things that did not block the submission but changed what gets published — a hand-written translation overriding the package's own, a slug that was ignored, a vetta.json that was skipped. Relay them to the user; do not treat the run as clean.
  • Input may also arrive on stdin (cat payload.json | node .../publish.mjs) if that is more convenient than a temp file.
  • The script reads the login token from ~/.vetta/auth.json itself. If it reports "未登录", tell the user to log in through the Vetta client — do not attempt to pass credentials yourself.

Review

Submissions from non-administrators enter a review queue and are not visible in the marketplace until an administrator approves them. Tell the user this rather than implying the ability is live.

Re-submitting an ability that is already published does not disturb it: the new version waits in a pending slot while the marketplace keeps serving the current version, so installed users are unaffected until the update is approved. has_pending: true in the result means exactly this.

A re-submission replaces detail.i18n wholesale. Sending only the locale you changed drops every other translation on that entry, including any an administrator added later. Fetch the current state first (list_my_abilities) or resend the complete set of locales.

You may only submit updates to abilities you own. Submitting to a slug owned by someone else is rejected.

Verify

After a successful run, state the returned slug, version, and whether the ability is live or pending review. If the run failed, fix every listed error and retry — do not report success.

Use list_my_abilities to report progress later: review_status is pending, approved, or rejected (reason in review_note); a non-empty pending_version means an update is queued behind the live version.

© openvetta, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 7 other files (scripts, references) in packages/skill-presets/publish-ability of openvetta/open-vetta.

  • SKILL.md
  • ability.json
  • references/payload.md
  • scripts/auth.mjs
  • scripts/categories.mjs
  • scripts/package-inspect.mjs
  • scripts/publish.mjs
  • scripts/validate.mjs

Open the folder on GitHubat commit b983179

Compare with similar skills

Publish Ability 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.

Publish Ability compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Publish Ability this skillopenvetta/open-vetta291—~1.6kAutomated safety check: PassApache-2.0
MCP Server Builderanthropics/skills180k63 repos~2.3kAutomated safety check: PassApache-2.0
MCP Server BuildershareAI-lab/learn-claude-code78k5 repos~1.2kAutomated safety check: PassMIT
MCP Integration for Pluginsanthropics/claude-plugins-official38k11 repos~3.1kAutomated safety check: PassApache-2.0
Crush Configurationcharmbracelet/crush29k—~3.7kAutomated safety check: PassCustom licence
Context Mode Output Sandboxmksglu/context-mode26k—~4.1kAutomated safety check: PassCustom licence

Similar skills

  • MCP Server Builder

    anthropics/skills

    Official

    Guides the design and implementation of Model Context Protocol servers in TypeScript or Python, from tool naming and error messages to evaluation.

    180k GitHub starsUsed in 63 repos~2.3k tokens
    Agent WorkflowsAuto-check passed
  • MCP Server Builder

    shareAI-lab/learn-claude-code

    Walks through building MCP servers in Python or TypeScript that expose tools, resources and prompts to Claude, with templates, registration and testing.

    78k GitHub starsUsed in 5 repos~1.2k tokens
    Agent WorkflowsAuto-check passed
  • MCP Integration for Plugins

    anthropics/claude-plugins-official

    Official

    Explains how to bundle Model Context Protocol servers in a Claude Code plugin, covering config files, stdio, SSE, HTTP and WebSocket server types, and authentication.

    38k GitHub starsUsed in 11 repos~3.1k tokens
    Agent WorkflowsAuto-check passed
  • Crush Configuration

    charmbracelet/crush

    Explains how to configure the Crush coding agent with crushrc or crush.json, covering providers, models, LSPs, MCP servers, hooks, permissions and config precedence.

    29k GitHub stars~3.7k tokensUpdated today
    Agent WorkflowsAuto-check passed
  • Context Mode Output Sandbox

    mksglu/context-mode

    Routes large command, file, API and browser output through context-mode tools so only the needed result enters the agent's context, instead of dumping it via Bash.

    26k GitHub stars~4.1k tokensUpdated yesterday
    Agent WorkflowsAuto-check passed
  • Migrates the compatible subset of settings and global file-based MCP servers from the Warp desktop app into Warp Agent CLI without exposing credentials or state.

    65k GitHub starsUsed in 1 repo~2.1k tokens
    Agent WorkflowsAuto-check passed

More from openvetta/open-vetta

All 21 skills in this repo
  • Mobile Android Design

    openvetta/open-vetta

    Master Material Design 3 and Jetpack Compose patterns for building native Android apps.

    291 GitHub starsUsed in 3 repos~950 tokens
    Auto-check passed
  • Plugin Workbench

    openvetta/open-vetta

    Create, implement, build, pack, install, reload, and manage Vetta desktop plugins for non-developers.

    291 GitHub stars~1.9k tokensUpdated today
    Auto-check passed
  • Create Skill

    openvetta/open-vetta

    Create or update Vetta-compatible Agent Skills. An agent skill from openvetta/open-vetta.

    291 GitHub stars~1.6k tokensUpdated today
    Auto-check passed
  • Mobile UI Design

    openvetta/open-vetta

    Design mobile-style HTML pages (iOS / Android) for preview in the Mobile UI Preview panel.

    291 GitHub stars~1.6k tokensUpdated today
    Auto-check passed
  • Remotion Video

    openvetta/open-vetta

    Create, modify, and render Remotion React video projects in the current Vetta conversation workspace.

    291 GitHub stars~744 tokensUpdated today
    Auto-check passed
  • Vetta UI Design

    openvetta/open-vetta

    Build and edit design documents (.vetd) on the Vetta design canvas — app screens, landing pages, slides, posters, infographics.

    291 GitHub stars~7.3k tokensUpdated today
    Auto-check passed

Categories

Questions about Publish Ability

What does Publish Ability do?

Publish a skill, scene, MCP server, plugin, or bundle to the Vetta ability marketplace. Publish Ability is an agent skill from openvetta/open-vetta. Publish a skill, scene, MCP server, plugin, or bundle to the Vetta ability marketplace.

When should I use Publish Ability?

Publish Ability fits situations like: the user asks to upload/publish/submit an ability; put a plugin on the marketplace; share a skill with other users; migrate an existing package into Vetta.

How do I install Publish Ability in Claude Code?

Run `npx skills add openvetta/open-vetta --skill publish-ability -a claude-code`. Or copy the skill folder (packages/skill-presets/publish-ability in openvetta/open-vetta) into .claude/skills/publish-ability in your project. Claude Code loads it when a task matches its description.

How do I install Publish Ability in Codex?

Run `npx skills add openvetta/open-vetta --skill publish-ability -a codex`. Or copy the skill folder (packages/skill-presets/publish-ability in openvetta/open-vetta) into .agents/skills/publish-ability in your project. Codex loads it when a task matches its description.

Can I use Publish Ability in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add openvetta/open-vetta --skill publish-ability -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/publish-ability, .gemini/skills/publish-ability, .github/skills/publish-ability and .opencode/skills/publish-ability in your project.

What does Publish Ability need to run?

Going by SKILL.md and its folder, Publish Ability needs JavaScript for the scripts in its folder and the command-line tools its instructions call (node). Our summary lists: Node.js.

Does Publish Ability access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Publish Ability safe to install?

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. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Publish Ability use?

Publish Ability is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Publish Ability use?

About 1.6k tokens (SKILL.md is roughly 6.5k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 2.6k tokens, read only when the agent opens those files.

What are the alternatives to Publish Ability?

Skills that share tags, products or a category with Publish Ability: MCP Server Builder (anthropics/skills, 180k stars), MCP Server Builder (shareAI-lab/learn-claude-code, 78k stars), MCP Integration for Plugins (anthropics/claude-plugins-official, 38k stars) and Crush Configuration (charmbracelet/crush, 29k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Publish Ability?

openvetta (a GitHub organization) maintains it in openvetta/open-vetta, which has 291 GitHub stars. The repository holds 21 skills in this directory. The repository was last updated on October 9, 2026.

Source: openvetta/open-vetta on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.