Create a skill
Takeaway
A skill is a folder with a SKILL.md, packaged as a minimal plugin so you can version and share it. Scaffold one with tessl skill new, write a clear SKILL.md, and validate it with tessl skill lint and tessl review.
A skill teaches an agent how to do one thing: a workflow, a convention, a piece of specialized knowledge. It is agent-agnostic, so the skill you write here works across every agent Tessl supports, adapted to each on install. This page covers scaffolding a skill, writing it, and checking it is well formed. Improving how well it performs is a separate step, covered in Improving your skills, and sharing it is covered in Publish and update.
Your agent can do all of this for you. Install Tessl's plugin creator with tessl install tessl/plugin-creator, or use Tessl Agent, which ships with those skills built in.
Prerequisites
- The Tessl CLI installed (see Installation).
- A logged-in session (
tessl login), or aTESSL_TOKENin the environment. - A workspace to attribute your work to. Examples use
engteamas a stand-in; runtessl workspace listto see yours and use one of those instead.
Scaffold the skill
tessl skill new creates a new skill and its .tessl-plugin/plugin.json manifest. Run it with no flags for an interactive wizard:
Or pass flags to scaffold it directly:
Import an existing skill
If you already have a SKILL.md, tessl skill import generates the .tessl-plugin/plugin.json around it so it becomes an installable skill:
Pass --public to make it public, or --force to overwrite an existing manifest.
skill import handles one skill. It writes .tessl-plugin/plugin.json inside the skill folder with "skills": ["."], so that folder becomes the plugin root, and its evals/ go there too.
If your repository has several skills, do not run skill import for each one. That makes one plugin per skill. Create one plugin at the repository root instead, and point its skills field at the folder that holds the skills:
When the skills sit in ./skills/, you can leave out the skills field: Tessl finds them by convention. To list specific skill folders, give an array, for example "skills": ["./skills/database-migration-helper", "./skills/seed-data-helper"]. See Configuration files for the field reference.
Write the SKILL.md
A skill follows the Agent Skills specification. The file is named SKILL.md: YAML frontmatter, then a Markdown body.
Two parts do the work:
description(frontmatter) is how an agent discovers the skill. State what it does and when to use it. A vague description is the most common reason a skill never fires.- The body is the instructions the agent follows once loaded. Keep it concise and actionable; push long reference material into a
references/folder beside theSKILL.md.
Understand the package structure
tessl skill new creates a Tessl package: your skill plus a manifest that makes it installable.
The manifest holds the package metadata:
You rarely edit this by hand, except to bump version. The full reference is in Configuration files.
Validate
Lint checks the structure and frontmatter against the Agent Skills specification:
Fix any errors it reports before moving on. Then, for a scored review of how well the skill is written, run tessl review and read the result:
Reviewing and improving are covered in full in Check a skill's quality using review.
Next
- Create a plugin - bundle this skill with others, or add rules and an MCP server.
- Prove a skill works using evaluation - measure whether it improves the agent's output.
- Publish and update - share it with your team or publicly.