
Skill Publisher
Publish a packaged agent skill from your repo to Skills Catalog with manifest integrity checks and the bundled publish script.
Overview
skill-publisher is an agent skill for the Build phase that publishes versioned skills to Skills Catalog using a manifest and publish_skill.py.
Install
npx skills add https://github.com/skillscatalog/registry --skill skill-publisherWhat is this skill?
- Agentskills.io manifest v1 with SHA-256 integrity over SKILL.md and scripts/publish_skill.py
- Bundled publish_skill.py script for upload workflow to skillscatalog.ai
- Documents skill API keys and my-skills dashboard links for post-publish verification
- Versioned skill metadata (name skill-publisher, version 1.0.0) for repeatable releases
- Manifest lists 2 packaged files: SKILL.md and scripts/publish_skill.py
- agentskills.io schemas/manifest.v1.json with SHA-256 integrity block
Adoption & trust: 1 installs on skills.sh; 1 GitHub stars; 3/3 security scanners passed (skills.sh audits); trending (+100% hot-view momentum).
What problem does it solve?
You finished a SKILL.md package locally but lack a repeatable, integrity-checked way to push it to a public skills registry.
Who is it for?
Indie skill authors who already structure repos with SKILL.md and want one-command catalog publication.
Skip if: Builders who only consume skills and never author them, or teams using a private registry with no Skills Catalog account.
When should I use this skill?
You need to publish or update a skill package on Skills Catalog from a repo that includes SKILL.md and the publish script.
What do I get? / Deliverables
You run the publish script against a validated manifest and see the skill on skillscatalog.ai/my-skills for distribution to other agents.
- Published skill entry on Skills Catalog
- Integrity-verified manifest for the release
Recommended Skills
Journey fit
Publishing skills is part of building and distributing your own agent tooling ecosystem. Agent-tooling is where registry upload, manifests, and skill keys live alongside other SKILL.md packages.
How it compares
Registry publish workflow for skill packages, not an in-editor linter for SKILL.md content quality.
Common Questions / FAQ
Who is skill-publisher for?
Solo developers and skill maintainers publishing agent skills to Skills Catalog with manifest integrity and the included Python publisher.
When should I use skill-publisher?
Use it in Build after your SKILL.md and scripts are ready, when you need to upload a new version or first-time listing before sharing the skill in Prism or skills.sh workflows.
Is skill-publisher safe to install?
The publish script uses your API key and talks to skillscatalog.ai over the network; review the Security Audits panel on this page and never commit skill keys to git.
SKILL.md
READMESKILL.md - Skill Publisher
{ "$schema": "https://agentskills.io/schemas/manifest.v1.json", "manifestVersion": "1.0", "generatedAt": "2026-01-03T03:32:17.249498Z", "generator": "skill-manifest-generator/1.0.0", "skill": { "name": "skill-publisher", "version": "1.0.0" }, "integrity": { "algorithm": "sha256", "hash": "8e414f20420c944e422760b1aec2fb867986863d367b60a083fa14948567230b" }, "files": [ { "path": "SKILL.md", "size": 2361, "sha256": "21261bfa0dcec7edfa68688bfcbcd5a031cae980b62a00dd6e367a33aa751ef0", "type": "manifest" }, { "path": "scripts/publish_skill.py", "size": 12193, "sha256": "6ee67180a4bf601b5e191b0c510921df25b4ef5a0966fb63dc86395e197ad12b", "type": "script" } ], "externalReferences": [ { "url": "https://skillscatalog.ai/settings/skill-keys", "file": "SKILL.md", "line": 19, "type": "unknown" }, { "url": "https://skillscatalog.ai/my-skills", "file": "SKILL.md", "line": 58, "type": "unknown" }, { "url": "https://skillscatalog.ai/my-skills", "file": "scripts/publish_skill.py", "line": 316, "type": "unknown" }, { "url": "https://skillscatalog.ai/my-skills", "file": "scripts/publish_skill.py", "line": 332, "type": "unknown" }, { "url": "https://skillscatalog.ai/my-skills", "file": "scripts/publish_skill.py", "line": 342, "type": "unknown" } ], "structure": { "maxDepth": 1, "totalFiles": 2, "totalBytes": 14554, "folders": [ "scripts" ] }, "license": { "spdxId": "MIT" } } #!/usr/bin/env python3 """ Agent Skills Publisher Submit skills for publication to skillscatalog.ai. Validates, scans, and submits skills via the API. """ import argparse import base64 import json import os import re import sys from pathlib import Path from typing import Optional # Add parent directory to path for shared imports SCRIPT_DIR = Path(__file__).parent SKILLS_DIR = SCRIPT_DIR.parent.parent SHARED_DIR = SKILLS_DIR / "_shared" sys.path.insert(0, str(SHARED_DIR)) try: from agentskills_config import get_skill_key, get_api_url, get_auth_header except ImportError: print("Error: Could not import agentskills_config.") print("Make sure the _shared/agentskills_config.py module exists.") sys.exit(1) # Optional: import requests try: import requests except ImportError: requests = None # type: ignore # ============================================================================ # Skill Parsing # ============================================================================ def parse_skill_md(skill_path: Path) -> Optional[dict]: """Parse SKILL.md frontmatter.""" skill_md = skill_path / "SKILL.md" if not skill_md.exists(): return None content = skill_md.read_text() if not content.startswith("---"): return None end = content.find("---", 3) if end < 0: return None frontmatter = content[3:end] metadata = {} for line in frontmatter.strip().split("\n"): if ":" in line and not line.strip().startswith("-"): key, value = line.split(":", 1) key = key.strip() value = value.strip().strip("\"'") if key == "tags": # Handle tags array on following lines continue metadata[key] = value # Parse tags if "tags:" in frontmatter: tags = [] in_tags = False for line in frontmatter.strip().split("\n"): if line.strip() == "tags:": in_tags = True continue if in_tags: if line.strip().startswith("-"): tags.append(line.strip()[1:].strip()) else: break metadata["tags"] = tags return metadata def collect_skill_files(skill_path: Path) -> dict: "