Skip to main content
Two mechanisms sit between your system prompt and the model. Instructions are always in context. Skills are loaded on demand.

Workspace instructions

Every turn, the loop reads AGENT.md from the user’s workspace root and appends it to the system prompt, fenced as user preferences that stay subordinate to your .system() prompt.
AGENT.md
Users edit it from the files panel or by asking the agent to. Nothing is needed on your side, but the file name is configurable:
Content is capped at 24KB and truncated beyond that. Binary or unreadable files are ignored.

Skills

A skill is a folder of instructions the model pulls in when it decides the task calls for it. Only the name and description sit in the system prompt, which costs a line or two. The body enters context when the model calls the skill tool.
SKILL.md
The frontmatter does the work. name is lowercase with hyphens and falls back to the folder name. description is what the model matches against, so write it as “what this does, and when to use it” in at most 1KB. The body can be up to 48KB.

Shipping skills with the agent

Shipped skills are read-only and mount at /skills/<name>/ inside the bash sandbox, so scripts find their own templates by absolute path. They version with your deploys.

Skills users create

Any skills/<name>/SKILL.md in a user’s workspace joins the catalog automatically, rescanned about every thirty seconds. A user skill wins a name collision with a shipped one, so someone can override your default without a redeploy.
The description decides whether the model reaches for the skill, so write the trigger rather than the summary. “Use when the user asks for a PDF report, an invoice, or a printable summary” works better than “PDF utilities”.

Which to use

Next

Files and the canvas

The workspace file tree, and how the canvas renders it.