Authoring a marketplace
A kendex marketplace is a git repository of skills, agents, and hooks. There
is no registration step and no format to learn first. Any repository that
holds skills already works: kendex marketplace subscribe owner/repo finds
them where they are (skills/, .claude/skills, a single root SKILL.md, or
a Claude plugin registry). Everything below is optional structure that makes a
repository easier to browse, check, and publish.
Start here
Scaffold a repository:
kendex marketplace new my-marketplace
That creates the folder with a kendex.toml, a README, the check workflow,
and a licence, and initialises it as a git repository. Add packages, push it to
GitHub, and submit it.
Templates for each file are in the repository.
The layout
my-marketplace/
kendex.toml what this marketplace says about itself
agents/<name>.md one agent per file
skills/<name>/SKILL.md one folder per skill (the folder name is its name)
hooks/<name>.sh commands/<name>.md mcp/<name>.toml
README.md how to subscribe
LICENSE
.github/workflows/kendex-check.yml the check, on every push
Two rules worth knowing:
- A skill's identity is its directory name. A
SKILL.mdwhosename:disagrees with its folder is a check finding. - Executable kinds are never guessed. Hooks, commands, and MCP servers install
only from a repository that declares kendex's layout (any parseable
kendex.tomldoes) or from a plugin registry.
kendex.toml
[marketplace]
name = "my-marketplace"
description = "Skills for the whole team"
author = "Jane Doe"
license = "MIT" # an SPDX id; omit while undecided
homepage = "https://example.com"
tags = ["rust", "review"]
# Optional: override where agents and skills live.
[catalog]
skills = ["skills", "extra-skills"]
agents = ["agents"]
# Optional: curated sets people install with one click.
[bundles.starter]
description = "Everything a new project needs"
members = ["skill/review", "agent/scout"]
Everything is optional. A missing [marketplace] table means the directory
listing falls back to what GitHub knows.
What each kind needs
- Skill:
skills/<name>/SKILL.mdwith frontmattername(matching the folder) anddescription. Extra files in the folder ship with it. - Agent:
agents/<name>.mdwith frontmatternameanddescription; optionalmodel,color, and tool allow and deny lists. - Hook:
hooks/<name>.shwith a comment header namingevent(for examplePreToolUse), optionalmatcher, and adescription. - Command:
commands/<name>.mdwith frontmatterdescription. - MCP server:
mcp/<name>.tomldescribing the server invocation.
A description is never guessed. An empty one stays empty and is a check finding.
The check
kendex marketplace check
This validates every package the way installing validates it. Problems surface in your CI, not in someone else's install preview. The scaffolded workflow runs it on each push and pull request.
Publishing
Push the repository to GitHub, make it public, and submit it, from the app (Mine, then Submit to community) or at kendex.ai/submit. kendex.ai verifies your push authority over the repository, indexes it, and lists it. The listing follows the repository id, so renaming the repository later keeps the listing.
These pages are the kendex app’s own documentation. The source lives in the repository.