Create a Tessl plugin: wrap your existing skills into a versioned, shareable bundle, decide what else it needs (rules, commands, MCP servers), validate, and publish.
91
88%
Does it follow best practices?
Impact
95%
1.25xAverage score across 5 eval scenarios
Advisory
Suggest reviewing before use
<plugin-name>/
.tessl-plugin/
plugin.json # manifest (required)
skills/
<skill-name>/
SKILL.md
references/ # optional
rules/ # optional
<rule-name>.md
commands/ # optional
<command-name>.md
.mcp.json # optional (bundled MCP servers)Scaffold this with tessl plugin new (or tessl skill new for a single skill) rather than writing it by hand. A single skill created with tessl skill new is already a minimal plugin, it gets a .tessl-plugin/plugin.json.
plugin.json fieldsRequired: name (<workspace>/<plugin-name>, matches the key in tessl.json), version (semver), description (the registry shopfront, what others see to decide whether to install).
Optional metadata: author, homepage, repository, license, private (true keeps it workspace-only; public is irreversible).
Content paths (string or array): skills (defaults to ./skills/), rules (defaults to ./rules/), commands, mcpServers (literal ".mcp.json" or "./.mcp.json").
Hooks (hooks / nativeHooks) exist in the schema but are not GA. Do not include them in a published plugin.
description..mcp.json.Rule of thumb: always-on → rule; reach-for-it-when-relevant → skill; a button the user presses → command; needs live tools or data → MCP server.