Documentation Index
Fetch the complete documentation index at: https://docs.tesslate.com/llms.txt
Use this file to discover all available pages before exploring further.

Why customize
An agent in OpenSail is atesslate-agent instance plus a system prompt, a bound skill catalog, a bound MCP connector set, a model preference, and an approval policy. Customization is how you turn a generic coding agent into a specialist: a Tailwind UI builder, a FastAPI API author, a security reviewer, a product-ops bot that lives in Slack.
Encode standards
Lock in coding conventions, frameworks, and patterns once, reuse forever
Scope capabilities
Restrict tools, skills, and MCP connectors so the agent does one thing well
Ship it
Publish to your team or the public marketplace as an immutable agent version
Keep control
Approval policies travel with the agent, so dangerous actions still gate the same way
The five levers
- System prompt
- Bound skills
- Bound MCP connectors
- Model preference
- Approval policy
The character sheet for the agent: role, tone, rules, tech stack, and anti-patterns. System prompts support runtime markers like
{mode_instructions}, {project_name}, and {git_branch} that are substituted before each model call.Creating an agent
Fork an existing one
The fastest path. You start with a working system prompt and adjust.Edit the prompt
Rewrite the system prompt to match your conventions. Keep
{mode_instructions} somewhere in the prompt so edit-mode behavior stays consistent.Attach skills and MCPs
Go to the agent’s detail page. Add skills from the Library tab. Add MCP connectors from the MCP tab.
Pick a model
Set a default model. Choose something faster for quick iteration, something stronger for reasoning-heavy tasks.
Create from scratch
Name and metadata
Give it a slug, a display name, an icon, a category, and a short description. These power marketplace search.
Skills
Attach the skills this agent needs. Leave off anything speculative: skills are lazy-loaded and only cost context window on use.
MCP connectors
Attach the connectors this agent must have. Connectors are per-user, so installers attach their own credentials after install.
Writing system prompts
A good system prompt has five sections: role, guidelines, stack, constraints, runtime markers.Role
Role
One line. Who the agent is and what it does.
Guidelines
Guidelines
How the agent should work.
Stack
Stack
Preferred libraries.
Constraints
Constraints
What to avoid.
Runtime markers
Runtime markers
Dynamic context injected at each call.
Common markers
| Marker | Substituted with |
|---|---|
{mode_instructions} | Full text for the current edit mode (allow, ask, plan) |
{mode} | The mode name only |
{project_name} | Current project display name |
{project_description} | Project description |
{project_path} | Workspace path inside the container |
{git_branch} | Current branch |
{tool_list} | Comma-separated tool names available this session |
{user_name} | The signed-in user’s display name |
{timestamp} | ISO timestamp at call time |
Always keep
{mode_instructions} in your prompt. It guarantees the agent still honors Plan Mode and Ask Before Edit even if your other instructions conflict.Binding skills
Skills are the unit of portable know-how in OpenSail. Each skill is a markdown document with a name, a short description, and a body. The agent only sees the name and description at session start. When it decides it needs one, it callsload_skill and the full body is injected into the turn.
Three sources feed the catalog:
- Built-in skills shipped with the platform (for example,
project-architecture). Available to every agent. - Skills you installed on this agent via the Library. You attach them explicitly.
- Project-file skills discovered at
.agents/skills/SKILL.mdin the workspace. Any agent working in that project sees them.
/guides/skills.
Binding MCP connectors
MCP (Model Context Protocol) is how OpenSail bridges third-party tool servers into the agent’s tool registry. You install a connector once on your account (with your credentials, encrypted at rest), then attach it to any agent. When the agent starts a session, the worker:- Looks up every
AgentMcpAssignmentfor the agent - Loads the user’s
UserMcpConfigfor each (with credentials) - Connects to each MCP server over streamable HTTP
- Bridges the server’s tools, resources, and prompts into the agent’s
ToolRegistry
/guides/connectors-mcp.
Approval policy
Every agent carries a default edit mode. Users can override per session, but your default matters because it sets the expected behavior.| Default | When to pick it |
|---|---|
| Ask Before Edit | Any agent that writes files or runs shell commands. Safest default. |
| Allow All Edits | Agents meant for trusted contexts (personal projects, sandboxed environments). |
| Plan Mode | Agents that should only plan and never execute. Useful for review agents, security scanners, architects. |
Publishing to the marketplace
Describe
Fill in the marketplace description, category, and tags. Add example prompts that show the agent at its best.
Choose visibility
Private (just you), team-only, or public. Public listings go through the approval pipeline.
Set pricing
Free, one-time purchase, subscription, or API-metered. Creator payouts pay 90% to you, 10% to the platform. See
/guides/billing.Submit
Submit for review. The approval pipeline runs automated security and manifest checks, then a sandbox evaluation, then a human review.
The MarketplaceAgent model
Agents are stored asMarketplaceAgent rows with item_type="agent". The relevant columns for customization:
| Field | Purpose |
|---|---|
slug | Stable identifier |
name, description, icon, category, tags | Marketplace metadata |
system_prompt | The prompt body (markdown with runtime markers) |
tools | Optional allowlist of tool names; null means all available tools |
model | Default LiteLLM model id |
approval_mode | Default edit mode |
visibility | Private, team, or public |
price | Free, one-time, subscription, or API-metered |
forkable | Whether installers can fork the agent |
is_builtin | Reserved for platform-shipped agents; not user-writable |
AgentSkillAssignmentbinds a skill to an agentAgentMcpAssignmentbinds an installed MCP server to an agent
Testing your agent
Run representative tasks
Not just “hello world”. Run the actual tasks users will throw at this agent.
Review every tool call
Put the agent in Ask Before Edit. Review what it wants to do. Note where it picks the wrong tool or the wrong file.
Check for drift
Does it follow your guidelines or ignore them under pressure? Add explicit rules for the failure modes.
Best practices
One specialty per agent
One specialty per agent
Focused agents outperform generalists. “React + Tailwind UI specialist” beats “full-stack developer” on UI tasks and vice versa.
Iterate the prompt
Iterate the prompt
Every time the agent does something wrong, add a rule that prevents it. Every time it does something right, generalize it into the prompt. Prompts are versioned like code.
Narrow tool access where you can
Narrow tool access where you can
A review agent does not need
bash_exec. A docs writer does not need multi_edit. Narrow tools reduce drift and lower risk.Include examples
Include examples
LLMs follow examples better than abstractions. Include a short code snippet in your system prompt showing the pattern you want.
Default to Ask Before Edit
Default to Ask Before Edit
Ship new agents in Ask Before Edit. Let users opt into Allow All once they trust the behavior.
Next steps
Using Agents
The user-side guide to running agents in chat
Skills
Author and publish reusable agent skills
Connectors (MCP)
Wire external tools into any agent
Model Management
Choose models, BYOK, or self-host