
What a skill is
A skill is a markdown document that teaches an agent a reusable capability. It has a name, a short description, and a body. The body can be anything that packages up working know-how: a code-review checklist, a research methodology, a data-analysis pipeline, a writing style, a report template, a step-by-step playbook for a recurring task. Skills are the unit of portable agent knowledge in OpenSail. Build a skill once, attach it to any agent, share it on the marketplace.Author once
Capture an entire methodology in a markdown file
Reuse everywhere
Attach to any agent on any project
Progressive loading
Only the name and description live in context; the body loads on demand
Shareable
Install open-source skills from the marketplace or publish your own
Progressive loading
Context windows are finite. Injecting every skill body at session start wastes tokens on capabilities the agent never uses. OpenSail solves this with progressive disclosure:Catalog injected at session start
When a chat session opens, the orchestrator discovers every skill available to the agent and injects a lightweight catalog into the system context: name, one-line description, source tag. Full bodies are not loaded.
Agent decides when it needs one
As the agent works, it scans the catalog for a relevant skill. When it finds one, it calls the
load_skill tool with the skill slug.Body loaded on demand
The orchestrator fetches the full body, applies any live marker substitutions (so built-in skills always match current platform behavior), and returns it to the agent as a tool result.
Progressive loading is automatic. Skill authors don’t do anything special. Agents don’t need special training. The
load_skill tool and the catalog injection handle it transparently.The three skill sources
Every agent session merges skills from three independent sources into one catalog:| Source | Where it lives | Who sees it |
|---|---|---|
| Built-in | Seeded by the platform (is_builtin=True) | Every agent, every user |
| Database assignment | AgentSkillAssignment rows created when you install a skill on an agent | Only agents you’ve attached it to |
| Project file | .agents/skills/SKILL.md inside the workspace | Any agent working in that project |
Browsing and installing skills
Attach to an agent
Open the agent you want to extend. In the Skills tab, click Add Skill and pick from your Library.
Authoring a skill
Skills are plain markdown with a lightweight frontmatter contract.Write a one-line description
This is what the agent reads to decide whether to load the body. Make it concrete. “Checklist for reviewing React components for accessibility and performance” beats “reviews code”.
Write the body
Treat it like documentation for a junior engineer who needs to follow your methodology exactly. Include examples, anti-patterns, and edge cases. Markdown code fences and tables are fine.
What makes a good skill body
Concrete and actionable
Concrete and actionable
“Run
npm test -- --coverage and fail the review if coverage drops below 80%” beats “make sure there are enough tests”.Step-ordered
Step-ordered
The agent executes top to bottom. Structure the body as a numbered or bulleted sequence the agent can walk through.
Include examples
Include examples
Paste short code samples or CLI transcripts showing what correct output looks like. LLMs pattern-match examples better than abstract instructions.
Include anti-patterns
Include anti-patterns
Spelling out what not to do is as valuable as what to do. “Never use
any in TypeScript code” is a skill rule that saves turns.Keep it focused
Keep it focused
One skill per capability. If the body grows past a few hundred lines or covers multiple methodologies, split it into multiple skills.
Tesslate skills vs open-source skills
- Tesslate (built-in)
- Open-source
Shipped with the platform. Authored by the Tesslate team. Available to every agent without any attachment. Live-rendered: marker tokens like
{{TESSLATE_CONFIG_SCHEMA}} or {{SERVICE_CATALOG}} are substituted with current values from the code, so skill bodies never drift from the actual platform behavior.Examples:project-architecture(how OpenSail projects are structured)- Config schema skills that reflect the live
.tesslate/config.jsondefinition
Project-file skills
Any agent working in a project picks up skills from.agents/skills/SKILL.md automatically. This is how you ship project-specific know-how with the repo itself.
Publishing a skill
Write and test
Use the skill on real work across multiple projects. Refine the body based on where the agent gets stuck or drifts.
Submit
Open the skill in your Library and click Publish. Fill in the marketplace description, tags, and category.
Best practices
Descriptions are load-gates
Descriptions are load-gates
The agent only knows the description. If your description is vague, your skill won’t get loaded when it’s needed. Make it specific and action-oriented.
Keep bodies lean
Keep bodies lean
Long bodies burn context once loaded. Aim for the shortest body that fully captures the methodology. If multiple sub-methods are inside, consider splitting.
Compose over nest
Compose over nest
A single agent can load many skills in one session. Prefer several small focused skills to one giant skill covering everything.
Test across agents
Test across agents
Skills that work with one agent’s system prompt may conflict with another’s. If you publish a skill, test it against the default agents users will pair it with.
Next steps
Customizing Agents
Attach skills to your own custom agents
Connectors (MCP)
Pair skills with connectors for end-to-end workflows
Using Agents
Watch the load_skill tool in action
Marketplace
Browse published skills