Portable behavior packs your agents load at runtime. Author them with AI, record them from a real process, upload them, or install them from the catalogue.
A Skill is a tested playbook your agents load at runtime: a plain SKILL.md file with the procedure, the safety rules, and the triggers that tell an agent when to reach for it. Author it once, enable it anywhere.
You never invoke a skill by hand. The agent reads your request, matches it against every enabled skill’s trigger phrases, and loads the winning playbook. Pick a task:
chat · maya
youSummarize my unread emails.
skill matched · email-summarise
mayaLoading the playbook, grouping by sender, ranking by urgency, never marking as read.
Matched trigger: “when the user asks to summarize unread emails”: declared in the skill’s frontmatter. Specific phrasing wins; vague triggers misfire.
mayaThis one runs as a sub-agent with its own context budget: the long research output won’t crowd our conversation.
Matched trigger: “when the user asks for a competitor brief”. Because the skill declares context: fork, it spawns an isolated sub-agent for the heavy lifting.
schedule · friday 16:00 · maya
schedTask: send the weekly digest.
skill matched · weekly-digest
mayaSame playbook, no human in the loop. Skills fire on schedules and triggers exactly as they do in chat.
Matched trigger: “when asked to send the weekly digest”. Skills work identically in conversation, in workflows, and on unattended scheduled runs.
Without skills
You paste the same Gmail auth steps, safety rules, and output format into every agent that touches email. When the procedure changes, you update four different instruction blocks, and miss one.
With skills
You write the procedure once in a SKILL.md file. Enable it on any agent. When the procedure changes, you update one file and every agent that has it enabled picks up the change.
When the procedure changes you update one file. Every agent that has it enabled picks up the change on its next run.
ONE SKILL · EVERY AGENT
weekly-digest skill · four agents · illustrative team
Maya · Marketing. Sends to 47 recipients~18 min/mo saved
Dario · Sales, pipeline summary to 12 reps~14 min/mo saved
Priya · Support, ticket-volume digest to team lead~14 min/mo saved
Sam · Solo founder, personal inbox roundup~10 min/mo saved
One SKILL.md, zero drift~56 min/mo
ILLUSTRATIVE FIGURES
Update the playbook in one file. Every agent that has it enabled learns it on the next run: no copy-paste, no version drift, no missed instruction block.
Everything a skill is lives in one Markdown file: YAML frontmatter on top, the playbook below. Click a zone to see what it does.
company/skills/email-summarise/SKILL.md
---name: email-summarisedescription: Reads unread Gmail and returns a ranked summary.version: 1.0.0triggers: - when the user asks to summarize unread emails - when the user wants a morning email digestcredentials: gmail_token: env GMAIL_ACCESS_TOKEN · oauth · requiredallowed-tools: - mcp_gmail_list_messages - mcp_gmail_get_message---# email-summariseGroup unread mail by sender. Rank by urgency. One-sentencesummaries. Never mark messages as read.
Identity.name and description are the only required fields; without them the file fails validation and shows an invalid badge. The name becomes the catalogue slug: lowercase, hyphens, and ideally a namespace prefix (acme-gmail-summarise) so it never collides with a skill that arrives later.
Triggers. Natural-language phrases that tell agents when to reach for this skill. Concrete and distinct wins: “when the user asks to summarize unread emails” is strong; “for email tasks” misfires. Add at least two. The drawer warns when a skill has none.
Credentials. Slot declarations, never values. Each entry maps a slot to a vault key. Actionist resolves the real secret from the encrypted vault at runtime, so nothing sensitive ever sits in the file.
Allowed tools. An explicit allow-list of what the agent may call while running this skill. Omit it and the agent keeps its full toolset; specify it and an email-reading skill physically cannot write files or run terminal commands.
The playbook. Free-form Markdown the agent reads and follows: the procedure, the safety rules, the output format. This is where your expertise lives, written like you’d brief a careful new hire.
Every skill card carries a source label telling you where it came from and what you can do with it.
Installed from the catalogue
Community and curated skills you installed through Explore catalogue. Updates surface under the Updates filter.
Present in your workspace
Skills available to your workspace and the agents in it. Visible to your organisation, never published publicly.
You made it
Skills you created with AI, recorded from a real process, or uploaded as an archive. Full ownership, full control.
Give custom skills a namespace prefix, acme-gmail-summarise rather than gmail. Distinct names keep a skill of yours from colliding with one that arrives later from the catalogue.
Skills is a tab under Apps, alongside Apps and MCPs, at /skills. Everything you need to discover, manage, and author skills lives there.
Where to find it. There is no standalone Skills item in the primary sidebar. Open Apps, then select the Skills tab. The catalogue opens separately at /apps/skills/catalogue.
18
Enabled
24
In your workspace
4
Custom
AllYour SkillsCustomCatalogue
ProductivityCommunicationResearchDeveloperData
web-taskcatalogue
agent-browserworkspace
email-summarisecustom
Three metrics
The header counts what matters: how many skills are enabled, how many are in your workspace, and how many are custom.
Tabs and categories
Four tabs narrow the list: All, Your Skills, Custom, and Catalogue. Under them, category buttons filter by subject. Results render as cards, not rows.
Header actions
Explore catalogue opens the catalogue. Upload skill takes a zip archive. Record process turns a recorded run into a skill or an agent. Create with AI writes one from a description.
Search
The search box matches the skill name and description. If you are hunting for a skill that calls a specific service, search the service name.
However a skill reached your workspace, the enablement flow is the same. Enable it once globally, then switch it on for each agent that should use it.
Open the Skills page
Go to Apps → Skills. Stay on the All tab, or switch to Your Skills to see only what is already in your workspace. Type a keyword in the search box, for example gmail or web.
Open the Skill Drawer
Click any skill card to open the Skill Drawer. The drawer shows the skill’s description, trigger pills (the phrases that tell an agent when to invoke this skill), a Frontmatter preview, and any required environment variables or system binaries.
Enable it globally
Close the drawer and click the toggle on the skill card. This makes the skill available across the workspace, so every agent can now see it.
Wire it to an agent
Open the Agent Studio and switch to the Skills tab. Find the skill and flip its toggle. If a Key icon appears beside the toggle, click it to open the credential binding drawer and map the vault secret this skill needs.
Run it
The next time the agent encounters a phrase that matches one of the skill’s triggers, it loads the playbook automatically, exactly like the demo at the top of this page.
wt
web-task
Catalogue
Triggers
when asked to open a URL or browse a websitewhen the user needs a web searchfor any browser automation task
Describe it and let AI write it, record yourself doing the job once, or author the file yourself and upload it. All three land in the same place: a SKILL.md in the Custom group.
Create with AI (recommended)
Record process
Author by hand
A conversational AI inside Actionist writes your skill’s frontmatter, trigger list, and playbook body from a plain-language description. No YAML knowledge required. Here’s a whole creation, start to finish:
Skill Creator
youA skill that reads my unread Gmail, groups by sender, and ranks the urgent stuff first. Never mark anything as read.
thinking…
aiGot it. Should urgency favor specific senders: your team, key clients?
youAnything from legal@ or my starred contacts is urgent.
tool · create_skill
aiSkill created → company/skills/email-summarise/SKILL.md
aiTwo triggers, Gmail read tools only, urgency rules encoded. View in catalog or create another.
Open the creator
From the Skills page, click Create with AI in the page header. The modal opens with a welcome message explaining that skills are reusable playbooks your agents can draw on.
Describe what you want
Type your description and press Enter. Be specific about what the skill should do, what tools it needs, and what output it should produce. The AI may ask a few clarifying questions before building anything.
Review the result
The stage indicator shows “Creating your skill…” while the playbook is written. When it finishes you see the Skill created kicker, the path to your new SKILL.md, and two buttons: View in catalog and Create another.
Find it under Custom
Your new skill appears on the Custom tab. Enable it globally with the toggle, then wire it to any agent from the Agent Studio → Skills tab.
If you close the creator mid-conversation, a “Leave without finishing?” overlay appears. Select Discard to abandon the draft or Continue editing to return. The skill is only saved when the success screen appears.
Some procedures are far easier to demonstrate than to write down, especially in tools with no clean API. Record process captures you doing the job once and turns that recording into something reusable.
Start the recording
From the Skills page, click Record process in the page header, then begin the task you want to capture.
Do the job once, properly
Work through the task the way you want it done every time. The cleaner the run, the cleaner the resulting playbook, so avoid detours and dead ends.
Choose skill or agent
A recording can become either a skill or an agent. Pick a skill when it is a behaviour several agents should share. Pick an agent when the work deserves its own role, schedule, and channels.
Review before you rely on it
Open the generated SKILL.md and check the triggers and the playbook body read the way you would brief a careful new hire. Tighten anything vague, then enable it.
Recording is the fastest route for internal tooling, admin consoles, and legacy systems, exactly the places where writing a procedure from memory tends to miss a step.
Write the SKILL.md yourself when you want full control from the first line. The file is plain Markdown with a YAML frontmatter block at the top. To get a hand-authored skill into the product, zip its folder and use Upload skill in the page header.
---name: email-summarisedescription: Reads unread Gmail messages and returns a ranked summary grouped by sender.version: 1.0.0triggers: - when the user asks to summarize unread emails - when the user wants a morning email digestcredentials: gmail_token: env: GMAIL_ACCESS_TOKEN provider: google kind: oauth displayName: Gmail OAuth token required: trueallowed-tools: - read_file - mcp_gmail_list_messages - mcp_gmail_get_message---# email-summariseRead unread Gmail messages. Group by sender. Return a ranked list with the most urgent threads first. Summarize each thread in one sentence. Never mark messages as read.## Output formatReturn a markdown list. Each item: **[Sender Name]**: summary sentence. Prefix urgent items with `[URGENT]`.
---name: competitor-researchdescription: Researches a named competitor and produces a structured brief.version: 1.0.0context: forktriggers: - when the user asks for a competitor brief - when the user wants to research a companyarguments: competitor_name: description: The company to research required: true---# competitor-researchResearch {{competitor_name}}. Gather: company overview, recent news, product positioning, pricing signals, and known customer segments. Return a structured brief with one-line summaries under each heading.
Put the SKILL.md at the root of its own folder, zip that folder, and upload it with Upload skill. Actionist scans the folder tree up to 10 levels deep, so supporting resources can sit in subfolders next to the playbook.
The anatomy explorer above shows where each field lives. Here is the full detail for each one.
name and description
Both fields are required. Without them, the skill fails validation and appears as an invalid badge on its folder in the side pane.
name: email-summarisedescription: Reads unread Gmail messages and returns a ranked summary grouped by sender.
name becomes the skill’s catalogue slug. Use lowercase letters, numbers, and hyphens. Include a namespace prefix if you manage multiple skills from the same domain: acme-gmail-summarise, not gmail.
triggers
A list of natural-language phrases that tell an agent when to invoke this skill. Without triggers, the agent must guess, leading to false positives or missed invocations.
triggers: - when the user asks to summarize unread emails - when the user wants a morning email digest - on email triage requests
Make triggers concrete and distinct. “when the user asks to summarize unread emails” is a strong trigger. “for email tasks” is too broad.
Add at least two triggers to every custom skill. The agent drawer shows a warning for skills with none.
credentials
Declares the API credentials this skill needs. Actionist resolves them from your vault at runtime. No keys are stored in the SKILL.md body.
Each entry maps a slot name to a vault key (env: KEY_NAME). The provider, kind, displayName, and required fields are optional but help the binding drawer surface the right vault entry.
context
Controls how the skill runs relative to the current conversation.
Value
Behavior
inline (default)
Runs inside the current conversation. Lightweight; shares the parent’s token budget.
fork
Spawns a sub-agent with a fresh context budget. Useful for long-running tasks whose output would crowd out the parent conversation.
Use inline for most skills. Reserve fork for tasks that produce large output or run long enough to exhaust the parent’s context window.
allowed-tools
An explicit list of tools this skill is permitted to call. Restricts what the agent can do while executing this skill.
Omitting this field allows any tool the agent already has access to. Specifying it limits the blast radius. An email-reading skill that cannot write files or run terminal commands cannot cause unexpected side effects.
arguments
Named variables the agent passes into the skill at invocation time. Useful for skills that handle a class of tasks where one input changes.
arguments: competitor_name: description: The company name to research required: true depth: description: How deep to go, either 'brief' or 'full' required: false
Reference arguments in the skill body as {{argument_name}}.
Skills that need API keys declare slots in frontmatter. You bind those slots to vault entries once, and every run resolves them silently:
DeclareThe SKILL.md names a slot (env: STRIPE_SECRET_KEY) never the value.
VaultThe real key lives encrypted in Settings → Credentials Vault.
BindPer agent, the Key icon on the Skills tab maps slot → vault entry.
ResolveAt runtime the secret is injected silently. Rotate in the vault; every skill updates.
Never paste API keys or tokens into the skill body or into agent instructions. The SKILL.md body is readable by anyone with workspace access. Declare secrets in the credentials: frontmatter block and bind them from the vault.
Declare in frontmatter
In your SKILL.md, add a credentials: block naming every secret the skill needs. This is a slot declaration, not the value itself.
Go to Settings → Credentials Vault and add the key under the same variable name (STRIPE_SECRET_KEY). The vault encrypts values at rest.
Credentials vault
How to add, rotate, and scope API keys in the vault.
Bind per agent
In the Agent Studio → Skills tab, find the skill. If it declares credentials, a Key icon appears beside the toggle. Click it to open the binding drawer and confirm which vault entry maps to each slot.
InstructionsSkillsToolsMemory
web-task
Browser automation and web search
gmail-summarise
Reads unread Gmail and returns a ranked summary
competitor-research
Researches a named competitor and produces a brief
The Actionist catalogue hosts community and curated skills. Install once, pick up updates when new versions land, and uninstall cleanly when you are done.
Open the catalogue
On the Skills page, click Explore catalogue in the header. The catalogue opens at /apps/skills/catalogue with Editor’s pick and Trending this week strips, category browsing, and search. Narrow the grid with the All / Installed / Updates filters, and reorder it with the sort control.
Find and install a skill
Browse or search for a skill, then click Install on its card. The skill installs to your workspace and picks up the Catalogue source label on the Skills page.
Enable it per agent
Newly installed skills are disabled by default. Open the Agent Studio → Skills tab, find the skill, and flip its toggle on.
Bind credentials if needed
If the skill declares credentials, a Key icon appears beside the toggle. Click it to open the binding drawer and wire the vault entry.
Keep it current
When an update is available, the skill shows up under the Updates filter and its drawer offers an update button. To remove a skill entirely, open the drawer and click Uninstall.
Installing from the catalogue works in the web app. There is no desktop requirement and no desktop-only overlay on the Install button.
Upload a skill archive
Upload skill in the page header takes a zip archive. This is how a skill you authored by hand, or one handed to you by a teammate, gets into your workspace.
Prepare the archive
Zip your skill folder. The archive must be no larger than 50 MB and must contain a SKILL.md at the root or inside a subfolder.
Open the upload dialog
Click Upload skill in the header. The “Upload skill archive” dialog opens. Click to select your .zip file.
Set the slug
Enter or confirm the auto-derived Skill slug: lowercase letters, numbers, dashes, and underscores, starting with a letter or digit. Check Replace existing skill of the same slug to overwrite a prior version.
Upload and confirm
Click Upload. The archive is extracted and installed, and a success toast confirms the skill was queued. It then appears with the Custom source label.
To remove a skill that came from the catalogue, use Uninstall from its drawer rather than deleting files.
Custom skills you have tested and refined can be submitted to the Actionist catalogue for review. Once published, other users can install and benefit from your work.
Open the Skill Drawer
On the Skills page, find your custom skill in the Custom group. Click the row to open the Skill Drawer.
Submit for review
In the drawer footer, click Publish to Marketplace. Read the dialog carefully, review the listing details, then submit. The skill now shows a Pending review badge.
Wait for the decision
While review is in progress, the publish button is hidden. Once the review completes, the badge updates:
Pending reviewPublishedRejected
If rejected, the drawer shows the reviewer’s reason so you can address it.
Ship updates
After a decision (approval or rejection) the publish button reappears as New version. Click it to submit an updated version for review.
Nothing is sanitized. The publish dialog states it plainly: the entire folder is uploaded, including SKILL.md and every resource file alongside it. No token stripping, no redaction, no filtering of any kind.Before you submit, open every file in the folder and remove API keys and tokens, customer records and internal business data, local filesystem paths and machine names, and any private process detail you would not post publicly. If a skill encodes something confidential, keep it private and share it inside your workspace instead.
What each state means, and why a control might be missing.
A skill has two independent states: whether it exists in your workspace, and whether a given agent is allowed to use it. Most confusion comes from mixing the two.
What you see
What it means
What to do next
Install on a catalogue card
The skill is not in your workspace yet.
Click Install. The card switches to Installed.
Installed badge, agent toggle off
The skill is in your workspace but this agent cannot use it.
Open Agent Studio, go to the Skills tab, and toggle it on for that agent.
Toggle on, skill never fires
The agent can use it, but nothing in the conversation matched its triggers.
Add more trigger phrases to the skill, or name the skill directly in your instruction.
Custom source label
You uploaded or authored this one. It receives no catalogue updates.
Maintain it yourself. Re-upload with the same slug to publish a new version.
Update available
A newer version exists in the catalogue.
Install the update. Enabled agents keep their toggle state.
The Install button is missing or does nothing
The most common cause is that the skill is already installed, in which case the card shows a source label instead. Check the Skills page with the Installed filter before assuming the button is broken. Installing works in the web app, so a missing button is not a platform restriction.
An upload was rejected
Uploads fail when the archive is over the size limit, or when no SKILL.md is found at the root or in a subfolder. Nothing is saved when an upload is rejected, so fix the archive and upload again. You do not need to clean anything up first.
Two skills seem to compete
A custom skill and a catalogue skill can describe overlapping work. The agent picks one. Rename your custom skill with a distinct prefix and give it triggers that do not overlap, so it is obvious which one should match.
Without trigger phrases, the agent must guess when to invoke the skill. Leading to false positives (skill called when you did not want it) and missed invocations (skill not called when you did). Make triggers concrete and distinct. The Skill Drawer shows a warning badge for skills with no triggers. Treat triggers as a required field.
Check a skill validates before you rely on it
A skill that fails indexing shows an invalid badge instead of appearing normally in the list. The most common cause is a missing name: or description: field, and both must appear inside a --- YAML block at the very top of the file.
Name custom skills with a prefix to avoid shadowing
A bare name like gmail is easy for another skill to collide with, and a name collision is not something you want to debug at runtime. Use a namespace prefix: acme-gmail-summarise, myteam-daily-report.
Prefer inline context; use fork only for long-running work
context: inline (the default) runs the skill inside the current conversation, lightweight and immediate. context: fork spawns a sub-agent with a fresh context budget, which isolates large output from the parent conversation but costs an additional model turn. Only use fork for skills that generate enough output to crowd out the parent conversation, such as deep research or large-document analysis.
After installing from the catalogue, enable it per agent
New installs land disabled by default. Enabling the skill on the Skills page makes it available across the workspace, but it still will not run for any agent until you also flip its toggle in that agent’s Skills tab. If a newly installed skill is not being invoked, check the agent’s Skills tab first.
Click Create with AI on the Skills page. Describe the task in plain language. Actionist writes the playbook, and you enable it on every agent that needs it.