Documentation · Publishing
Publishing a skill.
LoopSkill is an open marketplace. Any developer can submit a skill for review.
The canonical publish path is MCP-first — your agent calls recipes_publish_request
from within a conversation. A CLI fallback is also available.
New in Phase C / recipes_2005
The recipes_publish_request MCP tool is live. It submits your SKILL.md
directly from the agent conversation, runs the quality gate in-memory, opens a GitHub
review issue, and returns a request_id and issue_url in one
tool call. No dashboard, no upload form.
What gets published vs. what you keep
- Published: your
SKILL.md, optionalreferences/andtemplates/directories, askill.tomlmanifest. - Private: your env vars, your credentials, your agent config. None of those travel with the skill.
- Revenue share: accepted skills earn a percentage of subscription revenue attributed to your skill's install and use events. See Creator program for current rates.
MCP-first path (recommended)
Step 1: Develop locally
Scaffold your skill directory using recipes_recipify or by hand:
SKILL.md ← required: YAML frontmatter + instructions body
skill.toml ← required: metadata (slug, version, tier, license)
references/ ← optional: reference docs, loaded on demand
templates/ ← optional: config snippets, scaffolds
The SKILL.md frontmatter must include at minimum:
name, description, version (semver),
tier (free | cook | operator), and license (SPDX).
Step 2: Call recipes_publish_request
From inside your agent conversation (e.g. Claude Code, Hermes):
// Tell your agent:
"Submit my skill at ./skills/my-skill/ to the LoopSkill marketplace"
// The agent calls:
recipes_publish_request({
slug: "my-skill",
content: "<SKILL.md contents>",
version: "1.0.0",
description: "What this skill does",
tier: "cook",
license: "MIT"
}) The tool runs synchronously and returns:
{
"request_id": "uuid...",
"slug": "my-skill",
"status": "pending_review",
"issue_url": "https://github.com/wisechef-ai/recipes-api/issues/NNN",
"sha256": "abc123...",
"warnings": [] // or [{severity: "low", message: "..."}]
}
If the quality gate finds a HIGH severity issue (e.g. curl | bash
pattern, hardcoded $HOME path, credential leak), the tool returns
{"error": "quality_gate_failed"} and no issue is opened
— fix the finding and resubmit.
Step 3: GitHub review
The issue_url in the response links to a GitHub issue in the
wisechef-ai/recipes-api repo. A WiseChef team member reviews:
- Does the skill do what it says?
- Is the install reproducible on a clean machine?
- Does telemetry surface the expected success/failure events?
- Is the quality gate fully green?
You can track the issue directly. The reviewer may leave comments asking for changes.
Respond by updating your SKILL.md and calling recipes_publish_request again
with the same slug — the system deduplicates and links the new submission to the existing issue.
Step 4: Signed and published
Once approved, a WiseChef team member closes the issue with the
approved-publish label. An automation job:
- Builds the final tarball from the approved submission
- Signs with the WiseChef ed25519 publish key
- Uploads to the CDN
- Creates the skill row in the catalog database
- Sends you a confirmation email with the published URL
CLI fallback
If you prefer a terminal workflow, the recipes CLI (Phase F) supports the
same flow:
recipes publish --slug my-skill --dir ./skills/my-skill/
This packs the directory into a tarball, runs the local quality gate, and posts to
POST /api/publish/request. The response is the same as the MCP tool.
Quality gate
The quality gate runs on every submission and checks for:
- HIGH (blocks submission):
curl | bashpipelines, hardcoded$HOMEor username paths, binary executables in the tarball, path traversal in filenames, credential patterns (AWS keys, GitHub tokens, etc.), internal WiseChef infra references. - MEDIUM (warns, allows submission):
External links not on the allowlist, use of
sudo, large scripts (>500 lines), missingCHANGELOGsection. - LOW (informational): Missing screenshots, short description (<100 chars), no template files.
Tier semantics
Set the tier field in your submission:
- free — available to all API key holders, no subscription required. Good for open-source skills you want maximum adoption on. MIT or Apache-2.0 license preferred.
- cook — available to Pro subscribers ($20/mo). This is the sweet spot for polished, maintained skills. Most catalog skills are cook-tier.
- operator — available to Pro+ subscribers ($100/mo). For enterprise skills: fleet-specific tooling, high-compute workflows, bespoke integrations.
The reviewer may suggest a different tier if the skill's complexity or maintenance burden warrants it. Final tier is set at publish time.
Rate limits
recipes_publish_request is rate-limited to 1 submission per 24h per
(user, slug) pair. This prevents flooding the review queue. If you need to resubmit
quickly after a rejection, contact the reviewer on the GitHub issue.
Creator earnings
Once your skill is published, you earn a share of the subscription revenue attributed to its install and use events. Payouts are calculated monthly. See the Creator program for current revenue share percentages and payout minimums.
Related
- Creator workflow — end-to-end guide
- API reference
- Security model — review pipeline details
- Fleet guide — distribute skills to multiple agents
FAQ
Can I update a published skill?
Yes — increment the version in your SKILL.md frontmatter and call
recipes_publish_request again with the updated content.
Patch versions (e.g. 1.0.0 → 1.0.1) go through expedited review.
Major versions (e.g. 1.x → 2.0.0) get a full review cycle.
What if the quality gate flags my skill?
HIGH severity findings block the submission — no issue is opened.
Fix the finding and resubmit. MEDIUM and LOW findings
are warnings: the issue is opened with the findings listed, and the reviewer
may ask you to address them before approval.
How long does review take?
Standard review: we aim to respond within a few business days. Operator subscribers receive priority review. If your issue hasn't received a response, comment on it with a ping.