# Agents
Source: https://learn.actionist.ai/Folders/agents/index
Create, configure, and supervise AI employees. The "who" behind every workflow Actionist runs.
YOUR AI WORKFORCE
## Hire your first AI employee in under an hour.
Give each agent its own role, tools, memory, and channels. Agents keep the business running while you focus on the interesting problems.
A chatbot waits to be asked. An Actionist agent has a role, a routine, and the tools to finish the job.
It responds when you type, forgets when you close the tab, and can't touch your tools, files, or customers. Every task starts from zero.
It owns a role, remembers across conversations, uses your real tools through MCP, runs on a schedule, and escalates only when it's genuinely stuck. Not when it's unsure.
Agents are AI employees. They have working hours and daily routines, proactively pick up work from their tools, collaborate with each other through delegation, remember context across conversations, and escalate when stuck, not when unsure.
Follow one example
## Meet Maya.
To make this concrete, we'll build one agent and follow her through the whole page, from a blank studio to a full working day.
Owns marketing operations end to end: checks analytics every morning, monitors competitors, drafts content for review, and reports daily. Never publishes without sign-off, never approves ad spend over a threshold without you. By the end of this page she's a real, scheduled, supervised employee.
Anatomy
## What makes an agent.
Every agent is three things: who it is, what it can do, and how it's governed. Assemble Maya layer by layer. Click through the three layers and watch her agent card build up.
MayaMarketing Manager
identity · instructions · soul · model slot
Owns marketing ops end to endNever publishes without sign-offVoice: data-informed, zero hypeModel slot: Default
tools · skills · memory · channels
File ManagementBrowserAnalytics MCPSkill: brand-contentMemory: Global readTelegram bot
approval · collaborators · schedule
Guarded autoDelegates to: Designer agentWeekdays 09:00Trigger: webhook
draft · has an identity, can't act yetcapable · armed with tools, ungoverneddeployable · scoped, supervised, scheduled
Name, role, and a one-line description: what teammates see in Slack, Telegram, and the agent directory. Maya, Marketing Manager.
The system prompt the agent runs under: what it always does, what it never does, and the tone it uses.
Short, vivid prose the model uses as a voice reference. This shapes personality, not behavior.
Which brain the agent runs on. Actionist assigns a capable default, and the slot exists so model routing can be changed or tested without touching the agent's instructions.
The built-in group holds dozens of actions: File Management, Browser, Send Message, Ask User, Search Memory, Read Memory, Spawn Sub-Agent, Delegate Task, Manage Delegations. Scope each one on or off per agent.
Portable behavior packs: instructions plus a curated tool subset. Install from the catalogue, toggle per agent.
Global memory plus any knowledge corpus in the workspace, each set to Read, Read/Write, or No access.
Where the agent talks: the Actionist app, a Telegram bot, a Slack workspace. Each agent can own its own bot.
How much the agent does on its own versus pausing for your sign-off. Supervision you dial in. The full dial is below.
The other agents this one may delegate to, or hand a whole conversation off to.
One-off and recurring jobs plus event triggers. The agent shows up to work without being asked.
Agent Studio · Maya · Marketing Manager
✎
Maya
Marketing Manager
Identity
Tools
Skills
Memory
Channels
Collaboration
Schedule
Triggers
Runs
Settings
Name
Maya
Role
Marketing Manager
Instructions
You are Maya, the Marketing Manager. You own marketing operations end to end…
Soul
Creative, data-informed, genuinely excited about growth…
Live preview · Readiness
✓ Name · under 30 chars
✓ Role · specific
✓ Instructions · 412 chars
✓ Soul · voice present
Deployable
Hi! I pulled yesterday's analytics. Signup rate is down 24%. I've flagged variant B as the likely cause. Ready to draft a fix for your review.
The craft
## Write the brain.
Instructions decide what an agent does. Soul decides how it sounds. Keep them separate and both stay sharp. Here's Maya's:
```md Instructions.md theme={null}
# Role
You are Maya, the Marketing Manager. You own marketing
operations end to end.
## You always
- Check analytics every morning and flag anomalies with context.
- Draft content against the brand guidelines before anything ships.
- Report daily: lead with the metric, then the recommendation.
## You never
- Publish without explicit human sign-off.
- Approve ad spend over $500 without approval.
- Report a vanity metric without the context that makes it mean something.
## Escalate when
- A metric moves more than 20% day over day.
- A campaign needs budget you're not cleared to spend.
```
```md Soul.md theme={null}
## Voice
Creative, data-informed, and genuinely excited about growth,
never hype for its own sake.
## Style
Lead with the number. Bullet the status. Always end with a
recommendation, not just an observation.
## Boundaries
Energetic, not overwhelming. Confident, not robotic. You bring
the idea and the evidence in the same breath.
```
If the description fits in a tweet, the agent behaves consistently. If it takes a paragraph, split it into two agents. A narrow remit beats a clever one.
The readiness checklist, live.
The studio's Identity tab grades your draft against four checks before it calls the agent deployable. Toggle between a first draft and Maya's final config to see what each check wants:
Name✓Maya, under 30 characters✓Maya, under 30 characters
Role✗assistant. Too generic; the check wants a specific role✓Marketing Manager: specific, not "assistant"
Instructions✗"Help with marketing.". 21 characters; needs over 200✓ the full always / never / escalate block above, 412 characters
Soul✗ empty. The check wants a voice of over 40 characters✓ "Creative, data-informed, genuinely excited about growth…"
1 of 4 checks passing, the studio flags this agent as not ready.4 of 4 checks passing. Deployable. This is the bar every agent should clear before its first scheduled run.
The studio
## The studio, tab by tab.
Whichever path you took, every agent is tuned in the same place. Click a tab to see what it controls.
Agent Studio · Maya
Identity
Name, role, description, Instructions, and an optional Soul. A live preview and readiness checklist confirm the agent is deployable. It checks: Name under 30 characters; Role is specific (not "assistant"); Instructions longer than 200 characters; Soul describes a voice (over 40 characters). You can also personalize the avatar: click the pencil badge on hover to choose a shape and color applied workspace-wide.
Maya · Marketing Manager
Tools
Expand Built-in Tools and you get the full group: File Management, Browser, Send Message, Ask User, Search Memory, Read Memory, Spawn Sub-Agent, Delegate Task, Manage Delegations, and more. In the tested workspace the built-in group listed 38 tools. Each is toggleable per agent, and MCP servers and skills add more on top. The global approval mode sets the default; per-tool overrides let you trust the safe tools and gate the risky ones.
approval mode lives here
Skills
Portable behavior packs: instructions plus a curated tool subset. A behavior you perfected on one agent becomes reusable across your whole workforce. Enable it under Apps → Skills globally, then wire it here per agent.
key icon appears when credentials are needed
Memory
Permissioned per scope. Every workspace has Global memory, and a Knowledge corpus appears alongside it once one is configured. Each scope is set to Read, Read/Write, or No access. Memory instructions tell the Memory Agent what's worth keeping, so the agent sharpens over time instead of forgetting.
brain icon
Channels
Bind the agent to a Telegram bot or a Slack workspace. Each agent can have its own bot, or share a company-level Slack app and route by mention name. Tokens are stored encrypted in your workspace vault, only this agent can read them.
encrypted vault tokens
Collaboration
List the agents this one can delegate to. A manager agent can hand a task to a specialist, or hand off the whole conversation so the specialist talks to the user directly. Recent delegations and hand-offs show here so you can trace who did what.
delegate\_task and hand\_off tools
Schedule
Give the agent a heartbeat. Scheduled jobs run recurring work, like Maya's 9am analytics check. Recurrence is built from structured controls rather than cron: pick Daily, Weekly, Monthly, Yearly, Hourly, or Every N minutes, set the interval, and choose when it ends. Set the timezone once and the schedule stays anchored to it.
Weekly · every 1 week · Mon-Fri 09:00
Triggers
Fire the agent on external events: an inbound webhook, a new Slack message, an email arriving, or another agent completing a task. Triggers let the agent react to the world without polling.
webhook · email · agent-complete
Runs
A per-agent run history. Every run this agent has taken (status, start time, duration, and tool calls) scoped so you can audit its track record without wading through workspace-wide logs. Use it to spot patterns: why a scheduled job failed last Tuesday, which tool call took the longest.
status · duration · tool calls
Settings
Enable or disable the agent, set a Critical Reminder (up to 400 characters) prepended to every turn, and find the danger zone. Deleting an agent requires typing its name and can't be undone.
critical reminder · danger zone
Get started
## Three ways to create one.
Open Agents in the sidebar, hit New agent, and pick the path that fits.
Describe what you need; the assistant configures tools, memory, and channels as you chat. Best when you know the job, not the settings. Watch Maya get built:
Agent creator
youA marketing manager that checks analytics every morning, drafts content for review, and reports daily. Never publishes without my sign-off.
designing identity
aiMeet Maya, Marketing Manager. I've drafted her instructions with your sign-off rule as a hard "never". Tools she'll need:
Analytics MCPFile ManagementBrowserTelegram
youAdd a \$500 ad-spend approval threshold.
aiAdded under "You never": approve ad spend over \$500 without approval. Anything else?
saved · maya appears under My Agents
aiDone. Open her in the studio anytime to fine-tune.
Do the job once yourself while Actionist records it, then turn the recording into an agent. Best when the work is easier to demonstrate than to describe, and when the steps live in a tool with no clean API.
Start the recorder, complete the task the way you normally would, and stop. Actionist reads the captured steps and proposes an agent built around them, which you then review and adjust in the studio like any other agent.
The same Record process flow can produce either an agent or a skill. Choose an agent when the work needs its own role and schedule; choose a skill when it is a behavior you want several agents to share.
Start with a blank agent in the studio and configure identity, tools, and skills yourself. Best when you know exactly what you want. Every tab from the explorer above is yours from the first second, and the readiness checklist keeps score as you go.
Already know the role? Open the **Templates** tab from the Agents list view to browse 8 pre-wired role templates and open one directly in the studio, no chooser needed.
Create agent
Recommended
◆
AI-guided setup
Describe the job: the assistant configures tools, memory, and channels as you chat.
●
Record to Build
Do the task once while Actionist records it, then turn the recording into an agent.
⊞
Manual setup
Start with a blank agent in the studio and configure each setting yourself.
The recommended path: build Maya with AI-guided setup
Choose AI-guided setup. The Agent creator opens, "Chat to design your agent — refine identity, tools, and skills step by step.""A marketing manager that checks our analytics every morning, monitors competitors, drafts content for review, and reports to me daily — and never publishes without my sign-off."
The assistant proposes Maya's name, role, instructions, tools, and memory access. Tap a suggestion or type your own until it's right.
Maya is saved and appears under My Agents. Open her in the studio anytime to fine-tune tools, skills, schedule, and memory.
Trust
## Supervision is a dial, not a switch.
Start every agent cautious. Loosen the leash one notch at a time as it earns your trust. Select a mode below to see which action classes auto-execute and which pause for your sign-off.
Suggest: Maya proposes every tool call and you run them manually. Maximum oversight. Start here while you learn what an agent will do.
Ask each time: Maya requires your approval before every tool execution. Nothing happens without an explicit yes.
Guarded auto: Maya runs safe reads and writes automatically; sensitive writes and anything destructive pause for your sign-off. The sweet spot for most production agents.
Full auto: Maya runs every tool without prompting. Fast and hands-off, for agents you've already learned to trust. Destructive actions still always prompt; this floor cannot be removed.
Sensitive write
manualpromptpromptauto-executeSend email, post to Slack, create CRM records
Destructive
manualpromptalways promptalways promptDelete files, cancel subscriptions, drop records
Even in Full auto, any action flagged as destructive always prompts for approval. This floor cannot be removed, so you can never accidentally authorize a silent delete.
New agents default to Full auto. If the agent can write to external systems (send email, create records, modify files) change the approval mode to Guarded auto immediately after creation. Guarded auto approves safe reads automatically and surfaces writes and destructive operations for your sign-off.
Templates
## Start from a role, not a blank page.
The Templates tab holds eight role templates, each prewired with identity, tools, and skills. Adjust everything before saving.
Greets visitors, answers FAQs, and routes people to the right specialist.
Handles tickets end to end and escalates the ones that need a human.
Qualifies leads and runs the follow-ups that usually slip through the cracks.
Keeps accounts, contacts, and deals clean and up to date.
Provides engineering oversight and keeps delivery on track.
Generates and debugs code against your stack and conventions.
Automates the recurring process work that runs the business.
Triages email, manages the calendar, and coordinates across people.
Templates8 role templates
Receptionist
Greets visitors, answers FAQs, routes to the right specialist.
Customer Support
Handles tickets end to end, escalates when a human is needed.
Sales Assistant
Qualifies leads and runs follow-ups that slip through the cracks.
CRM Manager
Keeps accounts, contacts, and deals clean and up to date.
Technical Lead
Engineering oversight and keeps delivery on track.
Developer Agent
Generates and debugs code against your stack.
Operations Assistant
Automates recurring process work that runs the business.
Executive Assistant
Triages email, manages calendar, coordinates across people.
More roles
## More seats you can fill today.
Maya is one example. The same pattern (role, tools, schedule, supervision) works for every function in the business.
Dario · Sales
Each morning Dario pulls the CRM, identifies deals with no activity in 5+ days, drafts personalised follow-up emails for each one, and queues them for your review. Replies that come in during the day are logged against the right deal automatically, no manual data entry.
saves \~3 hrs/day on pipeline hygiene
Priya · Support lead
Priya watches the support queue, classifies and triages each ticket against your policy docs, resolves the clear-cut ones directly, and surfaces the edge cases with a recommended action. Agents on Guarded auto: she never changes a subscription without your sign-off.
saves \~5 hrs/day on first-touch resolution
Felix · Finance and Ops
Felix runs a weekday close: pulls invoices from the inbox, reconciles against the ledger, flags any mismatch above a set threshold, and drops a one-page cash-flow summary into the shared drive before 08:00. Nothing is posted without an approval gate.
saves \~2 hrs/day on reconciliation and reporting
## One agent rarely owns the whole outcome.
A manager agent delegates to specialists, runs them in parallel, and assembles the result. The pulse below shows delegation flowing from you through the manager to three specialist agents.
delegation flow
YouSend the task. The manager handles the rest.
Manager agentBreaks the work into parallel sub-tasks.
delegate\_taskEach specialist receives scoped instructions and tools.
Assembled resultThe manager merges the outputs and reports back.
Developer agentGenerates and tests code against your stack.
QA agentRuns acceptance tests and flags regressions.
Research sub-agentspawn\_subagent, spawns with a fork context for long-running analysis.
A product-manager agent can take a feature from spec to shipped: it delegates the build to a developer agent, the testing to a QA agent, and the deploy to an operations agent, coordinating the whole team in parallel. A solo founder ships like a full team.
Before and after
## Tuesday, before and after Maya.
The same marketing responsibilities, two very different mornings.
Before · the manual grind
08:55Open four browser tabs, wait for dashboards to load.
09:10Copy yesterday's numbers into the weekly spreadsheet by hand.
09:28Write standup update from memory, three Slack threads deep.
10:05Draft a launch post, then spend 20 minutes checking brand-voice guidelines.
11:30Realize the anomaly from Monday was never followed up on.
14:00Pull the campaign report. Discover it needs a manual CSV merge.
17:00Forget to escalate the ad-spend decision before end of day.
After · what you actually do now
Review Maya's 09:00 analytics brief and flag one decision that needs you.
Approve or tweak the launch post draft she held for sign-off.
Respond to the escalated ad-spend question she surfaced by 17:00.
The payoff
## Maya's Tuesday.
Scheduled, supervised, and on-brand. Nobody tells her to start.
schedule · maya · tuesday
schedule · daily-analytics · 09:00
09:00Pulled yesterday's analytics. Signup rate down 24%: flagged with likely cause (landing page variant B).
09:01Posted to #marketing-daily. Awaiting your response before any campaign changes.
schedule · standup · 09:30
09:30Standup sent: what shipped, what's blocked, what she's picking up today: in her own voice, by design.
schedule · midday-sweep · 13:00
13:00Checked campaign performance. Drafted launch post for Product Hunt: held for your review, never auto-published.
schedule · eod-report · 17:00
17:00Day summary sent. Budget decision escalated, ad spend approval needed for Tuesday push.
17:00Everything else wrapped. No surprises.
Nobody tells her to start. The schedule fires automatically. She shows up, does the work, and reports back.
Never auto-publishes. Approval mode is set to Guarded auto: content drafts wait for your explicit sign-off before anything ships.
Escalates budget calls. Instructions say never approve ad spend over \$500 without you, so she doesn't, and flags it clearly.
That's one agent. Now imagine the support, sales, and operations seats filled too.
## The same agent runs everywhere.
Pick an agent from the chat selector and work side by side. Every step, tool call, and screenshot streams live.
Bind a bot and the agent answers your team where they already are: DMs, channels, threads, mentions.
Recurring jobs and event triggers mean the agent shows up without anyone asking it to.
Headless Runtime keeps agents firing when your laptop is closed: local, cloud, or hybrid.
States and controls
Why a control might not be there.
Much of Agent Studio is conditional. A tab or option that is missing usually means a prerequisite is unmet rather than that the feature is unavailable to your account.
| What you see | Why | What to do next |
| --------------------------------- | -------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
| A tool is listed but never used | The agent has access, but nothing in your instruction called for it. | Name the tool or the outcome explicitly in the agent's instructions. |
| A skill is listed but never fires | The skill is installed but not enabled for this agent. | Open the Skills tab and toggle it on for this agent. |
| No channel options on an agent | This agent is not eligible to host a bot. | Check where the agent is running before assuming the feature is missing. |
| A memory bucket is not offered | Bucket availability depends on how the workspace is configured. | Not every workspace exposes every bucket. Ask an admin if you expect one that is absent. |
| Changes do not take effect | The studio has unsaved edits. | Wait for the header to report that changes are saved before running the agent again. |
Approval mode is the setting most worth checking when an agent behaves unexpectedly. An agent that pauses constantly and an agent that acts without asking are usually the same agent with a different approval mode, not a different agent.
Quickstart
## Your first agent, in five minutes.
Go to [app.actionist.ai](https://app.actionist.ai) and sign in with email or Google. The full app runs in the browser, so there is nothing to install. Desktop builds for Mac and Windows are available too if you prefer one.
In the sidebar, open Agents. You'll see Recently used, My Agents, and Templates.
Hit New agent and choose AI-guided setup: the fastest way to a working agent.
"Summarize my unread Slack DMs every morning and post the digest to my #daily channel." Answer the questions and save.
Chat with the agent in the app, or bind it to a Telegram or Slack bot and let it run.
Ready when you are
## Build your first agent today.
Describe the job. Actionist wires up the tools, memory, and channels, you supervise.
Your agents do exactly what you allow, no more.
Scoped permissions · Approval gates · Full audit trail.
Keep going
Next steps.
Turn a behavior into a reusable, publishable pack every agent can load.
Give agents permissioned recall, company context that sharpens over time.
Chain agents and steps into repeatable, schedulable processes.
Put an agent on Telegram or Slack so it works where your team already is.
# Autopilot
Source: https://learn.actionist.ai/Folders/autopilot/index
Enable Autopilot and Actionist will observe your screen over several weeks, learn your real workflows, and automatically build your entire workspace (agents, workflows, schedules, skills, and app connections) without a single form.
COMING SOON
## Your workspace, built by watching you work.
Enable Autopilot once. Actionist will observe your screen for several weeks, learn your real workflows, and build your entire workspace automatically (agents, schedules, skills, and app connections) with no configuration forms.
Observation: active
Running quietly in the background...
The problem
Every other tool makes you describe your workflows first.
That is a tax. Most people cannot accurately articulate their own work patterns, and no onboarding form captures the edge cases, real app sequences, and true priorities of how a person actually operates.
You fill out forms, describe workflows from memory, manually wire up agents, and still end up with a workspace that does not match how you actually work. Setup takes days. The result is a template, not your reality.
You enable it once. Actionist watches you work for several weeks (passively, without interrupting anything) then builds the whole workspace from what it actually observed. Setup takes minutes of your attention.
Autopilot is coming soon and is not yet available in the app. This page documents the intended design so you know what to expect when it ships.
## Act one: observe.
Autopilot will run quietly in the background: no prompts, no interruptions. A single recording indicator in the menu bar is all you will notice. Over several weeks it watches your screen, accumulating the raw signal that will become your workspace.
Observation window, illustrative
Wk 1
Wk 2
Wk 3
Wk 4
Build
morning email triage
Notion updates after standups
Slack mentions -> Linear tasks
Friday digest drafts
client follow-ups post-call
Linear status syncs
weekly report compile
Pattern chips above represent the kinds of repeated sequences Autopilot will identify. Specific workflows will reflect your actual behaviour, not these examples.
Passive by design. Autopilot will require macOS Screen Recording and Accessibility permissions, then run silently. Nothing is uploaded anywhere. All observation stays on your machine.
Representative period. A few weeks of ordinary work will produce richer agent configuration than a day of typical use. Vacation weeks or atypical crunch will skew patterns toward outlier behaviour.
Primary machine only. Autopilot will observe the device where it is running. Enable it on the machine where you do the majority of your real work.
## Act two: learn.
Raw screen observations are not workflows yet. Actionist will process the signal in three passes, lifting sequences from noise, matching them against app context, then naming the patterns that repeat reliably. Pick a pass to see what each one finds.
observation stream · raw
09:07GmailOpened unread thread from Dana Voss
09:09GmailReplied with follow-up question, moved to Waiting label
09:11NotionUpdated deal status for Northwind in CRM page
09:13LinearCreated task: Send Q3 proposal to Northwind
09:14SlackPosted update in #sales-pipeline
Pass 1 captures every significant screen event with a timestamp and app context. No interpretation yet, just signal accumulation.
sequence extractor · pass 2
sequence detected · count: 11 occurrences
step 1GmailRead email from client contact
step 2GmailReply with follow-up question
step 3NotionUpdate deal record for that client
step 4LinearCreate follow-up task with deadline
Pass 2 clusters raw observations into repeating sequences. The same 4-step pattern appeared 11 times across 3 weeks. Enough signal to become a workflow.
pattern namer · pass 3
workflow · draft complete
nameclient-email-follow-up
trigger"when a client email arrives and needs a response"
appsGmail, Notion CRM, Linear
stepsread → reply → update record → create task
Result: a named workflow with a precise trigger phrase, connected tools, and a concrete step sequence. Autopilot will generate this for every reliable pattern it identifies. You will review all of them before anything runs.
## Act three: build.
At the end of the observation period, Actionist will generate everything it takes to run your work: tuned to your real patterns, not a generic template. The workspace assembles itself from the signals it collected.
Agents
AI employees matched to your observed roles, pre-configured with tools and instructions
Workflows
Repeatable multi-step processes derived from sequences you run again and again
Schedules
Recurring jobs built from your timing patterns. Daily reports, weekly sweeps
Skills
Reusable named actions extracted from your workflows, ready across multiple agents
App connections
Connections to apps Actionist sees you using: Slack, Notion, Linear, and more
Everything Autopilot will generate is a full Actionist object. Open any agent, workflow, or schedule in the studio after the observation period and adjust, extend, or delete freely.
What it will notice
Three patterns it will catch in a typical month.
After watching a month of ordinary work, Autopilot will surface the sequences you repeat on autopilot and turn each one into a live agent or workflow. Ready for you to review before anything runs.
Maya · Marketing Manager
It will notice a Friday afternoon compile-and-send sequence: Gmail drafts pulled from Notion metrics, formatted, and distributed to 12 stakeholders. Repeated every week for four weeks. It will build a scheduled Friday-digest agent that drafts the report at 16:00, surfaces it for one-click approval, and sends on confirm.
will save \~90 min/wk
Felix · Finance & Ops
It will notice the same vendor portal navigation: open browser, log in, locate the invoice table, copy three fields into a spreadsheet. Done manually 8 times across the month. It will build a Computer Use workflow that navigates the portal, extracts the fields, and writes them to the sheet without any manual steps.
will save \~40 min/wk
Sam · Solo founder
It will notice a morning inbox triage pattern: open Gmail, flag anything from leads, move newsletters to a folder, reply to support threads with a standard acknowledgement. Run every weekday before 09:30. It will build a morning digest agent that triages the inbox by 08:45, surfaces a prioritised summary, and queues draft replies for review.
will save \~25 min/day
Under the hood
One decision. Weeks of learning. A ready workspace.
Enable AutopilotA single toggle starts the observation session. Two OS permissions are required: Screen Recording and Accessibility.
Passive observationActionist runs in the background across several weeks of representative work. Nothing interrupts your flow.
Pattern analysisA three-pass model lifts repeating sequences from raw screen events and names the resulting workflows.
Workspace readyAgents, workflows, schedules, skills, and app connections, generated and ready to review and edit.
Day 1
Enable Autopilot
Weeks 1 – 4
Passive observation
End of period
Workspace ready
Starting Autopilot will take under a minute.
The steps below describe the intended flow. UI labels and button names will be confirmed when the feature ships.
Autopilot will need the macOS desktop app, because it observes your screen and there is no screen for a browser tab to watch. Download it from [the dashboard](https://app.actionist.ai) and sign in.
During or after sign-in, Actionist will present an option to enable Autopilot. Enabling it will start the observation session.
Autopilot will need two macOS permissions before observation can begin. If they are not already granted, Actionist will walk you through the permission screens. See [granting permissions](#granting-the-permissions-autopilot-needs) below for the exact steps.
Autopilot will run quietly in the background. No interruptions, no prompts. Use Actionist on your primary machine during a representative period of your normal work.
When the observation period ends, Actionist will notify you that your workspace is ready. Every object it creates will be editable. Autopilot will generate a starting point, not a locked configuration.
Actionist · onboarding
Enable Autopilot
Actionist will learn your workflows by watching you work for a few weeks, then build your workspace automatically.
Enable Autopilot
Screen Recording
Accessibility
Granting the permissions Autopilot needs.
Autopilot will need two macOS permissions: Screen Recording and Accessibility. These are the same permissions Actionist uses for Computer Use today. If you have already granted them, you are all set.
Screen Recording
Sees what is on screen, the raw visual signal Autopilot analyses
Accessibility
Reads UI element labels, turning raw screen content into meaningful workflow context
In the sidebar, open **Settings > Permissions**. Find the **Screen Recording** row and click **Grant access**. macOS will open **System Settings > Privacy & Security > Screen Recording**: toggle Actionist on. Return to the app and the row will show a green indicator.
Still in **Settings > Permissions**, find the **Accessibility** row and click **Grant access**. macOS will open **System Settings > Privacy & Security > Accessibility**: enable the toggle next to Actionist (your macOS password may be required). Return to the app and confirm both rows are green.
The toast "Permissions granted! All system features are now active." confirms both permissions are active.
Settings · Permissions
Screen Recording
Required for Autopilot and Computer Use
Granted
Accessibility
Required for Autopilot and Computer Use
Granted
Both Screen Recording and Accessibility must be granted before Autopilot can begin. Granting only one of the two will prevent the observation session from starting.
Best practices
Getting the most from Autopilot.
These tips will apply when Autopilot ships.
Use a representative work period
A week of vacation or an atypical crunch will shape agents around outlier behaviour. A few ordinary weeks of everyday work give Actionist the patterns that actually matter.
Grant both permissions before you start
Screen Recording sees what is on screen; Accessibility reads UI element labels that turn raw screen content into meaningful workflow context. Both are required. Neither alone is sufficient.
Enable it on your primary machine
Autopilot will only observe the device where it is running. Choose the machine where you do the majority of your real work. A secondary laptop will produce a partial picture.
Let the full observation window run
A longer window means more patterns identified. A full month will produce richer workflows and more accurate agent configuration than a single week of use.
Everything it creates is editable
Auto-generated agents, workflows, and schedules are full Actionist objects. Open any of them in the studio after the period and adjust, extend, or delete freely, Autopilot generates a starting point.
Autopilot will be available on the macOS desktop app. Screen observation is not available in the web app. Platform availability at launch is still being confirmed.
Vision page
This is a vision page. Autopilot has not shipped yet. The flows, UI labels, and timings described here reflect the intended design as confirmed by the Actionist team. Exact button names, observation window duration, recording storage handling, and platform scope will be updated when the feature releases. All capability claims use future tense intentionally.
On its way
## Autopilot is on its way.
Enable it once. Let it learn. Arrive to a fully configured workforce built from how you actually work.
Observed on-device, never uploaded anywhere.
Every generated object is editable · macOS desktop app at launch.
In the meantime
Explore what Autopilot will create.
Understanding the objects Autopilot will generate helps you tune it after the observation period ends.
Set up Actionist before Autopilot ships: the desktop app, permissions, and your first agent.
Learn what an agent is, how it is configured, and how to edit the ones Autopilot will create.
Understand the workflow objects Autopilot will generate from your observed patterns.
See how recurring jobs work so you can review the schedules Autopilot will build.
Skills are the reusable building blocks Autopilot will extract from your workflows.
The screen-recording foundation that makes Autopilot's passive observation possible.
# Billing & plans
Source: https://learn.actionist.ai/Folders/billing/index
Choose Basic or Pro, subscribe in one browser round-trip, and monitor your workspace usage. Your automation keeps running even during payment hiccups.
BILLING & PLANS
Unlock your agents in
one browser round-trip.
Two plans, transparent pricing fetched live, Stripe-hosted checkout. Sign in, pick a plan, finish in your browser. Actionist is waiting on the dashboard when you return.
The plans
## Basic for individuals. Pro for teams.
Start with Basic for individual usage, or choose Pro for team workspaces, higher Actionist usage, and paid add-ons. Select a plan below to see what comes with it.
BasicFor individual operators
Built for solo work
Core Actionist usage included, resets on renewal. One seat. Ideal for individual operators running their own agents and workflows.
What's included
Full agent and workflow execution, computer use, schedules, MCP integrations, and the marketplace. Everything you need to run a productive solo workspace.
Usage resets monthly
Your included Actionist budget resets at the start of each billing cycle. The usage bar in Settings shows exactly how much you've spent and when it resets.
No add-ons
Basic does not support overage, extra credits, or capacity add-ons. When the monthly budget is exhausted, automation pauses until renewal. To continue immediately, upgrade to Pro.
ProTeamFor workspaces with multiple agents running all day
Built for teams
Higher included Actionist usage, pooled across the whole team. Designed for workspaces where multiple people run agents throughout the day.
Pooled team budget
Pro pools usage across the whole team rather than allocating it per person. One shared bucket means a heavy-use day for one agent doesn't strand another.
Overage safety valve
Pro workspaces can enable the overage toggle so automation continues past the included budget, up to the plan's hard ceiling. You decide when to flip the switch.
Seats, credits, and add-ons
Seat management, extra credit top-ups, and capacity add-ons are coming soon. You'll see their placeholder cards in the billing details page today.
Plans & Pricing
PLANS & PRICING
Choose the right Actionist package.
Basic
\$ , /mo
Start with Basic
Pro Team
\$ , /mo
Choose Pro
First-time setup
## From sign-in to running agents.
Every workspace needs an active subscription before agents, workflows, and scheduled runs execute. Here's what happens the first time you open Actionist.
Plan gate appearsNo active subscription detected on launch. The full-screen plan-selection page loads with live pricing from the server.
Pick your planReview Basic or Pro. Click Start with Basic or Choose Pro: button title reflects the live plan name.
Stripe in browserCheckout opens in your default browser. The app stays on the plan page. Actionist never sees your card number.
2-second pollingThe app checks every 2 seconds (up to 2 minutes) for subscription activation. An amber banner confirms polling is running.
DashboardStripe confirms. Polling detects the active subscription and navigates straight to the dashboard. Agents ready.
Keep the app open. After clicking the plan button, the Stripe checkout opens in your browser. Do not close the Actionist app. It is polling in the background and will navigate automatically on success.
Polling window: 2 minutes. If Stripe confirmation takes longer than usual, an amber banner reads "Billing has not updated yet. If checkout is complete, refresh." Click Refresh: it is not a failure, not a new charge.
Cancelled checkout. If you close or cancel the Stripe checkout, Actionist returns to the plan-selection page. No charge was made. Click a plan button to start again.
On first launch (or after sign-out), Actionist detects no active subscription and shows the full-screen plan-selection page. The eyebrow reads Plans & Pricing; the headline reads Choose the right Actionist package. Pricing and plan details load live from the server.
Review the two plan cards. Compare features in the table below the cards. Click Start with Basic or Choose Pro: whichever matches your needs. The button title reflects the plan name from the live plan data.
Actionist opens the Stripe checkout in your default browser. The app itself stays on the plan-selection page. Do not close it. Stripe handles all payment details; Actionist never sees your card number.
Actionist checks every two seconds (for up to two minutes) whether your subscription has activated. You'll see a "Waiting for billing to finish. This usually updates automatically after checkout." banner. You don't need to do anything.
Once Stripe confirms the payment, polling detects the active subscription and navigates you straight to the dashboard. Your agents and workflows are now available.
If you close or cancel the Stripe checkout, Actionist returns to the plan-selection page. No charge was made. Click a plan button to start again.
If the two-minute polling window expires before Stripe confirms, an amber banner appears: "Billing has not updated yet. If checkout is complete, refresh." Click the Refresh button. This re-checks subscription status without restarting checkout. It means Stripe confirmation took longer than usual, not that payment failed.
Actionist · checkout in progress
Basic
Pro
Waiting for billing to finish. This usually updates automatically after checkout.
Usage lifecycle
## What happens when you approach the limit.
Actionist tracks your usage in three states. Each state shows a different banner and unlocks different actions. The gradient bar in Settings mirrors real-time spend. Select a state to see the full picture:
38%
agent runscomputer useschedulesbrowser
38% of included budget usedResets on Jul 11
No banner shown in the healthy state. Usage is well within the included budget. The gradient fill bar runs cyan to purple as you approach the ceiling.
78%
agent runscomputer useschedulesbrowser
78% of included budget usedResets on Jul 11
Approaching usage limit: You are close to your included monthly budget. Automation may pause when the limit is reached.
100%
agent runscomputer useschedulesbrowser
100%, budget exhaustedResets on Jul 11
Usage limit reached. Automation paused. Your included budget is used up. Click Manage billing to resume. Pro workspaces can enable the overage toggle to continue up to the hard ceiling. Basic workspaces must upgrade or wait for the billing cycle to reset.
Usage is calculated as: (used + reserved) ÷ hard ceiling × 100. Reserved budget is usage allocated to in-progress runs but not yet billed; it counts against your ceiling immediately. The per-category breakdown below the bar shows which types of action consumed the most budget. For example, agent runs versus computer use.
Hitting the usage limit does not cut off a running agent. The current step finishes and results are saved. Only new credit-based actions pause. If a time-sensitive run is in progress and your budget is close to exhausted, it will complete. It is only the next queued run that waits.
The usage bar tells you what automation costs. Your calendar tells you what it bought.
Felix · Finance & Ops, on checking the billing page after a busy automations week
Settings
## Plan, usage, and payment, all in one place.
Open Settings in the sidebar, then navigate to Billing. The compact overview card shows your plan name, status, and usage percentage at a glance. Click View billing details to open the full billing page.
The plan card at the top of the billing details page shows your plan name (Basic or Pro), the subscription status pill (active, trialing, past due), the current billing period, and your next renewal date and invoice.
* Basic workspaces see an Upgrade to Pro button.
* Pro workspaces see a Manage billing button.
"Upgrade to Pro" opens the Stripe billing portal. It does not take you back to the plan-selection page. The plan-selection checkout only appears when no active subscription exists. All plan changes once subscribed are handled through the Stripe portal.
Actionist surfaces time-sensitive billing events as coloured banners directly on the billing details page. You will see at most one banner at a time, prioritised by urgency:
| Banner | What it means |
| ------------------------------------------- | ------------------------------------------------------------------------------------------------ |
| **Approaching usage limit** | You are close to your included monthly budget. Automation may pause when the limit is reached. |
| **Usage limit reached. Automation paused** | Your included budget is used up. Click **Manage billing** to resume. |
| **Payment failed** | Stripe could not charge your payment method. Update it in the portal to keep automation running. |
| **Subscription paused. Automation stopped** | The subscription is paused. Open the portal to reactivate. |
| **Payment past due. Grace period active** | A payment is overdue, but automation is still running. See the grace period section below. |
The usage card shows how much of your included monthly budget has been consumed. The gradient fill bar runs from cyan to purple as you approach the ceiling. Below the bar:
* Resets on: the date your usage allowance refreshes.
* An optional message from the server when you are in the warning or exhausted state.
* Per-category breakdown: a segmented colour bar showing which types of action consumed the most budget (e.g. agent runs vs. computer use).
Usage is calculated as: `(used + reserved) ÷ hard ceiling × 100`. Reserved budget is usage that has been allocated to in-progress runs but not yet billed; it counts against your ceiling immediately.
Browser usage (consumed by computer-use actions that drive a real browser) is tracked separately from the main Actionist budget. The browser usage panel shows credit units and event counts broken down by provider:
* Agent Browser: Actionist's built-in browser automation
* Browserbase: cloud browser sessions
* Verification: browser-based verification flows
This panel is informational. The cost is controlled via your agent's tool configuration, not a separate billing toggle.
If no browser actions ran in the current period, the panel shows "No browser usage reported this period."
The billing details page includes placeholder cards for Seats, Extra Credits, and Add-ons. These sections are not yet active:
* Seats management is coming soon.
* Extra credits ("Extra credits are on the way") are coming soon.
* Add-ons ("Add-ons are coming soon") are coming soon.
The payment card confirms: "Managed securely in the Stripe billing portal." It also shows your next invoice date. Click Open billing portal to open the Stripe-hosted portal in your browser, where you can:
* Update your payment method
* Download past invoices
* Cancel or reactivate your subscription
* Change your plan
The Stripe portal opens via a server-generated session link. Actionist never stores or transmits payment method details.
settings / billing
ProActive
Open billing portal
Pro feature
## Overage toggle, keep going past the limit.
When your workspace's included monthly budget is exhausted, automation pauses by default. Pro workspaces can change this behaviour with the overage toggle in Settings. Billing. Turning overage on lets automation continue past your included budget up to the plan's hard ceiling. The hard ceiling prevents runaway costs; you cannot exceed it.
Pro only. The overage toggle appears only on Pro workspaces. The toggle section is labelled "Usage overage" with the description: "Allow the workspace to continue after the included monthly allowance, up to the plan's safety limit."
Hard ceiling. Even with overage enabled, the plan's hard ceiling caps total spend. You decide when to flip the switch, but you can never exceed the safety limit.
Basic cannot enable overage. When a Basic workspace exhausts its monthly budget, automation pauses. Options: upgrade to Pro (which unlocks the overage toggle), or wait for the billing cycle to reset. Basic does not support add-ons or extra credits.
The overage toggle appears only on Pro workspaces. Basic workspaces do not see this toggle.
Payment resilience
## A missed payment doesn't kill your agents.
If Stripe cannot collect payment on renewal, your subscription moves to a grace period rather than suspending immediately. During the grace period, automation continues and the workspace behaves normally. The only visible change is an amber warning banner.
settings / billing
bannerPayment past due, grace period active
detailUpdate your payment method before Jul 18 to avoid interruption.
actionClick Manage billing or Open billing portal → update card.
statusAutomation still running. Agents still executing. No interruption yet.
During the grace period you will see: "Payment past due — grace period active" followed by "Update your payment method before \[date] to avoid interruption." Click Manage billing or Open billing portal and update your payment method before the deadline. Once the grace period ends, the subscription suspends and automation stops.
If a payment attempt fails after checkout (separate from the grace period), you will see a different banner: "Payment failed — We couldn't charge your payment method. Update it to keep your automation running." Both resolve the same way. Open the Stripe portal and update your card.
If you belong to more than one Actionist workspace, a workspace switcher appears at the bottom of the plan-selection gate page. Selecting a workspace that already has an active subscription switches your context immediately. No checkout required. This saves you from going through account settings when you are simply in the wrong workspace.
Best practices
## Tips for a smooth billing experience.
After clicking "Start with Basic" or "Choose Pro", the Stripe checkout opens in your browser. Do not close the Actionist app while completing checkout. The app is polling in the background and will navigate you to the dashboard automatically once Stripe confirms, no manual refresh needed in most cases.
If checkout takes longer than expected, an amber banner reads "Billing has not updated yet. If checkout is complete, refresh." Click the Refresh button. This re-checks your subscription status without restarting checkout or making a new charge. It is not a failure. It means Stripe confirmation was delayed.
Once you have an active subscription, the plan-selection page does not appear again. The Upgrade to Pro button on the billing details page (visible only on Basic) takes you directly to the Stripe portal where you can switch plans. The two-card plan selection is only for first-time subscribers.
When a Basic workspace exhausts its monthly budget, automation pauses. Options: upgrade to Pro (which unlocks the overage toggle), or wait for the billing cycle to reset. There is no way to continue automation on Basic without upgrading or waiting. Basic does not support add-ons or extra credits.
Hitting the usage limit does not cut off a running agent. The current step finishes and results are saved. Only new credit-based actions pause. If a time-sensitive run is in progress and your budget is close to exhausted, it will complete. It is only the next queued run that waits.
Non-admin workspace members do not see billing cards in Settings. If you need to check usage, change the plan, or update payment details, you must be logged in as a workspace admin. If someone in your team cannot see the billing page, this is the most likely reason.
Plan limits · explained
PLAN LIMITS · EXPLAINED
Basic
Pro
Will an agent stop mid-run if I hit my Actionist usage limit?
Actionist has a dedicated limits explainer page that answers what happens when you hit a limit on Basic, what happens on Pro, and how to keep your workspace moving. From the plan-selection gate, click "Read it" under the "What happens when I hit a limit?" card to open it directly.
What's paused, what isn't, and how to get unblocked on Basic and Pro. Open Actionist and click Read it on the "What happens when I hit a limit?" card on the plan-selection page.
## One round-trip to a running workspace.
Sign in, pick a plan, finish in your browser. Actionist has your agents ready on the other side.
Payments handled by Stripe. Actionist never stores payment details.
Grace periods protect your automation. Usage visible before it's a problem.
Keep going
## Next steps.
Install Actionist, sign in, and run your first workflow, picking up right after checkout.
Your subscription unlocks agent execution. Start building your first AI employee.
Schedules require an active subscription to execute. Set up recurring runs here.
The Settings overview shows your compact billing card: plan name, status, and usage at a glance.
# Channels
Source: https://learn.actionist.ai/Folders/channels/index
Give each agent its own Telegram bot or Slack presence, and approve sensitive actions from your phone without opening the desktop app.
LIVE IN YOUR APPS
## Your agents, where your team already is.
Bind an agent to a Telegram bot or a Slack workspace. Message it from your phone. Approve sensitive actions with a tap. Keep it running 24/7 on a VPS, no desktop required.
See it in action
A conversation from start to approval.
Illustrative Telegram thread: user message, agent processing, reply, then an inline approval for a sensitive action. No desktop needed. A phone tap is enough.
M
Maya
@maya\_actionist\_bot
online
Send the Q3 proposal to the Northwind team.
09:41
seen · reading context
Got it, 47 recipients on the Northwind distribution list. Before I send, I need your sign-off on this one.
09:41
Send email to Northwind team
47 recipients · 1 attachment (Q3\_Proposal.pdf)
Approve
09:42
tool · send\_email · 47 recipients
Done, proposal sent to all 47 contacts. Delivery receipts look clean.
09:42
Approve from anywhere. The inline keyboard appears right in the chat thread. No desktop, no dashboard. A tap is all it takes.
Context is preserved. Approval or denial goes back to the agent immediately. The workflow continues or aborts without losing the conversation thread.
Same on Slack. The approval request uses Block Kit action buttons. Same one-tap flow, same agent-side handling.
In practice
A travel day, approved from a phone.
Dario runs his sales agent on Telegram. On a travel day he handled every approval and query between flights: no laptop, no dashboard.
APPROVED FROM MY PHONE
Dario · Sales · illustrative travel-day log
Morning pipeline briefing (agent DM, Telegram)2 min
Approved: follow-up sequence to 12 Northwind contacts1 min
Denied: outreach draft flagged as too aggressive1 min
Approved: Q3 proposal sent to 6 prospects1 min
Queried: open deal count and next follow-up dates2 min
Approved: meeting summary logged to CRM (4 deals)1 min
Total time on phone\~8 min
ILLUSTRATIVE, BASED ON THE CAPABILITIES DOCUMENTED ON THIS PAGE
The idea
A channel is where an agent lives as a bot.
Once an agent has a channel, it answers messages, reports back, and surfaces approval requests in that messaging app, without you ever switching to the Actionist desktop.
Each agent gets its own dedicated bot created through @BotFather. Users DM the bot directly; the agent replies in the same thread. Runs on the grammY SDK via Actionist's Gateway service.
Connect one Slack app per agent, or share a single company-level Slack app across all your agents and route each by its unique @mention-name. Built on Bolt SDK with Socket Mode, no public HTTPS endpoint needed.
Only Telegram and Slack are supported channels today. WhatsApp, email, and Discord are not available on the current release.
Architecture
One bot per agent, or one Slack app for all.
Telegram always gives each agent its own bot. Slack offers a choice: a dedicated bot per agent, or a shared company Slack app where users reach each agent by typing its @mention-name in any channel.
Dedicated bot
You
DM
@maya\_bot
Maya agent
Shared Slack app
Team member
@support help me
Team member
@finance approve Q3
Company Slack app
mention routing
Support agent
mention routing
Finance agent
With a shared Slack app, direct messages to the bot still route automatically. No mention required. Only messages in shared channels need the @mention-name prefix; bare channel messages are silently dropped.
Setup
Three steps per platform.
Open Agents in the sidebar, select the agent, and click the Channels tab. Pick your platform and follow the wizard.
**Before you start.** For Telegram you need a bot token from [@BotFather](https://t.me/BotFather). For Slack you need permission to install an app into the workspace, which your Slack admin may have to grant. Have the agent you want to connect already created, because the wizard runs from inside that agent.
1
Talk to @BotFather to create a bot
Open Telegram and start a chat with @BotFather. Send /newbot, pick a display name, and choose a unique handle ending in \_bot. BotFather replies with a token in the format 123456:ABC-DEF….
Back in Actionist, pick a saved credential from the combobox (recommended) or paste the token into the Bot token field. If you pick a vault credential, a shield icon confirms: "Resolved from your vault at gateway connect. Never stored locally."
Bot token••••••••••••••••••••••••••vault
Pick a vault credential rather than pasting. Rotating the credential later updates every agent that uses it. No need to re-open each agent's Channels tab.
2
Restrict who can DM the bot (optional)
Enter comma-separated Telegram user IDs or @usernames in the allowlist field (placeholder: 123456789, @username). Leave the field empty to allow anyone who finds the bot to message it.
Allowlist123456789, @username
An empty allowlist is a security risk if you share the bot's username publicly. Add your own numeric Telegram user ID before sharing the bot handle with anyone else.
3
Test the connection
Click Connect. The button is disabled until a token or credential is present. Actionist calls getMe with the token to verify it resolves to a real bot.
On success: status changes to Connected and shows the bot's username. On failure: Connection failed with the rejection detail from Telegram.
On every subsequent app launch, Actionist reconnects automatically (up to 8 attempts, 1.5 s apart). Bot commands /start, /help, /reset, and /stop are registered at the same time.
Connected as @maya\_actionist\_bot
Channels · Telegram
Connected · token saved
1
Talk to @BotFather to create a bot
Bot token••••••••••••••••••••••vault
Resolved from your vault at gateway connect. Never stored locally.
2
Restrict who can DM the bot (optional)
Allowlist123456789, @username
3
Test the connection
Connected as @maya\_actionist\_bot
1
Create a Slack app
Go to api.slack.com/apps and create a new app. You need to:
Enable Socket Mode under Settings, this maintains a persistent outbound WebSocket so no public HTTPS endpoint is needed.
Grant these bot scopes under OAuth and Permissions: chat:write, im:history, channels:history, groups:history.
Copy both tokens: the Bot token (starts xoxb-) and the App-level token (starts xapp-).
Back in Actionist, enter or pick both tokens. Both must come from the same source, either both pasted or both picked from the vault. Mixing is rejected with: "Both the bot token and the app-level token are required — paste both, or pick saved credentials for both."
Bot token (xoxb-)••••••••••••••••vault
App-level token (xapp-)••••••••••••••••vault
2
Set a mention name (for shared channels)
Enter a short identifier for this agent. Actionist auto-sanitizes to lowercase \[a-z0-9\_-] as you type.
This is how users route messages to this agent in a shared Slack channel: they type @mention-name do something. The mention name must be unique across every agent sharing the same Slack app. A duplicate produces a validation error on save.
Mention namesupport
Users messaging the bot directly in a DM do not need to use the mention name, direct messages route automatically without any prefix.
3
Validate the tokens
Click Connect. Actionist calls auth.test with the bot token to confirm it is reachable.
On success: status shows Connected to \[workspace name]. On failure: Connection failed. Confirm that Socket Mode is enabled and all four scopes are granted.
Connected to Acme Corp workspace
Channels · Slack
Connected to Acme Corp workspace
1
Create a Slack app
Bot token (xoxb-)••••••••••••••vault
App-level token (xapp-)••••••••••••••vault
2
Set a mention name (for shared channels)
Mention namesupport
supportfinance
3
Validate the tokens
Try it · routing
Watch mention routing in a shared channel.
A shared Slack app routes messages by @mention-name prefix. Messages without a matching mention are silently dropped. They never reach any agent. Pick a message scenario:
\#general, shared channel
JL
Jamie L 10:14 AM
@support can you pull the open tickets for Northwind?
routed to support agent
S
Support 10:14 AM
On it, pulling open tickets for Northwind now. Found 3 open, 1 escalated.
The message starts with @support. Actionist matches this to the agent whose mention name is support and forwards the full message text. The agent replies in the same thread.
\#general, shared channel
PR
Priya R 11:02 AM
@finance please run the Q3 budget summary
routed to finance agent
F
Finance 11:03 AM
Q3 budget summary running. Will post the report here in about 2 minutes.
@finance matches the second agent's mention name. The same Slack app hosts both agents; the mention prefix determines which one handles the message.
\#general, shared channel
TK
Tom K 11:25 AM
Has anyone seen the latest Northwind contract?
silently dropped
No @mention-name prefix. The message is a general team conversation. Actionist ignores it. Neither agent wakes up; no reply is sent. Direct messages to the bot always route without a mention; only shared-channel messages need the prefix.
Control
Manage a running agent from the chat.
Four commands are registered on every Telegram bot at connect time. Send them in the conversation from any device.
/start
Starts the bot and greets you.
/help
Lists available commands.
/reset
Clears the conversation transcript so the agent starts with fresh context. The chat row, agent binding, and Telegram peer link are preserved, only the transcript is rotated. Use this when the agent has drifted after a long session.
/stop
Aborts any in-flight agent work immediately. Conversation context is preserved, your next message continues from the current state.
/reset and /stop are Telegram bot commands registered at connect time. Slack does not have equivalent slash commands.
Both are Telegram bot commands, but they do different things:
* /reset: clears the agent's transcript context. The chat row, agent binding, and Telegram peer link are untouched. Use it when the agent has accumulated context from a long session and is no longer behaving as expected.
* /stop, aborts any work the agent is actively executing right now. Conversation context is preserved; your next message continues normally.
Neither command removes the bot connection or the agent config.
When an agent reaches a sensitive action requiring your sign-off, it pauses and sends you an interactive approval request, right in the chat.
* On Telegram: the request appears with Approve and Deny buttons rendered as an inline keyboard below the message.
* On Slack: the same request uses Block Kit action buttons in the message.
Tap the button to respond. The agent receives your decision immediately and either proceeds or aborts, without you opening the desktop app.
Inline approvals work from any device that receives your Telegram or Slack notifications. A phone tap is all that's needed.
M
Maya
@maya\_actionist\_bot · online
I need your sign-off before sending.
09:43
Send email to client list
47 recipients · Q3\_Report.pdf
Availability
Keeping a bot online around the clock.
A bot only answers while the agent behind it is running. An agent running on your own machine stops answering when that machine sleeps or the app closes. An agent placed in the cloud keeps answering.
If your bot replies during the day and goes quiet overnight, the agent is running on your own machine rather than in the cloud. Move it to cloud placement, then reconnect the channel.
Move the agent first and connect the channel second. Connecting a channel does not move the agent, so an agent left on your own machine keeps going offline with it no matter how the channel is configured.
Cloud placement keeps agents and their channel bots running when your machine is off.
Security
Tokens never touch local storage.
When you pick a vault credential instead of pasting a token, Actionist resolves it server-side at connect time. The plaintext token is never written to the agent config or local disk.
Telegram · Step 1
Bot token
telegram-bot-mayavault
Resolved from your vault at gateway connect. Never stored locally.
Allowlist gating
Unauthorized Telegram users are rejected before any message reaches the agent.
Socket Mode
The Slack app maintains a persistent outbound WebSocket. There is no public HTTPS endpoint to expose or protect.
One poller per token
Telegram allows only one active connection per bot token. Connect a token to one agent at a time, or neither receives updates.
If the vault entry a channel is bound to is later deleted, the credential field shows a stale-binding chip: "Bound credential not found — re-bind required." Clear the stale binding, pick or paste a valid token, and reconnect.
A token is bound to the agent you connected it to. It is not shared with your other agents.
Under the hood
Five stops from message to reply.
Messaging appYou send a DM or mention in Telegram or Slack.
GatewayActionist's Gateway service receives the webhook or Socket Mode event.
Allowlist checkThe sender ID is checked against the bot's allowlist before anything reaches the agent.
Agent runtimeThe message is forwarded to the bound agent, which runs its tools, memory, and skills.
ReplyThe agent's response (or approval request) is sent back through the same channel.
States and controls
Connection states and what they mean.
A channel moves through a short sequence when you connect it. Knowing which stage you are stuck at tells you whether the problem is your token, the provider, or where the agent is running.
| What you see | What it means | What to do next |
| --------------------------------------- | --------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
| Saved, still connecting | Your settings are stored and the gateway is opening the connection. | Wait. This resolves without action in normal cases. |
| Connected, with the bot name shown | The channel is live and the agent will answer. | Send it a message to confirm end to end. |
| Connection error | The token was rejected, or the provider refused the connection. | Recheck the token, then reconnect. A revoked or regenerated token always fails here. |
| Connected, but the bot ignores messages | Usually a routing or permission rule rather than a broken connection. | On Slack, mention the bot in shared channels. On Telegram, check the allowlist includes you. |
| Answers by day, silent overnight | The agent is running on your own machine. | Move the agent to cloud placement, then reconnect the channel. |
Channel controls appear for agents that can host a bot. If you do not see them on an agent, that agent is not eligible rather than the feature being unavailable to your account. Check where the agent is running first.
The usual causes are a regenerated token, a revoked Slack install, or the same token being used by a second connection. Only one connection per bot token can be active. Reissue the token, update it here, and reconnect.
Best practices
Tips that prevent the common issues.
Pasting a token stores it in the agent config on disk. Picking a vault credential means the token is resolved server-side at connect time and never written locally. When you rotate the credential in the vault, every agent that references it updates automatically. No need to re-open each agent's Channels tab.
How to save, rotate, and manage credentials centrally.
An empty allowlist means anyone who finds the bot's username can send it messages. Add your own numeric Telegram user ID (and any teammates' IDs) immediately after connecting, before you share the handle publicly. Values are comma-separated; both numeric IDs and @usernames are accepted.
When a user messages the Slack bot in a DM, the message routes to the agent automatically. In a shared channel, only messages prefixed with @mention-name are routed. Bare channel messages are silently dropped. Make sure your team knows to include the mention when they're not in a DM.
The mention name is auto-sanitized to \[a-z0-9\_-] as you type. Duplicate names across agents sharing the same Slack app produce a server-side validation error on save. Keep each name distinct: support, finance, research.
Both are Telegram bot commands, but they do different things:
* /reset: clears the agent's transcript context. The chat row, agent binding, and Telegram peer link are untouched. Use it when the agent has accumulated context from a long session and is no longer behaving as expected.
* /stop, aborts any work the agent is actively executing right now. Conversation context is preserved; your next message continues normally.
Neither command removes the bot connection or the agent config.
This error appears when two runtimes are polling the same bot token at once. Telegram allows only one active poller per token.
Actionist surfaces the conflict in the Channels tab and retries automatically (30 s, 60 s, 120 s, 300 s, then terminal error). To fix it: disconnect the bot on whichever runtime should not own it, then reconnect on the correct one.
An agent running on your own machine stops answering when that machine sleeps or the app closes. Move the agent to cloud placement in the Cloud tab, then reconnect its channels. A cloud agent keeps answering while your laptop is off.
| Setting | Value |
| ------------------------------------ | --------------------------------------------------------------------------------------------- |
| Text attachment: supported types | `.txt` `.md` `.csv` `.json` `.html` `.xml` `.yaml` `.yml` `.toml` `.ini` `.cfg` `.log` `.env` |
| Photo attachment: photos per message | First photo only (passed as base64 for vision) |
| Required Slack bot scopes | `chat:write`, `im:history`, `channels:history`, `groups:history` |
| Slack connection mode | Socket Mode (persistent outbound WebSocket, no public endpoint) |
Long Telegram replies split automatically at 4,000 characters, breaking first at paragraph boundaries, then newlines, then spaces. If Markdown causes a parse error, the service falls back to plain text automatically.
Five minutes
## Put your agents on Telegram and Slack today.
Open the Dashboard, pick an agent, and follow the three-step wizard. Five minutes to a bot your team can message from anywhere.
Bot tokens vault-bound to this agent only.
Allowlist gating · Socket Mode · Runtime-scope isolation.
Keep going
Next steps.
The Channels tab lives inside the agent studio. Configure identity, tools, and approval mode alongside channel bindings.
Save, rotate, and manage bot tokens centrally so every agent stays current automatically.
Cloud placement keeps channel bots running around the clock, even when your laptop is closed.
Combine a channel with a schedule for agents that report proactively on a recurring cadence.
# Cloud Runtime
Source: https://learn.actionist.ai/Folders/cloud/index
Run agents, channels, schedules, and triggers around the clock, on Actionist's hosted cloud or your own server.
ALWAYS ON
## Your agents run 24/7, even when your laptop is closed.
Your hosted Actionist runtime. Agents, channels, schedules, and triggers you put in the cloud run here around the clock, even when your computer is off. The same Headless Runtime engine, two ways to host it.
The idea
One engine, two places to run it.
Actionist's Headless Runtime is the same engine regardless of where it runs. Choose hosted Cloud for zero infrastructure, or your own VPS for full control.
Hosted Cloud
Actionist provisions and manages the container. Your job is reading the status page. Schedules, triggers, Telegram, Slack. All fire when your computer is off. Requires a paid plan.
Self-hosted VPS
Any Linux server with SSH access. You supply the host; Actionist uploads the runtime bundle, writes the env, and starts the process. Full control over region, memory, and browser provider.
Run Locally
The Headless Runtime can also run as a local child process. Useful for testing or for a machine that stays on. Schedules and channels stop when the app quits.
Both the hosted cloud and self-hosted VPS paths use the same Headless Runtime engine and expose the same capabilities: agents, skills, gateway, channels, schedules, triggers, MCP, marketplace, and more.
Hosted cloud
The runtime lifecycle, state by state.
Click Cloud in the left sidebar (route /cloud-runtime) to see your hosted runtime's current state, then click a state below to read exactly what it means, what the UI shows, and what (if anything) you need to do. The Cloud tab polls every 4 seconds while provisioning is in progress, then stops once the state is terminal; the runtime heartbeats every 30 seconds and is considered offline if no ping arrives within 90 seconds.
No runtime
Provisioning
Starting
Active
Ready
Heartbeat · every 30 s · stale after 90 s
"No cloud runtime yet"
Your hosted runtime provisions automatically once your subscription is active. This usually takes a couple of minutes. No action is needed. Check back after subscribing. If your plan does not include a cloud runtime, the Cloud tab shows "Your plan doesn't include a cloud runtime" with an Upgrade plan button. Clicking it opens a Stripe checkout in a new tab.
"Setting up your cloud runtime"
The RuntimeProvisioningStepper steps through four stages: Provisioning → Starting → Active → Ready. The page polls every 4 seconds. You can leave this page at any time, setup continues in the background.
"Setting up your cloud runtime" (Starting stage)
The container is launching. Still polling every 4 seconds. No action required. If Starting persists for more than several minutes, contact support.
"Your cloud runtime is active"
The runtime process is up and the Cloud tab is waiting for it to phone home. The runtime sends a heartbeat every 30 seconds; the backend considers it offline if no heartbeat arrives within 90 seconds. If this state persists for more than a few minutes, port 9090 may be blocked or outbound HTTP is firewalled. Confirm port 9090 inbound and unrestricted outbound HTTP.
"Your cloud runtime is ready"
Agents and channels assigned to the cloud are running. The Runtime details card shows Plan, Region, Version, Browser, and Last heartbeat. The Connected channels card shows Telegram and Slack as Connected or Not connected. The runtime is healthy when status === 'active' and the last heartbeat is within the past 90 seconds.
Suspended state. Update your billing to resume. Your data is retained while suspended.
Failed state. Actionist retries automatically: Provisioning → retry. If the state persists, contact support.
Refresh button. Forces an immediate status poll at any time. Available in the top-right corner of the Cloud tab.
Cloud Runtime · lifecycle states
Provisioning
Setting up your cloud runtime
ProvisioningStartingActiveReady
Active · awaiting heartbeat
Waiting for runtime to phone home
ActiveLast heartbeat: never
Heartbeat expected every 30 s
Ready
ReadyYour cloud runtime is ready
PlanPro
Regionus-east-1
Last heartbeat12 s ago
Suspended
SuspendedUpdate your billing to resume
Your data is retained while suspended
Upgrade plan
Ready state
Reading the details and channels cards.
Once the runtime is ready, two cards appear below the status banner.
Shows Plan, Region, Version, Browser, and Last heartbeat timestamp. "Last heartbeat" tells you the last time the runtime phoned home. If it reads "Never", the process has not yet sent its first ping.
The runtime is considered healthy when `status === 'active'` and the last heartbeat is within the past 90 seconds.
Shows Telegram and Slack as Connected or Not connected. This card appears only once the runtime is ready, while provisioning, it shows "Waiting for your cloud runtime to be ready before channels can connect."
The Refresh button in the top-right corner of the Cloud tab forces an immediate status poll at any time. Use it if you want confirmation without waiting for the next 4-second cycle.
Cloud Runtime · ready stateRefresh
ReadyYour cloud runtime is ready
Runtime details
PlanPro
Regionus-east-1
Version2.4.1
BrowserNone
Last heartbeat8 s ago
Connected channels
TGTelegramConnected
SLSlackNot connected
Plans
The hosted cloud requires a paid plan.
If your plan does not include a cloud runtime, the Cloud tab shows "Your plan doesn't include a cloud runtime" with an Upgrade plan button. Clicking it opens a Stripe checkout in a new tab. Once your subscription is active, the runtime provisions automatically, no further action needed.
On a paid plan, the hosted runtime provisions automatically, runs unattended, and restarts itself after a failed state. Your only interaction is the Cloud tab status page and, optionally, the Connected channels card.
See what is included in each plan and upgrade directly from the billing page.
Agent Studio
What moves with an agent.
An agent is not just its instructions. Wherever it runs, it needs its memory, skills, MCP servers, schedules, triggers, and channels to come along. The sequence below shows what that inventory looks like.
There is no "Move to VPS" button, and you are not expected to move agents by hand. Placement is handled for you: agents created in the web app are already cloud-ready. Ignore any older instruction to migrate an agent yourself, and check the runtime label on the agent itself if you want to know where it is running.
Memory and skills
Everything the agent has learned and every skill enabled on it stay attached to the agent, not to a machine.
Schedules and triggers
Recurring runs and incoming triggers belong to the agent, so they keep firing wherever it runs.
Channels
A connected Telegram bot or Slack presence follows the agent. You do not reconnect it because placement changed.
If you want to know where an agent is running right now, check its runtime label on the agent itself, or open Settings → Cloud Runtime.
Self-hosted
Deploy the runtime to your own VPS.
Any Linux server with SSH access works. Actionist uploads the runtime bundle via SCP, installs dependencies, writes the environment file, and starts the process.
Go to Settings → Headless Runtime and select the Deploy to VPS mode (CloudArrowUp icon).
Enter your server's Host (IP or hostname), Port (default: 22), Username, and SSH Private Key (click Choose… to pick a file from your machine).
Enter your API Key. Set Health Port (default: 9090) and Files Port (default: 7783) if your server uses non-standard ports.
Enter your Telegram Bot Token (required to enable the gateway). Optionally enter Allowed User IDs as a comma-separated list to restrict who can message the bot.
In production, always set Allowed User IDs. Without it, anyone who discovers the bot's username can send it messages.
Click Test Connection to verify SSH reachability before deploying. A banner reads "SSH connection successful!" on success, or shows an inline error if the key or host is wrong.
Click Deploy to VPS. If your organization already has an active runtime, a confirmation dialog appears:
> "Replace existing paired runtime?"
> "Your organization already has an active runtime. Deploying here will revoke it. Continue?"
Click Replace and deploy to proceed, or Cancel to keep the existing runtime.
Once running, three actions are available:
* Check Status: polls the `/healthz` health endpoint on port 9090.
* Logs: fetches the last 50 lines from `runtime.log`.
* Stop: terminates the remote process.
Settings · Headless Runtime · Deploy to VPS
Connection
Host192.168.1.1
Port22
Usernameroot
SSH Private Key\~/.ssh/id\_ed25519Choose…
Authentication
API Key••••••••
Health Port9090
Files Port7783
Telegram Gateway
Bot Token1234567890:AAH…
Allowed User IDs123456789, 987654321
Test ConnectionDeploy to VPS
Deploy modes
Three ways to run. Pick the right one.
In builds where container deployment is enabled, you can choose how the runtime handles browser automation. Click a mode to see when to use it.
Hosted Cloud, the zero-ops path
Actionist provisions and manages the container for you. Your job is reading the status page on the Cloud tab. Schedules, triggers, Telegram, and Slack all fire when your computer is off. Auto-retries on failures. Requires an active paid plan. If your plan does not include cloud, the tab shows an Upgrade button.
Process mode, the simple VPS default
One node dist/index.cjs process per server. No container, no browser. Use process mode when your agents do not need web browsing. It is the simpler, lighter-weight option that most teams start with.
No browser
\~120 MB container. Leanest option. Choose when agents do not need web browsing or screenshot-based computer use.
Use container mode (the third option) when you need strict isolation or explicit browser RAM control.
Container mode, browser provider choices
None (\~120 MB)
No browser. Leanest container. Choose this when agents do not need web browsing or screenshot-based computer use.
Local Chrome (\~1.5 GB)
Adds Chrome to the container for web tasks and screenshots. Idle stays near 120 MB; Chrome runs only during a task. Choose when you need browser automation and have sufficient RAM.
Browserbase (cloud)
Runs the browser off-box on Browserbase's cloud. Container stays near \~1 GB. Browser tasks are metered and billed by Browserbase separately. Best for RAM-constrained VPS or low-traffic agents.
Enable container mode by checking Deploy as isolated container (multi-org) in the VPS form. Available in builds where container deployment is enabled.
Credentials Vault
Machine identities and pairing codes.
Every runtime authenticates to the Actionist backend using a long-lived machine bearer token (mid\_\*). The first boot of a VPS runtime exchanges a one-time pairing code for this token and stores it at config/machine-token.json.
Copy immediatelySingle-use. Not shown again. If missed, generate a new one.
First bootPass as ACTIONIST\_PAIRING\_CODE env var. Runtime exchanges it for a mid\_\* token.
Token storedSaved to config/machine-token.json locally. Revoke via the Vault panel at any time.
Example pairing code (one-time)
ACTX-7F2A-K9R3Copy immediately. Disappears after first use.
After exchange:ACTX-7F2A-K9R3→ mid\_a7f2...k9r3 stored at config/machine-token.json
Machine identities are managed by the platform. There is no Paired runtimes panel in the Credentials Vault to browse them from, so treat identity handling as something the platform does on your behalf rather than a screen you visit.
Click Pair runtime, enter a label (for example, "VPS — Telegram bot"), then click Issue pairing code. A one-time code appears.
Copy the code immediately. It is single-use and will not be shown again. If you miss it, generate a new one. The old code is already expired.
Pass the code to the VPS runtime as the ACTIONIST\_PAIRING\_CODE environment variable on first boot. The runtime exchanges it for a mid\_\* token and stores it locally.
To remove a machine identity, click Revoke next to it. Access is invalidated immediately. The VPS does not need to be online.
machine identity · illustrativePair runtime
ActiveVPS, Telegram botmid\_a7f2k9r3… · created Jun 10, 2026
Revoke
If your replace-existing-runtime confirmation dialog appears when deploying, it lists the current active identities. Confirm you are targeting the right server before clicking Replace and deploy: revoking the wrong identity cuts that server off immediately.
Local mode
Run the runtime on your desktop.
If you want Telegram bot connectivity without a remote server, the Headless Runtime can also run as a local child process. Useful for testing or for machines that stay on.
**Before you start.** You need the Headless Runtime section in Settings, which is not present in every workspace, and a Telegram bot token from @BotFather. If Settings has no Headless Runtime section, this mode is not available to you and the rest of this section does not apply.
Go to Settings → Headless Runtime and select Run Locally (Desktop icon).
Enter your Telegram Bot Token (required). Optionally add Allowed User IDs.
Click Start Runtime. The badge cycles: Stopped → Starting… → Running (shows the process PID). Once connected, the Telegram logo appears with "Connected".
Click Stop Runtime to kill the child process. Scheduled jobs and channels stop with it.
Run Locally keeps everything on your machine. It is not a replacement for hosted Cloud or a remote VPS. Schedules and channels stop running when you quit the app or click Stop Runtime.
Always on
While your laptop was closed.
The VPS runtime keeps a rolling log of everything it handled while you were away. Three things happened overnight: a scheduled digest fired, a webhook trigger came in, and a Telegram message got a reply, all without you.
The Cloud tab stepper reaches Ready only when status === 'active' AND the last heartbeat is within 90 seconds. For a self-hosted VPS runtime: if stuck at "Active" for more than a minute, port 9090 is likely blocked inbound (the health endpoint) or outbound HTTP from the VPS to the Actionist API is firewalled. Open port 9090 inbound and confirm outbound HTTP is unrestricted. For a hosted cloud runtime stuck at "Active", contact support.
Without Allowed User IDs set, anyone who discovers the bot's username can message it. Set the Allowed User IDs field in the VPS form (or the TELEGRAM\_ALLOWED\_IDS environment variable). A comma-separated list of Telegram numeric user IDs is sufficient.
Always click Test Connection before hitting Deploy to VPS to confirm SSH reachability. This surfaces key-path and permission errors before the deployment attempt, saving you a failed deploy cycle.
Generate the pairing code just before you need it. If you close the dialog without copying the code, generate a new one. The old code is already consumed. Each code becomes invalid immediately on first use.
Local Chrome raises the container memory ceiling to approximately 1.5 GB. Browserbase keeps the container near 1 GB by offloading browser work off-box. For low-traffic agents or VPS instances with under 2 GB of RAM, Browserbase is the safer choice, just account for per-task metered billing.
On VPS, vector-backed memory search can be enabled with additional configuration. Without it, memory search uses full-text only, which reduces the quality of memory recall for agents with large memory stores.
To enable web-based file browsing from the VPS, fill in both Public base URL and File proxy secret. The base URL must be HTTPS, the backend rejects plain HTTP outside of local development. The secret must match ACTIONIST\_VPS\_FILE\_PROXY\_SECRET on the backend.
There is no Paired runtimes panel in the Credentials Vault, so revocation is not a self-service action today. Contact the team if you need a runtime's access cut off.
Failed schedule runs on VPS retry up to 3 times. The delays follow an exponential backoff: 30 s → 60 s → 120 s → capped at 300 s. Execution rows older than 7 days are pruned automatically. If you notice missed runs, check the Schedule tab for the run history.
Once provisioning starts, setup continues in the background. The page itself says "You can leave this page — setup continues in the background." Come back when you want to check progress.
Reference
Defaults and limits.
4 sCloud tab poll interval (settling)
30 sHeartbeat send interval
90 sHeartbeat freshness threshold
22Default SSH port
9090Health port (healthz endpoint)
7783Files port
50 linesLogs fetched per call
5 GBMax workspace size
50 GBMax org size
30 daysArtifact retention
3Schedule retry attempts
7 daysSchedule execution row retention
\~120 MBBrowser: None (container RAM)
\~1.5 GBBrowser: Local Chrome (container RAM ceiling)
Hosted or self-hosted: the same runtime engine, the same capabilities.
Heartbeats every 30 s · auto-retries on failure · 90 s freshness threshold.
Keep going
Next steps.
Open an agent in the studio to review its tools, skills, and approval mode.
Connect Telegram and Slack bots so agents respond where your team already is, even when your computer is off.
Set up recurring jobs that fire headlessly on your cloud or VPS runtime.
Upgrade to a paid plan to provision your hosted cloud runtime.
# Computer Use
Source: https://learn.actionist.ai/Folders/computer-use/index
When there's no API, Actionist sees and clicks, vision-driven screen automation in plain language.
VISION-DRIVEN AUTOMATION
If you can click it,
Actionist can automate it.
---------------------------------------
Legacy tools, API-less web apps, multi-step wizards, describe the goal in a sentence and the agent handles every click, keystroke, and page load. No connector, no script, no browser extension required.
The loop
The cycle that runs every action.
Actionist runs a tight perceive-decide-act loop for every step. It captures the screen, sends it to a vision model, receives an action instruction, executes it, then loops back. Repeat until done.
PerceiveScreenshot sent to vision model
DecideModel plans the next action
ActClick, type, or navigate
repeats until done
Perceive
A screenshot of the active display is captured and sent to a vision model. Every loop starts fresh: the agent sees the actual current state, not a cached assumption.
Decide
The vision model interprets the screenshot against your task goal and produces a precise action instruction: click a coordinate, type text, press a key, or call a wait.
Act
Actionist executes the instruction through OS-level input. The same accessibility APIs a human uses. The screen changes, a new screenshot is captured, and the loop runs again.
The API wall is gone.
Every team has tools that resist automation: a vendor portal, an internal dashboard, a multi-step wizard. Computer Use dissolves that wall. If it is visible on screen, it is automatable.
Legacy desktop apps, sites without APIs, and multi-step web flows stay manual. Every repetitive task costs a human hour. Building a connector takes an engineer.
Actionist captures the screen, sends it to a vision model, receives action instructions, and executes them through OS-level input. Describe the goal. The agent handles every click.
**Prerequisites.** Computer Use drives the mouse, keyboard, and screen of a real machine, so it runs in the macOS desktop app rather than the browser. You also need to grant Screen Recording and Accessibility permissions in macOS System Settings. Open Computer Use in the web app and you get a notice pointing you to the desktop build.
Setup
Grant the two required permissions.
Actionist needs Screen Recording (to see your screen) and Accessibility (to control UI elements). Both must be granted before any automation runs.
Red bannerappears
PermissionsRequired section
Screen Recordinggrant access
Accessibilitygrant access
All systemsactive
**Before you start.** You need the macOS desktop app and an administrator account on the Mac, because granting these permissions opens macOS System Settings and requires you to unlock the panel. Actionist cannot grant them for you.
If either permission is missing, Actionist shows: "Critical system permissions missing. Core app functions are disabled." Click Fix in Settings.
Settings opens to the Permissions Required section. The subtitle reads: "Actionist needs Screen Recording and Accessibility permissions to observe your screen and perform actions."
Click Grant access next to Screen Recording. Actionist opens System Settings > Privacy & Security > Screen Recording automatically. Toggle Actionist on. macOS may ask you to restart the app.
Return to Actionist. Click Grant access next to Accessibility. Repeat the same System Settings toggle step.
A toast appears: "Permissions granted! All system features are now active." You are ready to automate.
Settings · Permissions Required
Permissions Required
Actionist needs Screen Recording and Accessibility permissions to observe your screen and perform actions.
Screen Recording
Allows Actionist to see your screen
Granted
Accessibility
Allows Actionist to control UI elements
Grant access
In chat, if you trigger an automation before permissions are granted, a Grant Permission button appears inline in the input area. Tapping it opens the same Settings flow described above.
A session, live
Watch a task unfold step by step.
Send any task in plain language. Actionist classifies the request, opens a Computer Use session, and starts working. The AI Process panel feeds every step label in real time. You never wonder what the agent is doing.
AI Process · session · maya
running
task received · 09:41:22
youOpen Notion, find my task list, and mark Weekly report as done.
computer use session started
step 1Opening Safari: bringing window to front.
step 2Clicking address bar. Typing app.notion.so. Pressing Return.
step 3
waiting
Intelligent wait, page loading. Holding for content to settle.
step 4Navigating to My Tasks in left sidebar. Clicking.
step 5Scanning task list. Found Weekly report: row 7.
maya
done
Done. Weekly report is checked off in your Notion task list.
Input locked while running. The chat input shows "Automation in progress..." and is non-interactive. A Stop button is the only control, preventing accidental overlap with new tasks.
Intelligent waits. Actionist inserts automatic pauses after navigation, form submissions, and search requests. These let the page settle. They are not lag. They are deliberate pacing.
One task at a time. Only one Computer Use session can run simultaneously. If you send a new task while one is running, it will fail. Click Stop first.
Select any agent from the chat selector. Make sure it has Screen Automation (Actionist) enabled on its Tools tab.
Type what you want, for example: "Open Safari, go to app.notion.so, find my task list, and mark the item called 'Weekly report' as done."
The input area shows "Automation in progress..." and is non-interactive while the session runs. Open the AI Process tab in the right sidebar to see a live feed of every step the agent takes.
When the task is complete, the agent sends a message and the input area returns to normal. The AI Process tab keeps the full step history for review.
chat · maya
running
S
Open Safari, find my Notion task list, and mark Weekly report as done.
M
On it, opening Safari now.
Automation in progress...
Stop
AI Process
Opening Safari
Clicking address bar
Typing app.notion.so
Waiting for page
Safe by design
Passwords and payment info.
Actionist's agent is explicitly instructed never to proceed autonomously when it encounters a password field, payment form, or ambiguous choice. It stops and asks you instead. Delegation stays safe.
chat · maya
running
S
Log in to the vendor portal and download the latest invoice.
M
On it. Opening the vendor portal now.
Automation in progress...
Stop
chat · maya
waiting
S
Log in to the vendor portal and download the latest invoice.
M
On it. Opening the vendor portal now.
M
Please enter your login password for vendor.example.com to continue.
Waiting for your input.
Reply to continue...
Send
The AI Process feed is frozen. No further tool calls run until you reply. No credential is ever sent to the model. Your reply goes directly to the session continuation.
chat · maya
done
M
Please enter your login password for vendor.example.com to continue.
S
●●●●●●●●
M
Logged in. Navigating to invoices. Found the latest, INV-2041. Downloading now.
Message Maya...
Send
The session resumes from exactly where it paused. No context lost. The agent uses your reply for the current field and continues the task.
The Computer Use session pauses. No tool call is made. The agent sends a text-only question in chat, for example: "Please enter your password for app.notion.so".
The input placeholder changes to "Reply to continue..." and a card in the chat shows "Waiting for your input." The AI Process feed is frozen.
Type the credential or your choice and press Enter. The response is queued for the agent's next turn.
The session resumes automatically. The agent uses the input for the current field and continues the task.
chat · maya
waiting
M
Log in to the vendor portal and download the latest invoice.
M
Please enter your login password for vendor.example.com to continue.
Waiting for your input.
Reply to continue...
Send
Never include passwords, API keys, or payment card numbers in the task description itself. The agent is designed to stop and ask. Let it. Putting credentials in the task message is unsafe and unnecessary.
Session controls
Control an automation in progress.
While "Automation in progress..." is shown, the chat input area gives you a live stop control, and the agent itself will pause and ask whenever it needs you.
Clicking the Stop button in the chat input area cancels the in-flight API request immediately, then exits the loop. The input area shows "Stopping..." and then "Stopping automation..." while teardown completes. After teardown, the session closes and the input area returns to normal.
Use Stop when you want to redirect the task or start a completely different one.
The agent pauses itself whenever it needs your input: a password field, a payment form, or a genuinely ambiguous decision. It sends a text-only question in chat and waits. Reply in the input area and the session continues from exactly where it stopped, with no context lost.
chat · maya
running
S
Open the vendor portal and export the Q2 report.
M
On it. Navigating to the vendor portal now.
Automation in progress...
Stop
AI Process
Opening Safari
Navigating to portal
Locating export button
Only one Computer Use task can run at a time. If you send a new task while one is already running, it will fail. Click Stop to end the current session before starting another.
Real-world use
Where the API wall used to stop you.
Every team has a handful of portals and tools that resist automation: no API, no integration, just a browser and a grind. Computer Use dissolves that wall in plain language.
Before · manual entry
09:05Open vendor portal in browser
09:07Log in, navigate to New Submission
09:09Copy invoice number from spreadsheet
09:12Paste into 14 individual form fields
09:19Attach PDF, scroll to confirm checkboxes
09:23Submit. Wait for confirmation screen
09:25Screenshot confirmation, paste into Slack
After · one sentence to CUA
Describe the task once in plain language
Agent opens the portal, logs in, fills every field
Attaches the PDF from your Downloads folder
Confirms all checkboxes, submits the form
Returns a confirmation number in chat
saves \~18 min per submission
The pattern works for any portal. Here is what the same flow looks like over a phone-style channel.
L
Lena@lena\_actionist\_bot
ONLINE
Post the Senior Backend Engineer role to Northwind Careers. Title: Senior Backend Engineer. Team: Platform. Location: Remote. EU. Use the standard JD from the shared doc.
10:14
TOOL · SCREEN\_AUTOMATION
Got it. Opening Northwind Careers portal now. I will navigate to Post a Job, fill in the title, team, location, and paste the JD. I will pause if a login or confirmation step needs you.
10:14
SEEN · READING CONTEXT
Done. The listing is live. Here is the confirmation:
10:17
Senior Backend Engineer postedNorthwind Careers · Ref NW-2041 · Remote EU · Active
View listingTake down
The Northwind Careers portal has no public API. The agent navigates it the same way Lena would (opening the browser, clicking through the form, and pasting the job description) in about 3 minutes instead of 15.
Best practices
Writing tasks that work.
Computer Use interprets your intent from plain language. A few habits make the difference between a task that completes in one shot and one that needs redirecting.
Say "Open Safari, go to..." rather than just "go to...". The agent sees the entire screen and needs to know which window or app to bring forward. Naming the app removes ambiguity at the first step, where mistakes compound.
Write what you want the result to be, not a step-by-step click script. "Mark 'Weekly report' as done in my Notion task list" is better than "click the checkbox next to the third row." The agent plans the clicks. You set the destination.
A chat message is the fastest path to a single automation run. For tasks you repeat daily (morning triage, end-of-day reports, status updates) put the same task description in a workflow node and schedule it. Workflow nodes are reviewable, editable, and schedulable; a chat session is ephemeral.
The agent minimizes Actionist automatically if the chat window is obstructing its target area. Closing Actionist while an automation is running terminates the session immediately. Keep the app running in the background.
Actionist inserts automatic waits after navigation, form submissions, and search requests. These pauses let the page settle before the next action fires. They are not lag. They are deliberate pacing that prevents the agent from acting on a partially-loaded screen.
The AI Process tab in the right sidebar shows a live feed of every step label. If a session seems frozen, open this panel to see the last action the agent attempted. It tells you exactly what happened before the pause.
Agent configuration
Enabling screen automation on an agent.
Screen automation is a built-in agent tool. It is scoped per agent so you can restrict which of your agents can operate the screen.
Built-inScreen Automation (Actionist) ships as a first-party tool: no install, no connector.
Per-agentToggle it independently on each agent's Tools tab. Off by default for pure data-processing agents.
Approval-awareRespects the agent's approval mode. "Guarded auto" or lower still prompts on sensitive screen actions.
Built-in
The tool is named Screen Automation (Actionist) and described as "Click, type, navigate via CUA." Toggle it on the agent's Tools tab in the studio.
Turn the tool off for agents that should never touch the screen: a pure data-processing agent or a Slack bot, for example. An agent without this tool cannot initiate a Computer Use session even if asked.
The Screen Automation (Actionist) tool respects the agent's approval mode. With approval mode set to "Guarded auto" or lower, sensitive screen actions will still prompt for your confirmation.
Under the hood
From task to result in four stops.
Task messagePlain-language goal sent to the agent in chat or from a workflow node.
Session openAgent invokes Screen Automation (Actionist). Input locks. AI Process feed begins.
Perceive–Decide–Act loopScreenshot → vision model → action → repeat, until goal is met or agent pauses.
Result messageAgent sends a completion message. Session closes. Input unlocks. Full history in AI Process.
One sentence away
## Your first screen-automation task is waiting.
Grant the permissions, describe the goal, and watch Actionist handle every click. No script, no connector, no extension.
The agent stops and asks before it ever touches a password or payment field.
Built-in safety gates · Live step feed · You stay in control.
Keep going
Next steps.
Configure which agents have Screen Automation enabled on their Tools tab.
Wrap a Computer Use task in a workflow node to make it reviewable and schedulable.
Schedule a CUA-backed workflow to run every morning without being asked.
Store credentials in the vault so sensitive workflows stay safe and organized.
# Credentials Vault
Source: https://learn.actionist.ai/Folders/credentials/index
Store API keys and tokens once, use them across every agent, MCP server, skill, and channel. With rotation that propagates instantly and secrets that are never exposed.
ZERO RE-WIRING
## Your secrets. One vault. Every agent.
Paste a token once. Every agent, MCP server, skill, and channel that needs it picks it up automatically. Rotate the key from one screen and every consumer updates on the next invocation: no re-binding, no config sweeps.
The idea
What lives in the vault.
The Credentials Vault is the single place where Actionist stores every secret your agents need to reach the outside world. Everything in it renders as a credential card, whether you typed the value or an OAuth flow created it for you.
A raw secret you own and manage: an API key, personal access token, header secret, or client credentials pair. You paste the value, Actionist encrypts it, and the value is never shown again after save.
Completing an OAuth consent screen produces a credential too. You never type a value; the install flow creates it. It appears as an ordinary card, identified by its provider and kind slug, for example gitlab · oauth\_bundle.
The vault does not separate these into two labelled object types. OAuth-backed entries sit in the same list as everything else. The way to spot one is the oauth\_bundle kind in its provider slug.
The four credential kinds
API key
Long-lived key issued by a service. Examples: SendGrid, Stripe.
Token
Short-lived or scoped bearer token, PAT, or bot token. Examples: GitHub PAT, Slack bot token.
Header secret
A static secret sent as a custom HTTP header to an MCP or webhook endpoint.
Client credentials
OAuth 2.0 client ID + secret pair for server-to-server flows.
Try it · lifecycle
Reading a credential card.
Each card shows a color-coded key medallion, display name, status badge, binding-count pill, provider/kind slug, and relative last-updated time. Five action buttons appear on every card: Rename, Rotate, Test now, Disable / Enable, and Delete. Which ones are usable shifts with the credential's state. Pick a state:
SendGrid · productionsendgrid · api-key6 bindings
ActiveInvalidDisabledNeeds re-auth
RenameRotateTest nowDisableDelete
RenameRotateTest nowDisableDelete
RenameRotateEnableDelete
RenameRotateDisableDelete
Active: available for new and existing bindings. All five actions are available, including Delete.
Invalid: the backend determined the secret is no longer valid (expired, revoked, or quota-blocked). Run Test now to see the failure reason, then Rotate with a fresh value to restore it. All bindings remain intact while you rotate.
Disabled: paused manually. Cannot be selected in new bindings, but all binding metadata is preserved. Rotate is locked: re-enable the credential first, then rotate the value. Click Enable to restore instantly.
Needs re-auth: the stored token requires re-authorization. There is no Re-authenticate button. Workaround: create a fresh credential for the same provider with Add credential, then re-bind every consumer to it. Disable or delete the stale credential once migrated.
The value field reads "Saved encrypted; never shown after save." This is by design. To update a saved secret, use Rotate: not delete-and-recreate.
The page
Open the vault.
Go to Settings and expand the Credentials Vault panel. It is a card on the Settings page rather than a separate tab, so nothing is visible until you expand it. Once open you get the stored and binding counts, a Search credentials field, Refresh, Add credential, and the credential cards themselves.
4 credentials stored
6 active bindings
Search credentials…RefreshAdd credential
SendGrid · productionsendgrid · api-key3 bindings
Active
RenameRotateTest nowDisableDelete
GitHub PAT · workgithub · token0 bindings
Disabled
RenameRotateEnableDelete
Stripe · livestripe · api-key2 bindings
Invalid
RenameRotateTest nowDisableDelete
Most users find the vault nearly empty at first. When you paste a token while installing an MCP or configuring an agent's bot channel, Actionist saves it automatically. Use the vault to manage what has already been saved, or to add credentials you want available before you start building.
4 credentials stored6 active bindings
Search credentials…RefreshAdd credential
SendGrid · productionsendgrid · api-key3 bindings
Active
GitHub PAT · workgithub · token0 bindings
Disabled
Stripe · livestripe · api-key2 bindings
Invalid
Lifecycle
The full credential lifecycle.
From first save to eventual deletion. Every action you can take on a credential, and exactly how each one works.
Add a credential
Click Add credential in the toolbar and an inline form expands. Three fields are required: Display name (for example GitHub PAT - work), Provider (lowercase identifier: github, sendgrid, slack), and Value (password-masked). Submitting an empty form tells you exactly that: "Display name, provider, and value are required."Kind is a dropdown that defaults to API key, so you never have to touch it, but change it when the secret is a token, header secret, or client credentials pair. Click Save credential and it appears with an Active badge immediately.
Everything else you can do
Click Rename. The display name becomes an inline input. Press Enter to save or Escape to cancel. Provider tag and kind are unchanged. All bound consumers keep working.
Rotate replaces the stored secret while keeping every binding intact. The next time any bound consumer runs, it picks up the new value automatically, no re-wiring needed.
Click Rotate, paste the new secret in the New value field, and press Enter. The banner confirms: "Existing bindings keep working — they pick up the new value on next use."Rotation is the only way to update a saved secret. You cannot rotate a disabled credential, re-enable it first.
SendGrid, productionActive
New value
••••••••••••••••••••••••Show
Existing bindings keep working. They pick up the new value on next use.
SaveCancel
Click Disable. The status changes to Disabled and the button becomes Enable (green). Disabled credentials cannot be selected in new bindings, but all binding metadata is preserved. Click Enable to restore, instant and reversible.
Prefer Disable over Delete for temporary pauses. Re-enabling is instant; deleting requires re-binding every consumer.
Click Delete and confirm. The credential is permanently removed.
Nothing stops you deleting a credential that is still in use. There is no binding check and no confirmation that counts consumers for you. If an agent, MCP, skill, channel, or workflow is bound to the credential you delete, it breaks the next time it runs.
Check the binding-count pill on the card before you delete, and migrate those consumers to another credential first. When in doubt, use Disable: it stops the credential being used, keeps the binding metadata, and is instantly reversible.
Care required
Deletion is not guarded. Check first.
The binding-count pill on each card tells you how many consumers depend on that credential, but nothing enforces it. A credential with active bindings deletes exactly as readily as one with none.
Read the binding pill. If it says anything other than 0 bindings, something is depending on this credential right now.
Migrate, then delete. Point each bound agent, MCP, skill, channel, or workflow at the replacement credential before you remove the old one.
Disable is the safe default. It stops usage without losing binding metadata, and re-enabling is instant. Delete only when you are certain.
Validation
Test a key before an agent does.
Clicking Test now on a credential card triggers a live probe against the provider's API. For supported providers, the backend makes a real API call to verify the key is active and has access. For other providers, it performs structural and format validation.
200Response OK. Key is active and has the expected scopes.
valValidated 0 min ago: badge set on card.
Failure path: if the key is wrong, expired, or quota-blocked, the card shows an amber "Validation failed: \{reason}" badge with the exact reason from the provider.
Success state
SendGrid, production
Validated 2 min ago
RenameRotateTest now
Failure state
Stripe, live
Validation failed: key revoked
RenameRotateTest now
Run Test now immediately after pasting a new API key, before you build anything on top of it. It catches copy-paste errors and expired keys in seconds, before a failed agent run makes the problem hard to diagnose.
How it flows
Rotate once. Every consumer updates.
When you rotate a credential in the vault, you change one encrypted value. Every agent, MCP server, skill, and channel that holds a binding picks up the new secret on their next invocation: silently, with no re-wiring. Watch the pulse propagate:
Vault, SendGrid production key rotatedNew value encrypted · SHA-256 hash updated · bindings intact
Agent, MayaPicks up new key on next run
Skill, email-summariseResolves from vault on invocation
MCP, sendgrid-proxyNew value injected at connection time
Agent, Digest BotPicks up new key on next run
Workflow, weekly-reportVault lookup at trigger time
Install MCP / configure skill
CredentialPicker appears
Already in the vault
Pick it from the list → reused
Not there yet
Paste a new value → saved
Credential bound
Agent / MCP uses it on run
The picker lists the active credentials in your vault so you can reuse one instead of pasting the same secret again. It surfaces the credential matching the slot's provider and kind, and it may also list other active credentials, so read the provider slug before you select. Pasting a new value instead saves that value to your vault as a new credential.
Skill credentials · EVOLINK\_API\_KEY✕
Saved credential
Evolink key evolink · api\_keySelected ✕
Bannerbear bannerbear · api\_keyActive
Resolved from your vault when this skill runs.
Pick or paste, never both. The two paths are mutually exclusive. Selecting a saved credential removes the paste field entirely and replaces it with "Resolved from your vault when this skill runs." Clear the selection and the paste field comes back. There is no precedence rule to remember, because you can only ever be doing one of the two.
In practice
One rotation, instant everywhere.
How the vault pays off the moment a key changes, and how the delete guard keeps a live agent running.
"Rotated the SendGrid key at 9:02. All six consumers were on the new key by 9:03."
Sam · Solo founder, after a scheduled key cycle
The same principle holds whether you are managing one workspace or twelve. Here is how the vault pays off in practice:
Omar · Agency owner
A client rotates their SendGrid key. Omar pastes the new value into the vault (one Rotate on the shared credential) and all twelve agents across that client's workspace pick up the new key on their next run. Zero config sweeps, zero re-binding.
saves \~40 min per key cycle
Felix · Finance & Ops
Felix tries to delete an old Stripe credential. The Delete button is locked: the vault shows it still has two active bindings. He checks the bound consumers, migrates them to the new key, and only then does Delete unlock. The live reconciliation agent keeps running without interruption.
one broken agent avoided
Edge cases
Stale bindings and Needs re-auth.
Delete or revoke a credential that a consumer was bound to and that binding is left pointing at nothing. The consumer will fail the next time it tries to resolve the secret. Fixing it means re-binding that consumer to a credential that exists; clearing the broken reference alone does not restore access.
This is the failure mode the previous section warns about, and it is the reason to check the binding pill before deleting anything.
A credential in Needs re-auth status means the stored token needs to be re-authorized. The card shows the Needs re-auth badge and an explanatory note.
There is currently no Re-authenticate button on credentials in this state. The workaround: create a fresh credential for the same provider and use Rotate on any affected consumer bindings to point them at the new credential.
States and controls
Reading credential state.
A credential can exist, be disabled, or be referenced by something that no longer resolves. These look similar in a list and behave very differently at run time.
| What you see | What it means | What to do next |
| ---------------------------------------- | ----------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
| Credential listed, enabled | Saved and available to pick anywhere a secret is required. | Nothing. Use **Test now** if you want to confirm it still works at the provider. |
| Credential disabled | Still stored, but not offered in pickers and not usable by a run. | Re-enable it, or leave it disabled if you are pausing access deliberately. |
| A binding that cannot resolve | Something references a credential that has been deleted. | Clear the stale binding, pick a valid credential, and reconnect. |
| **Needs re-auth** on an OAuth connection | The provider revoked or expired the token. | Reconnect from the same place you first authorized. Do not delete and recreate. |
| The picker is empty | No saved credential matches what this field expects. | Create one first. A credential saved with the wrong kind or provider tag will not be offered here. |
Pickers filter by what the field needs. If a credential does not appear, it is usually saved under a different kind or provider than the field expects, or it is disabled. Open the vault and check both before creating a duplicate.
If validation rejects a field, the entry is not created. Nothing partial is stored and there is no orphaned record to clean up. Correct the field and save again.
Nothing stops you deleting a credential that is still in use. Anything bound to it fails at its next run, and the failure surfaces where that thing runs rather than in the vault. Check what references a credential before removing it.
Best practices
Get the most out of the vault.
If several MCP servers share the same API key, add the credential in the Credentials Vault first. It is then selectable from the picker in each install flow, so you paste the secret once and reuse it everywhere.
The Provider field is how the picker surfaces the right credential in the right slot. Tag credentials with the lowercase service identifier: sendgrid, github, slack, stripe. A wrong or vague tag means the picker will not auto-surface it.
When a secret changes, use Rotate. Rotation preserves every binding. All consumers pick up the new value on next invocation, with no re-binding. Deleting and recreating requires manually re-binding every consumer.
Disable stops a credential from being used without losing its bindings. Re-enabling is instant. Reserve Delete for credentials you are certain you will never use again. It is irreversible.
For supported providers, the backend makes a live API call to verify the key. Running Test now right after paste catches copy-paste errors and quota issues before an agent run fails.
There is no re-authenticate button for Needs re-auth credentials. The workaround: create a fresh credential for the same provider with Add credential, then re-bind consumers to it. Disable or delete the stale credential once all consumers are migrated.
Always in sync
## One vault. Zero re-wiring.
Add a credential once. Rotate from one screen. Every consumer stays in sync on the next invocation: agents, MCPs, skills, and channels.
Encrypted at rest · Never shown after save · Scoped to your workspace.
Add, rename, rotate, test, disable, and delete: all of it works in the web app.
Keep going
Next steps.
Install MCP servers for Slack, Notion, Linear, and more. The CredentialPicker handles binding automatically during setup.
Wire credentials to skill slots so every agent that loads a skill picks up the right secret automatically.
Telegram and Slack bot tokens are stored in the vault. Set up a channel and your bot token stays encrypted.
Run agents unattended, and see how they resolve the same vault credentials when nobody is watching.
# Files
Source: https://learn.actionist.ai/Folders/files/index
A shared filesystem your agents read from and write to. Upload documents to knowledge buckets, or browse per-agent memory, instructions, and outboxes.
SHARED FILESYSTEM
## Every file your agents touch, in one place.
Upload documents to company knowledge. Browse per-agent memory, instructions, and outboxes. Edit anything inline. Your agents read and write here in real time.
The workspace
One filesystem, two views.
The Files page is described by its own header: "A shared filesystem your agents read from and write to. Upload documents to knowledge buckets, or browse per-agent memory, instructions, and outboxes." A pill switcher at the top flips between Company (shared knowledge accessible by every agent) and Agents (one folder per agent, containing memory logs, context briefs, execution artifacts, and any files it has written during runs, labeled with the agent's display name and showing a "\{N} Folders · \{M} Files" count in the workspace header). The underlying filesystem is the same, the view changes what you browse.
live
Total files:142·Indexed size:38.4 MB·Knowledge buckets:6, all healthy·Last sync:just now
docs/
policies
12 files · 4 folders
products
28 files · 2 folders
crm
57 files · 8 folders
md
brand-voice.md
Tone of voice: direct, warm, zero filler. Short sentences win. No exclamation marks.
18 KB · company/docs/
pdfextracted
pricing-2026.pdf
Pro plan pools usage across the team; Basic is single-seat with a monthly reset.
09:14, Northwind call: slides not PDF. 11:02, Invoice #2041 escalated.
agents/maya/memory/
csv
report-q3.csv
date,revenue,pipeline,notes: 2026-06,...
agents/maya/outbox/
Choosing between Company and Agents is a question of audience. If other agents need the file, it belongs in Company. If it is specific to one agent's memory or outputs, it lives under Agents.
At a glance
What the four stats tell you.
The hero strip at the top of the Files page gives you a live read on the state of your workspace.
Count of every file tracked across both workspaces, company files and all agent folders. Useful for auditing how much material your agents have generated or been given over time.
Total volume of content chunked and indexed for semantic search. Uploaded documents are converted to .extracted.md sidecars; this tile shows how much knowledge is live and searchable right now.
Number of named knowledge buckets in your Company workspace. Buckets organise files by topic · for example, docs, policies, products. The "all healthy" sub-label confirms every bucket is indexed and accessible.
Timestamp of the most recent file-system event processed by the live sync listener. "Auto-reindex on write" means you do not need to trigger manual reindexing. Every agent write or upload is picked up automatically.
A pulsing live badge in the page header confirms that realtime file sync is active. If it ever disappears, click Refresh to force a full reload.
Navigation
Browse and open a file.
Click Files in the sidebar. The page loads and defaults to the Company workspace if it has files.
Click Company or Agents in the workspace switcher. Company shows shared knowledge files. Agents shows one folder per agent, each labeled with the agent's display name.
Click any folder card to enter it. The breadcrumb bar at the top updates. Click any crumb to jump back up a level.
Type in the search bar (placeholder: "Search company files..." or "Search agent files...") to filter file names in place. Search is case-insensitive and recurses through folders. Click X to clear. Note that search resets when you switch between Company and Agents.
Click any file card (tooltip: "click to preview") to open the full-screen preview dialog. Text-type files (.md, .json, .yaml, .csv, .log, .txt) show up to 240 characters of content directly on the card before you open them.
Files · Company workspacelive
142Total files
38.4 MBIndexed size
6Knowledge buckets
just nowLast sync
Search company files...
policies12 files · 4 folders
products28 files · 2 folders
mdbrand-voice.mdTone of voice: direct, warm, zero filler...
pdfextractedpricing-2026.pdfPro plan pools usage across the team...
Actionist detects the file type and opens the right editor automatically. The dialog header always shows the file's byte size, full path, type label, and current save state. Click a file type to see how it looks:
company/docs/brand-voice.md · 18 KB · Markdown
UnsavedSave
BIH1H2LinkCodeSource mode
Brand Voice Guidelines
Tone of voice: direct, warm, zero filler. Short sentences win. No exclamation marks. Write like you are briefing a smart colleague, not selling to a stranger.
When in doubt, cut the adjective.
1,840 chars · 42 lines
Files with .md, .markdown, or .mdx extensions open in the @mdxeditor/editor rich-text editor. Use the Rich text / Source mode toggle (top-right of the toolbar) to switch views. The orange Unsaved pill appears whenever edits diverge from the saved version. A three-button modal appears on close if changes are unsaved: Save changes, Discard changes, or Continue editing.
agents/maya/memory/TODAY.md · 4.1 KB · Text
Save
1# TODAY, 2026-06-11
2
3## 09:14 · chat · maya
4- Northwind call: reports as slides, not PDF
5- Saved preference to Memory.md
6
7## 11:02 · workflow · invoice-chase
8- Sent 3 reminders. #2041 escalated.
3,920 chars · 88 lines
Plain text and code files open in a line-numbered textarea. Supported extensions include .txt, .log, .csv, .tsv, .json, .jsonl, .yaml, .yml, .xml, .html, .css, .js, .ts, .py, .rb, .go, .rs, .sh, .sql, and more. The same Save and Unsaved pill behavior applies.
Image and video files open in a centered lightbox viewer. Supported image formats: .png, .jpg, .jpeg, .gif, .webp, .svg, .bmp. Supported video formats: .mp4, .webm, .mov, .m4v, .ogv. Media files up to 25 MB can be previewed inline. Files larger than 25 MB cannot be previewed. Click Download in the dialog header instead.
Use Download to save the file to disk, or Show in folder to open it in Finder / Explorer.
If Actionist cannot render a file inline, the dialog shows "Inline preview is not supported." Use the Download button in the header to save the file to disk, or Show in folder to reveal it in Finder or Windows Explorer. Show in folder needs the desktop app, because there is no local folder for a browser to open.
brand-voice.md · preview dialog
company/docs/brand-voice.md · 18 KB · Markdown
UnsavedCopy pathDownloadSave
BIH1H2LinkCodeSource mode
Brand Voice Guidelines
1,840 chars · 42 lines
The orange Unsaved pill only lights up on real user edits. Not when you first open the file. The editor canonicalizes Markdown on load, so the baseline is the canonical form, not the raw bytes.
Knowledge
Upload to company knowledge.
Upload a product spec once and every agent can draw on it through semantic search. Without per-agent configuration. Watch a file move through its full pipeline, from drop to indexed:
Pick fileDrop into the Upload Documents dialog, or click to browse. Up to 100 files at once, 10 MB each.
ConvertPDF, DOCX, XLSX are text-extracted. MD, TXT, CSV, JSON index directly, no extraction step.
.extracted.md sidecarExtracted text lands as a plain Markdown sidecar next to the original, immediately readable.
IndexedChunks are embedded and indexed. Every agent's semantic search returns results from your document on the very next query.
runbook.md · 18 KBUploading...indexed searchable immediately · no extraction stepindexed searchable immediately · no extraction stepindexed searchable immediately · no extraction step
No manual reindex needed. Every upload and every agent write triggers the live sync listener automatically. The Indexed size stat updates in real time.
Deleting purges completely. When you delete a file, its .extracted.md sidecar is deleted in the same operation. The content disappears from agent retrieval entirely. No stale chunks remain.
Oversized files skip cleanly. Files over 10 MB are flagged inline and excluded. The remaining valid files in the same drop are still queued and uploaded.
The upload button only appears in the Company workspace. Files uploaded here are accessible to every agent in your workspace. For files that belong to a single agent, browse to that agent's folder in the Agents workspace and use your operating system or a workflow to place them there.
In the Files page header (Company workspace), click Upload to knowledge. Tooltip: "Upload documents to company files." The Upload Documents dialog opens.
Use the Destination Bucket dropdown to select which knowledge bucket the files should land in. If a docs bucket exists in your workspace, it is selected by default.
Drag files onto the dropzone ("Drop files here or click to browse") or click to open the native file picker. You can drop up to 100 files at once.
Accepted formats: PDF, DOCX, XLSX, XML, HTML, CSV, TXT, MD. Maximum 10 MB per file.
Oversized files are flagged inline and skipped automatically. The valid files in the same drop are still queued.
Each queued file shows its name and size. Remove individual files with the remove button, or click Add more files to append to the queue.
Click Upload N files. A progress indicator appears while the upload runs. On completion, each document is converted to a retrievable .extracted.md sidecar and auto-indexed, no manual reindex step needed.
Click Done to close the dialog. The new files appear in the Company workspace grid immediately, and the Indexed size stat updates to reflect the new chunks.
Upload Documents
Destination Bucket
docs
Drop files here or click to browsePDF, DOCX, XLSX, XML, HTML, CSV, TXT, MD · max 10 MB each
pdfproduct-spec.pdf4.2 MB
mdrunbook.md18 KB
csvpricing.xlsx890 KB
Upload 3 files
Actions
What you can do with a file.
Right-clicking any file card opens a context menu with two actions:
* Copy content: copies the full file text to the clipboard. Available for all text-type files.
* Delete: opens a confirmation modal: "Permanently delete "\[name]"? This cannot be undone." Confirm to delete. Deleting a file also removes its .extracted.md AI sidecar in the same operation, so stale content is fully purged from agent retrieval.
If you delete a file that is currently being written by an active agent run, you are shown two options: Stop run & Delete or Delete anyway. Use "Stop run & Delete" unless you are certain the run can be interrupted safely.
Once a file is open in the preview dialog, the header offers four actions:
* Copy path: copies the file's absolute path to the clipboard.
* Show in folder reveals the file in Finder (macOS) or Windows Explorer. This one needs the desktop app.
* Download: opens the native save-as dialog to export the file to disk.
* Save: saves the current editor content.
md
brand-voice.md
Tone of voice: direct, warm, zero filler. Short sentences win. No exclamation marks.
18 KB · company/docs/
Copy content
Delete
Reference
Limits at a glance.
10 MBmax upload size per file
100max files per drop
25 MBmax media inline preview
10 MBmax in-app save size
240chars shown in snippet preview
0archives or executables accepted, blocked unconditionally
The 10 MB upload limit is enforced by the app's validation logic. An older error string in the app reads "50 MB". That string is stale. The true limit is 10 MB, confirmed in the source.
In practice
Agents write here. You find it here.
Every artifact an agent produces lands in its outbox folder the moment the run ends. No chasing threads, no copy-pasting from chat.
"Every artifact an agent produces is sitting in Files before you ask where it went."
: the workflow, not the person
F
Felix@felix\_actionist\_bot
ONLINE
Can you pull the May monthly report and save it to Files?
09:03
SEEN · READING CONTEXT
On it. Pulling figures from the ops bucket now.
09:03
TOOL · WRITE\_FILE
Done. The report is saved at agents/felix/outbox/may-2026-report.csv: 847 rows, all reconciled. Open it from the Agents workspace anytime.
09:04
Best practices
Getting the most from Files.
Upload cross-team knowledge to Company. Company files are accessible to every agent via semantic search. Agent folders are scoped to that one agent. For runbooks, product specs, pricing tables, and anything else your whole workforce needs, upload to Company.
Snippet previews tell you what's inside. Files with extensions .md, .json, .yaml, .csv, .log, and .txt show the first 240 characters on the card. If a card shows no snippet, the file is binary or unsupported. Use Download rather than editing inline.
The Unsaved pill is your save signal. The orange Unsaved pill in the dialog header appears whenever your edits diverge from the saved version. If it is not showing, your changes are already saved.
Deleting a file purges it from the AI index. When you delete an uploaded file, its .extracted.md sidecar is deleted in the same operation. The content disappears from agent retrieval completely. If you only delete the sidecar manually, the original remains on disk.
Media files over 25 MB cannot preview inline. The 25 MB inline preview cap is enforced at the system level. For large video captures or high-resolution screenshots, click Download in the dialog header to save the file locally.
The Source mode toggle is session-sticky. Switching between Rich text and Source mode is preserved while the preview dialog is open. It resets to Rich text the next time you open any file. Use Source mode when you need to write or inspect raw Markdown. Frontmatter, fenced code blocks, or custom HTML.
Search resets when you switch workspaces. If you searched for a term in Company and then switch to Agents, the search field clears. Re-enter your query after switching.
The Live badge confirms sync is running. The pulsing live badge in the page header (tooltip: "Realtime file sync is active") confirms the event listener is running. If it disappears, click Refresh to force a full reload. Under normal conditions you should not need the Refresh button.
Desktop differences
One control needs the desktop app.
Show in folder is the only file control that depends on the desktop app. It opens the file in Finder or Windows Explorer, and a browser tab has no local folder to open. Everything else on this page, including upload, preview, and download, behaves the same wherever you are working.
Always in sync
## Your agents are already writing. Now you can see everything.
Open the Files page, upload your first document, and watch your agents draw on it in real time.
Every file lives on your machine: readable, editable, version-controllable.
Indexed on-device · Auto-synced on every agent write · Nothing leaves your workspace.
Keep going
Next steps.
Understand how memory buckets work, how agents retrieve context, and how to manage what agents remember long-term.
Configure which agents have read or write access to memory buckets. Set from the Memory tab in the agent studio.
Computer Use runs produce screenshots and session logs that land in the agent's Files folder automatically.
Scheduled agent runs write output artifacts to the Files workspace. Browse them here after each run completes.
# Getting started
Source: https://learn.actionist.ai/Folders/getting-started/index
Sign in to Actionist, meet the app, and hand your first task to an AI employee in minutes.
FIRST RUN
## Your first AI employee is one conversation away.
No passwords to create. No configuration menus to navigate. Click one button, complete sign-in in your browser, and you are describing a task to an agent who already knows how to act on it.
Step one
Open it in your browser.
Actionist runs in the browser. Sign up and you are working immediately, with nothing to install. Desktop builds exist for Mac and Windows if you would rather have an app in your dock.
Open [app.actionist.ai](https://app.actionist.ai) and sign in with email or Google. This is the full app: agents, runs, calendar, apps, and settings, all in the browser.
Prefer a native app? Grab the Mac or Windows build from the dashboard. It signs you in through your browser, so you keep the same account and the same workspace.
Nothing on this page requires the desktop app unless it says so explicitly. If a step works in the browser, it works in the browser.
Actionist
Sign in securely through your browser. You'll be redirected back here automatically.
Sign in with Browser
No password required
Step two
Watch the browser handoff live.
Actionist delegates authentication entirely to your browser. No new password. Your browser's existing session (including MFA, passkeys, and social login) does the work. The animation below shows every step as it happens.
Waiting for browser...
Sign-in page open in your default browser
Connection Successful
Navigating to Home screen...
actionist.ai / auth / desktop
browser · auth started
, Checking your session...
session found
, Creating desktop sign-in ticket...
ticket created
, Sending sign-in ticket to Actionist...
ticket delivered
desktop app · Generating secure token...
. Connection Successful
. You can close this tab.
No new password.Your browser's existing session handles everything. MFA, passkeys, and social login all carry through.
Already signed in?If the app detects your existing browser session, it skips opening the browser entirely. You land on Home without any extra steps.
5-minute timeout.If the window expires, click Cancel on the waiting screen and try again. Brave, Safari, or Firefox users may need to click a button on the auth page to complete delivery manually.
The sign-in window times out after 5 minutes. If it expires, click Cancel on the waiting screen and try again. If your browser (Brave, Safari, or Firefox) does not hand the ticket back automatically, look for a button on the authentication page and click it to complete delivery manually.
Under the hood
Six stops from click to Home.
Click button"Sign in with Browser", the app transitions to a waiting state.
Browser opensYour default browser navigates to the Actionist authentication page.
AuthenticateBrowser walks through session check, ticket creation, and delivery. You may need to confirm a social login.
Ticket deliveredThe app receives the signed ticket from the browser.
Secure token"Generating secure token...", the app finalizes authentication locally.
Home screen"Connection Successful". A brief pause, then the app navigates automatically.
Step three (macOS)
Grant macOS permissions.
When Actionist detects that macOS permissions are missing, a modal appears automatically. These two permissions are what let Actionist control apps on your behalf. Without them, automation features are unavailable.
Screen Recording
Allows Actionist to see your screen. Required for Computer Use and vision-driven automation.
Accessibility
Allows Actionist to control UI elements, required to interact with on-screen apps on your behalf.
Can skip for now
Chat, scheduling, memory, and all app integrations work immediately. Only Computer Use requires these permissions.
The permissions modal appears automatically when you land on the Home screen for the first time. It shows two rows:
| Permission | What it does |
| --------------------------------- | --------------------------------------- |
| Screen Recording | Allows Actionist to see your screen |
| Accessibility | Allows Actionist to control UI elements |
Click Grant access on each row. macOS opens System Settings to the relevant pane. Toggle the switch next to Actionist and return to the app. Once both are granted, click Continue.
Permissions required
Actionist needs access to run automations on your Mac.
Screen Recording
Allows Actionist to see your screen
Grant access
Accessibility
Allows Actionist to control UI elements
Grant access
Critical permissions required to continue
Skip for now
Continue
The modal has a "Skip for now" button. You can defer and still use the app. Chat, scheduling, and memory all work immediately. Only Computer Use and screen-based automation require these permissions.
To grant them later: open Settings from the left sidebar, navigate to Permissions, and click Grant access next to each item.
The permissions modal reappears each time you return to the Home screen until both permissions are granted. Click Skip for now to dismiss it without granting.
The workspace
Your Home screen at a glance.
Home is where every task begins. One composer, any agent, live visibility into what is running, everything without leaving the screen. Select a zone to explore it.
What should Actionist handle today?
Choose an agent, describe the result, and let Actionist run it.
Working with Maya
Ask Maya to...
Send · new line
Agents running in the background now
M
Summarize weekly digest
Maya · 2 min ago
A
Follow up with Northwind
Alex · 5 min ago
Chats
Upcoming
Search conversations...
M
Maya
Done. The digest is ready...
2m
A
Alex
Sent follow-up to Dana Voss
7m
R
Riley
Invoice #2041 escalated
1h
Today
Daily digest · Maya
17:00
Invoice chase · Riley
18:30
The composer card
The dark frosted card in the center of the screen. It is the single launch point for any task on any agent. The "Working with" pill at the top shows the current agent. Click it to switch. The textarea below shows the placeholder "Ask \[name] to…". Type your task and press Enter to send; Shift+Enter adds a new line. The gradient send button is disabled until you type something.
Clicking the pill opens the agent picker. It lists all your enabled agents. Each row shows the agent's avatar, name, and role subtitle. Click any agent to select it; the picker closes and the placeholder updates. If you have no agents yet, the picker shows "Build an agent" with the hint "Create your first agent to get started." Clicking it navigates to the Agents page.
Background agents section
Below the composer: a live section that shows every agent run currently executing in the background. A green pulsing dot in the section header means at least one agent is active right now. A dim white dot means idle; the empty state reads "No agents running in the background". Each active row shows the agent's avatar, the task name, the agent name and relative time, and a spinning green ring. The empty-state hint is: "Schedule an agent and its background runs will show up here."
Chats tab
The right sidebar has two tabs. Chats (shown with a live count badge) lists every conversation, most recent first. A search bar at the top accepts free text: "Search conversations…". The filter button opens a popover with two multi-select groups: SOURCE (Desktop / Telegram / Slack) and AGENT. Active filters show as chips below the search bar with a Clear link. Each conversation row shows the agent avatar, a small source dot, the peer label ("Me" for desktop sessions), the agent name, relative time, and a two-line message preview. Clicking a row reopens that conversation in a floating chat window.
The Chats tab is a record, not a launcher. Clicking a row reopens an existing conversation. It does not start a new one. To start fresh, use the composer and send a new task.
Upcoming tab
The Upcoming tab (with its own count badge) shows every scheduled agent run within the next 60 days, grouped into TODAY, TOMORROW, and LATER. A TRIGGERS section appears when trigger-based schedules are active. Times come from the calendar-events API so they reflect per-occurrence accuracy. Not the raw schedule definition. If nothing is scheduled yet, the tab shows "Nothing scheduled."
Runs scheduled beyond 60 days are not shown until they move inside that window.
In the wild
Thirty seconds to your first result.
Sam runs his solo business from a single inbox. Here is exactly what happened the first time he typed a task.
S
Sam@sam\_actionist\_bot
ONLINE
Triage my inbox. Flag anything urgent, archive newsletters, and give me a summary of what needs a reply today.
09:07
SEEN · READING CONTEXT
TOOL · LIST\_EMAILS
Scanned 34 unread emails. Found 3 that need a reply today, archived 11 newsletters, and flagged 1 message from your accountant as urgent.
09:07
TOOL · APPLY\_LABELS
Reply today: Northwind contract (due Friday), investor update request, and a support escalation from Priya's team. Urgent: Q2 invoice from your accountant needs approval before end of day.
09:08
This is the whole loop in sixty seconds. Follow it once and the rest of the app makes sense.
Home
Working with Maya
Summarize the three most recent items in our Slack #announcements channel and draft a short email I can send to the team.
tool · mcp\_slack\_list\_messages
mayaReading #announcements... found 3 recent posts.
tool · mcp\_slack\_get\_message ×3
mayaSummarized. Drafting your email now.
mayaSubject: Team announcements, this week
mayaThree highlights attached. Ready to send or edit.
Task complete, conversation saved to Chats
Home loads with the heading "What should Actionist handle today?" and the subtitle "Choose an agent, describe the result, and let Actionist run it." The composer card is centered below.
Look at the "Working with" pill at the top of the composer. If the right agent is already selected, skip this step. If not, click the pill, find your agent in the dropdown, and click it. The textarea placeholder updates to "Ask \[name] to…".
Only enabled agents appear in the picker. If an agent you expect is missing, open Agents in the left sidebar and check whether it has been disabled.
Click inside the textarea and type what you want the agent to do. Be direct: describe the outcome, not the steps. For example:
> *"Summarize the three most recent items in our Slack #announcements channel and draft a short email I can send to the team."*
Use Shift+Enter to add a new line if your task needs more than one sentence.
Press Enter (or click the gradient send button). The textarea clears and a floating chat window opens beside the Home screen, showing your agent's response building in real time.
While the agent runs, the BackgroundAgentsSection shows it as an active row: green pulsing dot, spinning ring, task name. When the run finishes, the section returns to idle.
Every task you send creates a permanent record. Open the Chats tab in the right sidebar to find it. Search or filter by source or agent whenever your history grows.
You have sent your first task. The agent handled the work; the conversation is saved; the app is ready for the next one.
What comes next
Your first week, handed off.
Most new users hand off the same handful of recurring chores in their first few days. Here is a typical tally.
Follow-up drafts after sales calls (4)saves \~12 min each
Weekly status summary to teamsaves \~30 min/week
Typical first-week total\~4 hrs reclaimed
ILLUSTRATIVE, BASED ON THE TASKS DESCRIBED ON THIS PAGE
First launch
Pip walks you through setup.
On your first launch, a floating assistant called Pip appears and guides you through a five-turn setup wizard. Answer each prompt and you will have a working agent set configured before your first task.
Pip · setup wizard
pip · first launch
pipHi. I'm Pip. Let's get your workspace ready. What's your company name?
youNorthwind Trading
pipGot it. Want me to create a starter set: a receptionist, a support agent, and an executive assistant?
youYes please.
pipDone. 3 agents created. Want to connect Telegram or Slack so they can reach you outside the app?
pipYou're all set. Tap the composer to send your first task.
1. Your company name.
2. Whether to create a starter agent set: a receptionist, a customer-support agent, and an executive assistant.
3. Whether to connect Telegram or Slack so agents can reach you outside the app.
4. Your preference for proactive nudges.
5. A brief tip and a "Got it" to finish.
A named workspace, up to three pre-configured starter agents, and optionally a messaging channel connected, all before you type a single prompt. Skip any step and configure it manually later.
If you arrived at Actionist through the demo at demo.actionist.ai, your personalised context from that session is applied automatically after sign-in.
Good to know
Things that trip people up first.
The agent picker only shows enabled agents. If an agent you created is missing from the list, navigate to Agents in the left sidebar and look for a disabled toggle next to its name. Re-enable it and it will appear in the picker immediately.
The sidebar width (default 300 px, drag to resize between 240 px and 420 px) is session-only. It is not saved when the app closes. Drag the resize handle to your preferred width each session. This is expected behavior.
That is intentional. The Chats tab is a history viewer, clicking a row reopens the existing conversation thread. To start a fresh task with the same agent, go back to the composer, type your new task, and send it. A new conversation is created automatically.
The green pulsing dot in the BackgroundAgentsSection header is your ambient signal. Green and glowing = at least one agent is running right now. Dim white = nothing is active. You do not need to open any other panel to check.
The conversation filter uses AND logic across the two groups (Source and Agent) and OR logic within each group. Selecting "Telegram" under Source and "Alice" under Agent shows only Alice's Telegram conversations, not all Telegram conversations and not all Alice conversations. To clear filters, click the Clear link that appears below the search bar.
Skipping macOS permissions at first launch is fine. Chat, scheduling, memory, and all app integrations work immediately without them. The only features that require Screen Recording and Accessibility are Computer Use (vision-driven screen automation). The permissions modal reappears each time you visit the Home screen until both are granted. You can also grant them any time from Settings → Permissions.
You're set up
## Now put them to work.
Describe the task. Actionist runs it while you move on.
No passwords. No configuration menus. One click, one browser window, you're in.
Runs in your browser · Desktop builds optional · Permissions always skippable
Keep going
Next steps.
Build, configure, and supervise AI employees, the full studio guide from identity to approval modes.
Put agents on a recurring schedule so they show up to work without anyone asking.
Connect Telegram or Slack so your agents respond where your team already is.
Browse the integration catalog: Slack, Notion, Linear, GitHub, HubSpot, Stripe, and more.
# Marketplace
Source: https://learn.actionist.ai/Folders/marketplace/index
Browse, install, and publish agents, skills, and MCP servers. One install resolves every dependency (skills, MCP servers, and credentials) automatically.
ONE INSTALL
## The whole community's work, behind one click.
The Marketplace holds production-ready agents, reusable skills, and community MCP servers. Install a complex agent and Actionist resolves every dependency before the first run.
What is inside
Three things you can install.
Each kind has its own tab. Browse them independently, or install an agent that brings its skills and MCP servers along automatically. Pick a kind to see a live listing card with its real badge types.
Agents: production-ready agents that do real work: triage tickets, review PRs, draft digests. Skills and MCPs travel with them as resolved dependencies.
Skills: reusable knowledge units: style guides, rubrics, templates. Install once and drop them into any agent in your workspace.
MCP Servers: connectors to the tools your work already lives in. Install once, wire your secrets, done.
A
PR Review Agent
Hot
Reviews GitHub pull requests for logic errors, style violations, and missing tests. Posts inline comments and a summary block.
12,480 installsInstalledUpdate
Open
A
Weekly Digest Agent
New
Compiles a weekly activity digest from Slack, email, and your calendar. Sends it every Friday at 17:00.
341 installs
Install
Hot high install countNew published within 14 daysUpdate newer version availableInstalled already in your workspace
S
Email Summarise
HotInstalled
Groups unread email by sender, ranks by urgency, returns one-sentence summaries. Never marks messages as read.
9,120 installs
Open
S
Competitor Brief
New
Researches a named company and returns a structured brief: overview, news, positioning, pricing signals, and customer segments.
218 installs
Install
Hot high install countNew published within 14 daysUpdate newer version availableInstalled already in your workspace
M
GitHub MCP
HotInstalled
Reads and writes GitHub issues, pull requests, and comments. Requires a Personal Access Token with repo scope.
21,340 installsUpdate
Open
M
Notion MCP
New
Read and write Notion pages and databases. Needs an Integration Token from your Notion workspace settings.
1,847 installs
Install
Hot high install countNew published within 14 daysUpdate newer version availableInstalled already in your workspace
Marketplace · Agents
Search apps, agents, skills, MCPs...
Agents 284Skills 139MCP Servers 97
Editor's Pick
PR Review Agent
Reviews GitHub pull requests for logic errors, style violations, and missing tests.
InstallOpen
Trending this week
1GitHub MCP21,340 installs
2PR Review Agent12,480 installs
3Email Summarise9,120 installs
Browse by category
Productivity
Development
Design
Research
Marketing
Operations
Getting around
What you see when you open Market.
Click Market in the left sidebar. The page title reads Marketplace and opens on the Agents tab. Here is how the page is laid out.
Three tabs run across the top: Agents, Skills, and MCP Servers. Each shows a live item count. Click a tab to switch. If the listing is less than 30 seconds old it switches instantly without a spinner.
Below the tabs, an Editor's pick banner spotlights one curated listing with a direct Install or Open button. When you activate a search or filter, the banner switches to a stats view showing Available / Installs / Categories / Yours counts.
Three cards ranked 1-3 by install count. A fast read on what the community is using most right now.
Up to 12 category tiles drawn from the current listings. Click any tile to narrow the card grid to that category. The same 12-tile cap applies on the Skills and MCP Servers tabs.
The left sidebar has single-select Category pills and multi-select Tags pills (up to 16 tags shown, ranked by frequency). The toolbar above the card grid has All / Installed / Updates tabs and a sort dropdown: Most installed (default) or Newest. The 16-tag cap and 50-items-per-page limit apply on all three tabs.
Type in the top search bar (the label reads "Search apps, agents, skills, MCPs..."). Results update after a short pause. The hero switches to the stats view while a search is active.
Cards carry status badges: Hot (high install count), New (recently published), Update (a newer version is available), and Installed (already in your workspace). Use the Updates tab in the toolbar to find everything you can upgrade in one place.
How an agent install works
Every dependency, resolved before the first run.
When an agent requires skills or MCP servers, the Install plan drawer lists every dependency and what needs to happen. Each row carries a state: nothing to do, already have it, will install silently, or needs credentials from you.
Install plan: PR Review Agent
4 dependencies
3 ready
agent-browser
Bundled with Actionist. Always present, cannot be toggled off.
Built-in
email-summarise
Skill already installed. The agent will use your existing version.
Have
code-review
Skill not yet in your workspace. Will be downloaded and installed automatically.
Install
github-mcp
MCP server requires GITHUB\_TOKEN. Paste a value or pick a saved credential. Install is blocked until this field is complete.
Setup
Ready to install: 1 field remaining
Install 2 items
One confirm, everything lands. Skills download silently in the background. You only fill in fields for MCP servers that need credentials.
Install is blocked until all Setup rows are complete. The Install button stays disabled until every required env-var field has a value.
Installing works in the web app. The Install button is live in the browser. There is no desktop requirement and no desktop-required overlay.
Installation
Installing agents, skills, and MCP servers.
Each kind has a slightly different install path. Select the tab for the kind you are working with.
Agent installs fall into two paths: quick install for agents with no dependencies, and the Install plan drawer for agents that require skills or MCP servers.
On the Agents tab, locate the agent and click Install on the card.
If the agent has no skill or MCP requirements, it installs directly from the card. The badge changes to Installed and no drawer opens. This is expected and not a sign that something is missing.
If the agent requires skills or MCP servers, the Install plan drawer opens on the right. It lists every dependency and what needs to happen before the agent can run. Review each row, fill any required env-var fields, and click Install.
When the install finishes, click Open in the success state to go straight to the agent in the studio.
Installing works in the web app. Open the Marketplace in your browser, click Install, and the agent lands in your workspace. No desktop install is involved.
Skills install with a single click. No configuration drawer, no secrets to fill in.
Click Skills in the Marketplace kind strip.
Click Install on the skill card. Actionist downloads the skill package, verifies its integrity, and unpacks it into your workspace.
The skill is now available in your workspace. Open any agent in the studio, go to the Skills tab, and toggle the skill on for that agent.
The card badge updates to Installed and the listing refreshes immediately after install.
MCP servers require configuration before they can run, usually API keys or endpoint URLs.
**Before you start.** Save the credentials this server needs in Settings → Credentials first. The install drawer offers a Use a saved credential picker next to each secret field, and one vault entry can back several servers. Without a saved credential you have to paste raw values into every install.
Click MCP Servers in the kind strip. Click through to a card's detail page to review the full env-var table with Required, Optional, and Secret tags and the transport type before installing.
Click Install on the card. A configuration drawer opens. You can also click through to the detail page first to review the full env-var table with Required / Optional / Secret tags before committing.
Required env-var fields must be completed before install proceeds. For secret fields (API keys and tokens), paste a raw value or click Use a saved credential to bind a vault credential stored in Settings → Credentials.
The MCP server is configured and available for agents to use.
Rotate a credential once in the vault and every server bound to it picks up the new value.
Install plan: Daily Standup Agent
4 dependencies
agent-browserBundled with Actionist
Built-in
email-summariseSkill already installed
Have
code-reviewWill be downloaded and installed automatically
Install
github-mcpMCP server requires GITHUB\_TOKEN
ghp\_••••••••••••••••
Use a saved credential
Setup
Ready to install: 1 field remaining
Install 3 items
Install plan
Understanding the Install plan drawer.
Every row in the Install plan drawer carries a state badge. Here is what each one means and what action (if any) you need to take.
Built-in
The dependency is bundled with the agent and will be present after install without any action on your part.
Have
This skill or MCP server is already in your workspace. The agent will use your existing install. No action required.
Install
A skill that is not yet in your workspace. It will be downloaded and installed automatically when you confirm the plan. No extra input needed.
Setup
An MCP server that requires env vars before it can run. Fill the required fields inline in the drawer, or click Use a saved credential to bind a vault credential. The Install button stays disabled until all required fields are complete.
Mismatch
The agent needs a different version of a dependency than the one currently in your workspace. The drawer defaults to switching to the agent's required version. If other agents depend on your current version, toggle the row to keep your existing version instead before confirming.
ConflictUnavailableConflict means two agents in your workspace require incompatible versions of the same dependency. You must choose which version to keep before the install can proceed.
Unavailable means the dependency cannot be resolved. The listing may have been removed or the version is no longer published. Install is blocked until this is resolved.
If any dependency ends up in a partial-failure state after install, the panel stays open and shows a Retry button next to each failed row. The full hint reads: "Some dependencies failed to materialize. Click Retry next to each failed row above, or leave the panel and retry from the Skills or MCP tab." Close the panel and retry the individual skill or MCP server from its own tab when ready.
Configure: GitHub MCP
Fill required fields before installing
GITHUB\_TOKEN
SecretRequired
ghp\_••••••••••••••••
Use a saved credential
github-pat-prod
github-pat-staging
GITHUB\_API\_URL
Optional
[https://api.github.com](https://api.github.com)
Install
How a single install resolves everything.
Card clickYou click Install on an agent card. Actionist reads its dependency manifest.
Dependency scanEvery required skill and MCP server is checked against your workspace.
Install planHave / Install / Setup / Built-in rows are assembled and shown in the drawer.
ConfirmYou fill any Setup fields and click Install. Missing items download in parallel.
Agent readyEvery dependency is present. Click Open to go straight to the studio.
Time to value
Live in minutes, not hours.
One install and every dependency lands automatically. Here is how quickly three different users went from the Marketplace to a working agent.
Omar · Agency owner
Omar opens the Marketplace for a new client workspace, finds the Weekly Digest Agent, clicks Install, and fills in one Slack credential in the Install plan drawer. The agent starts compiling cross-channel activity summaries on the same day: no manual wiring, no custom prompt work.
live in 8 min
June · E-commerce founder
June installs the Email Summarise skill from the Skills tab with a single click. No drawer, no credentials required. She opens her support agent in the studio, toggles the skill on under the Skills tab, and the agent immediately starts grouping unread messages by sender and urgency before she replies.
live in 4 min
Sam · Solo founder
Sam installs the Notion MCP server from the MCP Servers tab. The configure drawer opens with one required field: an Integration Token from Notion workspace settings. Sam pastes a saved credential from the vault picker, clicks Install, and every agent in the workspace can now read and write Notion pages.
live in 6 min
Publishing
Share your work with the community.
Agents, skills, and MCP servers each have their own publish path. Published items appear in the Marketplace once they pass review.
Before you start, every skill and MCP server the agent depends on must already have an active, approved marketplace listing.
If your agent uses a skill or MCP server that is not yet published, the publish action is blocked with: "Your agent uses custom content that isn't on the marketplace yet. Subscribers can't install your agent until each one has a live listing." Publish the missing dependencies first, then return here.
In the sidebar, open Agents and click the agent you want to publish.
Click Publish to Marketplace in the Agent Studio, or go to My Submissions and choose Submit an agent from the submit menu.
The Submit to marketplace modal walks through three steps. Step 2 is where you fill the listing details:
* Name: how it appears in the listing.
* Short description: one punchy sentence, maximum 160 characters.
* Category: Productivity, Developer, Marketing, Finance, Data & Analytics, Communication, or Other.
* Tags: optional; helps with discovery.
* Version: the release version string.
Step 3 shows a summary. Confirm and submit. The modal closes with "Submitted for review". Track the status in My Submissions.
Skills use a dedicated publish flow initiated from the Skills page, not the Submit modal.
In the sidebar, open Skills and find the skill you want to publish.
From the skill's detail view or the Skills page actions menu, click Publish to Marketplace.
The main process compresses your skill folder, checks the file sizes against the limits below, computes a checksum, and uploads the package. If any limit is exceeded, publish is aborted. Fix the overage and resubmit.
| Component | Limit |
| -------------------------- | ------ |
| Total package (compressed) | 5 MB |
| SKILL.md | 256 KB |
| Each resource file | 128 KB |
On success, the skill status shows Pending review. Once approved it changes to Published and becomes discoverable. If rejected, the status shows Rejected. Address the feedback and resubmit using the resubmit flow.
The 5 MB limit is on the compressed package, not the uncompressed folder. Keep each resource file under 128 KB and SKILL.md under 256 KB. Both are checked individually before the overall size limit.
MCP server publishing happens from the Integrations page, not from the Marketplace UI.
**Before you start.** You can only publish a custom server that you added yourself. Catalogue servers cannot be republished, and the publish option does not appear in their drawer.
In the sidebar, open MCP Servers (under Integrations). Click the custom MCP server you want to publish to open its detail drawer.
This option appears in the drawer for custom servers you have added yourself.
The publish dialog shows exactly which env and header keys will be converted to requiredEnvVars declarations (the fields installers must supply). Keys whose names contain TOKEN, KEY, SECRET, PASSWORD, CREDENTIAL, PRIVATE, API\_KEY, or similar patterns are stripped from the published config.
Review the list before confirming. If a key holds a credential but its name does not match the pattern, rename the key to include TOKEN, KEY, or SECRET so it is stripped correctly before you submit.
Confirm the dialog. The server is submitted for review. Track its status in My Submissions.
123Step 2 of 3 · Listing details
Name
PR Review Agent
Short description 83 / 160
Reviews GitHub PRs for logic errors, style violations, and missing tests. Posts inline comments and a summary block.
Category
Developer
Productivity
Marketing
Finance
Data & Analytics
Communication
Other
Tags
githubcode-review+ Add tag
My Submissions
Track everything you have submitted.
My Submissions is where you monitor the review status, install counts, and ratings for every item you have published or submitted for review.
Agent
PR Review Agent
Submitted Jun 4, 2026
Pending review
Skill
email-summarise
9,120 installs · 4.8 rating
Published
MCP
internal-db-mcp
Submitted May 29, 2026
Rejected
Click My submissions in the Marketplace top bar, or click the My Submissions pill in the kind strip (the list icon at the right of the Agents / Skills / MCP Servers tabs). The page is at /marketplace/submissions.
Each submitted item shows one of three status badges:
* Pending review: submitted and awaiting moderation.
* Published: live in the Marketplace and discoverable by all users.
* Rejected: not approved; address the feedback and resubmit.
Published items show install counts and ratings. Use these to understand which listings gain traction and where a refreshed description or a new version might help.
Each item links directly to its detail page at /marketplace/submissions/agent/:id, /marketplace/submissions/skill/:id, or /marketplace/submissions/mcp-server/:id.
WorkflowsAgentsSkillsMCP
A
PR Review Agent
Reviews GitHub pull requests for logic errors, style violations, and missing tests.
0 installs
Pending review
S
email-summarise
Groups unread email by sender, ranks by urgency, returns one-sentence summaries.
9,120 installs · 4.8 rating
Published
Tips that save time.
Check the Skills tab before authoring a new skill. Marketplace skills receive automatic version updates and already satisfy the dependency check when you later publish an agent that uses them. A maintained community skill beats one you have to keep current yourself.
Create your API credentials in Settings → Credentials before opening any MCP install drawer. The Use a saved credential picker appears next to each secret field. One vault entry backs multiple MCP servers. Rotate it once and all consumers update without any re-configuration.
When an agent needs a different version of an MCP server you already have, the Install plan drawer defaults to switching to the required version. If other agents depend on your current version, toggle Keep my version per row before clicking Install.
Every skill and MCP server an agent uses must have an active, approved marketplace listing before the agent itself can be published. If publish is blocked, publish the missing skill or MCP server first, wait for its status to reach Published, then return to publish the agent.
The 5 MB limit is on the compressed tar.gz, not the uncompressed folder. Check each resource file is under 128 KB and that SKILL.md is under 256 KB. Both are checked individually before the overall size limit. Large reference images and data files are the most common cause of publish failures.
The Short description field has a 160-character cap. One clear sentence covering the "what" and "for whom" is more effective than a truncated paragraph. The full detail page has no length limit for a longer description.
The sort dropdown offers Most installed and Newest only. Use Most installed as the quality signal when choosing between similar listings.
One install away
## Your next agent is one install away.
Open the Marketplace, find an agent built for your use case, and let Actionist resolve every dependency before the first run.
Every install resolves automatically: skills, MCP servers, and credentials in one confirm.
Works in the web app · Vault-backed secrets · Automatic version updates.
Keep going
Next steps.
Author, publish, and manage reusable behavior packs for your agents.
Build the agent you want to publish, or one that uses the skills you just installed.
Install and configure MCP servers, manage transports, and browse the full integration catalog.
Store API keys and tokens in the vault before opening any MCP install drawer.
# MCP servers
Source: https://learn.actionist.ai/Folders/mcp/index
Install, configure, and manage Model Context Protocol servers. The open standard that gives every agent access to real external tools.
OPEN STANDARD
## One install. Every agent gets the tool.
MCP (the Model Context Protocol) is the open standard that lets agents call external apps and services as if they were built-in tools. Connect a server once and every agent in your workspace can use it. No per-agent wiring, no API wrapper code, no secrets sitting on disk unprotected.
How it works at runtime
Watch an agent discover and call a tool.
Agents never hardcode tool names. They search the live catalog, read the description, and call the right tool. Lazy discovery means you can add a new MCP server and agents find its tools automatically, no prompt-editing required.
chat · maya · "post a Slack update about the deploy"
tool · search\_mcp\_tools · "send slack message"
result3 tools matched in the connected MCP catalog:
slack\_post\_messagePost a message to a Slack channel or DM
slack\_post\_thread\_replyReply inside an existing Slack thread
slack\_update\_messageEdit a message you previously posted
mayaPosted to #deploys: "v2.4.1 is live — rollout complete, no errors in the first 5 min window."
Lazy discovery. Agents call search\_mcp\_tools at runtime. They never need a hardcoded list of tool names. Add a server and it is automatically findable.
Describe before calling.describe\_mcp\_tool fetches the full schema for a specific tool (required parameters, types, and OAuth scopes) so the agent calls it correctly the first time.
One server, every agent. The Slack server was installed once at the workspace level. Maya found and called it without any per-agent setup.
Real unlocks
What one server connection unlocks.
Install a server, authorize once, and your agents can act on live data the same hour: no integration code, no export pipeline.
Dario · Sales
Connects the Linear MCP server. His standup agent queries open issues, pulls cycle progress, and posts a 10-line digest to Slack before the 09:00 call, without Dario touching the board.
saves \~25 min/day
June · E-commerce
Connects the Stripe MCP server. Her support agent looks up payment intent status and charge history mid-chat, so refund decisions happen in the same conversation, no dashboard tab-switching.
live in 10 min
Sam · Solo founder
Connects the Notion MCP server. After each call, his meeting agent writes a structured note (attendees, decisions, next actions) directly into the right Notion database page, filed and linked before Sam closes the window.
saves \~3 hrs/wk
Your agents act on your live tools, not on a stale copy of your data exported last Tuesday.
MCP design principle · every tool call reaches the real system
Live health
Reading the status dots.
Every server in the installed strip shows a live dot. Actionist polls connection state every 2 seconds after any change, for up to 5 minutes, so the dot reflects real runtime state, not a stale cache. The pulse behavior itself signals urgency.
Connected
The server is running and its tools are available to agents. Steady, no pulse needed.
no action required
Connecting...
Actionist is spinning up or negotiating the connection. Wait. It will resolve to Connected or Error.
wait a moment
Needs auth
The OAuth token is missing or expired. Open the drawer and click Connect to start a fresh PKCE flow, no reinstall.
click Connect in drawer
Disabled
You or a policy turned the server off. Its tools are hidden from agents. Toggle it back on to reconnect without re-entering credentials.
toggle on in drawer
Error
The server process exited or returned an error. Open the drawer to read the error message, then reconnect or edit the config.
read error in drawer
Actionist · MCP drawer · Needs auth
SlackNeeds auth
Post messages, manage channels, and read workspace data. Requires OAuth, sign in to authorise Actionist.
Status
Needs auth, OAuth token missing or expired
Edit configConnect
Mock illustration, replace with the real screenshot when available.
Transports
Three ways a server connects.
Every MCP server communicates over one of three transports. Actionist handles all three. The transport determines where the server runs and how Actionist reaches it.
STDIO
Transport STDIO, Actionist spawns the server as a child process on your machine
Commanduvx
Argumentsmcp-server-filesystem /Users/me/data
Env varsWORKSPACE\_ROOT=/Users/me/data
When to use: Any server packaged as a CLI binary: Python-based servers via uvx, Node-based via npx, Go binaries, and custom scripts. The server process lives on your machine; Actionist communicates over its stdin/stdout. Needs a runtime dependency (uv, node, etc.). See Dependency management below.
HTTP
Transport HTTP. Actionist sends JSON-RPC requests to a remote URL
When to use: Hosted MCP servers: your own backend, a team-shared service, or any third-party endpoint that speaks the MCP HTTP transport. No local runtime needed. Credentials go through the vault. Check the Secret checkbox for the token and select Authorization Bearer as the Project-as transform.
SSE
Transport SSE. Actionist keeps a persistent event-stream connection open
When to use: Servers that push state changes to the agent: live data feeds, notification bridges, streaming workflows. The connection stays open; Actionist auto-reconnects with exponential back-off if the stream drops. Credentials are vaulted identically to HTTP.
Navigation
Where to find it.
MCP management lives inside the Apps section. Follow the path below to get there.
Left sidebarclickApps tabclick MCPs sub-tabMCPs page · /apps/mcps
At the top of the page, the installed strip shows every server you have added with a colored status dot. Below it, the Bundled tab is active by default. This is the live catalog managed by Actionist. The Custom tab shows servers you have added yourself.
Search the catalog using the bar labeled "Search MCPs by name, description, tags". Sort results by Relevance, Most installed, Highest rated, or Newest. To browse the full community collection, click Explore Marketplace.
Install flow
Install from the catalog.
The steps below follow a Slack installation (an OAuth server) as the example. Servers that do not require OAuth skip steps 5–6.
**Before you start.** Most servers need a credential, usually an API key or a token. Save it in Settings → Credentials first so you can pick it during install instead of pasting a raw value. Servers that use OAuth instead will ask you to authorize in a browser window partway through.
Click Apps in the left sidebar, then click the MCPs sub-tab at the top of the panel.
In the Bundled catalog, type in the search bar or browse by category. Click a server card to open its drawer.
Click Install in the drawer. If the server needs a local runtime (e.g., `uv` for a Python-based server), Actionist checks for it. See [Dependency management](#dependency-management-for-local-servers) below.
If the server has required fields (environment variables, API base URLs), the Configure modal appears automatically. Fill in the fields and click Save.
OAuth-protected servers show an orange Needs auth dot after install. Click Connect in the drawer. Actionist opens your default browser for the OAuth PKCE flow. Authorize the app and return. The token saves automatically.
Once authorized, the status dot turns green and shows Connected. The server's tools are now available to every agent in your workspace.
Actionist · Apps · MCPs · /apps/mcps
Installed
SlackConnected · 14 tools
LinearNeeds auth
FilesystemDisabled
BundledCustom
Explore Marketplace
Search MCPs by name, description, tags
GitHubVersion control
NotionKnowledge
JiraProject mgmt
StripePayments
PostgresDatabase
FigmaDesign
Mock illustration, replace with the real screenshot when available.
Custom servers
Add your own server.
Click Add custom MCP on the MCPs page. The modal opens with two input modes. Pick the one that fits your situation.
Use the Form view when you are configuring a server from scratch. Every field has its own labeled input.
Click Add custom MCP on the MCPs page. The Add custom MCP server modal opens showing the Form view by default.
Enter a Name (e.g., "Internal KB") and a short Description so you know what this server exposes later.
Select STDIO, HTTP, or SSE. For a local subprocess, choose STDIO and fill in the Command (e.g., `uvx`) and Arguments (e.g., `mcp-server-filesystem /data`).
In the Credentials section, add any environment variables the server needs. For API keys and tokens, check the Secret checkbox next to each sensitive value. See [Secret credentials and the vault](#secret-credentials-and-the-vault) below.
Click Test. Actionist spins up a temporary connection and shows "Connected · N tools" on success, or an error banner if something is wrong. Nothing is saved until you confirm.
Click Add server. The server appears in the installed strip and its tools are immediately available to agents.
Use the JSON view when you have an existing MCP server config. For example, one already set up in another MCP client.
Click JSON in the modal header. The input area changes to a code editor.
Paste a standard mcp-server format JSON object. The modal auto-detects the format and shows a green "Detected config" banner when it recognizes a valid shape.
Click Test to verify the connection, then click Add server to commit.
This is the fastest way to bring over servers you already have running elsewhere. Paste once and you're done.
Actionist · Add custom MCP server · Form view
FormJSON
Name
Internal KB
Transport
STDIO
Command
uvx
Arguments
mcp-server-filesystem /data
Credentials
API\_KEYsk-••••••••
Secret
TestAdd server
Mock illustration, replace with the real screenshot when available.
Security
Secret credentials and the vault.
Every credential field in the Add Custom modal has a Secret checkbox. When you check it, Actionist routes the value through the credentials vault. It never lands in mcp-servers.json as plaintext. Unchecked values are stored verbatim on disk.
Always mark API keys, tokens, and passwords as Secret before saving. Unchecked values are written to `mcp-servers.json` in plain text. If you saved a key without checking Secret, rotate it and re-save with Secret checked.
Once a value is vaulted, you can rotate it from Settings → Credentials Vault and every MCP server bound to that credential picks up the new value automatically, no per-server edit required.
Secret checkboxYou mark a credential field as Secret in the Add Custom modal.
Vault entryThe value is stored encrypted in Settings → Credentials Vault. Never in mcp-servers.json.
Project-asYou choose how the vault injects the secret: env var, Bearer header, custom header, or JSON wrapper.
Runtime injectAt spawn time the real value is injected silently. Rotate in the vault once; every bound server updates.
Project-as transforms
After marking a credential as Secret, choose how Actionist injects it into the server process using the Project as dropdown:
DirectDirect (default)
The raw credential value is passed as-is, as an environment variable or inline in the command. Use this for servers that accept the token directly.
BearerAuthorization Bearer
Wraps the value in an Authorization: Bearer \ header at spawn time. Use for HTTP/SSE servers expecting a standard Bearer auth header.
CustomHeader custom
Define a custom header name and value template. Use when the downstream server expects a non-standard auth header (e.g., X-Api-Key: \).
JSONEnv JSON wrapper
Wraps the credential in a JSON object and injects it as a single environment variable. Useful for servers that accept a structured JSON blob as their auth config.
Manage
Managing installed servers.
Click any server in the installed strip to open its drawer. From there you can inspect it, adjust it, or remove it.
Actionist · MCP drawer · Connected
GitHubConnected · 8 tools
Interact with GitHub repos, issues, pull requests, and actions from any agent.
Discovered tools
github\_create\_issue
github\_list\_pull\_requests
github\_merge\_pull\_request
github\_get\_file\_contents
github\_search\_code
DisconnectEdit config
Mock illustration, replace with the real screenshot when available.
If a server shows Needs auth (orange) or Error with an authentication cause, you do not need to uninstall and reinstall. Open the drawer and click Connect (or Reconnect if shown). Actionist restarts the PKCE OAuth flow in your browser and overwrites the stale token. The status dot returns to green once you authorize.
Disable (toggle in the drawer) stops the server process and hides all its tools from agents, without deleting any config or credentials. Toggle it back on to reconnect instantly. Use this when you want to temporarily pause an integration.
Uninstall removes the server. The behavior differs by server type. See the table below.
The uninstall action means something different depending on where the server came from:
| Server type | What happens on uninstall |
| --------------- | -------------------------------------------------------------------------------------------------------------- |
| **Bundled** | Cannot be removed. Disabling is the only option. It stops the connection and hides its tools until re-enabled. |
| **Custom** | The server's entry in `mcp-servers.json` is deleted. This is not reversible from the dialog. |
| **Marketplace** | Ends the marketplace subscription and removes the local config. You can reinstall any time from the catalog. |
Click Edit config in the drawer to update a custom server's command, URL, environment variables, or credentials without removing it. After reconnecting, the Discovered tools section lists every tool the server exposed, so you can verify the connection picked up what you expected.
From any custom server's drawer, click Publish to submit it to the community marketplace. This makes it available for other Actionist users to install from the catalog.
Runtimes
Dependency management for local servers.
STDIO servers run as local subprocesses and need a runtime on your machine. Actionist checks for the required runtime before connecting, and for some runtimes, it can install them for you.
If a server needs `uv`, `uvx`, `deno`, `bun`, or `bunx` and those are not present, Actionist shows the DependencyInstallModal with an install button and a live log tail inside the app.
Click Install on a catalog server. If the required runtime is missing, the DependencyInstallModal opens showing the runtime name and an Install button.
Click Install. The modal tails the install logs live. You can watch the runtime download and configure without leaving the app.
Once the install completes, Actionist proceeds to connect the server. No terminal required.
Actionist · DependencyInstallModal · uv
Runtime required: uv
This server requires the uv Python package manager. Actionist can install it for you, no terminal needed.
Checking for uv on PATH...Not found. Starting install...Downloading uv 0.4.18 for darwin-arm64...Extracting archive...Successfully installed uv 0.4.18
Install
Mock illustration, replace with the real screenshot when available.
If a server needs `npx` or `node`, Actionist cannot auto-install them. The DependencyGuidanceModal opens with platform-specific instructions for installing Node.js manually.
The modal shows the steps for your platform (macOS, Windows, or Linux). Install Node.js from the official site or via a version manager.
Once Node.js is installed, return to the modal and click Recheck. Actionist re-runs the dependency check and proceeds if the runtime is found.
This applies to `npx` and `node` only. For `uv`, `uvx`, `deno`, `bun`, and `bunx`, Actionist handles the install in-app, no manual steps needed.
The idea
A single plug for the whole internet.
Instead of writing hard-coded integrations, Actionist connects to MCP servers. The growing catalog means new integrations arrive without waiting for an app update. Agents make no distinction between a native Actionist action and an MCP tool at runtime.
One install, whole workspace
Connect a server once and every agent you have can call its tools. No per-agent configuration, no duplicated credentials.
No API wrapper code
Instead of writing HTTP client code for each service, Actionist connects to MCP servers and agents call their tools through the standard protocol.
Vault-backed credentials
API keys and OAuth tokens are encrypted at rest in the vault. Rotate once in Settings; every bound server picks up the new value silently.
Lazy discovery
Agents search the tool catalog at runtime. Add a new server and its tools are findable without rewriting a single agent instruction.
Scoped per agent
Tools from all connected servers are available by default, but the Agent Studio Tools tab lets you restrict which servers each agent is allowed to use.
Open standard
MCP is an open protocol. Any conformant server works with Actionist: community, enterprise, or your own.
Browsing the catalog and connecting a catalog server both work in the web app. Adding a custom server, where you supply your own command or URL, is not available in the browser yet.
States and controls
Configured is not the same as connected.
A server can be saved, connected, and still expose nothing. These three states look similar in a list and need different fixes.
| What you see | What it means | What to do next |
| ------------------------------ | ------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| Saved, not connected | The config exists but no connection has been established. | Open the drawer and connect. A server in this state gives agents no tools. |
| Needs auth | An OAuth server has no valid token, or the token was revoked. | Click Connect or Reconnect in the drawer. Do not uninstall first. |
| Connected, no tools discovered | The connection succeeded but the server exposed nothing. | Usually a scope or configuration problem on the server side rather than an Actionist one. Check the credential has the scopes the server needs. |
| Connected, with a tool count | Working. Agents can find and call those tools. | Nothing. Restrict which agents may use it from the Agent Studio Tools tab if needed. |
| Error | The connection was attempted and failed. | Use **Test** to see the failure without saving. Bad URLs, wrong command flags, and missing required env vars all land here. |
A tool count of zero on a connected server is the state most often mistaken for a bug. The connection is fine. The server simply did not advertise any tools with the credentials it was given.
Best practices
Tips that save time.
In the Credentials section, check the Secret checkbox next to every API key, token, or password. Checked values go to the vault; unchecked values land on disk as plaintext in mcp-servers.json. If you saved a key without checking Secret, rotate the credential and re-save with the checkbox checked.
The Test button spins up a temporary connection and lists the discovered tools without writing anything to mcp-servers.json. Use it to catch bad URLs, wrong command flags, or missing required env vars before committing. If you see "Connected · N tools," you know the server is wired correctly.
If an OAuth server shows Needs auth or Error, open the drawer and click Connect or Reconnect. Actionist restarts the OAuth flow and overwrites the stale token, no uninstall/reinstall cycle required.
The toggle in the drawer pauses a server without deleting its config or credentials. If you are testing a different server that does the same job, disable the original rather than uninstalling it. You can switch back instantly.
By default, tools from all connected MCP servers are available to every agent. In the Agent Studio → Tools tab, you can remove specific MCP servers from an agent's allowed list. Fewer servers mean a cleaner context window and faster, more accurate tool selection for that agent.
If you already have MCP server configs in standard format, switch to the JSON view in the Add Custom modal and paste the JSON. The normalizer detects the format automatically and fills in all fields, no manual re-entry.
Instant access
## Start connecting your world.
Install a server from the catalog, mark your credentials as Secret, and every agent you have gains the tools to do real work, without touching a line of integration code.
Credentials routed to the vault never touch disk as plaintext.
Vaulted secrets · OAuth with PKCE · Scoped per agent.
Keep going
Next steps.
Manage vaulted secrets, rotate API keys once, and see every server they are bound to.
Scope which MCP servers each agent is allowed to use from the Agent Studio Tools tab.
Browse, install, and publish MCP servers to the community catalog.
Combine MCP tools with instructions into reusable, shareable behavior packs.
# Memory
Source: https://learn.actionist.ai/Folders/memory/index
Persistent, permissioned, plain-Markdown memory. Agents remember what matters, and you can inspect and control the context.
NO BLACK BOX
## Memory you can open in a text editor.
Every fact an Actionist agent learns lives in a plain Markdown file in your workspace, readable, editable, version-controllable. No black-box vector store. No context that silently disappears when the session ends.
The model
Memory lives in three places.
Every surface is the same underlying files. You interact with them wherever is most natural. Below: one fact, seen from all three sides.
Memory instructions"Log every client call outcome. Prefer bullet points."auto-saves
Global memoryWorkspace-wide memory every agent sharesRead/Write
The primary configuration surface, inside the Agent Studio: Agents → select an agent → Memory tab (Brain icon). Instructions, bucket access, and the knowledge corpus, without leaving the app.
company/crm/accounts/northwind.md
## Northwind Trading
- Tier: enterprise · renewal: October
- Reports as slides, never PDF (CEO reads on phone)
Plain Markdown files. Open company/Memory.md or agents/\{id}/memory/Memory.md in any editor to read, edit, or version-control what your agents know.
chat · maya
youHow does Northwind want their reports?
tool · Search Memory · "northwind report format"
mayaSlides, never PDF. Their CEO reads on a phone. Saved from your call on June 9.
Agents call Search Memory (memory\_search) and Read Memory (memory\_get) automatically. In conversation, in workflows, and on scheduled runs.
The write loop
Watch an agent remember.
A background curator watches every conversation, workflow, and scheduled run, and decides what is worth keeping. Below: one agent's day, landing in her journal as it happens.
agents/maya/memory/TODAY.md
chat · maya · 09:14
09:14Client call with Northwind: they want the Q3 report in slide form, not PDF.
09:14Preference saved: reports as slides for Northwind going forward.
workflow · invoice-chase · 11:02
11:02Sent 3 payment reminders. Invoice #2041 escalated to second notice.
chat · maya · 14:38
14:38New rule from the team: always CC legal@ on contract emails.
14:39Promoted to Memory.md: this one is permanent.
schedule · daily-digest · 17:00
17:00Digest sent. Open rate trending up since switching to bullet summaries.
Nothing blocks the agent. Curation runs asynchronously in the background. The conversation never waits for a memory write.
Today, then history. The journal rolls into dated history files; durable rules get promoted to Memory.md and survive forever.
Everything is a file. Open the workspace in any editor and read exactly what your agent knows. Edit it. Version it.
Under the hood
Five stops from words to memory.
ConversationChats, workflows, and scheduled runs emit events as they happen.
Event queueObservations accumulate quietly, off the hot path.
Write plannerA background model reads the batch and plans precise file edits.
Markdown filesPlans become atomic writes to the agent's memory tree.
INDEX.mdEvery durable write gets a one-line entry in a human-readable index.
Context, spent deliberately
What the agent reads before you type a word.
Every session opens with a deterministic preload: up to six files across five sources, wrapped in named sections, inside a total budget of 8,000 tokens: no search, no guessing. Hover a segment to inspect it.
Truncation is front-first: when a file exceeds its budget, the oldest content is dropped and the newest is kept. If you let `Memory.md` or `TODAY.md` grow uncurated, early important context disappears silently. Keep both files tight.
The studio
The Memory tab, panel by panel.
Reach it from Agents → select an agent → Memory tab (Brain icon). Three panels, each controlling a different layer.
Agent Studio, Maya · Memory
OverviewToolsMemoryChannelsSchedule
Memory instructions
Log every client call outcome. Prefer bullet points. Never store API tokens.
auto-saves
Memory
Global memoryRead/Write
Every workspace has Global memory. Any further scope you define in company/Memory.md appears here as its own row with the same three-way control.
Knowledge corpus
Upload File.md .txt .pdf .docx up to 10 MB
pricing-2026.pdfextracted
The markdown editor at the top of the tab writes directly to `agents/{id}/memory/Memory.md`. Use it to tell the agent what is worth remembering and how: *"Log every client call outcome. Prefer bullet points. Never store API tokens."*
Changes auto-save as you type. To revert to the default, click the **Reset** button (arrow-clockwise icon) in the panel header.
Keep instructions under roughly 200 words. `Memory.md` is injected verbatim into every session within the 8k-token preload budget. A long essay eats into the budget for `TODAY.md` and recent history. Write directives, not prose.
Buckets are named scopes. Each one maps to a file or folder of Markdown in your workspace. The tab shows a row per bucket with a three-way permission control, using the same labels you see in the product: **No access** (invisible to the agent), **Read** (search and recall), **Read/Write** (search, recall, and save new facts).
**Global memory** (Globe icon, always at the top) covers workspace-wide memory shared by every agent. It is the one bucket present in every workspace, and its permission control works exactly like the others: set it to **No access** and this agent stops reading it.
**Which buckets you see depends on your workspace.** A new workspace shows Global memory and, once you add documents, a Knowledge corpus. Additional buckets appear only after they are defined in `company/Memory.md` using the format in the "Adding a custom bucket" note below. If you were expecting named company scopes and do not see them, they have not been defined yet.
A common layout, once you define it, splits shared ground truth by subject:
| Bucket | Scope | Contents |
| ------------- | ----------------------- | ------------------------------ |
| Business Info | `company:business-info` | Mission, values, company facts |
| Products | `company:products` | Product catalogue and specs |
| Policies | `company:policies` | Internal rules and procedures |
| Operations | `company:operations` | Processes and runbooks |
| CRM | `company:crm` | Customer accounts and history |
| Docs | `company:docs` | Reference documentation |
The Knowledge Corpus is a private document library for this specific agent. Upload reference files (specs, pricing tables, runbooks, FAQs) and the agent retrieves the relevant excerpt via semantic search rather than loading the whole document on every turn.
**"Private documents this agent can reference. Chunks are embedded and retrieved; nothing leaves your workspace."**
Click **Upload File** to add a document. Accepted types for indexing: `.md`, `.txt`, `.csv`, `.json`, `.yaml`, `.yml`, `.toml`, `.ini`, `.log`. Rich document formats (`.pdf`, `.docx`, `.xlsx`) go through a text-extraction step before indexing. Maximum file size: 10 MB per file.
To remove a file, hover the row and click the Trash icon. Confirm in the dialog: *"Delete \[filename] from the knowledge corpus?"*
Try it · permissions
Permissions you can feel.
Memory is bucketed by scope so an agent only sees what it needs, a data diet rather than a free-for-all. The matrix below is an illustration built on the example buckets above. Change anything; watch the agent's world change.
Illustrative. These bucket names are the example layout from the table above, not buckets that exist in a new workspace. Global memory is the one every workspace starts with.
Set each bucket's access
Business InfoMission, values, company facts
ProductsProduct catalogue and specs
PoliciesInternal rules and procedures
OperationsProcesses and runbooks
CRMCustomer accounts and history
DocsReference documentation
What this agent sees
agents/maya/memory/ . Always
company/Memory.md . Always
company/business/ no accessreadread/write
company/products/ no accessreadread/write
company/policies/ no accessreadread/write
company/operations/ no accessreadread/write
company/crm/ no accessreadread/write
company/docs/ no accessreadread/write
Struck-through paths are invisible to the agent: in chat, in workflows, and in search.
Scope to ownership. Give an agent **Read/Write** only on the bucket it is responsible for, **Read** on the reference material it needs, and **No access** everywhere else. Two agents writing to the same bucket can contradict each other in the same file, so keep one writer per bucket.
Adding a custom bucket. Edit `company/Memory.md` directly using the heading-based format below. After saving, the new bucket appears in all agents' Memory tabs immediately.
```markdown theme={null}
### My Bucket Name
- Scope: `company:my-bucket`
- Type: file
- Path: `company/my-bucket.md`
- Description: What this bucket stores
```
Knowledge corpus
Turn documents into searchable knowledge.
Upload a 50-page product spec once. The agent retrieves a targeted excerpt on every relevant turn, instead of re-reading the whole file or asking you to paste it in chat. Watch a file move through its lifecycle:
In the Memory tab, scroll to the **Knowledge corpus** panel and click **Upload File**.
Text types index directly: `.md`, `.txt`, `.csv`, `.json`, `.yaml`, `.yml`, `.toml`, `.ini`, `.log`. Rich documents (`.pdf`, `.docx`, `.xlsx`) are text-extracted first. Maximum size: **10 MB per file**.
Exactly the animation above: **Uploading...** → **Extracting text…** (rich files) → **indexing pending** → the **extracted** badge. If you instead see *"No text could be extracted from this document"*, the file is image-only. Nothing is searchable.
Ask the agent a question the document should answer. It calls **Search Memory** and returns a ranked excerpt. Confirm the snippet is from your file.
Hover the file row and click the Trash icon. Confirm: *"Delete \[filename] from the knowledge corpus?"* The file and its index entries are removed immediately.
Wait for the **extracted** badge before relying on a PDF or DOCX in a live agent. "Indexing pending" means not yet searchable; "No text could be extracted" means it never will be.
Try it · recall
Recall, ranked.
Two tools power recall, and agents call them automatically. You see the tool calls inline in chat and in workflow traces. Pick a query and watch the ranking.
memory\_search("report format")
memory\_search("contract emails")
memory\_search("demo follow-up")
memory\_search("tone of voice")
agents/maya/memory/Memory.md:120.91
Reports for Northwind go out as slides, never PDF. Their CEO reads on a phone.
company/docs/brand-voice.extracted.md:190.48
Tone of voice: direct, warm, zero filler. Short sentences win. No exclamation marks.
company/crm/accounts/northwind.md:20.37
Northwind Trading: enterprise tier, renewal in October, champion: Dana Voss.
company/policies/email.md:40.94
Always CC legal@ on anything containing contract terms or pricing commitments.
agents/maya/memory/TODAY.md:140.52
New rule from the team: always CC legal@ on contract emails. Promoted to Memory.md.
company/products/pricing.md:70.29
Pro plan pools usage across the team; Basic is single-seat with a monthly reset.
agents/maya/memory/history/2026-06-09.md:310.89
Demo follow-ups convert best when sent within 4 hours, with one concrete next step.
company/crm/accounts/northwind.md:20.44
Northwind Trading: enterprise tier, renewal in October, champion: Dana Voss.
agents/maya/memory/TODAY.md:80.33
Invoice #2041 escalated to second notice; finance wants weekly status on it.
company/docs/brand-voice.extracted.md:190.93
Tone of voice: direct, warm, zero filler. Short sentences win. No exclamation marks.
agents/maya/memory/Memory.md:120.41
Reports for Northwind go out as slides, never PDF. Their CEO reads on a phone.
company/policies/email.md:40.27
Always CC legal@ on anything containing contract terms or pricing commitments.
Ranked with the real engine's hybrid weights: 0.6 semantic similarity · 0.25 keyword match · 0.15 recency, re-ranked so one document never dominates. Demo data, real scoring shape.
"You explained the Northwind report format once. In March."
maya · memory\_search
| Tool | Display name | What it does | Key default |
| --------------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------- |
| `memory_search` | Search Memory | Semantic + keyword hybrid search across all permitted buckets and corpus files. Returns ranked results with file path, line range, score, and snippet. | Up to 6 results per call |
| `memory_get` | Read Memory | Reads a specific memory file. Accepts `path` (required), `from` (start line, optional), and `lines` (line count, optional). Scope-enforced. | Up to 200 lines per call; omit `lines` to read the full file (also capped at 200) |
`memory_get` is scope-enforced. An agent can only read files in buckets where it has at least **Read** permission. Attempting to read outside the permitted scope returns an error, not the file contents. Recall works the same everywhere: in chat, in workflows, and on scheduled runs, with each tool call visible in the trace.
Memory in practice
Three teams, one pattern.
Memory is most useful when it surfaces exactly the right context without being asked. These recipes show how agents across roles use recall and write to stay useful across sessions.
Dario · Sales
Before a call, memory\_search("northwind deal stage") surfaces the last three touchpoints, open commitments, and the champion's name. All logged automatically from prior sessions. Dario opens the call with context instead of asking the CRM for a briefing.
saves \~6 min per call
Priya · Support lead
A support ticket asks about refund eligibility. The agent runs memory\_search("refund policy") against the Policies bucket, finds the exact clause, and cites the source file and line number in its reply: no tab-switching, no guesswork.
cited answer in \~8 sec
Maya · Marketing Manager
Maya said once: "Northwind reports go out as slides, never PDF." That preference was written to Memory.md and now applies on every run. Campaign drafts, digest emails, and scheduled summaries all arrive in the right format without reminders.
zero repeat instructions
Best practices
Memory habits that pay off.
Five habits that prevent the most common memory failures and make the most of the context you have.
Memory instructions are injected verbatim at session start, inside the 8,000-token preload budget. Every word you write competes with `TODAY.md` and recent history. Write short, imperative sentences: *"Log every client call outcome. Prefer bullet points. Never store API tokens."* Past 200 words, you are writing prose that belongs in a corpus document.
Think of each agent as owning the buckets it controls: your CRM agent gets **Read/Write** on CRM, **Read** on Products, **No access** on Policies. Giving multiple agents Read/Write on the same bucket creates contention. Agent A's writes can contradict agent B's in the same file. One writer per bucket is the clean pattern.
Pasting a 50-page spec into chat loads the whole document into context every turn. Uploading it to the corpus chunks and indexes it, the agent retrieves the relevant excerpt only when needed. Good corpus candidates: specs, pricing tables, SLAs, runbooks, brand guidelines, FAQs. Bad candidates: short facts (Memory.md) and image-only PDFs (nothing extracts).
Rich documents (PDF, DOCX, XLSX) are text-extracted before indexing. The **extracted** badge confirms usable text came out. *"No text could be extracted"* means the file is image-only. OCR is not performed, nothing is searchable. Don't put a corpus file in a production agent's remit until the badge appears.
The curator maintains `agents/{id}/memory/INDEX.md` automatically, one line per memory file, trimming oldest entries first as it grows. For agents running for months, open it occasionally and confirm your most important facts still have entries. If a critical early fact was dropped, re-surface it: ask the agent to log it again, or edit the file directly.
Why it's built this way
Four principles, no compromises.
Human-readable files, not embeddings in a vault. What you can read, you can trust.
Bucket-level read/write grants per agent. A support agent never wanders into finance.
The store and its search index live in your own workspace, not in a vendor black box.
Monday's lesson still applies on Friday. Memory is the product, not a side effect.
Always on
## Memory that works while you sleep.
Configure buckets once. Upload your reference docs. Let the agent carry context forward on every session, every schedule, every run.
Every fact lives in a plain file you own, readable, editable, version-controllable.
Permissioned by bucket · Indexed for recall · Nothing leaves your workspace.
Keep going
Next steps.
Configure the agent that holds this memory: tools, approval mode, channels, and schedule.
Browse and edit the underlying Markdown files your agents read and write.
Put a memory-backed agent on a recurring schedule, and why bucket permissions matter for unattended runs.
Portable behavior packs that pair well with memory. A skill plus a well-scoped bucket makes a focused specialist.
# Onboarding
Source: https://learn.actionist.ai/Folders/onboarding/index
From first launch to a configured workspace with real agents, real tools, and your company context already in place, in minutes.
FIRST FIVE MINUTES
From first launch to first agent,
in minutes.
------------------------
Actionist sets up your workspace for you. Either through a five-turn conversation that spins up starter agents before you visit the Agents page, or by importing your real company context, AI-suggested agents, and detected integrations directly from a demo session and activating them in a single click.
Choose your path
Two ways into Actionist.
Both paths take under five minutes. The result is the same: a running workspace with agents, tools, and your company context in place.
Path A
Fresh install
You downloaded the app, signed in, and this is your first time here. Actionist opens the Pip wizard. Five quick turns that name your workspace, create starter agents, optionally connect a messaging channel, and configure proactive alerts.
under 2 min
Path B
From a demo link
You ran a demo on the Actionist demo site and received a setup link. That link carries your real company context, AI-suggested agents matched to your use case, and integrations already detected. Review the pre-built plan, then activate everything in one click.
under 5 min
Path A
Fresh install: sign in and meet Pip.
After you download the app, onboarding happens in three stages: sign in, grant macOS permissions, then follow the Pip wizard through five quick turns.
Signing in
"Starting Actionist..." appears as the app bootstraps. The splash clears automatically. Up to 8 seconds on first run.
On the login screen, click Sign in with Browser. The app opens your default browser and enters a waiting state. You'll see your browser name and a Cancel button while authentication completes.
Sign in or create an account in the browser. The browser redirects back to the app automatically. A green check mark appears briefly, then the dashboard loads.
Browser sign-in has a 5-minute window. If you close the browser tab or the window times out, you'll see "Authentication timed out. Please try again.": click Sign in with Browser to start a fresh attempt.
macOS permissions
This step appears on macOS only. Windows users can skip ahead to the Pip wizard.
Once the dashboard loads, Actionist checks whether it has the two permissions it needs for Computer Use tasks. If either is missing, the Permissions modal opens automatically.
Screen Recording: allows Actionist to see your screen
Accessibility: allows Actionist to control UI elements
Click each permission row to trigger the macOS system prompt, then grant access. The modal closes automatically once both are in place.
Skipping these permissions means Computer Use tasks will fail silently the first time you run one. Grant both now and you won't hit that wall later. You can reopen this modal at any time from Settings → Permissions.
Actionist · Permissions
Actionist needs two macOS permissions to use Computer Use features.
Screen RecordingAllows Actionist to see your screen
Granted
AccessibilityAllows Actionist to control UI elements
The Pip wizard
Five turns. Your workspace, configured.
Pip is the floating help avatar at the bottom-right of the dashboard. On first launch it opens automatically. It is a fixed, scripted flow. Instant to respond. Step through each turn to see exactly what Pip asks and what happens behind the scenes.
P
Pip · ActionistTurn 1 / 5
"Hi, I'm Actionist — I help you set up and run this workspace. What's your company called?"
e.g. Acme Corp
Continue
Behind the scenes
The name you enter personalises agent system prompts for every session that follows. It writes to your workspace profile and surfaces wherever agents introduce themselves. You can update it later in Settings.
P
Pip · ActionistTurn 2 / 5
"Got it. I can pre-create a starter set: a receptionist, a customer-support agent, and an executive assistant. Want me to set those up?"
Yes, all three
Just the receptionist
Skip for now
Behind the scenes
Choosing Yes, all three creates a Receptionist, Customer Support, and Executive Assistant agent immediately. Just the receptionist creates one. Skip leaves the Agents page empty. You build your own from scratch. All agents are editable at any time.
P
Pip · ActionistTurn 3 / 5
"Want to connect Telegram or Slack so you can reach these agents from outside the app?"
Telegram
Slack
Skip
Behind the scenes
Choosing Telegram or Slack saves a deep-link that opens the correct channel setup screen after the wizard finishes. Skip leaves channels unset. You can connect them later from each agent's Channels tab.
P
Pip · ActionistTurn 4 / 5
"One more thing — I can nudge you when I spot something obvious to fix (an agent missing a model preset, an MCP server in needs-auth, pending marketplace updates). Want that on?"
Yes, nudge me
No thanks
I'll decide later
Behind the scenes
Nudges default to off. Choosing Yes, nudge me turns proactive alerts on. Pip will surface broken configurations automatically. No thanks and I'll decide later both leave nudges off; the toggle is available later at Settings → Help Assistant.
P
Pip · ActionistTurn 5 / 5
"All set. Try asking me 'what needs updating?' to see the marketplace pending-update detection in action — or just ask anything about the platform."
Got it
Behind the scenes
Clicking Got it is the moment onboarding completes, the wizard unmounts and Pip switches to its normal help-chat mode. If you close the overlay before reaching this button, the wizard reappears from Turn 1 on your next app start. There is no mid-flow save point.
Actionist · Dashboard
P
Pip · ActionistTurn 1 / 5
"Hi, I'm Actionist — I help you set up and run this workspace. What's your company called?"
e.g. Acme Corp
Continue
After clicking "Got it", try typing "what needs updating?" in the Pip chat. It runs a live check across your agents and marketplace, a good first glimpse of how the proactive layer works.
Actionist · Dashboard
P
Pip · ActionistTurn 2 / 5
"I can pre-create a starter set: a receptionist, a customer-support agent, and an executive assistant. Want me to set those up?"
Yes, all threeJust the receptionistSkip for now
Whichever option you pick, the agents are ready to use the moment Turn 5 completes. Here is what each one does out of the box.
Day-one value
What each starter agent does from the moment it exists.
Sam · Solo founder
The Receptionist answers inbound messages on Telegram the moment they arrive, greeting visitors, collecting their name and query, and routing urgent items to Sam's attention while queuing the rest for review. No message sits unanswered for hours.
live in 10 min · saves \~3 hrs/wk
Priya · Support lead
The Customer Support agent reads each incoming ticket, matches it against the knowledge base, and drafts a reply for Priya to approve, or sends it directly for routine questions. First-response time drops from hours to minutes on typical queues of 30-plus tickets a day.
live in 10 min · saves \~5 hrs/wk
Maya · Marketing Manager
The Executive Assistant monitors Maya's inbox, surfaces the 4-5 items that need a decision each morning, drafts replies to the rest, and flags anything time-sensitive, so Maya opens her laptop to a curated brief rather than an unread count.
live in 10 min · saves \~4 hrs/wk
ILLUSTRATIVE, TIME ESTIMATES ARE TYPICAL FOR THE WORKFLOWS SHOWN ON THIS PAGE.
Turn detail
Every turn, fully annotated.
The stepper above shows what Pip shows; the accordion below shows every choice and its consequence.
Pip greets you with: "Hi, I'm Actionist — I help you set up and run this workspace. What's your company called?"
Type your company name in the input (placeholder: e.g. Acme Corp) and click Continue. This name personalises agent system prompts for every session that follows, so enter it accurately. You can change it later in Settings.
Pip asks: "Got it. I can pre-create a starter set: a receptionist, a customer-support agent, and an executive assistant. Want me to set those up?"
| Choice | What happens |
| -------------------------------------- | ----------------------------------------------------------------------- |
| Yes, all three | Creates a Receptionist, Customer Support, and Executive Assistant agent |
| Just the receptionist | Creates the Receptionist agent only |
| Skip for now | No agents created; you build your own from the Agents page |
These agents are ready to use immediately after Turn 5. You can edit them at any time from the Agents page.
Pip asks: "Want to connect Telegram or Slack so you can reach these agents from outside the app?"
Choosing Telegram or Slack saves a deep-link that opens the correct channel setup screen after the wizard finishes. Choosing Skip leaves channels unset. You can connect them later from each agent's Channels tab.
Telegram and Slack setup, routing, and credentials.
Pip asks: "One more thing — I can nudge you when I spot something obvious to fix (an agent missing a model preset, an MCP server in needs-auth, pending marketplace updates). Want that on?"
| Choice | What happens |
| ---------------------------------- | ------------------------------------------------------------------------------- |
| Yes, nudge me | Turns proactive alerts on. Pip will surface broken configurations automatically |
| No thanks | Nudges stay off |
| I'll decide later | Nudges stay off; toggle available later at Settings → Help Assistant |
Nudges default to off. If you are new to Actionist, turning them on is recommended. They act as an always-on setup guide during the first few days.
Pip shows: "All set. Try asking me 'what needs updating?' to see the marketplace pending-update detection in action — or just ask anything about the platform."
Click Got it. This is the moment onboarding completes, the wizard unmounts and Pip switches to its normal help-chat mode. If you close or dismiss the overlay before reaching this button, the wizard reappears from Turn 1 on your next app start.
Path B
From demo link to live workspace.
If you completed a personalised demo on the Actionist demo site, you received a setup link. That link carries everything the demo learned about your company (agents, tools, and context) ready to import with one click.
Demo sessionYou complete the demo flow; the site learns your company profile, suggested agents, and integrations.
Setup linkThe link arrives by email or WhatsApp, carrying the full bundle as a signed token.
ImportOpen the link, create an account or sign in, the bundle unpacks automatically.
ReviewThree-step review: company details, agent selection, detected integrations.
LaunchOne click applies everything. Workspace is live with agents and context in place.
The import
Watch the bundle load.
Once you create an account or sign in via the setup link, a loading screen appears with the heading "Preparing your workspace". Three status lines animate in sequence, then the review screen takes over automatically.
Preparing your workspace
Importing your demo bundle…
Building your setup plan…
Ready for review…
Plan ready, opening review screen
Getting to the review screen
Open the setup link from your email or WhatsApp message. The entry page loads in your browser.
Click Create account (purple button) or Sign in instead (outlined). If you already have an account with an organisation, you're redirected straight to the review screen.
The loading screen appears with the heading "Preparing your workspace". Three status lines animate in sequence: exactly as shown above. When the third line completes, the review screen replaces it automatically.
Review
The three review steps.
The review screen gives you one chance to inspect and adjust what the demo learned before it becomes your workspace.
Step 1
About your company
Editable fields: Name, Website, Industry, and "What you do". All pre-populated from your demo session. Update anything that needs correcting before launching.
Step 2
Pick your starter agents
Toggle cards for each AI-suggested agent. Click any card to select or deselect it. Click Customize to expand Name, Role, Description, and an Enable immediately after launch checkbox per agent.
Step 3
Tools we recognized
A read-only grid of integrations detected during your demo. Each shows a confidence label: Confident match, Possible match, or Detected. Actual connection happens later from each agent's settings.
Actionist · Review your setup
Step 1 · About your company
Name
Acme Corp
Website
acmecorp.com
Industry
SaaS
Step 2 · Pick your starter agents
Receptionist
First-contact handler
NameRoleDescription
Customer Support
Support ticket handler
Exec Assistant
Scheduling & comms
Step 3 · Tools we recognized
SlackConfident match
NotionPossible match
GmailConfident match
LinearDetected
4 items ready to launch
Launching your workspace
Once you're satisfied with the review:
The sticky action bar at the bottom shows "\{N} items ready to launch": one for the company profile plus one for each selected agent.
The button changes to "Launching…" with a spinner while the import applies.
On success, a green check circle animates in with a particle burst, and the screen shows "\{CompanyName} is ready" with two action buttons: View your agents and Open dashboard.
Your company context, selected agents, and integration data are now written into your workspace. Everything is live.
If you want to skip setup entirely, click Skip for now in the action bar. The screen shows "Setup skipped" with a Go to dashboard button. Your workspace is clean and you configure everything manually from the Agents page and each app's settings.
Acme Corp is ready
If something goes wrong
The link could not be found, or it may have expired. Reopen the original email or WhatsApp message and try the link again. If the problem persists, contact support.
This appears when the email you signed in with does not match the email used during the demo session (or if you previously dismissed the setup). There is no self-serve fix, contact support for approval.
This setup link was already used to configure another workspace. Each link is single-use per organisation. Open the demo site again for a fresh link, or contact support.
A server error occurred during import. A Retry button is available on this screen. Try it once. If the error persists, contact support and include any error details shown.
After setup
The Tutorial pill.
Once you're past onboarding, the dashboard header shows a Tutorial pill with a 2 min duration badge. Clicking it opens a short YouTube walkthrough.
Tutorial
2 min
The pill reappears on every app restart. There is no permanent dismiss option in Settings.
Common questions
Things worth knowing before you start.
Click Sign in with Browser again to open a fresh window. If the 5-minute timeout fired, you'll see "Authentication timed out. Please try again.": this is expected, not an error. Starting again resets the clock.
Actionist's Computer Use feature needs both Screen Recording and Accessibility to see and operate your screen. Granting them during onboarding ensures that the first time you run an automation, it works rather than failing silently. You can re-open the Permissions modal at any time from Settings → Permissions.
Yes, if you're new. Nudges surface actionable alerts automatically (missing model presets, MCP servers that need re-authentication, pending marketplace updates) and act as a hands-free setup guide during your first few days. You can toggle them later at Settings → Help Assistant.
The wizard resumes from Turn 1 the next time you start the app. There is no mid-flow save point. This is intentional.
Yes. The name you enter personalises agent system prompts for every subsequent session. Agents reference it in context. Make sure it's accurate. You can update it later in Settings.
Each handoff link is single-use per organisation. If this appears, the link was already used with a different workspace. Open the demo site to request a new personalised demo and receive a fresh link, or contact support.
This triggers the "Manual review needed" screen. There is no self-serve fix. Email mismatch requires support-side approval. Contact the team with your demo email and the email you signed in with.
Yes. Edits to agent name, role, description, and the Enable immediately after launch checkbox are all sent as part of the Launch setup request. There is no separate save step. Review everything before clicking the button.
Ready
## Your workspace is set up. Now put it to work.
Open the dashboard, pick an agent, describe a task. Actionist handles the rest.
Fresh install or demo handoff, under five minutes either way.
Workspace named · Agents created · Context imported · Everything live.
Keep going
Next steps.
Configure, customise, and manage every AI employee in your workspace.
Connect Telegram and Slack so your agents work where your team already is.
Browse and install skills, MCP servers, and workflow templates from the marketplace.
Update your company name, manage permissions, and configure the Help Assistant.
# Oversight & approvals
Source: https://learn.actionist.ai/Folders/oversight/index
Delegate the work, keep the wheel. Agents pause for approval before anything risky, ask when only you can decide, and flag the blockers only you can clear, so nothing irreversible happens without your say-so.
STAY IN CONTROL
## Automation you never lose control of.
An Actionist agent does the work, but you hold the wheel. It pauses for your approval before anything risky, asks when a decision is genuinely yours to make, and flags the blockers only you can clear. Delegate the outcome. Keep the final say.
The control loop
Three moments an agent brings you in.
Most of the time an agent just works. When it shouldn't proceed alone, it does one of three things, each tuned so you're interrupted only when it matters.
Before a risky or irreversible action (sending an email, charging a card, deleting a record), the agent pauses and waits for your go-ahead. You set how cautious it is, per agent.
When a choice is genuinely yours to make, the agent asks a short multiple-choice question mid-run and continues the moment you answer.
When something only you can fix stands in the way, like an expired connection or a missing key, the agent records a blocker and surfaces it under Needs attention with exactly what to do.
See it happen
A scheduled run that hits a wall, and tells you exactly how to clear it.
An agent running on its own can't invent a credential it doesn't have. Instead of failing silently, it files a blocker with a plain-language fix and stops, ready to pick the work back up once you act.
actionist · scheduled run · ops
schedule fired · weekdays 09:00 · agent: Ops
opsPulling yesterday's closed Linear tickets…
opsLinear returned 401 Unauthorized. The connection looks expired.
blocker raised · broken\_connection · run stopped
opsWhat to do: Reconnect your Linear account in the Apps screen, then I'll resume on the next run.
That same blocker now appears on your Home tab under Needs attention, with a one-click Fix button that takes you straight to the screen where you resolve it.
Approve
Decide how much rope each agent gets.
Every agent has an approval mode that controls when it pauses to ask you before using a tool. Set it once in the agent's Tools tab. Skills and MCP tools respect it globally, and you can override individual tools below the setting. The four modes run from most hands-on to most autonomous.
**Propose tool calls; you run them manually.** The agent plans and recommends each action but never executes on its own, so you stay fully hands-on. Best while you're learning to trust a new agent.
**Require approval before every tool execution.** The agent does the thinking and queues each action for a yes/no. Maximum oversight with the agent still doing the heavy lifting.
**Run safe tools automatically, ask for risky ones.** Reads, searches, and drafts flow without interruption; writes and destructive actions pause for approval. The everyday default for most agents.
**Run every tool without prompting.** The agent acts end to end with no pauses. Reserve it for well-tested, low-risk routines you've already watched run.
`Full auto` removes every confirmation, including destructive actions. Use it only for agents and routines you've already verified by hand. For anything touching money, customers, or production data, prefer Guarded auto or Ask each time.
In Agent Studio, select the agent and open the **Tools** tab. Find **Approval mode** near the top. Its subtitle explains that it controls when the agent pauses before using a tool.
Choose **Suggest**, **Ask each time**, **Guarded auto**, or **Full auto**. The setting applies to all of the agent's tools, including Skills and MCP servers.
Need one tool stricter or looser than the rest? Set a per-tool override in the tool list below the global picker.
Approval mode
Controls when the agent pauses to ask you before using a tool. Skills and MCP tools respect this globally; per-tool overrides live below.
SuggestAsk each timeGuarded autoFull auto
What an approval looks like
When an action needs your sign-off, a request card appears with a plain summary of what's about to happen and a preview of the change. Each request is graded by how risky it is, and the most dangerous ones make you type to confirm.
A low-risk change, like a draft or a non-destructive update. Quick to approve at a glance.
Touches something that matters, like sending a message or changing a record others rely on. Read before you approve.
Deletes or overwrites. The card requires you to type to confirm before it will run. No accidental clicks.
Secrets are never shown in an approval card. Fields like tokens, passwords, API keys, and raw commands are masked, so you can review what an action does without exposing the credentials it uses.
Delete customer record
Destructive
Permanently delete Acme Corp (cus\_8fK…) and all associated invoices.
api\_key\[Field masked]
Type DELETE to confirm
DELETE
ApproveCancel2 more pending
Ask
When the call is yours, the agent asks, then keeps moving.
Some decisions aren't risky, they're just yours: which of two leads to prioritise, whether to use the formal or casual tone, which account to post from. Rather than guess or stall, the agent asks a short, structured question and continues the instant you answer.
Each question offers two to four clear options. Pick with a click or a number key. If free text might help, the agent includes an "Other" option. Some questions let you select more than one.
The agent only asks to clear genuine ambiguity, confirm a specific choice, or pick between concrete options, not for open-ended chit-chat. A short status line tells you what it's waiting on.
On an unattended run (a schedule or a trigger firing while you're away), there's no one to answer in the moment. Actionist tells the agent honestly that no user is available, so it makes a reasonable call or finishes and flags the decision, rather than hanging forever. For decisions that must be yours, route them through an **approval mode** or a [workflow](/Folders/workflows) gate instead.
Choosing which leads to prioritise
1 / 2
PRIORITY
Which segment should I prioritise tonight?
1Enterprise (> 500 seats)
2Mid-market, high intent
3Other (let me type)
Flag
Blockers, surfaced under Needs attention.
When an agent running on its own hits something only you can fix, it doesn't just fail. It records a blocker: what's stuck, why, and exactly what you need to do. Every open blocker shows up under Needs attention on your Home tab.
Each blocker is filed under one of six categories, so you can tell at a glance what kind of fix it needs:
A required credential or API key isn't there yet. Add it in [Credentials](/Folders/credentials).
A connection is expired, revoked, or failing auth (for example, a 401). Reconnect the app.
A choice or approval only you can make. Open the agent and decide.
Required setup or configuration is missing. Finish the setup on the app or agent.
The agent lacks the permission or scope to act. Grant access on the connected app.
A user-actionable block that fits none of the above. The agent spells out the fix.
Anatomy of a Needs attention card
The section header counts how many agents need you, for example "2 agents need attention". Each row gives you everything to act in one place:
Ops can't read Linear: the connection looks expired.
What to do: Reconnect your Linear account in the Apps screen.
Seen 3 times
Fix✕ Dismiss
The exact action that clears the blocker, in plain language, written by the agent rather than a generic error.
Takes you straight to the screen where you resolve it: the right app connection, or the agent itself. Actionist only ever links to a real in-app destination.
Clears the card if you've handled it another way. Removes it immediately.
How often this same blocker has recurred. Repeats are de-duplicated into one row so the list stays clean.
How blockers clear
Blockers tied to an [agent](/Folders/agents) or a [trigger](/Folders/reactions) clear on their own the next time that agent or trigger runs successfully. Once you've fixed the cause, the card disappears.
Blockers rooted in a shared connection or app stay until you dismiss them or reconnect, because they affect every automation that depends on that connection.
Blockers are raised on unattended runs: [schedules](/Folders/schedules) and [triggers](/Folders/reactions). In a live chat you're already there, so the agent just asks you directly instead of filing a blocker.
Coming soon: Tasks for You. Needs attention shows blockers today, the things that stop a run. We're extending it into a full inbox for non-blocking items too ("review this draft before I send", "have a look when you can", FYIs), so everything an agent wants from you lives in one place, sorted by urgency.
Wherever you are
Get flagged in the app, or in your chat.
You don't have to be staring at the dashboard. When an agent connected to a [channel](/Folders/channels) gets blocked, the same card (what's stuck, why, and what to do) is delivered to your Telegram or Slack, with a link back to the exact fix screen.
A blocked run posts its What to do card to the agent's connected channel, so a problem reaches you even when the app is closed and your laptop is shut.
Each card carries a link straight to the screen where you resolve it. No hunting through menus to find which agent needs you.
Coming soon: approve from the chat. Today the channel card notifies you and links back to the app. Next, you'll be able to approve, reject, or answer right from Telegram or Slack with a single tap, clearing a blocker or signing off on an action without opening Actionist at all.
On the roadmap
Where oversight is heading.
The control loop today is approve, ask, and flag. Three additions, in build, make it tighter still.
Coming soon
One queue for everything an agent needs from you (blockers, approvals, reviews, and FYIs), ranked by urgency, not just the things that stop a run.
Coming soon
Approve, reject, or answer a question directly from Telegram or Slack. Sign off on the move without opening the app.
Coming soon
Clear a blocker and the agent picks the task back up where it stopped, with no waiting for the next scheduled run to start over.
Good to know
Questions about staying in control.
Only if you've set it to. Under **Suggest**, **Ask each time**, or **Guarded auto**, destructive and sensitive actions pause for your approval, and the most dangerous ones make you type to confirm. The only mode that skips confirmation entirely is **Full auto**, which you opt into per agent for routines you've already verified.
The run stops and files a blocker instead of failing silently. It appears under **Needs attention** (and in your channel, if connected) with the exact fix. Once you resolve the cause, an agent-scoped or trigger-scoped blocker clears on the next successful run; a shared-connection blocker clears when you reconnect or dismiss it.
On an unattended run there's no one to answer in the moment, so Actionist tells the agent honestly that no user is available. The agent then makes a reasonable call, or finishes and flags the decision, so it won't hang. For decisions that must be yours, gate them with an approval mode or a workflow step so they wait for you rather than being decided automatically.
Yes. The approval mode applies to all of an agent's tools globally, including [Skills](/Folders/skills) and [MCP](/Folders/mcp) tools. If you need one specific tool to be stricter or looser, set a per-tool override in the agent's Tools tab.
No. Repeats of the same blocker are de-duplicated into a single card with a **Seen N times** count, so a recurring problem nudges you without flooding the list.
Delegate with confidence
## Hand off the work. Keep the final say.
Set an approval mode, let your agents run, and step in only when it counts.
# Projects
Source: https://learn.actionist.ai/Folders/projects/index
Describe a goal, approve the plan, and let agents run the work. Actionist drafts a plan of tasks, executes what it can in parallel, and pulls you in only when a task needs a decision, an approval, a payment, or a login.
PLAN AND EXECUTE
## Describe it. Actionist plans it, then runs it.
Projects is the planning and execution core of Actionist. Describe a goal, review the plan it drafts, and launch. Worker agents pick up the tasks and run them in parallel, reaching you only when something needs a decision, an approval, a payment, or a login.
The idea
One place where work is planned, delegated, and done.
Most people do not freeze because agents cannot act. They freeze at the blank box, unsure what to ask for. Projects removes that: the Planner drafts the plan, you approve it, and the work runs itself as far as it safely can.
9
starter templates to plan from
4
ways to view your work
3
queues for what needs you
Parallel
tasks run at the same time
Pick a template or describe your goal in a sentence. The Planner asks a few questions and drafts projects, tasks, and the order between them. You edit anything before it runs.
Once you launch, worker agents claim ready tasks and run several at once. They pause and ask only when a step genuinely needs a human.
The loop
From a sentence to finished work.
Every project follows the same path, from the first sentence to the last approval.
DescribeType a goal or pick a template.
Plan draftedThe Planner writes projects, tasks, and order.
ApproveReview, edit, and materialize the plan.
LaunchThe whole plan, or one phase.
Agents runTasks execute in parallel and report back.
Start a new project, name it, then choose how to begin: load one of nine templates, describe your goal to the Planner, or build the outline from scratch.
A dedicated Planner agent asks a few clarifying questions, then drafts projects, tasks, and the dependencies between them. It plans only. It never runs the tasks itself.
Adjust anything: objectives, owners, the order, which tasks need review. An optional Plan Critic reviews the draft for gaps before you commit.
Approving turns the draft into real tasks on the board. Nothing runs yet.
Actionist checks that every task is execution ready and that the apps it needs are connected, flagging anything to fix before work starts.
Launch the whole plan, or one phase at a time, when you are ready for agents to begin.
Worker agents pick up every unblocked task and run several at once. Dependent tasks wait automatically until their prerequisites finish.
When a task needs you, the agent parks safely and posts a card to a queue. Answer it, and the agent resumes from the exact step it paused on.
Try it · views
Four ways to see your work.
The same tasks, shown the way you need them. Switch between the four views below.
›Set up the business5 tasks · 16 subtasksIn progressEAOAY
›Decide your offer and pricingDoneEAExecutive Agent
Pick the business types you will targetDone
Set your site price and upkeep retainerDone
Write a one line offer you can repeatDone
›Register the businessDoneOAOperations Agent
Check the business name is freeDone
File the registrationDone
Save the certificate to your trackerDone
›Open a business bank accountTo doYYou
›Set up a simple brandIn progressEAExecutive Agent
›Build your project trackerDoneOAOperations Agent
›Build your web presence5 tasks · 16 subtasksWaitingDAOAY
›Find local businesses5 tasks · 16 subtasksIn progressSACA
›Win the work5 tasks · 15 subtasksScheduledSARAY
Projects · Kanban
Backlog 2
Set up analytics
Draft the FAQ
Ready 1
Schedule the emails
In progress 1
Draft the announcement
AAria
Needs you 1
Approve the final copy
YYou
In review 1
Newsletter draft
RRavi
Done 2
Competitor scan
Projects · Dependencies
Register the domain→Build the landing page→Launch the campaign
Draft the copy→Approve the copy→Publish to the blog
A read-only map of what waits on what. Change the order in the plan editor.
Projects · Issued to me
To unblockPay for the domain renewalQ3 product launchResolve
To reviewApprove the launch announcementQ3 product launchReview
To doChoose a print vendor from three quotesStore refreshMark done
List is the default. Kanban sorts tasks by lifecycle, Dependencies maps the order, and Issued to me gathers everything that needs you across every project.
The screens on this page are illustrative. Names, projects, and tasks are examples.
What needs you
You only do what only you can do.
When a task needs a human, the agent parks safely and posts a card. Everything you need to action, across every project, gathers in Issued to me, sorted so the most blocking work comes first.
An agent is stuck and needs something only you can give: a payment, a login, a decision, or a file. Provide it and the task continues.
An agent finished a piece of work and wants your sign-off before it goes further. Approve it, or request changes and it runs again.
A task only a human can do. Pick it up, complete it, and mark it done.
Each card asks for exactly what it needs, using one of five fixed responses: approve or reject (with feedback), choose one, select several, free text, or confirm a payment. You can act on any of them from your phone.
The queues are shared across everyone with access to Projects. Anyone on the team can pick up a card and action it, so nothing waits on one person being online.
A
Aria
@aria\_actionist\_bot
ONLINE
TO UNBLOCK · PAYMENT
Payment neededRenew launchsite.com · 12 USD / year
The landing page task is blocked until the domain renews. Authorize the renewal to continue.
ApproveDeny
Approve it.
09:41
TOOL · PAY
Done. The domain is renewed and the landing page task resumed from where it paused.
09:41
Payments and other sensitive actions never approve on a timer. They wait for a human, however long that takes.
Planning
Draft a plan you can trust.
Planning runs in four steps: Start, Edit, Preflight, Launch. You choose how to begin.
Nine ready plans, from a sales pipeline to a product launch, load straight into the editor.
Chat with the Planner. Describe what you want and it drafts the outline live as you talk.
Build the outline yourself, task by task, with full control over the order.
For each task you set an objective, the desired outcome, success criteria, the apps it can use, what it depends on, whether it needs review, and who owns it: an agent or you. Approve and Review turns the draft into real tasks. Launch is a separate step, and you can launch the whole plan or one phase at a time.
Open any task to see exactly what happened. Each one has three tabs.
The objective, the acceptance checklist, the apps it uses, what it depends on, and any files it produced.
A timeline of every step the agent took, plus your comments and decisions.
The full transcript of each attempt, with the files it produced and its logs.
Tasks are owned by an agent or by you. Agent tasks route to a worker you choose, or to the built-in General Worker. A task moves through clear statuses as it runs:
ReadyRunningAwaiting humanReviewBlockedDone
Safety
Risky actions always ask.
Autonomy never means unsupervised spending. Four kinds of action always stop for your confirmation, in every mode: spending money, sending to people outside your team, using a saved login, and deleting or destroying something.
Even an agent set to run on its own must ask before money, external messages, credentials, or destructive actions. Under an unattended worker, that request becomes a card in your queue instead of an action taken.
If a task retries after a hiccup, actions it already completed are not repeated. An email is not sent twice and a payment is not made twice.
Payments and compliance steps never approve automatically when a timer runs out. They wait for a human decision.
## Stop staring at the blank box.
Describe what you want. Approve the plan. Let the work run.
Plan it. Approve it. Let it run.
Agents do the work. You do only what only you can.
Keep going
Next steps.
Set up the workers that carry out your tasks.
Approve and answer from Telegram or Slack.
Keep projects running around the clock, even with your laptop closed.
See and control every approval across your agents.
# Triggers
Source: https://learn.actionist.ai/Folders/reactions/index
Connect any agent to the outside world with HTTP webhooks and app triggers. The agent wakes, acts, and logs every event automatically.
EVENT-DRIVEN AGENTS
## Your agent picks up the phone when the world calls.
Wire any agent to an inbound HTTP webhook or to a connected app. No polling script, no relay service, no cron job: the agent wakes the instant an event fires and leaves a full audit trail behind.
The filter layer
Watch a payload pass, or get dropped.
Every inbound event runs through your filter rules before the agent wakes. Pick a payload and see exactly what the filter decides.
Delivery is not instantaneous. An event that reaches Actionist is queued before a worker picks it up, so allow for a short lag between the event firing and the agent starting. Design genuinely time-critical workflows with that in mind.
The concept
Stop polling. Start reacting.
A trigger is the configuration that connects an external event source to an agent. Every time a matching event arrives, Actionist hands the event data to your agent along with a natural-language task, and the agent runs.
Write a polling script. Deploy a webhook relay. Schedule a cron job. Check your inbox manually. Every approach involves infrastructure you have to build, host, and monitor before your agent sees a single byte of data.
Pick a source, write a task description in plain English, and click Create trigger. Actionist handles the subscription, receives the event, renders your instruction, runs the agent, and logs the whole thing, while you do something else.
Two vocabulary terms used throughout this page: trigger is the saved configuration (source + task + filter + delivery settings); event is each individual inbound payload that the trigger receives. One trigger receives many events over its lifetime.
Triggers work in the web app. Creating a trigger, managing it, and reading its event history are all available at Agent Studio → Triggers, with no desktop install required.
Sources
Two ways the world can call your agent.
The creation dialog offers two source buttons, and they set up differently. Select below to see what each involves.
HTTP webhook · setup
1.Name the trigger (e.g. New Stripe payment). Select the HTTP webhook tile.
2.Choose auth: Public (no auth) or Bearer secret backed by the Credentials Vault.
3.Save. Copy the generated webhook URL from the trigger row.
4.Paste the URL into Stripe / GitHub / Typeform, or any service that sends webhooks.
accepts any JSON payload · bearer secret checked against the Authorization header
Changing a saved trigger from one source type to the other is not something to rely on. If you need to switch, delete the trigger and create a fresh one.
App trigger · Gmail · GitHub · connected apps
1.Choose App trigger, labelled Gmail · GitHub · connected apps, then pick the app. Only connected apps appear.
2.Choose the app-specific event type. Dynamic option fields load from the provider live.
3.Save. A post-save panel may show a callback URL and one-time secret header to paste into the provider's dashboard.
Google services live here, not in a separate source · connect banner if no active connection
App triggers need the app connected first. Gmail and other Google services are reached through here rather than through a source of their own. If the provider connection is revoked, save will fail until you reconnect.
Get started
Create a trigger.
Open your agent in the studio, select the Triggers tab, and click Create trigger. An HTTP webhook shows five numbered sections. An App trigger shows four, because it has no webhook authentication step of its own.
Give the trigger a name (e.g. New Stripe payment). Select the HTTP webhook tile. Toggle Enabled on to start receiving events immediately after save.
Write a plain-language task description (up to 5,000 characters). This tells the agent what to do with each event. Use \{\{payload.fieldName}} to embed live values from the webhook body, for example:
```text task description theme={null}
Process the new payment for {{payload.customerEmail}} and log it to the CRM.
```
The Event Data picker below the field controls which payload fields the agent receives. Without a pasted sample payload, toggle Send the full payload to the agent on to forward everything.
Toggle Filter incoming events on if you only want the agent to run on a subset of payloads. Add one or more conditions with Add condition, choose All conditions (AND) or Any condition (OR), then pick a field path, an operator, and a value.
Leave the toggle off to run on every event, useful for prototyping.
Choose Public (no auth) for open integrations or Bearer secret for anything sensitive. If you choose bearer secret, pick an existing credential from your vault or click + Create new credential to create one inline. The credential value is checked against the request's Authorization header on every call, so producers send it the way they would send any bearer token.
The final section is headed When this trigger fires. Which destinations it offers depends on how the agent is set up; an agent with nothing else configured shows Runs only, meaning the run is recorded and nothing is posted anywhere. Check what your agent actually offers here rather than assuming a destination exists.
Click Create trigger. The trigger appears in the list. Expand the row to see the Webhook URL with Copy URL and Copy curl buttons. Paste that URL into your external service.
**Before you start.** The app you want to listen to must already be connected to your workspace. The source list only shows connected apps, so if yours is missing, connect it first and reopen the drawer.
Name the trigger and choose App trigger, the button labelled Gmail · GitHub · connected apps. The list shows only apps already connected to your workspace. Google services appear here rather than under a source of their own.
Select the app-specific event type. Some apps show dynamic option fields (e.g. workspace or channel IDs fetched live from the provider). These fields require an active provider connection. If the connection is revoked, save will fail until reconnected.
If the app requires a connection and none is linked yet, a banner with a Connect app button appears.
Complete these sections as in the HTTP path. The App-trigger path shows four numbered sections rather than five, because webhook authentication does not apply.
Click Create trigger. For apps that use their own webhook infrastructure, a post-save panel may appear with a callback URL and a one-time secret header name and value to paste into the provider's dashboard, this step completes the subscription on the provider's side.
agent studio · New Stripe payment · Create trigger
Create trigger✕
Basics
NameNew Stripe payment
Source
HTTP webhookApp trigger
Task
Process the new payment for \{\{payload.customerEmail}} and log it to the CRM.
Filter On
payload.amountgreater\_than500
Webhook auth
Public (no auth)Bearer secret
When this trigger fires
Runs only
Create triggerCancel
Create trigger drawer: HTTP webhook mode, all five numbered sections
The task section
Shape what the agent sees.
The Task section controls three things: what the agent should do, which payload values to embed in the instruction, and which event fields to pass alongside it.
Write a plain-language instruction for the agent. Up to 5,000 characters. Tell it what to do with the event, who to notify, where to store the result. The placeholder shows a minimal example:
> Summarize the email and add it to my notes
Event details are automatically appended to what the agent receives. You do not need to describe the payload schema in the task description itself. Use the task description for the goal, not the data.
Embed live payload values directly in the instruction using \{\{payload.fieldName}} tokens. When the trigger fires, each token is replaced with the matching field from the incoming event before the agent sees it.
```text example instruction theme={null}
Process the new payment for {{payload.customerEmail}} and log the
amount ({{payload.amount}}) to the CRM under their account.
```
What happens when a field is missing: the token renders as an empty string. Over-templating on fields that are not always present in the payload can produce confusing instructions. Use tokens only for fields the provider reliably sends every time.
The path supports dot notation for nested fields: \{\{payload.customer.email}}.
Below the task description, the Event data section controls which fields from the incoming event are included in the JSON block the agent receives alongside your task description.
Choosing fields: the picker shows a catalog of fields built from a sample payload. Checked fields are sent; unchecked fields are omitted. The count summary shows how many are included:
> 3 of 5 fields includedLeave it as "All fields" unless context window size is a concern. When no explicit selection is made, all fields are forwarded and new fields added to the event schema in the future are automatically included. An explicit selection is frozen. New fields require re-saving the trigger to include.
For HTTP triggers without a sample payload: toggle Send the full payload to the agent on to forward every field from the webhook body. Only top-level fields can be individually selected; nested objects are always sent wholesale.
If no fields are checked and "All fields" is also off, the agent receives only your task description. No event data at all. The picker shows a warning: "The agent will only see your task description, not any event data."
Task · Event data picker · Gmail trigger
Event data3 of 5 fields included
FromRecommended
SubjectRecommended
Email bodyRecommended
Message IDOther
Thread IDOther
Agent input preview
Summarize the email and add it to my notes
Event data picker, 3 of 5 Gmail fields selected with agent input preview
Filter section
Only wake the agent when it matters.
High-volume event sources like webhooks can fire hundreds of events per day. The filter layer lets the agent sleep through the noise and act only on the events you care about.
Toggle Filter incoming events on to add rules. The toggle hint describes the default: "Off = run on every event. On = only run on matching payloads." Choose All conditions (AND (every rule must match) or Any condition (OR) any rule is enough).
Exact string or number match. Works on any field type.
Substring match for string fields. Not available on boolean or object fields.
Numeric comparison. Only available when the field type is a number.
Checks whether the field is present in the payload at all. Use it to gate on optional fields.
For HTTP triggers, paste a sample payload before building filter rules. The Choose a field… path picker builds its suggestions from the sample. Without one, you can only type custom paths manually (e.g. payload.x.y).
The preview evaluates your filter with the same rule engine the live dispatch path uses, so the two cannot drift apart. What you see in the preview is what fires live.
Test it
Verify before you go live.
Two testing tools, two different guarantees. Use both before sending real traffic.
Preview with sample payload
The Preview with sample payload panel renders the exact instruction and evaluates every filter rule against any JSON you paste. It makes no model call and saves no event, so you can run it as often as you like.
Click the trigger row in the Triggers list to expand the detail panel.
In the Preview with sample payload section, paste a representative JSON payload: a real webhook body, a copied event from your provider's dashboard, or a hand-crafted example.
The panel instantly shows two things: the rendered instruction (with all \{\{payload.x}} tokens resolved), and the filter result:
* Pass, would dispatch
* **Fail, event would be filtered** (the agent would not run)
* **No filter configured** (filter is off)
Run live test: a real end-to-end run
Once the preview looks right, fire a real end-to-end test with Run live test. Unlike the preview, this creates a real event and actually runs the agent.
Run live test creates a real event and runs the agent. If the agent can write to external systems (send email, update records) those writes will happen. Ensure the agent's approval mode is set appropriately before running.
The Run live test button is disabled when the agent is off. Enable the agent in the studio first.
Confirm the dialog, which warns: "This creates a real event and runs the agent."
A toast confirms: "Live test fired. Open the chat session to follow it." Switch to the Recent events tab to watch the event progress through statuses in real time.
trigger · stripe-payments · Preview with sample payload
Sample payload
Preview
Rendered instruction
Process the new payment for [alex@example.com](mailto:alex@example.com) (amount: \$1200) and log it to the CRM.
Filter result
Pass, would dispatch
Preview with sample payload: tokens resolved, filter result: Pass
Diagnostics
Every event leaves a trace.
The Recent events tab on each trigger keeps a full log of every inbound event: its status, the rendered payload, the filter outcome, and a direct link to the agent run transcript.
The table auto-refreshes every 5 seconds so you can watch a live test progress in real time. Click any row to open the Event detail drawer.
* Payload: the raw event body, with sensitive keys automatically redacted
* Filter result: which rule passed or dropped the event
* Dispatch info: the agent, model, and run metadata
* Open chat session: a direct link to the full agent run transcript for completed or failed events
| Status | Meaning |
| --------------------------- | ----------------------------------------------------------- |
| Received | Event arrived; awaiting processing |
| Ready | Event parsed and queued; awaiting claim by the worker |
| Claimed | Worker picked it up; agent run starting |
| Dispatched | Agent is actively running |
| Completed | Agent run finished successfully |
| Failed | Agent run threw an error; details in drawer |
| Filtered | Event did not match the filter rules; agent was not invoked |
| Expired | Event sat unclaimed too long and will not run |
| Cancelled | Run was stopped before completion |
If a trigger receives events but the agent never seems to run, the most likely cause is that events are being filtered. Check the Recent events tab for rows with a Filtered badge and click the row. The drawer shows exactly which filter condition dropped it.
trigger · stripe-payments · Recent events
TimePayloadStatus
11:03amount: 2400, status: paidCompleted
10:55amount: 80, status: refundedFiltered
10:42amount: 1200, status: paidCompleted
10:18amount: 560, status: failedFailed
10:02amount: 3100, status: paidReceived
Event detail
Payload
Filter result
Filtered out, amount less than 500
Open chat session
Not available. Agent was not invoked
Recent events. Mixed status badges with detail drawer open on a Filtered row
Operations
Keeping triggers healthy.
Rotate the webhook URL
Rotate the URL when a secret is compromised or when you want to revoke access from a specific producer. The old URL stops accepting requests the moment you confirm.
Expand the trigger in the list to see the detail panel.
A confirmation dialog appears. Read it before continuing: rotating invalidates the current URL.
Confirm the rotation. The new URL appears immediately. Update every external producer before they send the next event.
Rotation takes effect with no grace period. Any request sent to the old URL after you rotate will be rejected, so plan for it, especially with high-volume producers.
Reference
Limits and defaults.
Backend limits such as maximum payload size, event time-to-live, payload retention, maximum run duration, dispatch interval, deduplication window, and lookback are not surfaced anywhere in the trigger UI. Rather than publish figures we cannot verify from the product, this page omits them. Ask the team if you need a guaranteed number for a specific limit.
| Thing | Behaviour |
| ---------------- | -------------------------------------------------------------------------- |
| Task description | Plain language, with a generous character allowance |
| Filter toggle | Off by default, meaning every event runs |
| Event data | All fields forwarded when you make no explicit selection |
| Destinations | Depend on the agent's configuration; an unconfigured agent shows Runs only |
States and controls
Trigger states and silent failures.
A trigger can be live and still appear to do nothing. Work through these in order rather than recreating the trigger.
| What you see | What it means | What to do next |
| ----------------------------------------- | -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| Trigger created, URL available | Live and listening. | Send a test event before wiring real traffic. |
| No events at all in the history | Nothing reached the trigger. | The problem is upstream. Check the URL, the method, and the authentication header on the sending side. |
| Events arrive but are marked filtered | The trigger received them and your filter excluded them. | Loosen the filter, or check the field names against a real payload. |
| Events arrive, nothing happens afterwards | The run happened but produced no visible result. | Check where the result was meant to go. An agent with nothing configured records the run and posts nothing. |
| An app trigger stops firing | The provider connection was revoked or expired. | Reconnect the app. Triggers that depend on it stay listed but cannot fire. |
Option fields on app triggers are fetched live from the provider. If the connection is revoked, those fields cannot load and the save is rejected. Reconnect the app, reopen the drawer, and select the options again.
A filtered event means the trigger is working correctly and your rule excluded that event. Check the badge before concluding the trigger has failed.
Tips
Best practices.
The Choose a field… path picker and the Event Data Picker both build their suggestions from the sample payload you provide. Without a pasted sample, only top-level keys appear and you cannot get field-level operator suggestions. Paste a real payload first, then build the filter.
The all-fields setting (undefined in the data model) auto-includes fields added to the event catalog later. An explicit selection is frozen. Any new fields the provider adds require you to re-save the trigger to include them. Prefer all-fields for low-stakes triggers; use an explicit selection only when the payload is large enough to cause context window issues.
Paste a representative payload into Preview with sample payload and confirm both the rendered instruction and the filter result look right. It makes no model call and saves no event, so there is no reason not to use it. Keep it distinct from Run live test, which creates a real event and runs the agent for real.
Store the secret in the Credentials Vault; the credential's value is checked against the request's Authorization header on every call. Public (no auth) is fine for low-stakes event buses; anything involving PII or financial data should always use bearer secret.
Rotation takes immediate effect with no grace period. Update all external producers before rotating if you can. Not after. If you are responding to a leaked secret and cannot coordinate, accept a brief delivery gap and update producers immediately after rotation.
Missing tokens render as empty strings silently. Over-templating on fields that are not reliably present produces confusing agent instructions. Use tokens only for fields your provider sends consistently on every event of that type.
If the trigger receives events but the agent never runs, check the Recent events tab for Filtered status rows. The Event detail drawer shows exactly which condition dropped the event, usually a value mismatch or a field that was not present in the payload.
An app trigger depends on a live connection to the provider, and provider connections can be revoked without warning by the user, by a password reset, or by a security policy. When a connected app stops delivering events, check the connection before you start debugging the trigger itself.
Real-world wins
The business moves while you are elsewhere.
Three event-driven triggers that close the gap between something happening and your team knowing about it.
Dario · Sales
New-lead webhook fires the moment a form submission lands. Dario's agent reads the payload, checks the CRM for context, and drafts a personalised intro email: ready to review before the lead has closed the tab.
live in \< 2 min after the first webhook fires
Felix · Finance & Ops
Gmail: New message with "invoice" in the subject wakes Felix's agent. It extracts the amount and due date, logs them to the expenses tracker, and schedules a payment-reminder task for three days before the deadline.
saves \~3 hrs/wk on manual invoice triage
Sam · Solo founder
Drive: File created in the Contracts folder triggers Sam's agent. It reads the filename and folder, adds a needs-legal-review flag to the project tracker, and posts a summary to the legal Slack channel. All before Sam is back from the meeting.
zero manual handoffs on contract intake
You were in a two-hour meeting. Three things happened in the world. Your agents dealt with all of them.
illustrative · Triggers · Actionist docs
Always on
## Turn your agent into an autonomous responder.
Pick a source, write a task, and let the world wake your agent instead of you.
Event-driven, not polling-based, with no infrastructure to host or monitor.
Filter before dispatch · Full audit trail · Works in the web app.
Keep going
Next steps.
Time-based automation, the complement to event-based. Recurring jobs and timezone-aware scheduling, with no cron syntax.
Store bearer secrets and OAuth tokens in the Credentials Vault, referenced by triggers without exposing raw values.
Configure approval mode and enable the agent. Run live test stays disabled until the agent is on.
Browse and connect the apps that provide App trigger sources, and see what events each one can fire on.
# Schedules
Source: https://learn.actionist.ai/Folders/schedules/index
Put your agents on the clock. One-time and recurring agent tasks, a full calendar, timezone handling, and a run history for every execution, with no cron syntax required.
ALWAYS ON TIME
## Your agents show up: whether you're there or not.
Describe the task once. Drop it on the calendar. The agent fires every morning, every week, or at the exact moment you need it: silently, in the background, with a full transcript waiting when you check in.
The idea
A calendar built for AI employees.
Every schedule targets a single agent task. Write the instruction once. The agent handles it on time, every time.
Fire an agent task at a specific date and time, once. Use it for things that happen once: a briefing before a product launch, a one-off data export, a post-event summary.
Fire on a repeating cadence: every morning, every Monday, the first of each month. Six frequency options, an interval multiplier, and three stop rules.
The whole Calendar page runs in the web app: month, week, and day views, schedule creation, editing, recurrence, filtering, deletion, and the Next up panel. Every schedule targets an Agent task, so the type is always "Have an agent perform a task".
Recurrence
Pick a pattern, see it on the month.
Toggle Repeat on in the ScheduleSheet to expand the recurrence block. Every combination is expressed in plain language. No cron syntax, no documentation to look up. Select a pattern to preview it:
Mo
Tu
We
Th
Fr
Sa
Su
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Once: June 10 at 09:00 your timezone. Fires exactly once, then the schedule is complete. Good for a pre-launch briefing or a one-off data export.
Every day at 09:00. Interval: 1. Continues until you set a stop rule (On date or After N occurrences) or delete the schedule.
Every Monday, Wednesday, Friday at 09:00. Use the day-chip picker (Mo, Tu, We…) to select any combination. The interval multiplier can make it every 2nd week, every 3rd, and so on.
Monthly: day 8, then 15th, then 22nd illustrates three separate monthly schedules at different dates. Each "Monthly" schedule targets one specific day of the month (e.g. the 15th). Interval: every N months.
Six frequency options are available:
| Frequency | What it means |
| ------------ | ---------------------------------------------------------------------------------------------- |
| **Minutely** | Every N minutes |
| **Hourly** | Every N hours |
| **Daily** | Every N days |
| **Weekly** | On selected days of the week · use the day-chip picker (Mo, Tu, We, etc.) to choose which days |
| **Monthly** | On a specific day of the month (e.g. the 15th) |
| **Yearly** | On a specific date each year |
The interval multiplier lets you say "every 3 days" or "every 2 weeks". Enter a whole number; the input accepts values from 1 up to 365.
Keep intervals small and check the live preview before saving. Very large intervals are worth sanity-checking against the listed next occurrences rather than trusting the number alone.
Three options control when a recurring series ends:
* **Never**: continues indefinitely until you edit or delete the schedule.
* **On date**: stops after a specific calendar date.
* **After N occurrences**: stops automatically after a set number of firings.
You choose the stop rule when creating the schedule and can change it at any time via "All occurrences" in the edit scope modal.
While you configure recurrence, the **PreviewPanel** on the right side of the ScheduleSheet shows the next occurrences in real time: date, day of week, and time for each upcoming run. Use it to sanity-check your cadence before saving.
The recurrence summary also appears as a human-readable sentence ("Every Monday and Wednesday at 09:00, starting June 15") so you can verify the pattern at a glance.
Click any event on the calendar to open the ScheduleSheet in edit mode. After you make changes and click **Save changes**, a scope modal appears with three options:
* **This occurrence**: change only the single instance you clicked.
* **This and following**: change from this occurrence forward, leaving past ones intact.
* **All occurrences**: change the entire series, including future occurrences.
A toast confirms "Schedule updated" after saving.
Overnight runs
While you slept.
Agents on a schedule don't wait for you to show up. By the time you open the app, the morning digest is already posted, the pipeline report is in your feed, and anything unusual has been flagged, all logged with full transcripts.
runs · overnight · Jun 12
CompletedMorning inbox digest · Maya1 m 52 s · 07:00Result
CompletedWeekly pipeline report · Dario3 m 14 s · 08:30Result
CompletedSpend anomaly check · Felix2 m 07 s · 08:30Result
CompletedSupport queue digest · Priya1 m 41 s · 09:00Result
Open any run to see the full transcript. The conversation below shows what checking in after the fact looks like.
S
Sam@sam\_actionist\_bot
ONLINE
SEEN · READING CONTEXT
Good morning. Here is your inbox summary for the last 12 hours: 23 emails processed, 4 flagged as needing a reply today, 1 marked urgent (Northwind contract renewal. Deadline Friday). The remaining 18 are filed or archived.
07:00
Pipeline report is ready. 11 open deals, 3 moved to proposal stage overnight. One deal at Northwind stalled. No activity in 9 days. Dario's report is in your home, in conversation with him.
08:31
TOOL · FLAG\_ANOMALY
Spend anomaly flagged: software line item 2.4x above the 30-day rolling average. Felix reviewed the transactions, two duplicate charges from the same vendor. Details in the spend report.
08:33
Got it. Anything I need to act on before standup?
09:02
Two things: reply to the Northwind contract thread before end of day, and approve the duplicate-charge reversal Felix queued. Both are waiting in your home with one-tap approve cards.
09:02
Illustrative scenario. Each run above maps to a recurring schedule on the Calendar page set to post into a conversation. The "spend anomaly" is the kind of narrow, scoped task scheduled runs handle best.
Time saved
A week on schedule.
Recurring jobs are small individually. Across a full week they add up. The receipt below reflects the schedules on this page running as described.
Weekly schedule summary
Mon · Fri · 5 recurring agents · typical week
Morning inbox digest (daily · 07:00)\~25 min / wk
Pipeline report, Dario (Mon · 08:30)\~20 min / wk
Spend anomaly check, Felix (daily · 08:30)\~30 min / wk
Support queue digest, Priya (Mon + Thu · 09:00)\~40 min / wk
Competitor brief, Maya (Fri · 10:00)\~35 min / wk
Typical weekly time back\~2.5 hrs / wk
ILLUSTRATIVE, BASED ON THE SCHEDULES DESCRIBED ON THIS PAGE
Orientation
The Calendar page.
Open the Calendar from the left navigation bar. The calendar itself fills the page, and a Next up panel sits on the right listing what runs soonest. The toolbar across the top carries everything else: the Month / Week / Day switcher, Today, previous and next, Filter by agent, Refresh, Hide panel, and + New schedule.
Press N to open a new schedule without reaching for the button. Hide panel collapses the Next up column and turns into Show panel to bring it back.
Calendar · Week viewToday‹›MonthWeekDayFilter by agentRefreshHide panel+ New schedule
Mon
Tue
Wed
Thu
Fri
8a9a10a11a12p1p2p3p4p5p
Pipeline report08:30
D
DarioSales
Active
Monday pipeline report
RunsWeekly · Mon · 08:30
Duration\~45 min
Next runMon · 08:30
Delivery#sales
saves \~50 min/wk
Daily analytics
M
MayaMarketing Manager
Active
Daily analytics check
RunsWeekdays · 09:00
Duration\~30 min
Next runTomorrow · 09:00
Delivery#marketing-daily
saves \~2.5 hrs/wk
Daily analytics
M
MayaMarketing Manager
Active
Daily analytics check
RunsWeekdays · 09:00
Duration\~30 min
Next runTomorrow · 09:00
Delivery#marketing-daily
saves \~2.5 hrs/wk
Invoice chase10:30
F
FelixFinance & Ops
Active
Overdue invoice chase
RunsWeekly · Tue · 10:30
Duration\~40 min
Next runTue · 10:30
DeliveryInto a conversation
saves \~45 min/wk
Follow-up sweep14:00
D
DarioSales
Active
Stale-lead follow-up sweep
RunsTue & Thu · 14:00
Duration\~30 min
Next runThu · 14:00
DeliveryDario's conversation
saves \~1 hr/wk
Daily analytics
M
MayaMarketing Manager
Active
Daily analytics check
RunsWeekdays · 09:00
StatusCompleted · 09:27
Delivery#marketing-daily
saves \~2.5 hrs/wk
Queue health
P
PriyaSupport lead
Active
Support queue health check
RunsMon · Wed · Fri · 13:00
Duration\~25 min
Next runToday · 13:00
Delivery#support
saves \~1.2 hrs/wk
Daily analytics
M
MayaMarketing Manager
Active
Daily analytics check
RunsWeekdays · 09:00
Duration\~30 min
Next runThu · 09:00
Delivery#marketing-daily
saves \~2.5 hrs/wk
Competitor scan11:00
M
MayaMarketing Manager
Active
Weekly competitor scan
RunsWeekly · Thu · 11:00
Duration\~45 min
Next runThu · 11:00
DeliveryInto a conversation
saves \~1 hr/wk
Follow-up sweep14:00
D
DarioSales
Active
Stale-lead follow-up sweep
RunsTue & Thu · 14:00
Duration\~30 min
Next runThu · 14:00
DeliveryDario's conversation
saves \~1 hr/wk
Cash-flow report16:30
F
FelixFinance & Ops
Active
Weekly cash-flow report
RunsWeekly · Thu · 16:30
Duration\~60 min
Next runThu · 16:30
DeliveryInto a conversation
saves \~1.5 hrs/wk
Daily analytics
M
MayaMarketing Manager
Active
Daily analytics check
RunsWeekdays · 09:00
Duration\~30 min
Next runFri · 09:00
Delivery#marketing-daily
saves \~2.5 hrs/wk
Queue health
P
PriyaSupport lead
Active
Support queue health check
RunsMon · Wed · Fri · 13:00
Duration\~25 min
Next runFri · 13:00
Delivery#support
saves \~1.2 hrs/wk
CSAT digest16:00
P
PriyaSupport lead
Active
Weekly CSAT digest
RunsWeekly · Fri · 16:00
Duration\~45 min
Next runFri · 16:00
Delivery#support
saves \~1 hr/wk
Filter by agentMaya · MarketingDario · SalesPriya · SupportFelix · Finance12 scheduled jobs · 4 agents · 24/7
Panel
"Next up" on the right lists what runs soonest. Hide panel collapses it; Show panel brings it back
Views
Month view (dots and chips per day), week view and day view (time-block tiles sized by duration)
Sheet
Click "+ New schedule", press N, or click an empty slot in the week or day view to open the ScheduleSheet
In month view, clicking a day cell opens a DayDrawer that lists every event for that day. Useful when multiple schedules land on the same date.
ScheduleSheet
Three sections, zero guessing.
The ScheduleSheet walks you through three sections in order. Select a section to explore its fields:
TypeAgent task: "Have an agent perform a task"
AgentSelect from your configured agents, e.g. Maya
GoalRequired. The task instruction. "Check my inbox and summarize unread messages." The agent receives this verbatim at run time.
The schedule type is always Agent task. The Goal field is the only required text, so be specific and keep it scoped to something the agent can finish in one run.
DatePick from the date picker. Displayed in the schedule's timezone.
Time09:00: HH:MM in the chosen timezone
DurationA dropdown with four options: 15 m / 30 m (default) / 1 h / 2 h. There is no free-text duration. Controls block height in the calendar and feeds the conflict checker.
TimezoneDefaults to system timezone. If this differs from your system zone an amber warning card appears. Read it before saving.
RepeatToggle on to expand the recurrence block. Off = one-time.
The PreviewPanel on the right of the sheet shows the next occurrences in real time: date, day of week, and time for each upcoming run.
Just run it: silent. The run still lands in Agent Studio → Runs, but nothing is posted anywhere.
Post into a conversation: a result card lands in your home, in conversation with the agent.
The section is headed When this run finishes, and those two are the choices. Whichever you pick, the run itself is always recorded.
**Before you start.** You need an agent to run the task, and it has to already exist. If you also want the result posted into a conversation rather than only recorded, set that up on the agent first, because the delivery section only offers destinations the agent can actually reach.
Click + New schedule in the toolbar, press N, or click any empty time slot in the week or day view. The ScheduleSheet slides in from the right.
The schedule type is already set to Agent task: "Have an agent perform a task." Select the agent from the dropdown, then type the task instruction in the Goal field (required). Example: "Check my inbox and summarize unread messages."
Pick the date and start time. Choose a duration from the dropdown: 15 m, 30 m (default), 1 h, or 2 h. Those four are the only choices. Duration controls the block height in week and day view and feeds the conflict checker.
Verify the Time zone dropdown. If it differs from your system timezone, an amber warning card appears. Read it before saving (see [Timezone handling](#timezone-handling) below).
To make the schedule recurring, toggle Repeat on and configure the recurrence block.
Decide whether the run announces itself. Just run it stays silent; Post into a conversation drops a result card into your home, in conversation with the agent. Either way the run is recorded.
Click Create schedule. A toast confirms "Schedule created" and the event appears on the calendar immediately.
ScheduleSheet · New schedule
1 What to run
TypeAgent task
AgentMaya
GoalCheck my inbox and summarize unread messages.
2 When to run
DateJune 17, 2026
Time09:00
Duration30 m
3 Repeat ON
FrequencyWeekly
DaysMoTuWeThFrSaSu
4 When this run finishes
Post into a conversation
Just run it
Create schedule
Next occurrences
Mon, Jun 17 · 09:00
Wed, Jun 19 · 09:00
Fri, Jun 21 · 09:00
Timezones
Timezone handling.
Every schedule stores a timezone as an IANA string. The app defaults to your system timezone, but for agents expected to fire during business hours in a different region, you choose the zone explicitly.
ScheduleSheet · When to run
DateJune 17, 2026
Time09:00
Time zoneAmerica/New\_York
!
Different from your computer's time zoneRuns at 09:00 in America/New\_YorkThat's 14:00 in your time zone (Europe/London)
When the schedule timezone differs from your system timezone, an amber banner appears: "Runs at \[time] in \[zone] — that's \[local time] in your time zone (\[your zone])." Read this before clicking Create schedule: it tells you exactly when the agent will fire in your local time. A 9:00 AM schedule in America/New\_York fires at 2:00 PM in Europe/London.
Actionist computes firing times from the timezone you select rather than from your browser's current offset, which is why the cross-zone warning card can tell you the local equivalent before you save.
Safety
Conflict detection.
The ScheduleSheet checks for overlaps against the same agent's existing schedules in real time, before you save.
New schedule
Overlap with same agent's existing schedule?
No
Save, schedule created
Yes
A conflict banner appears and blocks the save
Adjust time or duration, then save
Conflict detection is agent-scoped. Two schedules for the same agent that overlap will trigger the banner. Two schedules for different agents can share the same time slot without any warning. Each agent runs in its own execution lane.
Set the duration accurately. The conflict checker uses the stored duration as the overlap window. If you set a shorter duration than the task actually needs, the banner will not fire on a genuinely conflicting later schedule.
After each run
Where the result lands.
The When this run finishes section of the ScheduleSheet decides whether the run announces itself. There are two choices.
**No card.** The run executes silently and nothing is posted. It is still recorded in **Agent Studio → Runs**, so you can check on it whenever you want. Best for frequent background jobs where a notification every time would be noise.
**A result card lands in your home, in conversation with the agent.** Use this when you actually want to see the outcome without going looking for it, and when the scheduled task is part of an ongoing back-and-forth with that agent.
Both options record the run. The choice is only about whether a card is posted, so picking "Just run it" never means losing the result.
Per-agent view
One agent's schedules, in one place.
The Calendar shows every agent at once. To see just one, open Agents, select the agent, and click the Schedule tab. The panel inside is headed Scheduled runs and lists that agent's schedules with their next run time.
Maya · Schedule
Scheduled runs
Morning inbox digestNext: Mon Jun 17 · 09:00EditDelete
Weekly competitor scanNext: Thu Jun 20 · 11:00EditDelete
Scheduling is configured per schedule, not per agent. There is no agent-level scheduling master switch, no agent-level timezone, and no working-hours setting. Timezone lives on the individual schedule, in the ScheduleSheet.
Audit trail
Run history.
Every execution is recorded. Run rows live in Agent Studio → Runs, not on the Calendar page: open Agents, select the agent, and click Runs. Each row carries a timestamp, a status, the source that started it, and a link through to the result.
This works in the web app. Historical runs are visible there, not locked to a desktop install.
Agent Studio · Maya · Runs
CompletedMorning inbox digest2 m 14 s · 09:01Result
CompletedWeekly CRM update4 m 38 s · 09:00Result
FailedOvernight support digest, · 11:02Result
TimeoutFull codebase audit10 m 30 s · 14:15Result
runs · last 24 h
CompletedMorning inbox digest2 m 14 s · 09:01Result
CompletedWeekly CRM update4 m 38 s · 09:00 MonResult
CompletedSpend anomaly check2 m 07 s · 08:30Result
RunningCompetitor research briefin progress · 17:00Result
Status types
Completed
The agent task finished without error.
Failed
The task encountered an error. Open the run to see where it broke.
Timeout
The task ran too long and was ended before it finished.
Cancelled
The run was cancelled before it completed.
Running
The task is currently executing in the background.
Each row links through to the result Actionist recorded during that run: the tool calls, the model output, and the steps the agent took. That is what makes it straightforward to verify what actually happened, or to work out why something failed.
Rows also record their source, so you can tell a scheduled firing apart from a run you started by hand.
Under the hood
From clock to result in four steps.
Clock firesThe stored time arrives in the schedule's own timezone and the run is queued.
Agent executesThe Goal text is handed to the agent verbatim, and it works the task like any other run.
Run recordedThe result lands in Agent Studio → Runs with its status, timestamp, and source.
DeliveryIf the schedule posts into a conversation, the result card lands there too.
Reference
Limits and defaults.
What the scheduling controls actually offer you when you sit down to create one.
4duration options: 15 m, 30 m, 1 h, 2 h
30 minduration default
6frequencies: minutely to yearly
3stop rules: never, on date, after N
1–365interval multiplier, as exposed by the input
Systemtimezone default, changeable per schedule
| Parameter | Value |
| ------------------- | ------------------------------------------------ |
| Duration options | 15 m, 30 m, 1 h, 2 h (a fixed dropdown) |
| Duration default | 30 minutes |
| Frequencies | Minutely, Hourly, Daily, Weekly, Monthly, Yearly |
| Interval multiplier | Whole numbers; the input accepts 1 to 365 |
| Stop rules | Never, On date, After N occurrences |
| Timezone default | System timezone, changeable per schedule |
| Schedule type | Agent task (the only type) |
Runtime behaviour that the scheduling UI does not expose, such as execution timeouts, retry policy, queue depth, and history retention, is deliberately not documented here. Publishing numbers we cannot verify from the product is how documentation goes stale. If you need a guaranteed figure for a specific limit, ask the team rather than inferring one.
States and controls
Schedule states and failed runs.
A schedule that exists is not the same as a schedule that ran. These are the states worth being able to tell apart.
| What you see | What it means | What to do next |
| ---------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- |
| Schedule saved, next run shown | Valid and waiting. The next occurrence is calculated from your recurrence and timezone. | Nothing. Check the next run time matches what you intended. |
| Save is blocked | Validation rejected the schedule, most often a conflict with an existing run or a date in the past. | Read the message on the field, adjust, and save again. Nothing partial is stored. |
| Nothing happened at the scheduled time | The schedule may not have run, or it ran and produced no visible output. | Check the run history in **Agent Studio → Runs** before changing the schedule. |
| A run is recorded but nothing was posted | Delivery is set to run only, so the result is recorded rather than sent anywhere. | Change the delivery option if you want the result posted into a conversation. |
| Runs stop when your computer sleeps | The agent is running on your own machine. | Cloud placement keeps a schedule firing when your machine is off. |
If nothing arrived, confirm the schedule fired at all. A run that happened and returned nothing is a task-instruction problem. A run that never happened is a schedule, timezone, or placement problem. The two need opposite fixes.
A schedule stores the timezone you set it in. If you travel or your team is spread out, the run time follows the schedule's timezone, not your current one. Check it before assuming a run was missed.
Best practices
Make schedules reliable.
These patterns separate agents that run smoothly every day from ones that silently miss, timeout, or pile up.
Duration feeds the conflict checker. If you set a shorter duration than the task actually needs, the banner will not fire on a genuinely conflicting later schedule, and both will attempt to run at the same time for the same agent. Duration also controls block height in week/day views, so accurate values make the calendar readable at a glance.
The amber warning card shows the local-time equivalent before you click Create schedule. For agents expected to fire during business hours in a remote timezone, this is the moment to confirm, rather than after three wasted mornings.
There is no agent-level scheduling switch to forget, so when a schedule does not appear to have run, work through the schedule itself: is the time correct in the timezone you selected, did the recurrence actually place an occurrence where you expected, and does the run appear in **Agent Studio → Runs** with a failure rather than not at all? Those three answers separate "never fired" from "fired and failed", which need very different fixes.
You cannot save two schedules for the same agent at the same time; validation blocks it before the schedule is created. Treat that as a feature rather than an obstacle. If two tasks genuinely need to run together, give them to two different agents, which are free to share a slot.
A scheduled run gets your Goal text verbatim and nothing else, with nobody watching to clarify. "Summarize the last 24 hours of #engineering Slack messages" completes reliably. "Audit the entire codebase and produce a technical spec" is open-ended enough that you will not enjoy the result. Scope scheduled work tighter than you would scope a live conversation.
You do not move agents or schedules to the cloud by hand, and there is no Cloud item in the navigation to go looking for. Placement is handled for you, and an agent shows its runtime on its own card. See [Cloud](/Folders/cloud) for what that means in practice.
Set it once
## Put your agents on the clock.
Open the Calendar page, describe a task, and set it to fire every morning. The agent handles it. You check the transcript when you want.
Every execution is logged with a full transcript.
Conflict detection · Timezone-aware · Every run recorded.
Keep going
Next steps.
Configure the agent (tools, approval mode, memory permissions) before putting it on a schedule.
For event-driven automation: fire an agent when something happens, not at a fixed time.
Put an agent on Telegram or Slack so your team can reach it where they already work.
Move an agent to the hosted runtime so schedules keep firing when your laptop is closed.
# Settings
Source: https://learn.actionist.ai/Folders/settings/index
Configure language, billing, credentials, headless runtime, Pip, and macOS permissions, all in one place.
ONE PLACE FOR EVERYTHING
## Configure it once. Every agent picks it up.
Language, billing, encrypted credentials, headless runtime, and your assistant preferences: no hunting across menus. Change anything here, and every agent picks it up immediately.
Actionist, Settings
Settings
Agents
Apps
Billing
🌐
Language
English (US), 22 locales available
All users
💵
Billing
Pro plan · 5 seats · Active
Admin only
🔒
Credentials Vault
3 credentials · All active
Hidden in delegated
🖥️
Headless Runtime
Deploy to VPS · Running
Varies by plan
⚡
Help Assistant (Pip)
Calm mode on · Nudges off
All users
🖥️
Permissions Required
Screen Recording · Accessibility
macOS only
v2.4.1Check for Updates
The map
Seven sections, one scroll.
The Settings page is a single card-grid scroll. Select a section to see its key rows, access badges, and platform notes.
🌐
LanguageAll users
App language
Selects UI locale for the entire app
English (US)
22 locales available
Includes Arabic, Farsi, Urdu (RTL)
desktop + web
No save needed
Changes take effect the moment you select a locale
instant
The Language card is at the top of Settings. Pick any locale from the dropdown: the entire app UI, including Clerk sign-in components and RTL layout direction, switches in a single render cycle. No restart. Saved locally; survives backend outages.
💵
Billingadmin only
Plan
Current subscription tier
Pro
Status
Active, trialing, or past-due
Active
Renewal date
End of current billing period
Jul 11, 2026
Seats
Seats on the plan
5
Credit usage bar
Used + reserved vs ceiling this period
below the grid
Visible only to org admins (and delegated sessions with the billing\_summary scope). Non-admin members see no Billing card at all. Two actions: Upgrade to Pro (opens Stripe portal, hidden when already on business plan) and View billing details (navigates to /settings/billing-new).
🔒
Credentials Vaulthidden in delegated sessions
Add credential
Display name, provider, kind, value
API key, Token, Header, OAuth
Test now
Validates against the provider where supported
pass
Rotate
Requires credential to be enabled first
all bindings auto-update
Delete
Gated · blocked until all consumers are unbound
unbind consumers first
Search credentials
Filter the vault by name, provider, or kind
sub-panel inside vault
Values are encrypted at rest and never shown after save. No reveal button, no clipboard copy. If a key is lost, rotate rather than recover. The Credentials Vault card is hidden entirely when a delegated session is active.
🖥️
Headless Runtimevaries by plan
Run Locally
Runtime on your machine · good for testing
Deploy to VPS
Always-on runtime over SSH · no server scripting
Telegram Bot Token
From @BotFather · the only required field for local mode
required
Clerk M2M secret
Never stored by Actionist · re-enter on every VPS deploy
not stored
This card is not present in every workspace. Where it is available it offers two modes. Run Locally keeps the runtime on your machine, which suits testing. Deploy to VPS deploys over SSH for always-on agents. After a successful VPS deploy three buttons appear: Check Status, Logs, and Stop.
⚡
Help Assistant (Pip)All users
Calm mode
Freezes idle animation, silences all contextual tips
Hide for an hour
Removes Pip for exactly 60 minutes · shows resumption time
timed
Proactive nudges
Off by default · fires only for concrete gaps
Tip catalog
Per-tip on/off toggle · disable a tip once, never see it again
fine-grained
Reset Pip's position
Returns Pip to bottom-right corner
Reset
Four separate dials for Pip, from a full mute to a tip-by-tip opt-out. Calm mode keeps Pip visible but still and silent (good for long focused sessions). Hide for an hour removes Pip entirely for exactly 60 minutes (good for presentations). These two are distinct. Use whichever fits the moment.
🖥️
Permissions RequiredmacOS only
Screen Recording
Lets Actionist read on-screen state for Computer Use
Granted
Accessibility
Lets Actionist click, type, and navigate apps on your behalf
Not granted
Grant access
Opens macOS System Settings at the correct pane
opens System Settings
The Permissions Required card only appears on macOS, determined at runtime by the system platform. Not shown on Windows or Linux. Both Screen Recording and Accessibility are required for any agent using Computer Use. Grant them here if you skipped the first-run onboarding prompt.
↑
App Updatessticky footer
Current version
Shown in the sticky footer at the bottom of Settings
v2.4.1
Check for Updates
Shows Checking... while querying the update server
Up to date
Auto-reset
Both pass and fail states reset to idle after 5 seconds
5 s
The version footer is sticky at the bottom of the Settings page. Always visible as you scroll. Click Check for Updates to query the update server. If the check fails, an amber Update check failed message appears. Both states auto-reset after 5 seconds. Most failures are transient network blips; click again to retry.
Language
22 Instant switch.
Actionist ships with 22 locales out of the box, including three right-to-left languages. Pick one and the entire app UI changes immediately. No save button, no restart.
Select a locale to see the switch behavior
Locale saved locally. The entire app UI switches in one render cycle, no restart required. The setting survives app restarts and backend outages.RTL locale selected. The app layout direction flips to right-to-left immediately, including the sidebar and Clerk sign-in components. Saved locally, survives backend outages and restarts.
Click Settings in the sidebar. The Language card is at the top of the page.
Click the language dropdown. Each locale shows its country flag and name.
Select any of the 22 supported locales. The entire app UI switches instantly, including Clerk sign-in components and layout direction for RTL languages.
The chosen language is saved locally and survives app restarts, even if the backend is unreachable.
Our Tokyo, Berlin, and Cairo teams all use the same workspace. One locale switch and Actionist is native for everyone: no separate instances, no config drift.
Omar · Agency owner, 22-locale team
Settings, Language
App language
English (US)
🇺🇸 English (US) en-US
🇬🇧 English (UK) en-GB
🇮🇳 Hindi hi
🇦🇪 Arabic arRTL
🇫🇷 French fr
🇪🇸 Spanish es
🇩🇪 German de
🇮🇷 Italian it
Billing
Billing at a glance.
The Billing card is only visible to org admins. Non-admin workspace members do not see it. Delegated sessions with the billing\_summary scope can also view it.
The card gives a four-column summary of your subscription. Below the grid, a usage bar shows how much of your credit ceiling you have consumed and reserved so far this period.
Plan
Pro
Current subscription tier
Status
Active
Active, trialing, or inactive. A past-due banner shows the grace-period end date when payment is overdue.
Renewal date
Jul 11
End of current period
Seats
5
Seats on the plan
Credit usage this period
42% consumed + reserved
Opens the Stripe billing portal. Hidden when you are already on the business plan.
Navigates to the full billing page at /settings/billing-new inside the app.
Credentials vault
One vault. Every secret.
API keys, bot tokens, and OAuth credentials live here. Encrypted at rest, never revealed after save, and automatically propagated to every bound agent when you rotate them.
Credential values are encrypted in the vault and never shown after save. There is no reveal button and no clipboard copy of secrets. If you lose a key, rotate it. Do not try to recover it from Actionist.
How a credential travels.
DeclareThe SKILL.md names a slot (env: STRIPE\_SECRET\_KEY) never the value.
Save to vaultReal key stored encrypted in Settings > Credentials Vault.
Bind per agentKey icon on the Skills tab maps slot to vault entry, one-time.
Resolve at runtimeSecret injected silently on every run. Rotate in the vault; every skill updates automatically.
🔒
Stripe API Key
provider: stripe · kind: api\_key
Active
Used byResearch Agentsummarise.skill
Credential actions
Find the Credentials Vault section and click Add credential.
Enter a Display name, a Provider identifier (e.g. github), a Kind, and the Value. Use the show/hide toggle while typing to confirm the value.
Supported kinds: API key, Token, Header secret, Client credentials.
The value is encrypted immediately. It is never retrievable after this point.
Find the credential card and click Test now. Actionist probes the provider:
* Supported providers: validated against the real provider API.
* All other providers: structural validation (format and length check).
A badge appears on the card: a green check for a passing test, an amber warning with a reason for a failure.
The Rotate button is blocked for disabled credentials. If the status shows Disabled, click Enable first. The tooltip reads: "Enable before rotating."
Paste the new secret value into the form that appears.
Click to save the new value. All existing bindings (agents, skills, channels, MCP servers) pick up the new value automatically on their next call. No manual re-binding required.
Existing bindings keep working during and after rotation. They pick up the new value on next use.
Click Disable on a credential card to pause it without deleting it. Disabled credentials show an amber Disabled status badge. Bound consumers will fail until you re-enable.
Click Enable to restore it. If you need to rotate a disabled credential, you must enable it first.
The Delete button is intentionally gated. It stays disabled as long as any consumer references the credential.
The card lists every consumer under "Used by". Agents, model presets, skills, channels, MCP servers. Remove those references first. The tooltip reads: "Unbind consumers first."
If the Delete button shows "Refresh to verify usage before deleting", click the vault Refresh button to re-check.
Once all bindings are removed, Delete becomes active. Confirm in the dialog to permanently remove the credential.
Credential status badges
Every credential card carries one of four statuses:
The credential is valid and in use.
The last validation attempt failed. Test it and rotate if the key has been revoked.
Manually disabled. Consumers referencing this credential will fail until you re-enable it.
The OAuth flow that issued this credential requires re-authentication.
Re-authenticate support is not yet wired. The current workaround is to delete the credential and recreate it with a fresh token.
Paired runtimes
There is no Paired runtimes sub-panel inside the Credentials Vault. Machine identities are handled by the platform rather than surfaced as a screen you manage. If you were sent here to pair or revoke a runtime, that flow does not exist today.
A fresh one-time pairing code is generated and displayed.
Copy the code and paste it into the runtime process immediately.
The pairing code is shown exactly once. Once you close the dialog it is gone. Actionist does not store it. Treat it like a password.
There is no Paired runtimes panel to confirm this in.
To revoke a runtime, click the revoke action on its entry. Revocation is immediate and permanent. A new pairing code is required to re-authorise.
The Credentials Vault is hidden entirely when a delegated session is active.
Headless runtime
Run agents when your laptop is closed.
Headless Runtime keeps scheduled agents firing and Telegram bots responding around the clock, either on your local machine for testing or deployed directly to a VPS from within the app.
**Availability.** The Headless Runtime card does not appear for every workspace. If you open Settings and there is no Headless Runtime section, this feature is not enabled on your build or plan, and nothing in this section applies to you. Contact support before assuming it is a bug.
👤
You
⇅
Mode
Run Locally / Deploy to VPS
💻
Local Runtime
your machine
💬
Telegram bot
🏢
VPS Runtime
your server
💬
Telegram bot
🔑
SSH deploy
no scripting
Settings, Headless Runtime
Run LocallyDeploy to VPS
Connection
Host
Port: 22
Username
SSH Private Key path
Browse
Authentication
Clerk M2M secret (ms\_...)
Test ConnectionDeploy to VPS
Use this mode to run the agent runtime on your own machine. Good for testing before you have a VPS provisioned.
In the Headless Runtime card, select the Run Locally tab.
Paste the bot token from [@BotFather](https://t.me/BotFather). This is the only required field.
Enter a comma-separated list of Telegram User IDs in the Allowed User IDs field to prevent strangers from messaging your bot.
The status badge transitions: Stopped > Starting... > Running. When running, the badge shows the Telegram logo and "Connected."
Click Stop Runtime to halt the local process.
Use this mode for persistent, always-on runtime. Actionist deploys over SSH, no server scripting required.
**Before you start.** Collect these first, because the deploy form asks for all of them in one pass:
* SSH **host**, **port**, and **username** for the server.
* The path to your **SSH private key** file.
* Your **Clerk M2M machine secret** (`ms_...`). Actionist does not store it, so keep it in a password manager and expect to paste it again on every deploy.
* A **Telegram bot token** from [@BotFather](https://t.me/BotFather) if you want the Telegram gateway.
In the Headless Runtime card, select the Deploy to VPS tab.
Enter the Host, Port (default 22), and Username for your server. Then enter the path to your SSH Private Key or click Browse to pick the file. Click Test Connection to verify access before deploying.
Under Authentication, paste your Clerk M2M machine secret (format: ms\_...). This value is not stored: you will need to enter it again on the next deploy.
Keep the Clerk M2M secret in a password manager. Actionist never stores it locally. You must re-enter it each time you deploy.
Paste your Bot Token and optionally set Allowed User IDs.
If a runtime is already active, a confirmation dialog lists it and its last-seen time before you proceed. Confirm to replace it.
After a successful deploy, three buttons appear: Check Status, Logs (shows the last 50 lines in a scrollable panel), and Stop.
Advanced port settings: health port defaults to 9090, file-proxy port defaults to 7783. Leave the Base URL and File Proxy Secret blank unless you need the web dashboard file panel. The runtime and Telegram features work without them.
Help Assistant
Pip on your terms.
Pip is the always-on Actionist concierge. The Help Assistant section gives you four separate dials (from a full mute to a tip-by-tip opt-out) so Pip is as helpful or as quiet as you want.
Calm mode
Freezes Pip's idle animation and suppresses all contextual tips. Pip remains visible but completely still. Good for long focused sessions.
Hide for an hour60 min
Removes Pip entirely for exactly 60 minutes. While active, the button label becomes Show Pip again and shows the resumption time. Good for presentations.
Proactive nudges
Off by default. When enabled, Pip surfaces concrete action items inline: an agent missing a model preset, an MCP server waiting for auth, pending marketplace updates. You can also opt in during onboarding.
Tip catalogfine-grained
Lists every registered tip with an individual on/off toggle. Disable a tip to prevent it from ever firing again. Re-enable at any time. Keep the tips you find useful, silence the ones you do not.
⚡
Help Assistant (Pip)All users
Calm mode
Freezes animation, silences tips
Hide for an hour
Removes Pip for 60 minutes
Hide Pip
Proactive nudges
Off by default
Tip: "Connect your first app"
Tip catalog entry
Tip: "Set a model preset"
Tip catalog entry
Tip: "Try the schedule editor"
Tip catalog entry
Reset Pip's position
Returns Pip to bottom-right corner
Reset
Resetting Pip's position
If you have dragged Pip to an inconvenient location, click Reset under "Reset Pip's position." Pip returns to the default bottom-right corner of the screen.
Permissions
macOS permissions.
The Permissions Required card only appears on macOS. It is not shown on Windows or Linux. The gate is determined by the system platform at runtime.
Actionist needs two macOS permissions to observe your screen and control UI elements for Computer Use. Without both, agents that rely on screen automation cannot run.
Screen Recording macOS only
Allows Actionist to see your screen. Required for any agent that uses Computer Use to read on-screen state.
Accessibility macOS only
Allows Actionist to control UI elements. Required for any agent that clicks, types, or navigates apps on your behalf.
For each permission not yet granted, click the Grant access button on its row.
macOS System Settings opens at the correct pane. Toggle the permission on for Actionist.
Switch back to the app. The permission row updates to reflect the granted status.
These permissions are also requested during first-run onboarding. If you skipped them then, grant them here any time. Agents will start using Computer Use the next time they run.
App updates
Checking for updates.
A sticky footer at the bottom of the Settings page shows the current app version and a Check for Updates button.
⟳
Checking...
Querying the update server
✓
You're up to date
Green check. No update available
⚠
Update check failed
Amber, usually a transient network blip
The button shows Checking... with a spinner while the update server is queried.
You're up to date: a green checkmark confirms no update is available.
If the check fails, an amber Update check failed message appears instead.
Both states auto-reset to idle after 5 seconds. Click the button again to retry.
Best practices
Getting the most out of Settings.
Use Test now to confirm the current key is still valid before rotating. If it is already broken, rotating wastes a round-trip of updating every dependent agent. You will know immediately that a fresh key is needed.
The Delete button stays disabled as long as any consumer (agent, model preset, skill, channel, MCP server) references the credential. Read the tooltip: it tells you exactly what is blocking deletion ("Unbind consumers first"). This prevents silent breakage across your workforce.
The chosen locale is saved locally on your device, not to the backend. It survives app restarts and backend outages. There is no separate save step. The change takes effect the moment you select a locale.
The Clerk M2M machine secret (ms\_...) is never stored by Actionist. By design. You re-enter it on every deploy. Store it in a password manager alongside your other deployment secrets.
These two controls are distinct. Calm mode keeps Pip visible but freezes the animation and silences tips. Good for long focused sessions. Hide for an hour removes Pip entirely for exactly 60 minutes. Good for presentations or calls where you do not want the character visible.
If one specific tip fires too often but others are useful, disable only that one in the Tip catalog. It will never fire again unless you re-enable it. You do not have to choose between all tips or no tips.
Nudges are off until you opt in. When enabled, they fire only when Pip detects a concrete gap: an agent without a model preset, an MCP server waiting for auth, or pending marketplace updates. They are not marketing prompts.
If Check for Updates returns "Update check failed," the button auto-resets after 5 seconds. Click it again. Most failures are network blips.
Configure once
## Your agents handle the rest.
Add your credentials, set your language, deploy the runtime, then let Actionist run.
Credentials encrypted at rest, never revealed after save.
Language saved locally · Vault-backed secrets · Per-agent scoping · Nothing leaves your workspace.
Keep going
Next steps.
Deep-dive into the vault: how credentials are bound, rotated, and scoped to individual agents.
Learn how Headless Runtime keeps agents firing when your laptop is closed.
Understand plans, seats, usage, and the Stripe portal.
Manage the agents that consume the credentials and runtimes you configure here.
Install integrations, credentials are often auto-saved when you connect an app.
macOS permissions are also covered in the first-run onboarding guide.
# Skills
Source: https://learn.actionist.ai/Folders/skills/index
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.
ENCODED EXPERTISE
## Teach it once. Every agent knows it.
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.
The moment it clicks
Watch a skill get matched.
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.
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.
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.
One source of truth
Every agent, same playbook.
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.
skills · one file · single source of truth
The file
One file. Five jobs.
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.
Where skills come from
Three source labels, one catalogue.
Every skill card carries a source label telling you where it came from and what you can do with it.
CatalogueInstalled from the catalogue
Community and curated skills you installed through Explore catalogue. Updates surface under the Updates filter.
WorkspacePresent in your workspace
Skills available to your workspace and the agents in it. Visible to your organisation, never published publicly.
CustomYou 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.
The page
The Skills page at a glance.
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
The header counts what matters: how many skills are enabled, how many are in your workspace, and how many are custom.
Four tabs narrow the list: All, Your Skills, Custom, and Catalogue. Under them, category buttons filter by subject. Results render as cards, not rows.
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.
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.
First flow
Find a skill, read it, enable it.
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.
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`.
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.
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.
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.
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
Frontmatter preview
View source
Enabled
Authoring
Three ways to create a custom skill.
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.
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.
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.
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.
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**.
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.
From the Skills page, click **Record process** in the page header, then begin the task you want to capture.
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.
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.
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.
```yaml SKILL.md (minimal) theme={null}
---
name: email-summarise
description: Reads unread Gmail messages and returns a ranked summary grouped by sender.
version: 1.0.0
triggers:
- when the user asks to summarize unread emails
- when the user wants a morning email digest
credentials:
gmail_token:
env: GMAIL_ACCESS_TOKEN
provider: google
kind: oauth
displayName: Gmail OAuth token
required: true
allowed-tools:
- read_file
- mcp_gmail_list_messages
- mcp_gmail_get_message
---
# email-summarise
Read 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 format
Return a markdown list. Each item: **[Sender Name]**: summary sentence. Prefix urgent items with `[URGENT]`.
```
```yaml SKILL.md (with fork context) theme={null}
---
name: competitor-research
description: Researches a named competitor and produces a structured brief.
version: 1.0.0
context: fork
triggers:
- when the user asks for a competitor brief
- when the user wants to research a company
arguments:
competitor_name:
description: The company to research
required: true
---
# competitor-research
Research {{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.
Reference
Frontmatter, field by field.
The anatomy explorer above shows where each field lives. Here is the full detail for each one.
Both fields are required. Without them, the skill fails validation and appears as an invalid badge on its folder in the side pane.
```yaml theme={null}
name: email-summarise
description: 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`.
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.
```yaml theme={null}
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.
Declares the API credentials this skill needs. Actionist resolves them from your vault at runtime. No keys are stored in the SKILL.md body.
```yaml theme={null}
credentials:
gmail_token:
env: GMAIL_ACCESS_TOKEN
provider: google
kind: oauth
displayName: Gmail OAuth token
required: true
```
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.
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.
An explicit list of tools this skill is permitted to call. Restricts what the agent can do while executing this skill.
```yaml theme={null}
allowed-tools:
- read_file
- mcp_gmail_list_messages
- mcp_gmail_get_message
```
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.
Named variables the agent passes into the skill at invocation time. Useful for skills that handle a class of tasks where one input changes.
```yaml theme={null}
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}}`.
Credentials
One-time setup, zero per-run prompts.
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.
In your `SKILL.md`, add a `credentials:` block naming every secret the skill needs. This is a slot declaration, not the value itself.
```yaml theme={null}
credentials:
stripe_key:
env: STRIPE_SECRET_KEY
displayName: Stripe Secret Key
required: true
```
Go to **Settings → Credentials Vault** and add the key under the same variable name (`STRIPE_SECRET_KEY`). The vault encrypts values at rest.
How to add, rotate, and scope API keys in the vault.
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
Catalogue
A growing library you don't have to maintain.
The Actionist catalogue hosts community and curated skills. Install once, pick up updates when new versions land, and uninstall cleanly when you are done.
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.
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.
Newly installed skills are disabled by default. Open the Agent Studio → **Skills** tab, find the skill, and flip its toggle on.
If the skill declares credentials, a Key icon appears beside the toggle. Click it to open the binding drawer and wire the vault entry.
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 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.
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.
Click **Upload skill** in the header. The "Upload skill archive" dialog opens. Click to select your `.zip` file.
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.
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.
Publishing
Share your skill with the community.
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.
On the Skills page, find your custom skill in the **Custom** group. Click the row to open the Skill Drawer.
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.
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.
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.
States and controls
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 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.
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.
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.
Best practices
What experienced skill authors do differently.
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.
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.
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`.
`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.
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.
Limits
Limits to know.
256 KBmax SKILL.md file size
128 KBmax resource file size
500max skills per source
10max folder nesting levels
50 MBmax skill archive upload
0symlinks allowed, rejected unconditionally
Five minutes
## Author your first skill today.
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.
Skills encode tested procedures, not guesses.
Vault-backed credentials · Per-agent scoping · Reviewed before publication.
Keep going
Next steps.
Enable skills per agent from the Studio Skills tab, and configure credential bindings for each.
Store and rotate the API keys that skills resolve from the vault at runtime.
Browse community skills, pick up updates, and publish your own.
Where agents run when nobody is watching, and what that means for the skills they load.
# Help & Support
Source: https://learn.actionist.ai/Folders/support/index
Report bugs, track feature requests, and reach the Actionist team, without leaving the app.
BUILT INTO THE APP
## Your support channel, inside the work.
Report a bug, suggest a feature, or ask us anything. We reply within one business day, and every status change shows up here as it happens, no browser tab required.
The idea
Not a ticket portal. A pipeline.
Support lives at the same address as your work: no browser tab, no email thread, no guessing whether your report landed.
You file a ticket in a browser portal, receive an auto-reply by email, and periodically check back hoping something changed. Context lives in five different tabs.
You raise the ticket from the app, attach a screenshot or recording, optionally include the day's diagnostic log in one click, and watch status advance in a structured pipeline, right here, as it happens.
The response SLA shown in the app is "within one business day." This is the current UI string. Confirm with the team if you need a contractual guarantee for your use case.
Ticket types
Three types, each with its own pipeline.
Pick the type when you raise a ticket. The pipeline you see on the detail view then matches how that type of report actually moves through the queue. Select a type to watch its stages animate:
SubmittedReceived and under review
VerifiedBug confirmed as reproducible
FixedResolved, ships in next update
ClosedNo further action needed
SubmittedYour report has been received and is under review.
VerifiedThe team has confirmed the bug is reproducible. Not yet fixed, but acknowledged.
FixedThe issue has been resolved. Usually shipped in the next update.
ClosedNo further action needed.
SubmittedReceived and being considered
ApprovedOn the roadmap, committed
ImplementedFeature has shipped
ClosedComplete
SubmittedYour request has been received and is being considered.
ApprovedThe feature is on the roadmap. Not yet built, but committed.
ImplementedThe feature has shipped.
ClosedComplete.
SubmittedQuestion received
AnsweredTeam has replied. Check the Activity thread
ClosedResolved
SubmittedYour question has been received.
AnsweredThe team has replied. Check the Activity thread.
ClosedResolved.
Bug reports include repro steps and ideally a screen recording so the team can reproduce the exact failure path before investigating.
Feature requests work best as problems. "I need bulk CSV import because I manage 50+ agents" gives the team far more than "add CSV import."
Approved ≠ Implemented. Approved means on the roadmap. Implemented means shipped. Do not mistake the earlier stage for completion.
Navigation
Getting to Help & Support.
Look for the lifebuoy in the bottom section of the left sidebar. It is always visible. No need to scroll or open a settings panel.
Three cards load immediately: Bugs, Feature requests, and General support: each showing counts at each pipeline stage. This gives you a live snapshot of your open reports before looking at any individual ticket.
Below the stats is the All submissions table. Columns show type, title, status, and last-updated time. Tickets with new admin activity carry a New badge; that badge clears the moment you open the ticket.
Help & Support
Bug reports
Submitted 2Verified 1Fixed 0
Feature requests
Submitted 3Approved 1Implemented 2
General support
Submitted 1Answered 2
AllBugsFeaturesGeneral
Search title…
TypeTitleStatusUpdated
BugLogin button unresponsive after 2FA on Safari iOS NewVerified2 hr ago
FeatureBulk CSV import for skillsApprovedYesterday
GeneralHow do I share an agent with a teammate?Answered3 days ago
BugWorkflow editor freezes on large branching diagramsSubmitted4 days ago
Use the filter pills (All, Bugs, Features, General) to narrow the table to one type. To find a specific ticket by title, type in the Search title box. The search fires after you have typed at least 3 characters (a hint appears for shorter input) with a short debounce so results update as you type. The list is paginated at 20 tickets per page.
A New pill appears on any ticket that has received a new admin reply or a status update since you last opened it. Opening the ticket clears the badge. It reappears the next time new activity arrives.
Raise a ticket
The two-step wizard.
Click Raise a Ticket in the banner to open the wizard. Two steps: pick a type, then fill in the details. Below is what each step looks like:
Step 1. Pick a typeStep 2, Fill in details
Bug report
Something isn't working the way it should. Reports include repro steps and ideally a recording.
General support
A question, an account issue, or a how-do-I. Anything that doesn't fit the other two.
Feature request
A new capability or an improvement to an existing one. The more "why" the better.
Step 1. Pick a typeStep 2, Fill in details
Title \*
Login button unresponsive after 2FA on Safari iOS
45/120 characters · keep it specific
Description \*
After completing 2FA on iPhone Safari, tapping Login does nothing. Refreshing the page clears the session. Repro rate: 9/10 attempts.
Related area
Account
Include diagnostic logs to help us debugView
Bug tips
Describe the exact steps to reproduce, not just the result.
Include the OS, browser, and app version.
A screen recording is worth a thousand words.
One bug per ticket. Easier to track and close.
Three cards appear: Bug report, General support, Feature request. Click one to advance to the form. Each card includes a one-line description to help you choose the right channel.
Raise a new ticket✕
Pick a type
Bug report
Something isn't working the way it should. Reports include repro steps and ideally a recording.
General support
A question, an account issue, or a how-do-I. Anything that doesn't fit the other two.
Feature request
A new capability or an improvement to an existing one. The more "why" the better.
The form opens. A tab bar at the top lets you switch type without losing your draft. Fill in the required fields:
* **Title**: 8 to 120 characters. The placeholder changes per type.
* **Description**: at least 20 characters.
* **Related area**: choose the area of the app: Actions, Apps, Agent, Skills, Workflows, Account, Billing, or Other.
A contextual tips sidebar on the right shows per-type writing guidance.
See the Step 2 wizard mock rendered above. It shows the exact fields and tips layout described here.
Drag files onto the attachment drop zone or click to browse. You can attach up to 5 files, each up to 10 MB. Accepted formats: `.png`, `.jpg`, `.jpeg`, `.mp4`, `.mov`. Remove any file individually before submitting.
Video files (`.mp4`, `.mov`) upload successfully and are visible to support admins. The in-app lightbox shows a placeholder, download the file to play it.
This step only applies to bug tickets raised from the desktop app. Tick Include diagnostic logs to help us debug to bundle today's app log with the ticket. Click View first to preview what will be sent before you consent.
See [Diagnostic log consent](#diagnostic-log-consent) below for full detail.
Click the submit button. Report this bug, Ask a question, or Suggest a feature depending on type. If you try to close the wizard with unsaved input, a confirmation dialog appears: Discard to abandon the draft, or Keep editing to return to it. On success the modal closes and the list refreshes automatically.
If you close the wizard before submitting, you will see a "Discard this ticket?" confirmation. Click Keep editing to go back to your draft. It is not saved once you confirm discard.
Diagnostic logs
Diagnostic log consent.
One checkbox bundles the day's app log with a bug ticket. No log-hunting, no copy-paste. Entirely opt-in.
Today's app log (app-YYYY-MM-DD.log). The log is admin-only. It does not appear in your ticket attachments list.
Click View to read the last 256 KB before you tick the box. If the file is larger, the preview is truncated but the full file is always uploaded. The label "Showing last 256 KB of \[size]. Full file is uploaded." appears when truncation occurs.
The checkbox appears on bug tickets raised from the desktop app, because the log file it attaches is written on your own machine. It is not shown in the web app, and the preview reports that no log file was found when you are running a development build.
app-2026-06-11.log (preview)
\[2026-06-11 09:14:02] INFO scheduler:start agents=4 interval=60s
\[2026-06-11 09:14:03] INFO ipc:ready channel=main-renderer
\[2026-06-11 09:14:11] INFO auth:clerk status=signed-in user=[you@example.com](mailto:you@example.com)
\[2026-06-11 09:22:51] ERROR workflow:run id=wf\_8Bx2 step=send-email error="SMTP\_TIMEOUT after 4000ms"
\[2026-06-11 11:45:12] INFO mcp:connect server=gmail status=ok
Showing last 256 KB of 1.2 MB. Full file is uploaded.
App logs are only written in packaged, production builds of the desktop app. In development or beta environments the preview may show "No log file found for today.". This is normal. Nothing is uploaded in dev mode.
Ticket detail
Following a ticket after you raise it.
Click any row in the submissions table to open the full ticket. The detail view shows everything in one place: your original description, the pipeline stage, the full conversation thread, and the reply composer. Watch the thread build:
ticket · #1042 · Login button unresponsive after 2FA
New
SubmittedVerifiedFixedClosed
YouToday at 09:31
After completing 2FA on iPhone Safari, tapping Login does nothing. Refreshing clears the session. Repro rate: 9/10 attempts. Diagnostic log attached.
status changed: Submitted → Verified
AdminToday at 11:14
Thanks for the detailed report. Reproduced the exact flow on Safari 17.4.1 / iOS 17.4. The issue is a race condition in the session cookie write after TOTP validation. We have a fix in review. Will update you once it ships.
YouToday at 11:22
Appreciate the quick turnaround. Any workaround in the meantime? Trying Chrome on iOS seems to work, but we have users who only use Safari.
AdminToday at 11:48
Chrome on iOS is a safe workaround for now, you're right that it avoids the issue. The fix targets the next patch release, which we aim to ship within 48 hours.
Reply to thread…
Send reply
The status progress bar reflects the pipeline for that ticket's type. Bug tickets show the four-stage bug flow; feature requests show their own four stages; general tickets show their three. The current stage is highlighted.
The Activity section is chronological. You will see your own messages, replies from the Actionist team labelled Admin, and synthesized status-change events when the ticket moves through the pipeline. Type in the composer at the bottom and click Send reply to add a message at any open stage.
Once a ticket reaches Closed status, the reply composer is disabled and the message "This ticket is closed." appears. If the same issue recurs, click the inline Raise new ticket button that appears in the closed-ticket view. It opens a fresh wizard.
Helper chat
Raise a ticket through the Actionist helper.
You don't have to open the wizard. The Actionist helper can guide you through ticket creation conversationally, useful when you spot an issue mid-workflow and don't want to break your flow.
chat · Actionist helper
helperHi there! I'm here to help. Are you facing a bug, or do you have a question or suggestion for us?
youI found a bug with the login flow on Safari iOS.
support skill matched, collecting details
helperGot it. Bug report. Can you describe what happens and the steps to reproduce it?
youAfter 2FA the login button does nothing. Repros 9 out of 10 times on iPhone Safari.
helperWould you like to include today's diagnostic log? I'll show you a preview before attaching anything.
When you navigate to the Help & Support page, the helper greets you:
> "Hi \[name]! I'm here to help. Are you facing a bug, or do you have a question or suggestion for us?"
Click Start chat to begin, or type directly in the chat at any time from anywhere in the app.
Say something like "I found a bug" or "I want to request a feature." The helper identifies the intent and loads the support skill automatically. It is not visible in your skills list and activates transparently.
It collects title, description, and related area through conversation. For bug tickets it asks for steps to reproduce before proceeding.
The helper asks whether you would like to include the diagnostic log and any attachments before submitting. Nothing is sent without your explicit agreement.
On your approval the ticket is created and immediately appears in your Help & Support list. The same ticket you would have raised through the wizard.
Type "I found a bug with \[area]" or "I have a question about \[topic]" in any Actionist chat to raise a ticket without leaving your current workflow. The helper handles the rest.
I spotted the issue mid-workflow, typed two sentences to the helper, ticked the log checkbox, and the ticket was in the queue before I'd even switched tabs. The whole thing took under a minute.
Priya: support lead, managing 120+ inbound tickets a week
Best practices
Tips for getting the most from support.
If the submissions table seems unresponsive to typing, check that your input is at least 3 characters. Shorter input is silently ignored. The hint "Type at least 3 characters to search" appears below the field for shorter input.
Click View next to "Include diagnostic logs to help us debug" before enabling the checkbox. The preview shows the last 256 KB of the log file so you can confirm the content before consenting. The log is admin-only and does not appear in your ticket attachments.
If the preview shows "No log file found for today.", you are likely on a development or beta build. App logs are only written in packaged production releases. The diagnostic feature is simply unavailable in that environment.
While on Step 2 of the wizard, use the tab bar at the top to change the ticket type. The title, description, and area fields are preserved when you switch, only the type label updates.
`.mp4` and `.mov` attachments are accepted, uploaded, and fully visible to support admins. The in-app lightbox shows a placeholder message. Download the file to play it locally.
When a ticket is Closed the reply composer is disabled. If the issue persists, click the inline Raise new ticket button in the closed-ticket view to open a fresh wizard.
The in-app tips sidebar says: "Frame the problem you're trying to solve, not just the solution." A request like "I need bulk CSV import for skills because I manage 50+ agents across clients" gives the team far more to work with than "Add CSV import."
Approved means the feature is on the roadmap. The team has accepted it but has not yet built it. Implemented means it has shipped. Similarly, Verified confirms a bug is reproducible; Fixed means it has been resolved. Do not mistake the earlier stage for completion.
One click away
## Something broken or something missing?
Click the lifebuoy, raise a ticket, and the team will pick it up. Status updates appear here as they happen.
Support lives where your work lives: no context switching, no lost threads.
Structured pipelines · Status in real time · Agent-assisted creation.
Keep going
Related pages.
Find the support icon in the sidebar and get oriented with the full app layout.
Raise a ticket under the Agent area if you run into an issue with agent behavior.
Skills-related tickets belong under the Skills area in the dropdown.
MCP server and app connection issues route to the Apps area.
# Web app
Source: https://learn.actionist.ai/Folders/web-app/index
Chat with your cloud agents from any browser. The full Actionist interface, with no desktop install required.
BROWSER-NATIVE
## Your agents, from any browser.
Agent studio, marketplace, real-time chat, file attachments, the full Actionist interface in a browser tab. No install. No setup. Open a tab and your cloud agents are right there.
The idea
The same interface, wherever you are.
Actionist is a web app. The browser gives you the whole interface: agent studio, marketplace, workflow viewer, calendar, and chat. A short list of features still needs the desktop build, and that list is below.
7
features fully available in the browser today
3
surfaces coming soon, shown rather than hidden
1
surface that needs a local machine
0
broken buttons, because gap cards replace them
Agent studio, marketplace, workflow viewer, calendar, and the Cloud Runtime tab all work in the browser today. Set up agents, browse skills, and manage your cloud runtime without installing anything.
Where a surface is not ready in the browser yet, you get a card explaining why instead of a button that does nothing. You can always tell what works today and what is still coming.
Try it · surfaces
Same agent. Two surfaces.
The same agent card renders differently depending on where you are. Switch between the two to compare.
Browser chat for agents running on your own machine is coming. Cloud agents can chat here today.
Browser chat
Watch the connection open.
Cloud agents are fully chat-enabled from the browser. Step through the live flow, from Connecting to Working to a completed reply with a file attachment uploaded.
app.actionist.ai/agents/maya/chat
MayaConnecting…ConnectedWorking…
Stop
Start fresh
Connecting to Maya…
session open · last 200 messages loaded
YouCan you pull the Northwind account summary?
MayaSure, fetching from CRM now.
Composer active. Drop files or send a message.
YouCan you pull the Northwind account summary?
MayaSure, fetching from CRM now.
YouAlso attach this for context.
northwind-q3-brief.pdf, uploading…
YouCan you pull the Northwind account summary and cross-reference the Q3 brief I just attached?
northwind-q3-brief.pdf, uploaded
Maya
YouCan you pull the Northwind account summary and cross-reference the Q3 brief I just attached?
northwind-q3-brief.pdf, uploaded
MayaNorthwind: enterprise tier, renewal October, champion Dana Voss. Q3 brief matches: slide format confirmed, renewal risk flagged. Two open invoices. Want me to draft the renewal prep email?
Message Maya…
"Connected" and "Working" are independent. Connected = the SSE stream is open. Working = the agent is running. A brief reconnect during a run auto-resyncs without losing context.
Upload only after "Connected". Files silently no-op if the header still shows "Connecting…". Wait for the green dot before dropping attachments.
Retry uses the original key. A failed message shows an error chip. Always use Retry, never retype. The deduplicate key prevents double-sends even if the original was stored before the ack failed.
In the wild
Run your store from a sun lounger.
A cloud agent keeps running while you are away. Open the web app on your phone, ask a question, approve what needs approving, done.
J
June
@june\_actionist\_bot
ONLINE
Give me the weekend order summary. Friday close to now.
10:14
Refund request #RF-4471Order #ORD-9820 · placed Fri 14:32
Item: Linen tote bag (qty 1). Carrier marked delivered but customer reports non-arrival. Tracking last ping: local depot Fri 17:11. No further scan.
Flagged: carrier gap over 48 h
ApproveDeny
Approve it: carrier's fault, not theirs.
10:16
TOOL · ISSUE\_REFUND
Done. Refund issued for order #ORD-9820. Customer notified automatically. 2 remaining refund requests are standard policy, no manual review needed.
10:16
The web app works on any mobile browser. No app store install required. Open app.actionist.ai, sign in once, and your VPS agents are available from any device.
app.actionist.ai/agents/maya/chat
MayaConnectedWorking…
Stop
Start fresh
YouCan you pull the Northwind account summary and cross-reference the Q3 brief?
northwind-q3-brief.pdf, uploaded
MayaNorthwind: enterprise tier, renewal October, champion Dana Voss. Q3 brief matches: slide format confirmed, renewal risk flagged.
YouDraft the renewal prep email.
Maya
Message Maya…
The flow
Chatting with a cloud agent.
Cloud agents are fully chat-enabled from the browser. Here is the full flow from landing on the Agents tab to having a conversation.
Open the web app in any browser. The Clerk sign-in page appears. Use the same email/password or SSO as your desktop app. Your agents, settings, and workspace carry across automatically.
On the Agents tab, look for a cloud badge on the agent card. Only cloud agents support browser chat today. If the Chat button is inactive, the agent is not running in the cloud.
Click Chat. The browser navigates to the agent's chat page. The header shows "Connecting to \[name]…" while the session opens, then "Connected" once it is ready. The conversation history loads up to the last 200 messages.
The composer placeholder reads "Message \[name]…". Type a message and send it; use a newline for multi-line messages. The header switches to "Working…" while the agent runs.
Drop files onto the composer at any time after "Connected" appears. Each file shows a progress chip while uploading. A failed attachment shows an error chip with the file name. It does not block other attachments from sending.
Click Stop (visible while "Working…") to halt the agent mid-run. The header briefly shows "Stopping…". To clear the conversation and start a blank session, click Start fresh in the top-right. A confirmation dialog appears before the session resets.
Controls
Understanding the chat header.
Connected / Connecting…Reflects the SSE stream health, not whether the agent is running. A brief reconnect during a run is normal. Run state auto-resyncs.
Working…Shown alongside Stop when the agent is actively executing. Independent of the connection indicator.
StopSends a halt signal mid-run. Header shows "Stopping…" briefly, then a terminal chip: Stopped, Completed, Turn limit reached, Timed out, or Failed.
Start freshCreates a new session ID and clears the visible log. Agent memory is not deleted. Terminal chips do not persist across reload.
The header shows "Connecting…" while the SSE stream is opening and "Connected" once it is live. This is independent of run state. "Connected" simply means the channel is open. A brief reconnect during a run is normal; the app auto-resyncs run state from the backend without losing context.
While the agent is running, a Stop button appears in the header alongside the "Working…" label. Clicking it sends a stop signal. The header transitions to "Stopping…" briefly, then shows a terminal chip ("Stopped") when the run ends. Other possible terminal chips: "Completed", "Turn limit reached", "Timed out", "Failed".
Terminal chips are client-only state and do not persist across page reload. Reload the page to clear them.
"Start fresh" in the top-right opens a confirmation dialog before clearing the chat. Confirming creates a new session ID and discards the client-side history. The agent's memory is not deleted, only the visible conversation log is cleared.
A failed message from the old session cannot be retried after Start fresh. If you have a pending retry, use Dismiss first if you do not want to send it, then start fresh.
If a message fails to send, a red error chip appears: "Your message didn't send. Try again." with Retry and Dismiss buttons. Always use Retry rather than retyping the message. The retry carries the original deduplicate key, so the backend will not create a duplicate even if the original was persisted before the acknowledgement failed.
Cloud placement
Where an agent runs.
An agent placed in the cloud keeps running when your computer is off, so its schedules, triggers, and channel bots carry on without you. Placement is handled for you. There is no Move to VPS button in Agent Studio and no migration dialog to work through.
If you are looking for a control to move an agent to the cloud, there is not one. Check the agent's current placement in Settings → Cloud Runtime, which is available in the web app.
Placement, status, and what changes when an agent runs in the cloud.
Status
Checking Cloud Runtime status.
1
ProvisioningVPS allocated
2
StartingRuntime booting
3
ActiveProcess live
4
ReadyHeartbeat within 90 s
Go to Settings → Cloud Runtime. The tab is available from both the web app and the desktop app.
The stepper shows four stages: Provisioning → Starting → Active → Ready. The page auto-polls every 4 seconds while the status is Provisioning or Starting. You can leave the page, provisioning continues in the background.
Ready means the runtime is active and the last heartbeat arrived within the past 90 seconds. If the runtime is active but the heartbeat is stale, the UI shows "Starting" until a fresh heartbeat arrives. Click Refresh to manually re-poll.
The Cloud Runtime tab shows: "Your plan doesn't include a cloud runtime" with an Upgrade plan button that opens the billing upgrade flow. You must be on a plan that includes the hosted runtime before provisioning begins. See [Billing](/Folders/billing) for plan details.
A suspended runtime shows: "Your cloud runtime is suspended." Update your billing to resume your hosted runtime. Your data is retained while suspended.
app.actionist.ai/settings/cloud-runtime
AccountBillingCloud Runtime
✓
Provisioning
✓
Starting
✓
Active
Ready
Regioneu-west-1
Versionruntime-2.4.1
Last heartbeat12 s ago
TelegramConnected
Best practices
Tips for the web app.
Agent Studio shows a save state in the header. Wait for it to report that changes are saved before leaving the page, or the edits you just made may not be applied to the next run.
After a send failure, always use the Retry button in the error chip rather than retyping the message. Retry reuses the original deduplicate key, so the backend will not create a duplicate message even if the original was stored before the acknowledgement failed. A retyped message carries a new key and creates a second message.
File uploads start only after the session is open. If you drop a file while the header still shows "Connecting…", the upload silently no-ops. Wait for "Connected" before attaching anything.
"Connected" / "Connecting…" reflects the health of the SSE stream; "Working…" reflects whether the agent is actively running. A brief reconnect during a run is normal. The app auto-resyncs run state from the backend and restores "Working…" without you doing anything.
Reloading the page during an active run is safe. The chat hook re-fetches the last 200 messages and re-checks the active run ID on mount, so the "Working…" state is restored automatically.
If the Cloud Runtime tab shows the "Upgrade plan" CTA, upgrade your plan first. Moving an agent to VPS requires an entitlement. The move is blocked until the plan includes a hosted runtime.
## Your agents don't clock out.
Move an agent to the cloud. Close your laptop. Open any browser and pick up where you left off.
Same account. Same agents. Any browser.
Honest about gaps · No broken buttons · Auto-resync on reconnect.
Keep going
Next steps.
Provision and manage the hosted runtime that keeps your cloud agents running 24/7.
Configure Agent Studio, pick the tools an agent can use, and set its approval mode.
Connect Telegram or Slack so an agent is reachable from your phone.
Upgrade to a plan that includes a hosted runtime and unlock browser chat for all your agents.
# Workflows
Source: https://learn.actionist.ai/Folders/workflows/index
Design visual automations that combine agents, computer use, and integrations. Build once, run on a schedule forever.
VISUAL AUTOMATION
## Build the procedure once. Run it forever.
Actionist workflows are visual graphs of typed nodes (actions, conditions, loops, tools) wired together into a procedure you design once in the editor and trigger from chat, a schedule, or the Run button.
The idea
Write the procedure once. Run it forever.
Every time you describe the same multi-step task from scratch, you pay twice, once to think it through and once to supervise it. A workflow locks the procedure in so you never repeat yourself.
You type the steps, pick the tools, explain the context. Every single time. The agent starts fresh. When something changes, you re-explain everything.
You design the branching logic, variables, and tool calls once in the visual editor. Any run (from the Run button, a chat session, or a recurring schedule) reuses the exact same procedure.
Actionist stores workflows in a graph format (v2) with typed nodes and wired edges. An older linear format (v1) is preserved for backward compatibility. The visual editor always uses the graph format.
Under the hood
How a workflow moves.
A trigger starts the run. Execution walks the graph node by node, evaluating conditions and loops, until it reaches the end node.
▶
Start
✓
Action batch
✓
Action batch
◇
Condition
true
↻
Loop
⊕
Merge
■
End
Condition branches
trueevaluator passes → enters loop, iterates up to 50×, rejoins at merge
falseevaluator fails or errors → skips loop, jumps directly to merge (safe path)
00:01.8conditionrow\_count > 0 → true — routing to loop
00:02.4loop\[1/24]processing row 1 of 24 — iteration cap: 50
Speed Mode on by default. Consecutive action and step nodes batch into a single CUA pass. Up to 7 in graph mode. Add a condition or merge node to break a batch boundary.
Condition fails safely. Any evaluator error defaults to false. Design the false branch as the guard path (retry, exit, or escalate) not the destructive step.
Loop caps at 50 by default. For known-bounded tasks, set a tighter limit. If the evaluator is unreachable, loops exit immediately. Fail-closed, not runaway.
Actionist — Workflow Editor
△ UNSAVEDSave
Variables
texttarget\_url
numbermax\_results
Basic Information
Preconditions
Success Criteria
Rules
▶ Start
◆ Action
◆ Action
◇ Condition
truefalse
⊕ Merge
■ End
The workspace
Two halves, one editor.
The workflow editor is split into a configuration panel on the left and a visual graph canvas on the right. Both must be complete before you save.
The left panel holds seven collapsible sections. Drag the divider to give more room to the canvas or the config.
ℹ
Basic Information
Name (required) and description, shown on library cards and in the marketplace.
✓
Preconditions
Natural-language conditions that must be true before execution begins. Failure stops the run before the first node.
◎
Success Criteria
Natural-language statements that define a completed, successful run, used by the orchestration layer to evaluate true finish.
○
Domains
URL or domain patterns the workflow may operate on. Constrains which sites computer-use action nodes are permitted to touch.
\{}
Variables
Typed inputs declared at design time, filled at run time. Supported types: text, number, boolean, date, select.
≡
Rules
Hard constraints in plain language applied across every node, injected into the orchestration context before the first node runs.
□
Ask Human
Prompts that pause execution and surface a question to the user: for approvals, clarifications, or edge-case handling.
ℹBasic Information
✓Preconditions
◎Success Criteria
○Domains
\{}Variables
≡Rules
□Ask Human
The canvas is where you design the workflow's logic. Nodes live on the canvas; edges wire them together.
Toolbar, live state△ UNSAVED
Control
Action
Back (chevron)
Returns to the workflow list — "Back to Workflows"
Undo / Redo
Stepped history of canvas changes
Validation icon
Shows error or warning count; click to surface issues per node. Shakes and blocks save on hard errors.
UNSAVED badge
Orange badge with alert icon — appears when there are unsaved changes. Disappears on save.
Export (download)
Downloads full workflow JSON including graph, nodes, edges, variables, and rules.
Import (upload)
Loads a workflow JSON file; fresh IDs are assigned so it never conflicts with existing workflows.
Save
Commits the workflow. Absent on subscribed marketplace workflows — they open view-only.
The Save button is absent when viewing a subscribed marketplace workflow. Marketplace workflows open in view-only mode. See the Subscribed workflows section below.
Node vocabulary
Eleven building blocks.
Every workflow is composed from these node types. Select a type below to see its fields, when to use it, and why it exists.
◆
Action node
Execution
What it does
Drives computer-use automation. Each action node has a subtype that maps to a specific CUA operation. The orchestrator executes it against the live screen.
Subtypes
navigateCUAload a URL
clickCUAclick an element
typeCUAenter text into a field
waitCUApause for condition or duration
screenshotCUAcapture screen for inspection
scrollCUAscroll to position or element
selectCUAchoose a dropdown option
hover / keyCUAmove cursor; send keyboard shortcut
extractCUApull structured data from current page
Key fields
subtyperequiredwhich CUA operation to run
completionCriteriaoptionalsuccessIndicators\[] and failureIndicators\[] so the orchestrator knows when done
timeoutMsdefault 120000per-node timeout in ms
maxAttemptsdefault 3retries before the node is marked failed
evidenceHints.urlPatternsoptionaleliminates false-positive completions on navigate nodes
When to use: any step that requires touching a UI, clicking buttons, filling forms, extracting table data, navigating between pages. If a direct MCP tool covers the operation, prefer a Custom tool node instead. It is faster and more reliable.
▶
Step node
Execution
What it does
A higher-level natural-language instruction. OrchAgent interprets the step and decides which tool calls or CUA operations to use. Less precise than an action node; useful for exploratory or variable steps.
Key fields
instructionrequiredplain-language description of what to do
completionCriteriaoptionalsuccess and failure indicators for the orchestrator
timeoutMsdefault 120000per-node timeout in ms
When to use: steps where the exact UI interactions vary (e.g. "summarise the top three results"), or early in workflow design when you want OrchAgent to figure out the mechanics before you pin down specific action subtypes.
◇
Condition node
Control flow
What it does
Evaluates a check and routes execution down the true or false edge. On any evaluator failure, defaults to false, so design the false branch as the safe path.
Check types
element\_visibleUIelement is present on screen
element\_not\_visibleUIelement is absent
element\_countUIhow many of a given element exist
text\_containscontentstring appears in page text
url\_containscontentstring appears in current URL
number\_comparisonnumericcompare value against threshold
counterloopcompare loop iteration count
customNLnatural-language check for edge cases
Key fields
checkTyperequiredwhich of the 8 check types to run
parametersvariesselector, value, operator. Depends on check type
trueEdgerequiredtarget node ID for the true branch
falseEdgerequiredtarget node ID for the false (safe) branch
When to use: whenever the workflow must branch based on what the agent sees. Results count, URL reached, value threshold, element presence. Wire the false edge to the guard path: retry, exit, or escalate.
↻
Loop node
Control flow
What it does
Repeats a subgraph until a condition is met or maxIterations is reached. Default cap is 50. On any evaluator error during a loop, the loop exits immediately. Fail-closed, not runaway.
Key fields
maxIterationsdefault 50hard cap. Set tighter for known-bounded lists
exitConditionoptionalcondition that ends the loop early
bodyEdgerequirededge into the loop body subgraph
When to use: iterating over a list of rows, pages, or items where the count is not known at design time. Pair with a file-operation node inside the loop body to accumulate results without blowing up the context window.
⊕
Custom tool node
Execution
What it does
Invokes an MCP-backed or built-in tool directly by ID, bypassing computer use entirely. Faster, cheaper, and more reliable than screen automation when a direct integration exists.
outputBindingoptionalvariable name to receive the tool's output
When to use: any step where a direct MCP integration covers the operation. Slack messages, Notion updates, Linear issues, database queries. If the required MCP server is disconnected, the run is blocked at initialization with an error naming the missing server.
■
File operation node
Utility
What it does
Reads, writes, or updates files in the workflow's isolated file workspace. Tag each operation with a purpose so the orchestrator and downstream steps know how to use the data.
Purpose tags
memorytagcross-step state: kept between nodes, not returned to user
contexttaginjected into subsequent steps as read context
artifacttagoutput returned to the user at the end of the run
Key fields
operationrequiredread / write / append / delete
pathrequiredfile path within the isolated workspace
purposerequiredmemory / context / artifact
contentwrite onlysupports variable references via \$\{varName}
When to use: loop bodies producing large intermediate outputs; multi-step scrapes where results accumulate across iterations; any step that generates an artifact to hand back to the user. Keeps the context window clean. Do not store large outputs in variables.
Start / End
Every workflow begins at exactly one Start node (receives trigger payload and variable values) and exits at one or more End nodes. Multiple end nodes are allowed for different exit paths.
Merge
Joins two or more incoming edges back into a single execution path. Use it to reunite branches after a condition split so the rest of the graph sees one stream.
Goto / Subroutine
Goto jumps execution to another node by reference. Use sparingly. Subroutine embeds another workflow by ID and runs it inline; the parent waits for it to complete. Subroutines compose. They can themselves contain subroutines.
Node palette
▶ start
■ end
◆ action
◇ condition
↻ loop
⊕ merge
→ goto
⊞ subroutine
▷ step
⊕ custom-tool
▣ file-op
Variables
One workflow, any input.
Variables are typed inputs you declare once at design time and fill in at run time. The same "extract data from site X" workflow works for any URL you supply, just change the variable.
Open the Variables section of the left panel. Add a variable with a name (use snake\_case. It becomes the form label in the run modal), a type, and an optional default value.
Supported types: text, number, boolean, date, select.
In any node's detail panel, use the variable name inside a placeholder expression. Both syntaxes work:
```text theme={null}
${target_url}
{{target_url}}
```
The orchestration layer substitutes the real value before the node executes.
When you click Run workflow, a modal titled "Run Workflow" opens and lists every declared variable with its type and description. Fill them in and click Run.
When scheduling a workflow via the Calendar, the same variables appear under "Workflow variables". Set the defaults there and they apply to every scheduled run.
Use descriptive snake\_case names for variables. report\_date, target\_url, max\_results. The run modal displays them verbatim as form labels, so the person filling them in needs no additional documentation.
In the sidebar, click Workflows. The library opens at /workflows, sorted by last updated. You will see three tabs at the top: All, Mine, and Subscribed.
Click + New workflow in the hero band. The graph canvas opens at /workflows/editor with a blank canvas and an empty left panel.
In the left panel, open Basic Information. Give the workflow a name and a short description. This is what teammates see on the workflow card.
Open the Variables section. Add any inputs the workflow needs at run time. URLs, date ranges, IDs. Give each a descriptive snake\_case name and a type.
Drag node types from the palette onto the canvas. Start with a start node, add action or step nodes for each operation, connect them with edges, and add condition or loop nodes for branching. End with an end node.
Click any node to open its detail panel and configure parameters. Reference your variables with \$\{var\_name} syntax.
Open the Rules section in the left panel. Add any cross-workflow constraints in plain language. For action nodes, set completionCriteria in the node detail panel. Success and failure indicators help the orchestration layer know when a step has genuinely finished.
The validation icon in the toolbar shows the error and warning count. Resolve any blocking errors (the icon shakes when save is blocked). Then click Save: the orange UNSAVED badge disappears.
Execution
Running a workflow.
Workflow execution is currently rolling out. You can still create, edit, import, and export workflows fully today. When execution is enabled in your build, the Run button activates. Until then you will see: "Workflow execution is temporarily disabled. You can still create, edit, import, and export workflows."
**Before you run.** Every app and MCP server the workflow references must be connected, and any credential those steps need must already be saved. A run is blocked at initialization if one is missing, so it is quicker to check first than to debug the failure.
When execution is available, here is how a run works:
On the workflow library page, locate the workflow you want to run. Each card shows the workflow name, description, and last-updated time.
Click Run workflow on the card. If the workflow has declared variables, a modal titled Run Workflow opens and lists each variable with its type.
Enter the values for this specific run and click Run. A new chat session opens titled "Workflow: \{\{title}}". Execution streams live. Each step shows its tool calls, inputs, and outputs.
If a required MCP server is disconnected, the run is blocked at initialization and an error names the missing server. Connect it in Settings → Apps/MCPs and try again.
The visual editor works in the web app. Building, saving, importing, and exporting a workflow all happen in the browser.
Share and reuse
Portable and composable.
Export a workflow for safekeeping or to share with a teammate. Install one from the marketplace and customise it for your own context.
The toolbar's Export button (download icon) serialises the full workflow (graph, nodes, edges, variables, rules, left-panel config) to a single JSON file. Importing restores the workflow with freshly-assigned IDs so it does not conflict with existing workflows.
When to export:
* Before a major restructure: snapshot first, experiment freely.
* To share a workflow with a teammate who does not have access to your workspace.
* To version-control your workflows alongside the rest of your project.
To import: click the Import button (upload icon) in any workflow editor's toolbar and select the JSON file. The imported workflow appears in your library as a new workflow.
Workflows installed from the marketplace appear under the Subscribed tab. They open in view-only mode: the Save button is absent and nodes are not editable. This protects the upstream source so you can receive updates from the publisher.
To customise a subscribed workflow:
From the Subscribed tab, find the workflow. Click the kebab (three-dot) menu on the card.
Select Duplicate. Actionist creates a copy in your library as a fully editable workflow.
Open the duplicate. The Save button is present and all nodes are editable. Make your changes and save.
The duplicate is independent of the original marketplace entry. If the publisher releases an update, the subscribed version reflects it but your duplicate does not. You will need to re-duplicate or apply changes manually.
‹ Back to Workflows · Subscribed
ExportImport
▶ Start
◆ Action
■ End
\[ locked ] View-only — duplicate to edit
Limits and defaults
What the system defaults to.
These values apply when you do not configure them explicitly. Most can be overridden at the node level.
50default loop maxIterations
120 000 msdefault per-node timeout (2 min)
3default per-node max retry attempts
7Speed Mode batch, graph workflows
10Speed Mode batch, linear workflows
falsecondition evaluator failure default
breakloop failure default, exits immediately
21library page size, sorted by last updated
Speed Mode batches consecutive action and step nodes into a single computer-use pass. This is faster but can cause ordering issues in complex graphs. If steps appear to be skipped or run out of order, add a condition or merge node to break the batch boundary.
Best practices
Build workflows that hold up.
Action nodes can carry completionCriteria with successIndicators\[] and failureIndicators\[], plus a per-node timeoutMs and maxAttempts. Without these, the orchestrator guesses from raw CUA output. Add evidenceHints.urlPatterns\[] on navigation steps to eliminate false-positive completions.
The default is 50, which is appropriate for open-ended scrapes. For known-bounded loops, iterating over a fixed-length table, processing a list with a known count. Set a tighter limit. If the evaluator is unreachable, loops exit immediately (fail-closed, not runaway), safe but still better to bound them correctly.
Variables hold scalar values (strings, numbers). For large intermediate outputs (scraped tables, extracted JSON, multi-page results) use file-operation nodes tagged purpose: 'memory' or 'artifact'. This keeps the context window clean across many steps and prevents variable bloat.
Custom-tool nodes reference tools by ID. If a required MCP server is disconnected, the run is blocked at initialization with an error naming the missing server IDs. Connect or reconnect them in Settings → Apps/MCPs before attempting to run.
Condition nodes default to false on any evaluator failure. Wire the false edge to the safer action (retry, exit, or escalate) not to the destructive or irreversible step. The true branch should be the happy path; the false branch should be the guard.
The toolbar Export button serialises the full workflow JSON. Import restores it with new IDs. Snapshot a working workflow before major restructuring. If something breaks mid-edit, you can reimport the last good state without losing the whole workflow.
The editor opens subscribed workflows in view-only mode (no Save button, no node editing). To customise: use the kebab menu on the card and select Duplicate. The duplicate becomes a fully editable workflow in your library.
Both \$\{varName} and \{\{varName}} syntax work. The run modal displays variable names verbatim as form labels. target\_url is self-documenting; v1 is not. Descriptive names mean anyone filling in the modal needs no additional explanation.
custom-tool nodes invoke MCP-backed tools directly, bypassing computer use entirely. They are faster, cheaper, and more reliable than screen automation for apps that expose a proper integration. Use action nodes only when no tool covers the step.
If the same sequence of steps appears in multiple workflows, extract it into its own workflow and embed it as a subroutine. The parent workflow waits for the subroutine to complete before continuing. Subroutines compose. A subroutine can itself contain subroutines.
In practice
From a four-hour checklist to one run.
The monthly close involves the same sequence of steps every time. Below is what it looks like before and after encoding it as a workflow with built-in approval gates.
Before · manual close
09:00Pull AR ageing report from accounting app, paste into spreadsheet
09:30Cross-check 23 expense line items against receipts folder manually
10:15Draft variance commentary, email Felix a briefing to review
11:00Wait for Felix to review, reminder sent if no reply by noon
12:30Apply Felix's edits, re-export PDF, upload to shared drive
13:00Post summary to Slack #finance channel, mark task complete
Design once. Run on any trigger, any schedule, any surface.
Visual graph editor · Typed variables · MCP + CUA in one graph.
Keep going
Next steps.
Put a workflow on a recurring schedule. Daily digests, weekly reports, hourly monitors.
Understand the CUA engine that powers action nodes: vision, clicking, and screen extraction.
Connect the MCP servers your custom-tool nodes depend on: Slack, Notion, Linear, and more.
Browse and install community-built workflows. Publish your own for others to reuse.
# GitHub
Source: https://learn.actionist.ai/apps/github/index
Repositories, issues, pull requests and webhooks. Give your agents full developer lifecycle access through a single OAuth connection.
DEVELOPER LIFECYCLE
## An agent that lives inside your repo.
Triage the backlog. Comment on the PR. Dispatch an Actions workflow. Draft the release notes. One OAuth connection wires 33 verified GitHub tools into every agent you trust with it: no webhook receiver to host, no dashboard to watch.
Capabilities
33 tools across the full developer lifecycle.
GitHub tools cover eight service areas. An agent can read the repo, triage issues, review code, trigger CI, and manage releases, all in one conversation.
33verified GitHub tools
8service areas covered
1OAuth connection needed
0webhook receivers to host
Read file contents, list repositories for a user or org, retrieve a repo's license, and pull traffic analytics (popular paths and referrers). Use these to give an agent full context before it drafts a PR comment or creates an issue.
Create, edit, comment on, and lock issues; fetch all open issues by repo or by user. The issue tools are the fastest path to automated triage: point an agent at your inbox and have it label, prioritize, and respond, unattended.
List open pull requests, create code reviews, retrieve and update review sets. Wire a trigger on PR-opened to fire an agent that checks for missing tests, leaves a first-pass comment, and requests reviewers.
Create, update, delete, and list releases. A scheduled agent can pull all merged PRs since the last release, group them by label, and publish a formatted release note. No manual write-up required.
List, enable, disable, get usage, and dispatch workflow runs. An agent can trigger a staging deploy, check its status, and post the result to Slack, all from a single chat message.
Get user repositories, retrieve issues assigned to a user, and invite members to an organization. Use org tools in onboarding automations that set up repo access when a new teammate joins.
Combine `github:*` tools (GitHub REST API) with the bundled `git-official` MCP (local Git) for a coding agent that can stage commits and file the PR in a single run. The two are separate. `git-official` operates on local repos; `github:*` calls the remote GitHub API.
Setup
Connect GitHub.
OAuth is the recommended path: your credentials never touch the desktop, and one connection covers every agent you authorize. A Personal Access Token stored in the Credentials Vault is the alternative for narrower, read-only access.
**Before you start.** You need a GitHub account with access to the repositories your agents will work on. If your organisation restricts third-party OAuth apps, an owner has to approve Actionist before the connection completes, so check that first if authorization keeps failing.
In the Actionist sidebar click Apps. Search for "GitHub" or browse the Code & Source Control category filter to find the GitHub card.
Open the GitHub detail page and click Connect GitHub. Actionist creates a one-shot OAuth handoff URL and opens your system browser to GitHub's consent screen.
GitHub requests four scopes: `repo`, `admin:repo_hook`, `read:user`, and `user:email`. Authorize the app, GitHub redirects to the Actionist backend callback.
Actionist polls the backend every 2 seconds. When the handshake completes, the connection card updates with your connected account name and email. The session window is 10 minutes. If it expires, click Connect GitHub again.
PAT alternative. Store a Personal Access Token in Settings → Credentials Vault (provider: `github`, display name e.g. `"GitHub PAT — work"`). Any MCP or skill that declares `env:GITHUB_TOKEN` picks it up automatically. One entry covers every tool that needs it.
Agents
Give an agent access to GitHub tools.
Open any agent in the Agents studio → Tools tab. GitHub tools (`github:issues:create`, `github:repositories:getIssues`, and the rest) appear there once the connection is established. Toggle the ones this agent needs.
"Summarize open issues in actionist/catalog-test, group by label, and post the digest to #engineering on Slack." The agent calls `github:repositories:getIssues`, processes the result, then posts via the Slack connection: one prompt, two integrations.
In practice
Three automations teams run on day one.
Real workflows built from the 33 GitHub tools above. Each fires automatically, no manual steps after the initial setup.
Sam · Solo founder
When a PR is opened, the agent reads the diff with github:pullRequests:listFiles, checks for missing tests, posts a structured first-pass review comment, and requests reviewers via github:pullRequests:createReview: all before a human has looked at it.
saves \~25 min per PR
Omar · Agency owner
Every night at 02:00, a scheduled agent calls github:repositories:getIssues across 6 client repos, groups open issues by label and age, and posts a consolidated digest to Slack #dev-ops: 6 repos checked, one message.
saves \~3 hrs/wk
Dario · Sales
When a new issue lands, the agent reads the title and body, matches it against the label taxonomy via github:issues:listLabels, applies bug, priority:high, or area:\* tags with github:issues:update, and posts a triage acknowledgment: 47 issues triaged in the first week, zero manual labels.
live in 10 min
Triggers
Fire an agent on any GitHub event.
GitHub is an App Trigger source. When a push lands, a PR opens, or an issue is created, the connected agent wakes up immediately. No polling, no hosted receiver. Pick an event below to see the pipeline in action.
App TriggerActionist receives the webhook payload and wakes the assigned agent.
AgentReads context, calls the right GitHub tools, acts on the result.
OutputFirst-pass review comment + reviewer request filed on the PR.Issue labeled, prioritized, and acknowledged with a triage comment.Deploy summary posted to Slack #engineering and release draft updated.
agent · pr-reviewer · trigger: pull\_request opened
00:00Received PR #142: feat/add-webhook-retry
tool · github:pullRequests:listFiles · #142
00:0112 files changed, no test file for src/retry.ts
tool · github:pullRequests:createReview · #142
00:02Review posted. Requested @team/backend as reviewers.
agent · issue-triage · trigger: issues opened
00:00New issue #89: "Search returns 500 on empty query"
00:00Push landed, 3 commits since last release tag
tool · github:releases:list
00:01Last release: v2.14.0 · 3 merged PRs since
tool · github:releases:create · draft: v2.15.0
00:02Draft created. Slack #engineering notified.
No polling. The App Trigger subscribes to the GitHub webhook. Your agent wakes the instant the event fires, not on the next polling interval.
No hosted receiver. Actionist manages the callback URL and HMAC signature verification. You paste one URL into GitHub's Webhooks settings, done.
Any event, any repo. Choose from push, PR opened/merged/closed, issue opened/labeled, release published, and more. One trigger per event type per agent.
Navigate to the agent that should respond → Triggers tab → Create trigger.
Choose App Trigger as the source type (subtitle: "GitHub · GitLab · installed apps"). Pick GitHub from the app selector and choose the event type.
A setup panel provides a callback URL and a one-time secret. Paste both into GitHub's Webhooks settings page for your repository or organization.
The webhook setup secret is shown once. Copy it to GitHub's Webhooks settings page immediately. It cannot be retrieved after you close the panel.
For full details on trigger types, filter rules, and agent routing, see the Triggers page.
Best practices
Tips before you go live.
OAuth grants full private repo access (`repo` scope) and is the right choice for org-wide agents. A scoped PAT stored in Credentials Vault is safer when an agent should only read public repos or a narrow subset of a private org. Store the PAT under `provider: github` and it routes automatically to every tool that needs it, no per-tool token entry.
GitHub occasionally omits the `x-oauth-scopes` header even when the token was minted from the requested scopes. Actionist handles this automatically by falling back to the originally requested scopes for capability projection. If GitHub tools appear missing after a reconnect, disconnect and reconnect once more via the Apps detail page.
Issues, PRs, and releases default to `per_page: 50`. For repos with heavy activity, include a state filter (`state: open`) or a date range in the agent's task description. This prevents large, token-expensive payloads that slow down responses.
Multiple MCPs that declare `provider: github` all route to the same stored credential automatically. Enter the token once in Credentials Vault and every tool (`git-official`, `github-official`, and any skill that needs `env:GITHUB_TOKEN`) is covered.
The bundled `git-official` MCP operates on local Git repositories (clone, commit, push, branch operations). The `github:*` tools call the GitHub REST API remotely (issues, PRs, releases, Actions). Use both together for a coding agent that can stage local changes and then file a PR against the remote repo.
One connection
## Ship faster with an agent in your repo.
Connect GitHub once. Assign the tools your agent needs. Let it triage, review, and release, while you focus on building.
33 verified GitHub tools · One OAuth connection · No webhook receiver to host.
App Triggers fire instantly on push, PR, and issue events.
Keep going
Related topics.
Store and rotate GitHub PATs in the encrypted vault. One entry flows to every tool that needs it.
Set up App Triggers to fire agents on push, PR-opened, and issue-created events.
Route GitHub event summaries into Slack channels or DMs, the most common pairing.
Bridge GitHub issues to Linear tickets for cross-tool project tracking.
# HubSpot
Source: https://learn.actionist.ai/apps/hubspot/index
Connect HubSpot to Actionist and let agents maintain contacts, deals, companies, and tickets, so your pipeline stays clean without the manual work.
CRM AUTOMATION
## Your CRM, on autopilot.
HubSpot holds your pipeline, your contact graph, and your support queue, but keeping it clean still takes someone's time. Connect once and hand that work to an agent: contacts logged, deals created, stale records flagged, pipeline summaries written, while you focus on closing.
The signature moment
Watch a call become a clean CRM record.
A call ends. Without any manual entry, the agent logs the outcome, updates the contact, and advances the deal stage. Pick a step to see what the agent does at each point.
agent · crm-manager · workflow run
triggerCall ended with Acme Corp: 24 min, outcome: demo completed.
tool · contacts:get · id: 4821
agentContact found: Dana Voss, lifecyclestage: lead, no prior notes.
tool · contacts:get · confirmed
agentLogged note: "Demo completed 2026-06-11. Interested in Pro plan. Follow up in 3 days."
Step 1: the agent reads the contact record first (confirming the person exists and pulling current state) before writing anything. contacts:get returns firstname, lastname, email, lifecyclestage.
agent · crm-manager · workflow run
agentUpdating Dana Voss: setting lifecyclestage to opportunity.
tool · contacts:update · id: 4821
result
lifecyclestage: opportunityupdated
agentContact record reflects the new stage. Proceeding to deal.
Step 2: the lifecyclestage advances from lead to opportunity: no form, no manual update. The contact record in HubSpot reflects the real state of the relationship.
agent · crm-manager · workflow run
agentChecking for an existing deal on Acme Corp…
tool · deals:list · filter: company 4821
resultDeal found: Acme Corp Pro Trial, stage: appointmentscheduled.
result
dealstage: presentationscheduledstage moved
agentPipeline updated. Notification posted to #sales in Slack.
Step 3: the deal stage advances in one tool call. Stage IDs are account-specific strings, verify the correct values in your HubSpot pipeline settings before encoding them in agent instructions.
Real workflows
Three recipes Dario runs every week.
Each card is a complete agent workflow: trigger, tools called, output. Copy the pattern and tune the instructions to your pipeline.
Dario · Sales
Call ends with a prospect. Agent reads the contacts:get record, writes the outcome note, then creates a follow-on deal via deals:create with the updated stage. All before the next call starts.
saves \~6 min per call
Dario · Sales
Every Monday at 09:00, agent pulls open deals via deals:list and flags any where closedate has passed or dealstage has not moved in 14 days. Posts a nudge list to #sales in Slack, typically 8 to 12 deals surface each week.
live in 10 min
Dario · Sales
Friday at 17:00, agent calls deals:list for all open deals, groups by stage, counts deals and total pipeline value per stage, and drafts a plain-text weekly pipeline summary, sent to Dario by email and posted to the sales channel in under 90 seconds.
saves \~3 hrs/wk
9 tools, 4 CRM objects
What agents can do.
Each object group is scoped individually. Grant read-only to reporting agents and read + write only to agents that need to make changes.
2ContactsRead only
List up to 100 contacts per call, or fetch a single contact by ID. Default fields include firstname, lastname, email, phone, company, and lifecyclestage.
2DealsRead + write
List open deals with stage and close date, or create a deal with a name, amount, and pipeline stage. Default stage on create: appointmentscheduled.
3CompaniesRead + write
List companies, fetch a record by ID with domain and location data, or create a new company with name, domain, and industry.
2TicketsRead + write
List open tickets, fetch details including pipeline stage and priority, or create a ticket with subject, content, stage, and priority (LOW, MEDIUM, HIGH). Default stage "1" maps to New in HubSpot's built-in Support Pipeline.
Setup
Connect HubSpot.
HubSpot connects via OAuth 2.0. You choose which service groups to enable before the OAuth handshake, so the granted scopes match exactly what your agents need.
**Before you start.** You need a HubSpot account with permission to install apps. Decide which object types your agents need, because you pick the service groups before the OAuth handshake and the granted scopes follow that choice.
In Actionist, go to **Settings → Integrations**. Find HubSpot in the **CRM** category. The card shows the description "Contacts, deals, companies & tickets."
Click the HubSpot card to open the detail panel. The services grid shows 7 toggleable permission groups across the 4 object types: Contacts (read), Deals (read, write), Companies (read, write), Tickets (read, write). Each toggle displays how many tools it unlocks. Enable the groups your agents will use.
Click **Connect HubSpot**. The OAuth flow opens at `app.hubspot.com`. Sign in and grant the requested `crm.objects.*` scopes for the services you selected.
The panel updates each enabled service with a **Read granted** or **Write granted** badge. Those tools are now available to every agent in your workspace.
Settings · Integrations · HubSpot
HS
HubSpot
Contacts, deals, companies & tickets
CRM
Services
Contacts2 tools
Read
Deals1 tool
Read
Deals1 tool
Write
Companies2 tools
Read
Companies1 tool
Write
Tickets2 tools
Read
Tickets1 tool
Write
Disconnecting HubSpot removes Actionist's access tokens both locally and from your HubSpot account. Any agent using HubSpot tools loses access immediately. You can reconnect at any time.
Tool reference
Tools by object group.
Each accordion covers the tools in that group, the default properties returned, and a concrete example of what an agent can do with them.
`contacts:list`: returns up to 100 contacts per call (default 25). Default fields: `firstname`, `lastname`, `email`, `phone`. Use this to pull today's new leads or build a pre-meeting briefing.
`contacts:get`: fetch a single contact by ID. Default fields expand to include `company` and `lifecyclestage`. Use this when an agent needs the full picture on one person before drafting an outreach message.
**Example:** "List the 10 most recently added contacts", agent calls `contacts:list` with `limit: 10` and formats the results as a Slack digest.
`deals:list`: list deals with default fields `dealname`, `amount`, `dealstage`, `closedate`. Cap at 100 per call. Good for pipeline reviews and stale-deal detection.
`deals:create`: create a deal with a required `dealname`, optional `amount`, and `dealstage` (default `appointmentscheduled`). Deal stage IDs are account-specific, verify the correct strings in your HubSpot pipeline settings before using custom stages.
**Example:** "Create a deal called Q3 Expansion for \$15,000": agent calls `deals:create` with `dealname: "Q3 Expansion"`, `amount: 15000`.
`companies:list`: list companies with `name`, `domain`, `industry`, `numberofemployees`. Useful for account mapping or enrichment runs.
`companies:get`: fetch a single company by ID; adds `phone`, `city`, and `country` to the default field set. Use before a call to pull the full account profile.
`companies:create`: create a company record with a required `name`, optional `domain` and `industry`. Check whether the account already exists first. HubSpot's CRM v3 API does not deduplicate automatically.
**Example:** "Look up Acme Corp by company ID and return their industry and headcount", agent calls `companies:get`.
`tickets:list`: list tickets with default fields `subject`, `content`, `hs_pipeline_stage`, `hs_ticket_priority`, `createdate`. Good for daily support queue reviews.
`tickets:get`: fetch a ticket by ID; also returns `hs_pipeline`, `hs_lastmodifieddate`. Useful when an agent needs to cross-reference a ticket with a contact or deal.
`tickets:create`: create a ticket with a required `subject`, optional `content`, `stage` (default `"1"` = New in the built-in Support Pipeline), and `priority` (`LOW`, `MEDIUM`, or `HIGH`). Custom pipelines use different numeric IDs. Confirm in HubSpot before assigning.
**Example:** "Create a support ticket: login broken, high priority": agent calls `tickets:create` with `subject: "Login broken"`, `priority: "HIGH"`.
Best practices
Tips before you go live.
A reporting agent that summarises pipeline never needs `deals:write` or `tickets:write`. Use the service toggles before connecting to grant only the permissions each agent's tasks require. Narrower grants mean a smaller blast radius if something goes wrong, and they signal intent clearly when you audit access later.
All list and get tools return a small default field set. If your agent needs `hs_lead_status`, `notes_last_contacted`, or a custom property, pass those names as a comma-separated string in the `properties` parameter in the agent's tool configuration. You only pay for what you fetch.
The default stage on `deals:create` is `appointmentscheduled`: a built-in HubSpot pipeline stage. If your team uses custom pipelines, retrieve the exact stage ID strings from your HubSpot pipeline settings before writing them into agent instructions. A wrong stage ID causes the create call to fail.
HubSpot's built-in Support Pipeline uses the numeric string `"1"` for the New stage. Custom pipelines use different numeric IDs. Before creating tickets in a custom pipeline, confirm the correct stage IDs in HubSpot → Settings → Support → Pipelines.
Actionist ships a built-in CRM Manager agent template. "The organised keeper of your relationships. I make sure every contact, deal, and note is in the right place — so nothing slips." Pairing this template with your HubSpot connection is the fastest path to automated pipeline hygiene, stale-deal nudging, and weekly summaries.
HubSpot has no bundled MCP server in Actionist. The native OAuth integration is the primary connection path. If you need capabilities beyond the 9 live tools, you can add a third-party HubSpot MCP via Apps → MCPs: but for most CRM workflows the built-in tools are sufficient.
Ready to connect
## Automate your pipeline in minutes.
Connect HubSpot via OAuth, enable the CRM Manager template, and watch contacts, deals, and tickets stay current, without any manual entry.
OAuth 2.0, scoped exactly to what your agents need.
9 tools across 4 CRM objects · Granular permission toggles · No bundled MCP required.
Keep going
Related topics.
Browse every app in the Actionist catalog: CRM, finance, communication, and more.
Build the CRM Manager agent and pair it with HubSpot to automate pipeline hygiene end to end.
Run weekly pipeline summaries and stale-deal nudges on a fixed schedule without manual triggers.
Chain HubSpot and Slack in one workflow. Create a deal, then post a notification to your sales channel in the same run.
# Apps
Source: https://learn.actionist.ai/apps/index
Every app Actionist talks to, with the workflows you can run against it.
Actionist plugs into hundreds of apps. Each app's page covers what you can do with it from Actionist, how to connect it, and the most common workflows we've seen teams build.
Open Apps in the sidebar to reach the in-product catalog. It has two sub-tabs: Apps (the full service catalog) and MCPs (Model Context Protocol servers). From any app's detail page you can browse what it automates, hit Connect to run through the guided install plan (which resolves skills, credentials, and OAuth in one pass) and wire a trigger so an agent wakes up the moment something happens in that service, with no polling required.
## Browse
Pick a category from the horizontal category rail to filter the grid. If you don't see your app, [request it](mailto:support@actionist.ai) or [build the integration yourself](/resellers).
## How an Actionist app is structured
Every app page follows the same shape so you can scan it fast:
The actions Actionist exposes for this app: read, write, and trigger.
How to authenticate: OAuth, API key, or MCP server.
Three or four real workflows teams have shipped with this app.
Rate limits, permission scopes, and edge cases to watch for.
# Linear
Source: https://learn.actionist.ai/apps/linear/index
Connect Linear to Actionist and let agents create issues, manage sprints, and keep your backlog clean, triggered by any signal, with no tab-switching required.
LINEAR INTEGRATION
## Issue tracking at the speed your team actually ships.
Any signal (a Sentry alert, a Slack message, a customer email, a form submission) becomes a properly-formed Linear issue in under 60 seconds, with team, priority, assignee, and description pre-filled. Sprint admin disappears. Backlog hygiene runs on a schedule. Your team keeps shipping; Actionist keeps the board clean.
Watch it happen
An issue, from chat to closed.
The full lifecycle: an issue created from a Slack message, its status updated mid-sprint, and a final comment linking back to the fix. Pick an event to step through it.
chat · maya · 10:41
youThere's a checkout bug from Sentry: create a Linear issue for the eng team, high priority.
tool · linear\_create\_issue
mayaCreated ENG-412. Checkout fails on coupon apply · team: Engineering · priority: high · assigned: on-call.
mayaSentry event ID and stack trace added to description. Link: linear.app/eng/ENG-412
linear\_create\_issue: title, team, description (Markdown), assignee, priority (integer), and state all set in one call. The Sentry context lands in the issue body and renders natively in Linear's editor.
workflow · sprint-sync · 14:05
schedPR #881 merged to main. Branch: fix/ENG-412-coupon-checkout.
tool · linear\_get\_issue · ENG-412
tool · linear\_update\_issue · state: In Review
agentENG-412 moved from In Progress to In Review. Priority unchanged: high.
linear\_update\_issue accepts the human-readable identifier (ENG-412). No UUID lookup needed when the reference comes from a PR branch name or commit message.
linear\_add\_comment keeps the full audit trail in Linear itself (Sentry ID, deploy tag, and verification note) without any manual copy-paste. The issue history is self-documenting.
Capabilities
What agents can do with Linear.
Seven scopes across the full issue lifecycle. From reading your workspace to writing issues, updates, and comments.
☰
Read teams and projectsList every team and project in your Linear workspace. Fetch project IDs at workflow setup time and cache them as variables so agents don't re-fetch on every run.
linear\_list\_teams
☷
List and filter issuesPull issues filtered by team, state, assignee, or project. Narrow by team first to reduce query cost, then layer on additional filters.
linear\_list\_issues
☌
Get a single issueFetch a specific issue by its human-readable identifier (e.g. ENG-123) or internal UUID. Prefer the identifier in workflows where issue references come from Slack messages, PR branch names, or commit messages.
linear\_get\_issue
+
Create issuesCreate issues with title, team, description (Markdown), assignee, priority, and state, all from a single agent step. Pass Markdown in description and it renders natively in Linear's editor.
linear\_create\_issue
✎
Update issuesChange title, description, assignee, priority, or state on any existing issue. Useful for backlog hygiene sweeps and sprint-boundary automations.
linear\_update\_issue
☺
Add commentsPost a top-level comment or thread a reply using parentId. Keeps issue history clean and links back to source context: Sentry IDs, Slack thread URLs, deal notes.
linear\_add\_comment
Setup
Connect Linear.
MCP OAuth is the recommended path. No token management, full action set, and you can limit which Linear teams are exposed during the OAuth step. API key is available as a fallback.
**Before you start.** You need a Linear account. During the OAuth step you choose which teams to expose, so decide which teams your agents should see before you begin.
Click Apps in the sidebar. Find Linear in the apps library and click Connect Linear.
A Linear OAuth window opens in your browser. Sign in with your Linear account and grant Actionist read/write access. Actionist runs a Test connection call to verify the handshake. Status updates to Connected and the app detail page shows the scope count granted.
In Linear, go to Settings → Security & access → Personal API keys. Click Create key, name it (e.g. "Actionist"), and copy the token. It is shown only once.
Back in Actionist, open Linear → Connection methods, select API key, paste the token, and click Test connection.
Once status shows Connected, Linear tools are available to every agent and workflow in your workspace.
actionist · Apps · LinearNot connected
L
LinearIssue tracking · 6 scopes granted
Connect Linear
Connection method
MCP OAuthNo token management, recommended
Recommended
API keyPaste a Personal Access Token
linear.app, Authorize Actionist
L
Actionist is requesting access to your Linear workspace
read:issueswrite:issuesread:teams
Authorize
Workflows
Common workflows to start with.
EngineeringBug-to-fix loop
A Sentry alert fires, an agent creates a Linear issue with the error context in the description, assigns it to the on-call engineer, and comments with the Sentry link. Before anyone checks their inbox.
EngineeringSprint retro, auto-compiled
When a Linear sprint (Cycle) ends, an agent collects all closed issues, groups them by owner, and posts the retro summary to Slack before anyone opens Linear.
Sales and supportZero-tab issue creation
A closed-deal message lands in Slack. The agent reads the feature gap, creates a Linear issue in the right team with ARR context attached, and links it back to the deal record: no tab-switching, no copy-paste.
Sales and supportCustomer need from escalation
A Support agent creates a customer need issue from an escalation ticket, assigns it to the product team, and comments with the original customer message.
OperationsBacklog hygiene sweep
A scheduled agent runs weekly: updates stale priorities, sweeps blocked issues, and adds audit comments. What used to take 30 minutes of clicking completes in under a minute.
OperationsLaunch issue from campaign start
When a campaign brief is approved in Notion, an agent auto-creates a launch checklist issue in Linear and assigns it to the relevant project.
In practice
Three recipes teams run every day.
Real workflows, concrete outputs, each one live in under 10 minutes.
Sam · Solo founder
Every morning at 08:55, an agent runs linear\_list\_issues filtered to In Progress and In Review across all teams, groups them by assignee, and posts a standup digest to Slack before the 09:00 call. Yesterday's 14 open issues, owners listed, blockers flagged. No one opens Linear just to read the board.
saves \~20 min/day
Priya · Support lead
When a support thread hits a bug-confirmed label in the helpdesk, the agent reads the conversation, calls linear\_create\_issue with a structured description (repro steps, affected version, customer count) and comments back on the ticket with the Linear link. 23 issues filed last week, zero copy-paste.
saves \~3 hrs/wk
Dario · Sales
At cycle close, the agent calls linear\_list\_issues filtered to Done in the current cycle, groups by project, and drafts release notes as a Markdown doc: customer-facing language, no jargon. Dario pastes it into the deal room for prospects asking “what shipped this sprint?”, answered before the question lands.
live in 10 min
Limits
Limits and gotchas.
25items returned per list call (teams, projects, issues)
1writer per bucket recommended, avoid multi-agent contention on the same issue
ENG-123prefer human-readable identifier over UUID in cross-system references
All list tools (teams, projects, issues) paginate at 25 items per call. Filter by team, state, assignee, or project to narrow the result set before fetching. Filter by teamId first. It reduces query cost and keeps responses faster.
When creating or updating issues, priority is an integer: 0 = none, 1 = urgent, 2 = high, 3 = normal, 4 = low. Spell these out in workflow instructions so agents always set the right value. Priority 1 (urgent) suits on-call assignment workflows; 4 (low) suits backlog items that surface only in sprint planning.
1 · urgent2 · high3 · normal4 · low
Issue fetch and update actions accept either the human-readable identifier (e.g. ENG-123) or the internal UUID. Prefer the identifier in workflows where issue references come from Slack messages, PR branch names, or commit messages. Those almost always carry the short form. Use identifier (returned by all issue queries) when posting links to external systems; it is the stable public handle.
If an agent creates or updates issues and you have a trigger on issue changes, the agent's writes will re-fire the trigger. Stamp a custom label on every agent-touched issue and exclude that label from your trigger filter conditions.
Use the MCP OAuth path over the API key path. No token to rotate, full action set, and you can limit which teams are exposed at OAuth time. To restrict access to specific teams, do it during the OAuth step; you cannot reduce team scope later without disconnecting and reconnecting.
Automate the board
## Your team ships. Actionist keeps Linear clean.
Connect Linear in two minutes. Let agents handle issue creation, status updates, and backlog hygiene, triggered by every signal your team already produces.
MCP OAuth: no token to rotate, full action set, team-scoped at connect time.
Issues created in under 60 seconds · Runs on any signal · Backlog hygiene on a schedule.
Keep going
Related topics.
Linear and Slack together cover most team automation loops: bug alerts, retro summaries, and approval flows.
How the Linear MCP server fits into the broader integration model and how to manage OAuth scopes.
Wire Linear webhook triggers (new issues, comments, and cycle events) to agents with filter rules and routing.
Set up recurring agent runs for backlog hygiene sweeps, sprint retros, and cycle-boundary automations.
Store and rotate Linear API keys in the encrypted Credentials Vault without re-editing agents.
Browse every app Actionist connects to, and see what else fits in your workflow alongside Linear.
# Notion
Source: https://learn.actionist.ai/apps/notion/index
Create pages, query databases, and append blocks. Turning every agent run into a structured, team-visible Notion record.
NOTION INTEGRATION
## Every agent run becomes a structured Notion record.
Agents stop producing ephemeral chat and start building a permanent, browsable knowledge base: databases filled automatically, pages written with the right properties, and blocks appended to running docs your whole team can see.
Watch it happen
Agent updating a Notion database.
Three phases, zero manual steps: query the database, find the matching page, write the updated property. The stream below loops continuously.
step 2Current Owner: unassigned · Due date: 2026-06-20 · Status: In review
tool · notion:databasePages:update
step 3Update page 3a7f...d2c9: set Owner: Maya, Status: Approved
step 3Properties written using display names, not Notion property IDs
step 3Page updated successfully
querypage foundupdatedloops every 9 s · real tool names · display-name properties
Query first, write second. Always call databasePages:getAll with a filter to find the target row before updating. Hardcoded page IDs break when databases are duplicated or moved.
Display names, not IDs. The databasePages:update tool keys properties by their visible column names. Case-sensitive. Run databases:get first to confirm the exact names.
Simplified output is on.simple: true flattens Notion's nested property structure into a readable shape. Set simple: false only when you need raw API JSON for downstream processing.
15 tools
What Actionist can do with Notion.
One connection unlocks 15 tools spanning every major Notion surface. Select a group to see the exact tool names and what each one does.
notion:blocks:appendAppend child blocks to any existing page. Accepts a blocksJson array. Use this to grow a running document rather than creating new pages each run.
notion:blocks:getAllFetch the block tree of a page. Shallow by default. Set fetchNestedBlocks: true for deep document extraction (significantly more API calls on deeply nested pages).
notion:databases:getAllList all databases the integration can see. Default limit: 50. Returns titles and IDs. Use to discover databases before querying them by ID.
notion:databases:getFetch the full schema of a single database. All properties, their types, and options. Run this first to confirm exact column names before creating or updating rows.
notion:databases:searchSearch databases by name. Useful when the database ID is unknown. Search by a partial name, then pick the right result to retrieve the ID.
notion:databasePages:createCreate a new row with full property values. Pass propertiesJson keyed by display name (case-sensitive). The row appears immediately in the Notion database.
notion:databasePages:getAllQuery rows with filters and sorts. Pass filterJson and sortsJson as Notion API filter objects. Default limit: 50. Use filtering to narrow results rather than paging large databases.
notion:databasePages:getRead a single row by page ID. simple: true (default) flattens the property structure. Set simple: false for raw Notion API JSON with full rich text annotations.
notion:databasePages:updateUpdate one or more properties on an existing row. Properties are keyed by display name. Not internal Notion property IDs. Partial updates are supported; unspecified properties are unchanged.
notion:pages:createCreate a sub-page under a parent page. Pass parentPageId and a title. Optionally include content to populate the body immediately.
notion:pages:getRead the content and properties of a page by ID. Returns the page title, properties, and body blocks in simplified or raw format.
notion:pages:searchSearch pages by title. Default limit: 50. Returns matching pages across all shared workspaces the integration can access.
notion:pages:archiveSoft-delete a page by setting archived: true. Moves it to Notion's Trash, not permanent deletion. Users can restore archived pages directly from Trash in Notion. Actionist does not expose an unarchive tool.
notion:users:getFetch a single user by Notion user ID. Returns name, email, and avatar URL. Use to resolve a user ID before assigning ownership or mentions.
notion:users:getAllList all workspace users the integration can see. Default limit: 50. Useful for building a name-to-ID lookup table when creating rows with person properties.
Setup
Connect Notion.
OAuth is the recommended path. It uses Notion's standard authorization flow and stores your workspace token in Actionist's encrypted credentials vault. An internal integration token is available as an alternative.
**Before you start.** You need a Notion account, and you pick which pages and databases to share during the authorization step. Anything you do not share stays invisible to your agents, so have the pages you want in mind before you begin.
In the Actionist sidebar, open Apps. Search for "Notion" or scroll the grid and click the tile to open the detail panel.
Under the Connection methods section, click Connect Notion. A browser window opens to the Notion OAuth authorization page.
Select the workspace you want to connect and click Allow Access. Actionist stores the workspace token in your encrypted credentials vault. The detail panel updates to show Connected.
OAuth succeeds even if nothing is shared yet, but all queries return empty until you grant access. In Notion: open each database or page you want the agent to reach, click Share → Invite, search for your Actionist integration bot, and grant Can edit (or the appropriate permission level).
NNotionConnected
WorkspaceAcme Corp
Connected onJun 10, 2026
Tools available15 tools
BlocksDatabasesPagesUsers
In Notion: Settings → Connections → Develop or manage integrations → create a new internal integration → copy the Internal Integration Token.
In Actionist: Settings → Credentials → Add credential → choose Notion → paste the token. Actionist recognises NOTION\_API\_TOKEN, NOTION\_TOKEN, and NOTION\_API\_KEY automatically.
Open each target database or page in Notion, click Share → Invite, and add your integration. Nothing is visible to the API until it has been explicitly shared.
NNotionNot connected
Connection methods
OAuth (recommended)Authorize via Notion's OAuth flow
Connect Notion
API tokenPaste an internal integration token
Add token
Share every target database or page with the integration immediately after connecting. The connection shows as healthy either way, but every tool call returns empty until the Notion-side share is in place.
Workflows
Common workflows.
Daily digest to Notion. A scheduled agent pulls yesterday's unread Slack DMs and important channel mentions, summarises them, and writes a new row into a "Daily digests" database with a date property and the summary text. Every morning your team opens Notion instead of scrolling back through Slack.
Agent run log. At the end of any workflow, write a database row recording what the agent did and what it produced. Every run becomes an auditable record the whole team can browse, no more ephemeral chat history.
Linear → Notion sync. When a Linear issue closes, append a row to a "Shipped" database with the title, owner, and a one-sentence summary. Your Notion project tracker stays current without manual copy-paste.
Slack digest → Notion page. Pull a structured summary from Slack, create a dated sub-page in a "Meeting notes" section, and append a block per action item. Slack conversations become durable Notion pages automatically.
Block-level updates. Instead of creating a new page each run, use notion:blocks:append to add a new dated section to a running "Weekly notes" page. One document grows continuously rather than filling your workspace with one-off pages.
Filtered database query before responding. Before answering a question, the agent calls notion:databasePages:getAll with a filterJson expression to retrieve the most relevant rows from a shared knowledge base, then incorporates the results into its reply.
In practice
Three automations people set up on day one.
Real workflows built from the tools above, each one running continuously without manual steps.
Maya · Marketing Manager
After every recorded team call, the agent reads the transcript, creates a dated notion:pages:create sub-page inside Meeting Notes, then uses notion:blocks:append to write a summary, attendee list, and numbered action items: all under the right team section. No copy-paste, no lost notes.
saves \~3 hrs/wk
Sam · Solo founder
Every Friday at 17:00, the agent calls notion:databasePages:getAll on the OKR database (filtering for the current quarter) pulls each key result's latest value, and uses notion:databasePages:update to write a Weekly rollup property with a plain-English progress summary. One row per objective, updated before the weekend.
live in 10 min
Omar · Agency owner
A shared Client Status database is the single source of truth sent to 12 clients each week. The agent queries the project tracker, maps each open milestone to a client row, and calls notion:databasePages:update to set the Status, Next milestone, and Last updated properties. Keeping every client page current without a status-call to gather the numbers first.
saves \~5 hrs/wk
Limits
Limits and defaults.
50default result limit for all list and query tools
truesimplified output on by default, simple: false for raw JSON
shallowblock fetching depth by default. Enable fetchNestedBlocks for deep pages
Trasharchive is a soft-delete. Page moves to Trash, not permanent deletion
\~3 rpsNotion public API rate limit per integration (from Notion docs, not verified in codebase)
2022-06-28Notion API version injected automatically on every call
Every list and query tool (blocks:getAll, databases:getAll, databases:search, databasePages:getAll, pages:search, and users:getAll) defaults to a limit of 50 results. Use filterJson and sortsJson on databasePages:getAll to narrow results rather than paging large databases.
simple: true on database and page get tools flattens Notion's nested property structure into a readable shape. Set simple: false only if you need raw Notion API JSON: for example, to preserve rich text annotations or relations for downstream processing.
fetchNestedBlocks defaults to false on blocks:getAll. Sub-pages inside a page are not recursively fetched. Enable it for deep document extraction, but expect significantly more API calls on pages with many levels of nesting.
notion:pages:archive sets archived: true on the page. It moves to Notion's Trash, not permanent deletion. Users can restore archived pages directly from Trash in Notion. Actionist does not expose an unarchive tool; restoration must happen in Notion.
Notion's public API rate limit is approximately 3 requests per second per integration (from Notion's API documentation, not confirmed in the Actionist codebase). Design bulk operations accordingly and avoid sending large batches of sequential tool calls in tight loops.
Actionist injects the header Notion-Version: 2022-06-28 automatically on every API call. You do not need to set this manually.
Best practices
Tips before you go live.
share first
OAuth connect succeeds even if no pages are shared. The connection appears healthy but all database queries return empty. Always share the target databases with the integration immediately after connecting.
strip the dashes
The URL from a Notion database looks like notion.so/workspace/Title-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. Strip all hyphens to get the 32-character UUID required for databaseId parameters.
use display names
The databasePages:create and databasePages:update tools key properties by their visible column names (case-sensitive), not internal Notion property IDs. Run notion:databases:get first to see the exact names for a database.
avoid hardcoded IDs
Store database IDs as workflow variables or memory entries so agents resolve them by name. Hardcoded IDs break silently when a database is duplicated or moved.
15 tools, one connection
## Start writing to Notion today.
Connect Notion in the Apps panel. Share your databases with the integration. The agent does the rest, querying, writing, and updating without manual copy-paste.
15 tools across blocks, databases, pages, and users.
OAuth or API token · Encrypted credentials vault · Simplified output by default.
Keep going
Related topics.
Browse the full app catalog and see every integration available in Actionist.
Store and rotate Notion API tokens in the encrypted Credentials Vault without re-editing agents.
Use Notion databases as a persistent memory layer agents can query and write across runs.
Common pairing: pull a Slack digest and push a structured summary page into Notion automatically.
# Slack
Source: https://learn.actionist.ai/apps/slack/index
Connect your AI agents to Slack as a live bot, approve actions with one tap, and read or write Slack data from any workflow.
SLACK INTEGRATION
## Put your agents where your team already works.
Give an agent its own Slack bot and your team can send tasks, get answers, and tap Approve, without opening the desktop app. Or wire Slack as a live data source so agents read channels and post structured results into workflows.
See it in action
A Slack message, round-trip.
From channel mention to agent processing to threaded reply. Three stops, one seamless loop. Pick a stage:
#sales-ops
dana@sales can you pull the Q3 pipeline summary for Northwind?
message received · bot mention · routed to sales agent
The bot receives the message via Socket Mode: an outbound WebSocket from Actionist to Slack. No inbound port, no firewall rule, no public URL needed.
agent · sales · processing
tool · Search Memory · "northwind pipeline q3"
memoryNorthwind: enterprise tier, renewal October, champion Dana Voss. Last pipeline entry: \$48k open.
tool · slack\_post\_message · composing reply
The agent runs inside Actionist. It can call any tool it has access to: Memory search, CRM lookup, web browsing, or another MCP. The Slack message is just the trigger.
#sales-ops · thread
dana@sales can you pull the Q3 pipeline summary for Northwind?
sales botNorthwind Q3: \$48k open, renewal in October. Champion Dana Voss. Last touch: demo follow-up sent June 4.
sales botWant me to draft a check-in email to Dana?
The reply lands in the thread: keeping channels clean. If the agent needs sign-off on an action, it posts Approve and Deny buttons into the same thread.
Two modes
Know which one you need.
Slack works with Actionist in two completely separate ways. Understand the difference before you set anything up.
Channel (bot) modeAgents → Channels tab
The agent lives as a Slack bot. Your team sends it tasks, asks questions, and taps Approve/Deny buttons inline. All from Slack. Set up via Agents → select an agent → Channels tab.
MCP tool modeApps → MCPs tab
The agent reads and writes Slack as a data source. Send structured messages to channels, read thread history, search for users. Set up via Apps → MCPs tab, then install slack-oauth.
Most teams will want both. Channel mode handles conversation and approvals; MCP mode handles data actions inside workflows.
Channel (bot) mode
Connect a Slack bot to an agent.
Each agent can have its own dedicated bot, or multiple agents can share one Slack app and be routed by @mention. The wizard walks you through three steps.
**Before you start.** You need permission to create and install an app in the Slack workspace. In many workspaces only admins can do this, or an admin has to approve the install, so confirm you have that access before working through the wizard.
Go to `api.slack.com/apps`, create a new app, enable Socket Mode, and grant the bot these scopes: `chat:write`, `im:history`, `channels:history`, `groups:history`.
Copy both tokens from the app settings. You will need them in the next step:
* Bot token: starts with `xoxb-`
* App-level token: starts with `xapp-`
Then open Agents in the Actionist sidebar, select the agent you want on Slack, and click the Channels tab. Find the Slack card and click Configure.
Paste both tokens into the Bot token (xoxb-…) and App-level token (xapp-…) fields, or pick saved credentials from your vault. Both must come from the same source (both pasted or both vault-picked; mixing the two is not allowed).
In the Set a mention name (for shared channels) step, type a short identifier like `support` or `finance`. When multiple agents share one Slack app, users type `@support do something` to route to this agent. Leave blank if this agent has its own dedicated Slack app.
Mention names are auto-lowercased and restricted to `[a-z0-9_-]`.
Click Connect. Actionist calls `auth.test` to verify the bot is reachable. On success the card shows Connected · token saved and displays the workspace name. The bot auto-connects on every app launch, with up to 8 retry attempts.
OverviewChannelsToolsMemory
Slack
Socket Mode bot
1
Bot token (xoxb-…)
xoxb-4812093847-8201938740-2f9c…
App-level token (xapp-…)
xapp-1-A082R…-12345…
Vault-bound tokens resolve at gateway connect. Never stored locally.
2
Set a mention name (for shared channels)
support
3
Validate tokens
Connect
OverviewChannelsToolsMemory
Slack
Socket Mode bot
Connected · token saved
Connected to Acme Corp · acme.slack.com
Vault-bound tokens resolve at gateway connect. Never stored locally.
Multi-agent pattern
One Slack workspace, multiple agents.
Create a single Slack app and share its tokens across all your agents. Give each agent a unique mention name. Your team routes to the right specialist with a single @mention.
Slack workspace
one shared app
@sales do X
@finance do Y
DM (no mention needed)
Sales agent
Finance agent
Any agent (DM routing)
DMs always route to the agent without requiring a mention name. In shared channels, the user must type `@mention-name do something`. Messages in a channel that don't include an @mention are silently dropped. The bot does not reply.
Each agent's mention name must be unique across agents sharing the same Slack app. Duplicate mention names will fail validation at save.
Approvals
Approve or deny without leaving Slack.
When an agent hits a step that needs your sign-off, it posts Approve and Deny buttons directly into the Slack thread using Slack Block Kit. One tap resolves the approval. No need to open the Actionist desktop app.
#finance · thread
jordan@finance send the Q3 invoice to [acme@example.com](mailto:acme@example.com)
finance botReady to send invoice #INV-2041 (\$12,400) to [acme@example.com](mailto:acme@example.com). Confirm?
ApproveDeny
Inline approval buttons work from any device where you have Slack, including mobile.
#finance · thread
jordan@finance draft a payment confirmation for [acme@example.com](mailto:acme@example.com)
finance botSend this email to [acme@example.com](mailto:acme@example.com)?
ApproveDeny
MCP tool mode
Use Slack as a data source in workflows.
Install the bundled slack-oauth MCP server and any agent can send messages to channels, read thread history, and search for users, making Slack a live input and output for scheduled workflows.
In the Actionist sidebar, click Apps, then select the MCPs tab. Search for "Slack" and find the slack-oauth entry.
Click Install. Actionist opens a browser OAuth window to Slack. Authorize the requested scopes: `channels:read`, `channels:history`, `chat:write`, `users:read`, `files:read`, `groups:read`, `im:read`, `mpim:read`.
Once connected, agents can call Slack actions such as sending messages, reading channel history, and looking up users, as steps in any workflow.
The Slack MCP server connects over HTTP/SSE to `https://mcp.slack.com/mcp`. No additional local server setup is required.
Best practices
Tips before you go live.
Select tokens from the credential picker rather than pasting them directly. Vault-bound tokens are resolved server-side at connect time and never written to local storage. If a token is ever compromised, you can rotate it from the Credentials Vault without re-editing every agent that uses it.
You cannot paste the bot token and vault-pick the app-level token. Both must be pasted together or both vault-picked. Mixed mode is rejected with an error: "Both the bot token and the app-level token are required — paste both, or pick saved credentials for both."
Slack's Socket Mode uses an outbound WebSocket, not an inbound HTTPS endpoint. No port forwarding, no public URL, and no firewall rule changes are required. It works behind corporate firewalls.
Mention names are auto-lowercased to `[a-z0-9_-]` characters. Two agents sharing the same Slack app cannot have the same mention name. Saving will fail with a validation error. Use short, role-specific names (`sales`, `finance`, `support`).
When you publish an agent to the Actionist marketplace, both Slack tokens are automatically stripped. Subscribers who install the agent must add their own Slack app credentials. This applies to both the bot token and the app-level token.
For a cloud agent, the Connect button stays disabled until the runtime is online. If you see "Saved — connecting on your VPS…", the connection is queued and will complete once the runtime heartbeat is detected. Check the Cloud tab if the VPS appears offline.
Limits
Limits and gotchas.
10,000character cap on text file attachments (.txt, .md, .csv, .json, etc.)
5 MBmax image attachment size; first photo only, passed as base64
5 minmessage deduplication window; map capped at 1,000 entries
24 charsmax suggestion pill text; tokens expire after 1 hour
8bot startup retry attempts with a 1.5-second delay between each
\[a-z0-9\_-]mention name charset, auto-lowercased
Slack reaction emoji calls from the agent are currently no-ops. The agent cannot add or remove reactions on Slack messages.
Bare channel messages (no @mention) are silently dropped. The bot does not reply. Channel controls are only offered for agents that can host a bot, so an agent running on your own machine may not show them.
Recipes
Three automations worth stealing.
Copy any of these into your own agent. Each one runs entirely through the Slack bot. No desktop app open required.
Maya · Marketing Manager
Every weekday at 08:30, the agent reads the last 24 hours of #marketing and #launches, surfaces the top 3 threads that need a reply, and posts a tidy digest into #team-digest: tagged by urgency. The whole channel sees it before standup; Maya skips 20 minutes of scroll.
saves \~20 min/day
Sam · Solo founder
When a pull-request sits in #eng-prs for more than 4 hours with no reviewer reaction, the agent DMs the on-call reviewer with a direct link and a one-line summary of the diff. If it hits 8 hours, it nudges a second reviewer. Typical PRs go from open to reviewed same day, no nag messages written by hand.
saves \~3 hrs/wk
Priya · Support lead
Customers post in #support. The agent reads each new thread, checks the knowledge base for a matching answer, and either replies directly with a resolution or labels the thread NEEDS-HUMAN and pings the on-call rep. Roughly 6 in 10 threads resolve without a human reply. Priya reviews the queue in one pass instead of monitoring the channel all day.
saves \~1.5 hrs/day
One bot, every team member
## Your agents, where your team lives.
Connect once. Your whole team can message, task, and approve: without leaving Slack, without opening the desktop app.
Tokens stored in the encrypted Credentials Vault. Never in local storage.
Socket Mode · Block Kit approvals · MCP data actions.
Keep going
Related topics.
The full Channels surface: Telegram, Slack, and how both fit into the agent model.
How to install and configure MCP servers, including the Slack MCP OAuth flow.
The encrypted Credentials Vault. Store and rotate Slack tokens without touching agent config.
Run Slack bots around the clock with cloud placement so they stay online when your laptop is closed.
# Stripe
Source: https://learn.actionist.ai/apps/stripe/index
Automate payments, subscriptions, and billing events. Connect Stripe to Actionist and handle every revenue moment before it becomes a problem.
REVENUE AUTOMATION
## Every billing event handled before it becomes a problem.
Failed payments recovered before your inbox catches them. Subscriptions created the moment a deal closes. Month-end reconciled overnight while no one is in the office. Connect Stripe once, and your revenue operations never wait on a human again.
Live event stream
Watch a billing event become an automated action.
A Stripe webhook fires. An Actionist trigger wakes the agent. The agent acts. Before anyone reads a notification. Pick a trigger below and trace the full path.
14:07Posting payment summary to #revenue Slack channel.
tool · slack\_post\_message · #revenue
14:07Slack posted. Updating CRM record for Northwind: last payment date and amount.
tool · crm\_update\_record · northwind
14:08Done. CRM updated. Invoice marked as processed in tracker.
Invoice Paid fires on every successful payment. Route it to a Finance Agent that posts a summary to Slack, updates the CRM, and appends a row to the reconciliation tracker, zero manual touchpoints.
trigger · invoice.payment\_failed
agent · dunning-bot · payment failed · 09:22
webhook · invoice.payment\_failed · inv\_4R2Zp9…
09:22Payment failed for cus\_Acme: card ending 4242 declined. Invoice \$840.
09:22Creating new Checkout Session for card update link.
09:23Recovery email sent. Attempt logged to memory.
Failed Payment is the highest-ROI trigger. The agent detects the failure, creates a fresh Checkout Session link, sends a card-update email, and logs the attempt. All before a human reads the notification.
11:16Save call booked. All actions complete in under 60 seconds.
Canceled Subscription fires on cancellation. The agent issues a coupon, posts to Slack, and books a renewal call on the CSM's calendar, all before the rep finishes reading the notification.
trigger · charge.dispute.created
agent · dispute-bot · new dispute · 08:03
webhook · charge.dispute.created · dp\_1P9m…
08:03Dispute opened, \$340 chargeback on ch\_3Qx…. Evidence deadline: 7 days.
08:03Retrieving original charge, order history, and delivery confirmation.
tool · stripe\_retrieve\_charge · ch\_3Qx…
08:04Evidence package assembled. Alerting #disputes with summary and deadline.
tool · slack\_post\_message · #disputes
08:04Alert sent. Evidence ready to submit. 7 days on the clock.
New Dispute is time-sensitive. Evidence windows are short. Route it to an agent that has the original charge context, assembles evidence, and alerts the right team immediately.
What changes
Every billing event handled before it becomes a problem.
A failed-payment webhook fires in real time. The agent detects the failure, sends a card-update email with a new Checkout Session link, and logs the attempt. Before a human checks their inbox.
A closed-deal message lands in Slack. The agent reads it, looks up the customer record, creates the subscription in Stripe, and logs the Stripe ID back to the CRM tracker.
A scheduled agent pulls all balance transactions, categorises them by type, matches against the GL, flags anything unmatched, and appends the reconciliation row to the finance tracker: overnight, every month.
A cancelled-subscription event fires. The agent issues a personalised win-back coupon, posts to Slack, and books a renewal call on the CSM's calendar, all before the rep finishes reading the notification.
Setup
Connect Stripe.
Actionist offers two connection methods. MCP is recommended. It uses Stripe's own OAuth flow, scoped to exactly what your agent needs. API Token is the alternative if you prefer key-based access.
**Before you start.** You need a Stripe account and the ability to authorize apps on it. Decide up front whether you are connecting test mode or live mode, because agents act on whichever account you authorize.
In the Actionist sidebar click Apps, find Stripe in the catalog, and open its detail page.
In the hero, click Connect Stripe. The install sheet opens with MCP pre-selected and a Recommended badge.
Click Connect inside the install sheet. Your browser opens Stripe's OAuth consent screen. Sign in and grant the requested scopes. Actionist receives read/write access for the Stripe objects your workflows need.
Actionist runs a read-only verification call to confirm the handshake. Once the check passes, the Install button becomes active. Click it. The hero badge updates to Installed / Connected.
In the Actionist sidebar click Apps, find Stripe, and open its detail page.
Click Connect Stripe. In the install sheet, select the API Token option (the Recommended badge is on MCP, not this path).
In a separate tab open the Stripe Dashboard. Go to Developers → API keys and copy the Secret key (sk\_live\_… for production, sk\_test\_… for test mode). Store it somewhere safe. Stripe shows it only once.
Paste the key into the API token field in Actionist. Click Test connection: the agent reads your account balance to verify the key is valid.
Click Install to complete. The hero badge updates to Installed / Connected.
Use a restricted key, not your full secret key. In the Stripe Dashboard under Developers → API keys → Restricted keys, create a key scoped to only the Stripe objects your workflows actually touch (for example, Customers + Subscriptions + Invoices). The agent does not need access to objects it never calls. A narrower key limits blast radius if it is ever exposed.
Test and live connections are fully isolated. A sk\_test\_… connection will never fire live-mode triggers, and vice versa. Build and verify automations in test mode before switching to sk\_live\_….
Connect Stripe✕
MCPRecommended
API Token
Uses Stripe’s OAuth flow. Scoped to exactly what your agent needs.
1Actionist opens the Stripe OAuth consent screen in your browser
2Sign in and grant the requested scopes
3Actionist verifies the handshake with a read-only call
webhookFailed PaymentFires when a charge or invoice payment fails. The most valuable trigger for dunning automation.
webhookNew SubscriptionFires when a customer subscribes to a new plan. Use it to trigger onboarding sequences or CRM updates.
webhookCanceled SubscriptionFires on cancellation. Route to a win-back agent that issues coupons and books a save call.
webhookNew DisputeFires when a chargeback is opened. Time-sensitive. Evidence deadlines are short.
webhookCheckout Session CompletedFires when a Payment Link or Checkout Session is completed. Use for post-purchase onboarding.
webhookInvoice PaidFires on successful payment. Use for receipts, CRM updates, and renewal tracking.
Triggers are webhook-backed and fire only on events that occur after the trigger is activated. Stripe does not replay historical events. For reconciliation over past data, use a scheduled agent that calls the balance transactions actions with a date range, not a trigger.
Subscribe to Failed Payment and Canceled Subscription first. These two triggers unlock the highest-ROI automations: dunning recovery and churn win-back. Route New Dispute to an agent with the right context (original charge details, order history) not to a sales agent. Dispute evidence windows are short.
Actions
40 actions across the complete billing lifecycle.
The Stripe app gives agents 12 read actions and 28 write actions, spanning every major Stripe object. One connection; no custom API wrappers.
40total actions
12read actions
28write actions
10webhook triggers
Read, create, update, and cancel customers and subscriptions. Search customers by email before creating. The idempotent lookup-then-create pattern prevents duplicate records that break dunning, subscription history, and CRM sync. Always chain Find Customer before Create Customer.
Create and retrieve charges, create and finalise invoices, add invoice items, create Payment Links and Prices, and work with PaymentIntents. Covers the full payment-collection lifecycle from quoting to collection.
Issue refunds, create and apply coupons for win-back campaigns, and retrieve dispute details so an agent can assemble evidence packages. Refunds and subscription cancellations are non-reversible. Set the agent's approval mode to require sign-off before these write actions execute.
Read balance transactions with date-range filters for scheduled reconciliation runs. Use a Finance Agent on a weekly or monthly schedule (not a trigger) for GL matching and MRR snapshots. Trigger-based reconciliation misses historical events; scheduled balance reads are always complete.
In practice
Three recipes finance teams run every week.
Real workflows, concrete outputs, each one live in under 10 minutes.
Felix · Finance and Ops
invoice.payment\_succeeded fires. Agent reads the invoice via stripe\_retrieve\_invoice, appends a reconciliation row to the finance tracker, then sends a personalised thank-you email to the customer. All before Felix checks his inbox. Typically covers 12 to 18 invoices per day with zero manual entry.
saves \~3 hrs/wk
Felix · Finance and Ops
invoice.payment\_failed fires. Agent checks the attempt count via stripe\_retrieve\_invoice: on attempt 2 or later it escalates: creates a new Checkout Session link and sends a personalised recovery email with the updated link. Attempt and outcome are logged to memory so follow-up emails do not repeat the same message.
live in 10 min
Felix · Finance and Ops
Every Monday at 08:00, a scheduled agent reads balance\_transactions:list for the previous 7 days, groups by transaction type, calculates net movement, and posts a plain-text weekly revenue digest to #finance in Slack, typically covering 30 to 60 transactions. Felix arrives to a ready-made summary instead of a spreadsheet.
saves \~2 hrs/wk
Best practices
Tips before you go live.
A full Stripe secret key grants access to every object in your account. Create a restricted key in the Stripe Dashboard under Developers → API keys → Restricted keys, scoped to only the resources your workflows touch. If the key is ever exposed, the blast radius is limited to the objects you explicitly granted.
Search by email first. If a Stripe Customer record already exists for that email, reuse the ID. Do not create a new record. Duplicate customers break dunning sequences, subscription history, and CRM sync. The lookup-then-create pattern is idempotent and safe even if a trigger fires twice.
Connect a second Stripe integration in Actionist using your test-mode secret key (sk\_test\_…). Build and verify your automations end to end. Test and live connections are fully isolated. Test webhooks will never fire live-mode triggers. Only switch to sk\_live\_… once you have confirmed the flows are correct.
Stripe triggers fire on future events only. They do not replay historical data. For month-end or weekly reconciliation, use a scheduled agent that calls the balance transactions actions with a specific date range. This guarantees a complete, ordered dataset regardless of when the agent was activated.
Keep billing operations separate from customer-facing automations. Wire balance reads, invoice ageing, GL reconciliation, and MRR snapshots to a dedicated Finance Agent running on a fixed schedule. This prevents a customer-support agent's tool scope from accidentally overlapping with financial write actions.
One connection
## Your revenue ops, running on autopilot.
Connect Stripe once. Wire your triggers. Let Actionist handle failed payments, churned customers, and month-end reconciliation, while you focus on growth.
Webhook-backed triggers fire the instant an event lands in Stripe, no polling.
Restricted keys · Test mode isolated from live · Non-reversible writes require approval.
Keep going
Related topics.
How to wire Stripe webhook triggers to agents: filter rules, agent routing, and activation.
Set up recurring Finance Agent runs for balance reads, GL reconciliation, and MRR snapshots.
Store and rotate Stripe API keys in the encrypted Credentials Vault without re-editing agents.
Explore the official Stripe MCP server and other MCP integrations available in the catalog.
# The agent operating system
Source: https://learn.actionist.ai/index
Actionist is an operating system for AI employees, agents with a role, memory, tools, and a schedule. Describe the outcome in plain language; Actionist plans the steps, does the work, and reports back.
AN OPERATING SYSTEM FOR AI EMPLOYEES
## Describe the outcome. Actionist ships it.
Give an agent a role, the tools, and a sentence describing what you want. It plans the steps, does the work across your real apps, and reports back, then keeps doing it on a schedule. No node graphs, no cron syntax, no glue code.
One sentence in, a standing automation out
Watch a request become a recurring job.
This is the whole product in one exchange: you describe the result, Actionist drafts a plan, runs it across your tools, and (because you asked for "every weekday") turns it into a schedule that fires without you.
actionist · home
youEvery weekday at 9am, pull yesterday's closed Linear tickets and post a digest to #engineering.
plan drafted · 4 steps · agent: Ops
opsPulled 12 closed tickets from Linear and grouped them by project.
opsDrafted the digest in your voice and posted to #engineering. Reactions already coming in.
schedule created · weekdays 09:00
opsDone. Next digest posts tomorrow at 09:00. I'll take it from here.
Why it's different
Three things most automation tools can't do.
Agents run on your own machine or a private cloud runtime you control. Your files, your credentials, your hardware, not a black box in someone else's data center.
When there's no integration, Computer Use sees the screen and clicks. Actionist operates legacy portals, internal dashboards, and desktop apps the way a person would.
Schedules, event triggers, and Telegram or Slack bots keep agents running when the app is closed and your laptop is shut. Headless Runtime never clocks off.
The shift
Not a chatbot. A workforce.
A chatbot waits for you to ask, then forgets. An Actionist agent owns a role, remembers across sessions, uses your real tools, and shows up to work on its own.
A chatbot
Answers only when you type, then the thread goes cold.
Forgets everything the moment you close the tab.
Can't touch your tools, files, or customers, it just talks.
Every task starts from zero context.
An Actionist agent
Owns a role and a routine. It knows what it's responsible for.
Remembers decisions, preferences, and context across every run.
Acts through your real apps over MCP: Slack, Notion, Linear, Stripe.
Runs on a schedule, reacts to events, and escalates only when genuinely stuck.
Stop prompting a tool. Start delegating to an employee.
the difference Actionist is built around
Real work, handled
What people hand to Actionist.
Four teams, four recurring headaches, one operating system. Each recipe runs on a schedule, fires from a webhook, or wakes up as a Telegram bot, no manual trigger needed.
Dario · Sales
Every evening, pull new CRM contacts added that day, score them by fit, and draft a personalised first-touch email for each. Strong matches auto-enqueue; borderline leads land in a Slack digest for a quick approve-or-skip.
saves \~3 hrs/day
June · E-commerce founder
Watch the orders inbox. Any refund or "where is my order" message gets triaged instantly, shipping status looked up, a reply drafted, the ticket closed or escalated. A nightly summary of open disputes lands in Telegram at 21:00.
saves \~2 hrs/day
Felix · Finance and Ops
Every Monday at 08:00, pull the prior week's expenses, match each line to a budget category, flag anything over threshold, and post the reconciliation report to Notion, ready for finance review before standup.
saves \~4 hrs/wk
Lena · Recruiter
When a new applicant hits the ATS, read the CV, score it against the job spec, and draft a structured interview invite or a polite decline. Within ten minutes of submission. Shortlisted candidates get a calendar link pulled from the hiring manager's live availability.
live in 10 min
A typical week, reclaimed
Actionist · illustrative totals across the recipes above
Dario · pipeline outreach + digest\~15 hrs
June · order triage + dispute summary\~10 hrs
Felix · expense reconciliation report\~4 hrs
Lena · CV screening + calendar invites\~6 hrs
Reclaimed per week\~35 hrs
ILLUSTRATIVE, BASED ON THE RECIPES ON THIS PAGE
The platform
Six ideas. One operating system.
Everything in Actionist is built from six native concepts. Learn one and the rest fall into place, each links to its full guide.
The "who". AI employees with their own role, instructions, tools, and memory. One agent per job, no sprawling generalists.
The "how". Multi-step processes you design and schedule through conversation, from a single task to a recurring pipeline with approval gates.
Reusable, tested playbooks an agent loads at runtime. Author once, enable on any agent, publish to the marketplace.
Permissioned, plain-Markdown recall: company context, agent-private knowledge, uploaded documents. The agent sharpens over time instead of forgetting.
Vision-driven screen automation. When there's no API, Actionist sees and clicks, driving any desktop or browser app on your behalf.
Anything that speaks MCP: Slack, Notion, Linear, Stripe, and a growing catalogue. Bring your own server with one line of config.
From sentence to ship
What happens when you press run.
Every trigger (a chat message, a schedule, an incoming webhook) flows through the same five stops.
YouDescribe the outcome in plain language, or let a schedule or webhook fire it.
PlanActionist drafts the steps, picks the agent, and gates anything destructive for approval.
ActThe agent executes through Skills, MCP servers, and Computer Use, streaming live.
ReportOutputs, artifacts, and a full audit trail of every tool call.
RepeatWhat worked once goes on a schedule, behind a webhook, or into the marketplace.
Executes throughSkillsMCP serversComputer Use
Who it's for
A solo operator, a whole team, or a reseller's book of clients.
Triage your inbox, draft replies, file receipts, summarize PDFs. Hand off the repetitive 30% of the day that pays nothing.
Spin up a research agent, a CRM agent, an inbox agent. They share your context and run from the same chat, and keep going from the cloud when you close the lid.
Org-wide memory, an encrypted credentials vault, and an audit trail on every run. Permissions are scoped per agent and per bucket.
Publish skills inside your org, reuse them across every agent, and version them like code. A behaviour you perfect once becomes everyone's.
Manage every client workspace from a single certified dashboard, enter a client's context with a delegated session, and onboard a new account in an afternoon.
Earn commission on every client you bring, track revenue in-app, and configure crypto payouts. See the reseller guide for the full program.
Quickstart
Your first agent, before your coffee's cold.
Four moves from download to a working, scheduled agent. The full walkthrough lives in Getting started.
Download for Mac or Windows from [the dashboard](https://app.actionist.ai) and sign in through your browser, no new password. Full setup in [Getting started](/Folders/getting-started).
Open the composer on Home and say what you want: for example, *"Every weekday at 9am, post yesterday's closed Linear tickets to #engineering as a digest."*
Actionist drafts the steps and waits for your go-ahead. Edit any step, swap the agent, or pin a model before it runs.
Because you said "every weekday", it becomes a schedule. [Cloud and VPS](/Folders/cloud) keep it firing while your laptop is closed.
Ready when you are
## Hire your first AI employee today.
Open the dashboard, describe a task, and watch Actionist do the rest.
# Agents, prompts and instructions
Source: https://learn.actionist.ai/resellers/agents/index
Build client agents with a clear role and real boundaries, and improve the prompts behind them, all inside a delegated session.
BUILD THE TEAM
## Give the agent a clear role. Then decide how much rope it gets.
One permission gates the entire agent surface in a delegated session: the ability to edit an agent's Instructions and Soul. This page covers what that gate unlocks, the two fields that actually shape behavior, and the difference between editing an agent and running one. For the full agent reference, see Agents.
One toggle, one door
What the scope unlocks.
The client-facing toggle is called **Allow reseller to modify agent Prompts & Instructions**. In the API and in this doc it is the scope `prompts_and_instructions`. It is not a per-tab setting, it is the gate for the whole Agents surface, and this page is scoped narrowly to what changes for you inside that gate, not a general tour of Agent Studio.
Without it, Agent Studio never opens at all. Not read-only, not grayed out: the route is locked before it renders.
GRANTED
Home, Onboarding, Impact and Agents appear in the delegated nav.
The full `/agents` surface opens, Agent Studio included.
You can rewrite Instructions and Soul, rename an agent, and change its approval mode.
Identity, Tools, Channels, Collaboration, Triggers, Runs and Settings are all reachable.
NOT GRANTED
Home, Onboarding, Impact and Agents drop out of the nav entirely.
Agent Studio does not open. There is nothing to unlock inside it, because you cannot get in.
You cannot see or edit an agent's Instructions, Soul, tool list, or approval mode.
Chat may still be visible on its own scope, see Chat access below, but it is a different permission.
The toggle's own description reads: "Edit agent configuration, including system prompts, instructions, and few-shot examples on this workspace's agents." Read that plainly: there is no separate few-shot field in the product today. Examples live inline, inside the Instructions text, written as part of the same Markdown block.
Of the eight scopes a client can grant, this is the widest reaching by nav surface alone: Onboarding, Impact and Agents require it and nothing else, and Home requires it or `chat_history`. The other seven toggles each gate a single, narrower area. That is worth keeping in mind when you talk a client through what to enable first: this one toggle is doing most of the work. See Client permissions for how all eight sit together.
Identity tab
The two fields that matter.
Everything you change on an agent's behavior comes down to two free-text Markdown fields on the Identity tab. They do different jobs, and conflating them is the most common way a first agent goes wrong.
Instructions. "The system prompt this agent runs under. Keep it specific: the behaviors it always does, the ones it never does, and the tone it uses." This is behavior.
Soul. "How the agent sounds. Short, vivid prose the model uses as voice reference. Different from instructions, this shapes personality, not behavior." This is voice.
A worked example for a plausible client agent, an inbox triage agent for a design studio. Notice the Instructions block states what the agent always does, what it never does, and how it should sound when reporting back, while the Soul block only carries voice.
```md Instructions theme={null}
You triage the shared inbox for a design studio. Sort every incoming
message into one of four categories: client feedback, new inquiry,
vendor invoice, or internal noise.
Always flag anything mentioning a deadline or a signed contract for
human review before you archive it. Always summarize a thread in
three sentences or fewer before moving it.
Never reply to a client on the studio's behalf. Draft a reply as a
suggestion only, and leave it for a human to send. Never mark a
message as handled without first sorting it into a category.
Tone: plain, factual, no exclamation points. You are reporting, not
performing.
```
```md Soul theme={null}
Calm and precise, a little dry. Talks like a studio manager who reads
every message twice before saying anything. Short sentences. No
corporate cheer, no filler words.
```
The product's own readiness heuristics look for Instructions running past roughly 200 characters and Soul past roughly 40. Treat that as a rough floor, not a target: it flags an agent that is clearly underspecified, it does not certify one that is well written. A few sentences that name real behaviors will always beat a longer paragraph that only restates the agent's job title.
The mistake worth avoiding: don't fold personality into Instructions, and don't fold behavior into Soul. "Be warm and friendly" is a vibe, it belongs in Soul. "Always flag anything mentioning a contract" is a rule, it belongs in Instructions. A model asked to infer a rule from a voice description will apply it inconsistently, because it was never actually given a rule.
Both fields are plain Markdown, both are editable the moment you have `prompts_and_instructions`, and both save independently of the agent's Tools, Channels, or Schedule configuration. Changing one never resets the other.
Inside the studio
Agent Studio, tab by tab, in a delegated session.
Reaching any tab at all needs `prompts_and_instructions`. Three tabs then carry a second lock on top of that one, tied to their own scope. Everything else opens as soon as you have the agent scope.
| Tab | What it configures | Scope required |
| ------------- | -------------------------------------------------------- | ----------------------------------------------------------- |
| Identity | Instructions, Soul, the agent's name and avatar | `prompts_and_instructions` |
| Tools | Which tools the agent can call, and its approval mode | `prompts_and_instructions` |
| Skills | The skill packs the agent loads on demand | `prompts_and_instructions` **and** `skills` |
| Memory | What the agent has stored from past runs | `prompts_and_instructions` **and** `agent_memories` |
| Channels | Telegram and Slack connections the agent replies through | `prompts_and_instructions` |
| Collaboration | Which other agents this one can delegate work to | `prompts_and_instructions` |
| Triggers | Event-based automations that start a run | `prompts_and_instructions` |
| Schedule | Recurring runs and their cadence | `prompts_and_instructions` **and** `calendar_and_schedules` |
| Runs | Run history for this agent | `prompts_and_instructions` |
| Settings | Everything else on the agent record | `prompts_and_instructions` |
Skills, Memory and Schedule are the exceptions, not the rule. A session with `prompts_and_instructions` but missing one of those three lands on that tab and finds it locked, while every other tab in the studio behaves normally. See Skills and Oversight for what those companion scopes gate elsewhere.
Reaching a tab is not the same as the agent being able to act on what you set there. Editing the Tools tab, for example, always works once you have the agent scope, but whether the agent can actually call the tools you enable depends on a completely separate set of scopes, covered next.
When a session lacks `prompts_and_instructions`, the studio does not render a locked version of itself tab by tab. It renders the whole thing inside a single disabled fieldset, which natively disables every control across every tab panel at once. The locked panel itself reads "Access restricted" and, in code format, `The client hasn't granted access to {{scope}} in this delegated session.`
Nothing changes inside your session the instant they save. Scopes are resolved when the session is minted, not re-checked on every click, so your edits keep working until you hit **Refresh permissions** in the banner or start a fresh session. Save what you're working on if you suspect a client is adjusting your access.
Per workspace, not per agent. It is one toggle on the client's Manage Reseller panel. If it is on, it applies to every agent you can see in that client's workspace, there is no way for a client to hand you one agent and withhold another.
Tools tab
Approval modes.
Four modes are selectable on an agent's Tools tab. A reseller with `prompts_and_instructions` can change the mode for a client's agent like any other Identity or Tools setting.
| Mode | Description |
| ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Suggest | "Propose tool calls; user runs them manually." |
| Ask each time | "Require approval before every tool execution." |
| Guarded auto | "Run safe tools automatically, ask for risky ones." |
| Full auto | "Runs automatically, but asks before irreversible actions such as deleting or overwriting files, making payments, or sending messages outside your organization." |
For a client who is new to automation, start cautious. **Ask each time** or **Guarded auto** give them a few weeks of watching the agent's tool calls before anything runs unsupervised, and moving to **Full auto** later is a one-click change, not a redo. Going the other direction, tightening a mode after something went wrong, reads worse to a client than starting careful and loosening on purpose. The full approval and blockers story, including what counts as a risky tool call, lives at Oversight.
For the inbox triage agent from the example above, **Guarded auto** is often the right starting point. Reading and sorting a shared inbox is low risk, so there is little reason to make a client approve every message, while anything the agent should escalate is already written into its Instructions as a flag for human review, not an action it takes on its own.
The distinction that trips people up
What the agent can actually run.
`prompts_and_instructions` controls whether **you** can edit an agent's configuration. It does not control what tools the agent itself can call when it runs. Those are separate, and each is gated by its own scope on the same delegated session.
You can have full edit access to an agent's Instructions and still watch it fail every tool call, because the client never granted the scope those tools need. That is expected behavior, not a bug to work around.
Not every scope on the client's Manage Reseller panel affects this. `chat_history`, `billing_summary` and `audit_logs` govern what a reseller can see, not what an agent is able to do, so they never appear in the table below.
| Missing scope | What the agent loses |
| ------------------------ | ------------------------------------------- |
| `tools_and_integrations` | The external tool list empties out entirely |
| `skills` | Skill tools are hidden and cannot run |
| `agent_memories` | Memory lookups are blocked |
| `files` | File tools are blocked |
| `calendar_and_schedules` | Schedule management is blocked |
When one of these is missing, the agent reports it plainly rather than failing silently, in code format: `Permission denied: reseller delegated session does not include {scope} access.` If a client asks why an agent you configured "isn't doing anything," check this table before you check your prompt. See Apps, tools and integrations and Skills for what granting each of these actually looks like from the client's side.
A concrete version of the mismatch: a client grants `prompts_and_instructions` but leaves `skills` off. You can open Agent Studio, rewrite the agent's Instructions to say "use the invoicing skill for any vendor bill," save it, and everything looks correct. The first time the agent runs, it cannot find that skill and reports the permission denial above. The fix is on the client's Manage Reseller panel, not in your prompt, no amount of rewording changes what scopes the session was minted with.
A separate scope
Chat access.
Chatting with an agent is gated on its own scope, `chat_history`, which is independent from editing that agent's configuration. Three combinations are possible, and only one of them lets you actually send a message.
Blocked. No `chat_history`. The agent's chat page is not reachable at all.
Read-only. `chat_history` granted, `prompts_and_instructions` not. History is visible, the composer is disabled.
Interactive. Both scopes granted. You can read history and send messages.
Opening an agent's chat page needs `chat_history` at the route level. Sending anything into it needs both scopes together, `chat_history` for the history and `prompts_and_instructions` for the send action.
In practice, read-only looks exactly like the client's own chat view, scrollback, timestamps, tool call traces, with one difference: the composer at the bottom is disabled. There is no separate "view only" banner on that field, so if a client has only granted `chat_history`, expect the input to simply refuse focus rather than announce why.
Trying to send a message with only `chat_history` does not queue, retry, or silently drop the send. The app denies it outright, and the main process reports: "Conversation History and Agents permissions are required to modify conversations in View as Client mode." If a client grants you chat access alone, expect to read, not to answer on their behalf.
If a client wants you to be able to reply, not just read, the fix is on their side, not yours: both toggles live on the same Manage Reseller panel. See Client permissions for exactly where.
Session hygiene
Working across several clients.
Agents belong to the client organization that owns the workspace, never to you. Every delegated session is scoped to exactly one client, and Actionist actively clears cached workspace data on both ends of that session.
Entering a session and leaving one both clear the cached workspace data. The practical consequence: always leave a session with the **Exit** button, or the Escape key, rather than navigating away in the app or closing the window. That is what actually triggers the clear. Wandering off mid-session risks stale data from one client's workspace bleeding into your view of the next.
A delegated session runs for one hour. Scopes are resolved from the client's live grants at the moment you start it, so if a client flips a toggle while you are inside, your session keeps its original scopes until you use **Refresh permissions** in the banner to re-mint them, you do not need to exit and re-enter for that. Session expiry itself is silent: if the hour runs out mid-task, or the session is otherwise no longer valid, the app tears it down and drops you back at your own Reseller dashboard with no error dialog. If you find yourself unexpectedly back on your dashboard, that is very likely why.
"Delegation" is an overloaded word in Actionist's own docs. A reseller's **delegated session**, this page's whole subject, is a different feature from **agent-to-agent delegation**, where one agent hands work to another through the Collaboration tab. The full agent reference at Agents uses "delegation" for the second meaning. When you read that page, mentally substitute "View as client" for anything on this one.
Omar · Agency owner, 6 clients
Omar rewrites an Instructions block for a support agent, checks the result in Chat, then hits **Exit to Reseller Dashboard** before opening the next client. Every session starts from a clean cache.
clean handoff between clients
Priya · Solo reseller
Priya tabs away mid-edit to answer a Slack message, then comes straight back into the same browser tab instead of exiting first. The next client's agent list briefly shows the previous client's data before it catches up. She now exits with Escape every time, no exceptions.
the exit habit that avoids this
Certified reseller program
## Configure agents that earn their trust.
A clear Instructions block, a sensible approval mode, and a scope list the client actually understands.
One scope gates the whole Agents surface. Tool access is gated separately, scope by scope.
Credentials and API keys stay off-limits regardless of what a client enables here.
Keep going
Next steps.
The full agent reference: every tab, every setting, outside the reseller context.
What the `skills` scope unlocks, and how to add a skill pack to a client's agent.
All eight toggles, from the client's side of the Manage Reseller panel.
Approval modes and blockers, in full, including what counts as an irreversible action.
# Apps, tools and integrations
Source: https://learn.actionist.ai/resellers/apps/index
Choose and configure the apps a client's agents need, and know exactly which connection steps only the client can finish.
SET IT UP, THEY SWITCH IT ON
## You choose the apps. The client clicks Connect.
With **Allow reseller to manage Apps and MCP** granted, you can browse the catalog, plan every app a client's agents need, and get a connection ready to go. The moment a step needs the client's login or their secret, the control locks. Not because of a missing scope, because it always does. This page shows you exactly where that line sits and how to hand it off cleanly.
The one thing to internalize
Every connect control is locked in a delegated session.
There is no scope that changes this. It doesn't matter what the client's toggles say.
Connect
Grant access
Install
Client action required
This app requires the client's credentials or authorization to complete installation. Ask the client to install or connect this app directly.
The same lock, the same lock icon, and the same tooltip appear on **Connect**, **Reconnect**, **Grant access** (the OAuth scope upgrade), **Recheck**, **Disconnect**, and **Switch to OAuth**. It disables the entire API-key form, input fields included, not just its submit button. It disables the app detail page's **Install** button, **Uninstall**, and the confirm button on the Install plan sheet. If a control finishes a connection or touches a credential, it is locked.
There is no scope check behind this lock. It fires for **any** active delegated session, full stop. Grant **Allow reseller to manage Apps and MCP** completely and the Connect button still shows the lock icon. The backend agrees independently: every mutating install, connection, and OAuth endpoint rejects delegated sessions outright. This isn't a permission you can be missing, it's a boundary with no toggle on either side.
The scope
What "Allow reseller to manage Apps and MCP" actually gives you.
The client grants this under the label **Allow reseller to manage Apps and MCP**. Its full description, in the product's own words: "Manage the Apps section, including tools, MCP servers, and app connections that don't require credentials. Installing credential-based apps, connecting OAuth apps, and disabling or modifying anything tied to API keys, OAuth tokens, or other secrets is always off-limits, regardless of this setting."
You can, with this scope granted
Browse the app catalog, including search, facets, featured, and popular.
Open any app's detail page and read its full description.
Read install and subscription state for apps already on the workspace.
Read the connection list and each connection's health.
Decide which apps a client's agents actually need.
Prepare everything around a connection, so the client only has to click through the last step.
Always the client, no matter what's granted
App install
Install plan
Configure
Subscription configure
Subscription uninstall
Installed triggers
Connection delete
Connection health check
Connection refresh
Connection exchange
OAuth start
Static credential connections
Marketplace browsing itself is deliberately never locked, delegated or not. You can always look, compare, and plan. What changes is whether you can act on what you find.
Inside the nav
The Apps section, scope by sub-page.
The **Apps** nav item itself unlocks with `tools_and_integrations` OR `skills`, either one is enough to see it. Once inside, its three sub-pages each check their own scope.
| Sub-page | Scope required | What you can do there |
| ----------- | ------------------------ | ---------------------------------------------------------------------------------------------------------------------------- |
| Browse | `tools_and_integrations` | Browse the catalog, open app detail, read install and subscription state, and prepare a connection for the client to finish. |
| MCP servers | `tools_and_integrations` | View listed MCP servers and their detail pages. See [MCP servers](#mcp-servers) below for what remains unconfirmed here. |
| Skills | `skills` | Browse, add, and maintain skills. Covered in full on [Skills](/resellers/skills). |
If a delegated session carries only `skills` and not `tools_and_integrations`, it lands on the Skills sub-page rather than Browse. That's deliberate: Browse needs `tools_and_integrations`, so a `skills`-only session would find it locked. The app routes you to the one page you can actually use instead of opening on a dead end.
Plan before you ask
Reading the catalog before you commit.
Every app declares its own connection method, OAuth, an API-key form, or both, so what a connection needs from the client varies app to app. Two sets of signals tell you what's realistic before you request anything: the state chip on an Install plan row, and the badges on an app's detail page. Reading both first means you can batch every request the client needs to act on into one message, instead of dripping requests in one at a time.
**Install plan state chips**
| Chip | What it tells you |
| --------------- | ------------------------------------------------------------------------- |
| "Installed" | Already added to this workspace. Nothing to request. |
| "Connected" | Installed with a live connection in place. Ready for the client to use. |
| "Update link" | The existing connection needs refreshing or re-authorizing. |
| "Install" | Nothing set up yet. Installing is the next step. |
| "Connect first" | A connection has to exist before this app can be installed or configured. |
| "Needs setup" | Installed or connected, but configuration isn't complete. |
| "Blocked" | Can't be installed or connected on this workspace right now. |
| "Ready" | Every prerequisite is met. |
**App detail page badges**
| Badge | What it tells you |
| ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| "Coming soon" | A veil over the whole page. No connection method works on this deployment yet, so there's nothing to request from the client. |
| "Available via MCP" | The app's native install path isn't available, but a verified MCP server covers the same app. Point the client at connecting through MCP instead. See [MCP servers](#mcp-servers). |
| "Beta" | Informational only. Doesn't change what you or the client need to do. |
Read these before you write to the client, not after. A five-minute pass through the apps a client's agents need turns into one clear message instead of three follow-ups.
A narrower boundary
MCP servers.
Be precise about what's actually documented here, because MCP servers work a little differently from apps.
The MCP servers sub-page is gated at the route level by `tools_and_integrations`, the same scope as Browse. What the permission copy itself says is that the scope covers "MCP servers" alongside tools and app connections, as part of the same **Allow reseller to manage Apps and MCP** grant.
Beyond that route-level gate, the MCP servers page doesn't carry the same per-action locks the Apps surface does. What that means for any specific action inside a delegated session isn't part of the documented material available here, so this page won't tell you that a reseller can, or can't, complete a particular MCP install on the client's behalf. Treat it as unresolved rather than assuming either way.
One thing is confirmed either way: an MCP server that requires its own OAuth authorization follows the same client-only rule as apps do. After it's installed, that server shows a "Needs auth" state until the client completes the consent screen in their own account, at which point it turns connected. If a step needs the client's login, it needs the client, MCP server or app, no exceptions.
For the full reference on what MCP servers are and how they're configured, see [MCP servers](/Folders/mcp).
The handoff
Requesting a connection well.
The client's side of a connection is short: they sign in to their own account, open the app, click Connect, complete the provider's consent screen in their own browser, and the connection appears. Your job is making sure they know exactly which apps, in one pass.
Walk the agents you've configured for this client and list every app or MCP server they call. Check each one's state chip and detail badges from the [previous section](#reading-the-catalog-before-you-commit) so you know exactly what's missing.
Send one message covering everything the client needs to act on, not a separate ping per app. A client who connects three apps in one sitting is far more likely to finish than one who gets interrupted three separate times.
Tell them precisely where to go and what to click, for example "open Apps, find Salesforce, and click Connect." Vague requests like "please connect your CRM" cost you a follow-up question.
The client signs in, clicks Connect, and completes the provider's consent screen themselves. Nothing here happens inside your delegated session.
Re-open the app or MCP server's detail page in your next delegated session and check its state chip and connection health. Confirm it before you tell the client their agent is ready.
A short template covers most handoffs. Adjust the app list to what's actually missing for that client.
message draft
```text theme={null}
Hi [client name],
I've set up [agent name] and it's ready to go, apart from a couple of
connections only you can complete. Could you take two minutes to:
1. Open Apps, find [App one], and click Connect (or Install, if it
hasn't been added yet). Approve the sign-in screen that follows.
2. Open Apps, find [App two], and click Connect. Approve the sign-in
screen that follows.
That's it, no settings to change beyond that. Once you've clicked
through both, let me know and I'll confirm everything's linked up
correctly on my end.
Thanks,
[your name]
```
When something looks stuck
Troubleshooting connections.
A quick index for the signals you'll actually see while reading a client's Apps section from inside a delegated session.
Connect, Reconnect, Install, or any similar button shows a lock icon and won't respond
Working as intended. Every connect and install control is disabled for any active delegated session, regardless of granted scopes. There's no setting to change.
Client
"Missing permissions"
The connected account no longer grants everything the app needs. The client has to reconnect and re-approve the full permission set.
Client
"Expired — reconnect"
The provider's authorization token has expired. The client needs to reconnect from their own session.
Client
"Reconnect needed"
A general prompt that the connection needs attention before it will work again. Same fix as above: the client reconnects.
Client
"API key needs attention"
The stored key is being rejected by the provider. Only the client can open the API-key form and paste a fresh one, the whole form is locked for you.
Client
"Not connected"
The app has never been linked. Send the client a request naming the exact app and button, per the [handoff steps](#requesting-a-connection-well) above.
Client
"Coming soon" veil on an app's detail page
No connection method works on this deployment yet. There's nothing for you or the client to configure. Check whether a verified MCP server covers the same app instead.
Support
A connection keeps expiring and needing reconnection
Usually a short-lived provider token. Ask the client to reconnect first. If it recurs often for the same app, that's worth flagging to Actionist support rather than repeating the same request.
Support
For issues that go beyond the Apps section, see the full [Troubleshooting](/resellers/troubleshooting) index.
Apps and MCP
## Plan it fully. Hand off cleanly.
Everything short of the client's own login and secrets is yours to configure.
Every connect, install, and credential control locks for any active delegated session, no scope changes that.
Marketplace browsing stays open the whole time · so does everything short of the client's login.
Keep going
Next steps.
Why secrets stay permanently out of reach, and how the hard limit differs from this page's lock.
Browse every app Actionist supports, outside the reseller context.
The full reference for MCP servers, how they're configured, and what authorization they need.
Choosing, adding, and maintaining the reusable task packs an agent loads on demand.
# Client success best practices
Source: https://learn.actionist.ai/resellers/best-practices/index
A working approach to discovery, setup, testing, handoff, training and check-ins, anchored to what Actionist actually does rather than generic advice.
RUN IT WELL
## A good client outcome is a routine, not a rescue.
Discovery, setup, testing, handover, training and check-ins, each step anchored to something Actionist actually does, not a generic agency playbook. Every recommendation on this page names the exact screen, button or copy it depends on.
The shape of it
Six stages, in order.
Each stage leans on one specific part of Actionist. Skip one and the next stage gets harder, not impossible, just harder.
DiscoverQuestions that map onto the five groups you'll actually build.
Set upBuild each agent's five groups in the Agent Onboarding studio.
TestDry run every trigger, run every schedule once, before you confirm.
Hand overShow Needs attention, a run record, and the approval mode control.
TrainWalk their team through what each agent can do alone, and can't.
Check inRead the metrics tab and the Needs attention list. Nothing arrives on its own.
Discover. The five questions you ask map directly onto the five groups in the studio, nothing you learn goes to waste later.
Set up. Confirming an agent turns its schedules and triggers on the same instant. Confirm last, never first.
Test. There is no whole-agent test mode. A trigger's dry run and a schedule's Run now are the only two checks you get.
Hand over. Nothing in the product records what you changed. If you don't tell the client, nobody will.
Train. A client can revoke any permission the moment training ends, without telling you first.
Check in. The metrics view moved into Billing. There is no digest email sitting there to remind you it exists.
Before discovery
Making the case to a business.
Two arguments do most of the work in a first conversation, and they are the two a business objects to first: what it costs, and whether they can trust you inside their systems.
The cost argument
The average US worker costs a business about \$66,622 a year, per SoFi. A dozen staff is over a million in payroll.
An agent takes real work off that team, or lets the same people cover far more, for a fraction of one salary.
Anchor on a specific task the business already pays someone to do, not on the software. "This is the four hours a week your ops person spends on invoices" lands harder than a feature list.
The trust argument
You never see their passwords, API keys or tokens. That is enforced on the server, not promised in a contract.
They choose exactly which parts of their workspace you can reach, toggle by toggle, and can change it at any moment without asking you.
Show them the **Manage Reseller** panel early. Handing someone the off switch up front is usually what makes them comfortable turning things on.
The strongest version of the trust argument is a demonstration rather than a sentence. Walk a prospective client through the eight permissions and the credentials hard limit before they ask, and you convert a worry they were about to raise into a reason to say yes. See [Client permissions and access](/resellers/permissions).
Do not promise a specific saving, a payback period, or an income figure on the client's behalf. You have no verified benchmark to quote and the product does not produce one. Talk about the work an agent will take on, and let the client apply their own numbers to it.
Before you open the studio
Discovery that produces a build.
Every agent the client works through in the Agent Onboarding studio breaks into the same five groups: Agent Instructions, Skills, Channels, Advanced, and Apps. Ask your discovery questions in that shape and the answers drop straight into the build, instead of sitting in a notes doc you translate later.
* Which named task or decision does this agent take on, and what is explicitly outside its remit?
* Whose voice should it write in, and is there a house style doc or set of past emails to point it at?
* Which of the client's team members should this agent be shown as working for, so its remit reads correctly the first time they open it?
* Is there a decision this agent should never make on its own, regardless of how it's configured elsewhere?
* Which of this agent's jobs should run itself on a clock, and how often, daily, hourly, a fixed time each week?
* Which jobs should only ever run because someone asked in chat?
* Is there an inbound event, a payment, a support ticket, a form submission, that should wake this agent instead of a schedule?
* If a trigger fires on a payload field that isn't always present, what should happen instead of the agent guessing?
* Where does this agent's output actually need to land, a specific Slack channel, Telegram, or nowhere, silent and logged only?
* Who should see its day-to-day output, and who should only be told when something goes wrong?
* If "silent" is the answer, is that a deliberate choice or does no one know a channel option exists?
* How much should this agent do without asking, in its first week? Is that answer different by month two?
* Is there an irreversible action, a payment, a delete, a message sent outside the organization, this agent should never take without a human confirming, no matter the approval mode?
* Should this agent be able to delegate to others, or does that wait until the client trusts it more?
* Which of these connections need the client's own login, and have you named them individually rather than describing them abstractly?
* Does the client already use one of these apps under a different account than the one they'll connect here?
* Which connections does this agent share with other agents, so one broken connection affects more than a single workspace?
Five questions per agent is deliberate, not five for the sake of it. Each group in the studio only accepts input in its own shape, an Advanced answer never helps you fill in Channels, so an answer that doesn't map to one of the five groups usually means the question was aimed at the wrong stage of the conversation.
The most useful thing on this page
Walking the Agent Onboarding studio.
This is the studio your client runs, and the one you can pick up from mid-way through inside a delegated session. Knowing its exact shape means you never guess what comes next.
A re-entry teaser reads "Set up your agents", with "Answer a few questions about your business and Actionist proposes the agents to build." One button, **Start**, opens **Agent onboarding** itself: "Review the company memory every agent reads, then work through your agents one at a time."
The workspace provisions in the background across three states, **Preparing**, **Ready**, and **Needs attention**. The timing copy is deliberately calm: "Usually ready in two to three minutes. You can keep working while it starts." If it stalls: "Agent setup carries on. Anything that needs the workspace waits until it is back."
Before touching any single agent, the client sees the memory files every agent reads from. This is the shared context behind "what does it actually know about us", worth pointing a curious client to directly.
Agent Instructions, Skills, Channels, Advanced, Apps, in that order, for every agent on the roster. The Apps group reports its own readiness: " of connected", warning "Each app still needs connecting before can use it without you." until it reads "Every app needs is connected."
"Confirm this agent" carries a real warning: "Confirming turns on and enables its schedules and triggers at the same moment." Roster progress reads " of agents confirmed", ending in "Every agent is live."
Confirming is a one-way switch for schedules and triggers, so the studio itself blocks it until a specific set of conditions clears. This is the checklist worth memorizing, because it is also the shortest path to diagnosing why a client's agent won't go live.
| What blocks confirming | What's actually stuck | Who resolves it |
| --------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
| An open blocking issue | A blocker tied to this agent or one of its triggers hasn't cleared | Usually you. Agent- and trigger-scoped blockers clear on the next successful run once the cause is fixed |
| Incomplete app connections | Not every app the agent needs shows connected, this is the " of connected" count | The client only. Completing a connection always needs their credentials or their OAuth |
| The workspace still Preparing or on Needs attention | Provisioning hasn't finished, usually two to three minutes | Nobody. Wait it out. If it sits on Needs attention, treat it as a support case |
| A relied-on connection unhealthy | An app connection this agent shares with others has gone bad, an expired token or revoked access | The client. Reconnecting an app is their action even inside a delegated session |
| A duplicate trigger | Two triggers on this agent are configured to fire on the same thing | You, from inside the Skills group. Remove or rename one |
| Incomplete trigger configuration | A required field is missing, often the same one a dry run already flagged as referenced but absent | You. Finish the field before confirming |
| A final cross-agent check still running | A last validation pass across the whole roster hasn't finished yet | Nobody. It clears itself in moments |
Run this table top to bottom before you tell a client "it's ready." Four of the seven rows are yours to fix, one is the client's, and two just need a moment.
Workspace provisioning and your own management access clear on two separate clocks. A client's workspace can already be **Ready** while your delegated session is still finishing its own sync, or the other way round. Don't read one as a proxy for the other, check each state directly rather than assuming.
Set once, per agent
Choosing an approval mode.
Every agent has one approval mode, set on its **Tools** tab under Advanced, and it applies to all of that agent's tools, including Skills and MCP servers. Four modes exist, ordered from most hands-on to most autonomous.
| Mode | Exact description |
| ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Suggest | Propose tool calls; user runs them manually. |
| Ask each time | Require approval before every tool execution. |
| Guarded auto | Run safe tools automatically, ask for risky ones. |
| Full auto | Runs automatically, but asks before irreversible actions such as deleting or overwriting files, making payments, or sending messages outside your organization. |
Start a nervous client on **Ask each time** or **Guarded auto**. Either one lets them watch the agent work without a single unsupervised action, and both still let it move at a reasonable pace once the risky calls are the only ones that pause. **Guarded auto** is the sensible everyday default once a client has seen a week or two of an agent's decisions and stopped double-checking every one. Loosen to **Full auto** only for a routine you've watched succeed repeatedly, and only for an agent whose irreversible actions, payments, deletes, external messages, you're comfortable it will still pause on.
Approval mode is agent-wide, not per-tool by default, though individual tools can be overridden stricter or looser underneath it. Full detail on how modes interact with unattended runs and blockers lives on [Delegate the work, keep the wheel](/Folders/oversight).
Before you confirm
Testing before it is real.
Actionist gives you exactly two real checks, one for triggers and one for schedules. Neither is a substitute for the other, and there is no third check that exercises a whole agent end to end.
Paste a sample payload into **Preview with sample payload** and Actionist hands back the rendered instruction and whether the filter passed, with no database write and no model call. It also tells you whether the agent would actually receive the dispatch, and flags any payload field your instruction references that the sample doesn't actually contain.
**Run now** is not a preview. It is a real, live run: the agent executes, the result lands in **Agent Studio → Runs** exactly like a scheduled firing would, and anything the agent is set up to do, it does. Use it once you're ready for the run to count.
There is no whole-agent test mode. Nothing in Actionist simulates an entire agent, chat included, end to end without it actually running. Test each trigger with its dry run, run each schedule once with **Run now**, and treat any first real chat message the same way, watched, on a cautious approval mode, not assumed safe because the pieces tested clean individually.
The two checks catch different failures. A dry run tells you the trigger is wired correctly, the filter passes, the instruction renders, every field your task description references actually exists in a real payload. It cannot tell you what the agent does with that instruction, because no model call happens. **Run now** is the opposite: it proves what the agent actually does, but only for the one execution you watched, not for every payload shape it will meet later. Use both, for the reasons each one is actually good for.
Before you exit for the last time
Handover and training.
Handover is not a document, it's a short walkthrough inside the workspace itself, done once with the client watching, so the four things they'll need are things they've already clicked once themselves.
Show them Needs attention
It lives on their Home tab. Walk them through reading one card: what's stuck, why, and the exact fix action written in plain language. This is the one screen they'll check without you.
Show them how to read a run
Open **Agent Studio → Runs** together. Point out the source (manual, schedule, trigger), status, timings, the output summary, any files written, token usage, tool calls, and the error class on a failed run.
Show them the approval mode control
On the agent's Tools tab. They should be able to tighten it themselves the moment something makes them uneasy, without waiting for you to be online.
Show them how to revoke you
Any toggle in their Manage Reseller panel can be turned off at any time, without telling you first. Say this plainly during training rather than letting them discover it mid-project.
Leave something behind
What goes in a handover note.
A short written note, sent after the walkthrough, should cover:
Which agents are live and what each one actually does day to day.
Which apps are still unconnected under whose name, taken straight from the Apps group readiness count.
Each agent's approval mode and the reasoning behind starting it there.
Anything you changed this session, agent by agent, dated.
Actionist keeps no client-visible record of what a reseller changed inside a delegated session. That last item on the list is not optional. If you don't say what you changed, the client has no other way to find out.
After the handover
Check-ins that are worth having.
Three real surfaces exist to check on: a metrics view, the Needs attention list, and any schedule you set up yourself. There is no fourth surface that gathers all of it and emails it to you.
The metrics view is not a top-level navigation item anymore. It now lives inside **Billing**, under a **Value delivered** tab. If you're used to finding it elsewhere, that's where it moved.
Once you're there, it reports six measures: estimated time saved, tasks completed, actions taken, automated runs, success rate, and how many agents contributed, plus a per-agent leaderboard and a week-over-week trend. It only counts automated agent work, a schedule or a trigger firing, not manual chat use, so it undercounts a client who mostly talks to their agents directly.
Metrics, in Billing → Value delivered. Six measures, a leaderboard, a week-over-week trend, automated work only.
Needs attention, on Home. The list you already trained the client to read is also the one you should be reading.
A scheduled agent, of your own making. Point one of the client's agents at a recurring task, "summarize this week's automated runs and any open items," and let it post into a Channel. Actionist ships none of this automatically; you build it if you want it.
| What to review monthly | Where |
| --------------------------------------------------------------------------- | ---------------------------------------- |
| Estimated time saved, tasks completed, actions taken, trend | Billing → Value delivered |
| Which agents contributed the least, and why | The leaderboard, same tab |
| Anything sitting on Needs attention longer than a few days | Home |
| Whether an approval mode still matches how much the client trusts the agent | The agent's Tools tab |
| Whether every app connection is still healthy | The Apps group inside that agent's setup |
There is no automated weekly digest and no report email. Everything above is something you open and read, or an agent you scheduled yourself to summarize it. If a client expects a report to arrive on its own, that expectation needs correcting during handover, not discovered during a check-in.
The leaderboard is a per-agent view, not a per-client one. On a multi-agent workspace it's the fastest way to spot an agent that's confirmed and connected but never actually doing anything, worth a look before a client asks why one of their agents seems quiet.
Run it well
## Nothing here is a guess.
Discovery that maps to the studio, a checklist that actually blocks confirming, and check-ins that only cover what the product really tracks.
Anchored to the product, not a template.
Five groups per agent · one checklist that blocks confirming · six measures in Billing.
Keep going
Next steps.
The full path from invitation to a live workspace, including the six-step handoff checklist.
Approval modes, blockers, and how Actionist keeps a human in the loop on unattended runs.
Every message you can hit in a session or a setup, what it means, and whose problem it is.
The eight toggles behind every lock you'll meet, and what each one opens.
# Onboarding a new client
Source: https://learn.actionist.ai/resellers/client-onboarding/index
Invite a client by email, watch the invitation through to an active workspace, and run a handoff checklist that survives contact with a real business.
FROM INVITE TO LIVE
## One email starts it. A checklist finishes it.
Onboarding a client is one modal, one field, and a handful of statuses to watch. What actually takes the work is everything between "they signed up" and "they can act on their own account". This page walks the whole path: sending the invite, reading the lifecycle honestly, seeing what the client sees on their own first run, and knowing exactly which steps you can finish and which ones only the client can close.
The shape of it
Five moments, not one event.
"Invite sent" and "client is live" are separated by a sign-up, an auto-attach, and a sync period the dashboard tracks for you. None of it needs you to refresh manually, but all of it is worth reading before your first invite.
Send inviteOne field: their email. Actionist emails the signup link from your business address through its own mail relay.
They sign upThe invitation moves to "Accepted — awaiting org" the instant they finish sign-up, before their workspace exists yet.
Workspace attachesTheir workspace links to your reseller account on its own. The relationship status flips to Active.
Setup finishesActive does not always mean manageable yet. A short sync period can leave management access unavailable.
You can manageOnce setup clears, **View as client** works, and you can start building their agents.
No day count anywhere. The invitation shows a real expiry date. Nothing in the product states a fixed number of days, so read the date rather than quoting one from memory.
Active isn't always manageable. Watch the dashboard's attention rail. It names exactly which clients still need setup to finish before you can act on their workspace.
An open tab can lag. The dashboard caches for three minutes, so a client who just signed up may not appear in an already-open tab until it refreshes.
When a client needs setup attention, the dashboard collects them into one rail rather than scattering the warning across the page: " clients need setup attention", followed by "Management access stays unavailable until setup finishes." That is your cue that Active does not yet mean manageable for that client.
Step one
Sending the invite.
The whole flow lives on Overview. There is exactly one action button and exactly one field to fill in.
**Invite client** is the only action button on the Overview page. Click it to open the invite modal, titled "Invite a client to Actionist".
Type their address into **Client email**. That is the only field the modal renders. Older material may describe a company name field too, but nothing like it appears in the app, and there is nothing else to fill in before sending.
Click **Send invitation email**. The button reads "Sending…" while the request is in flight, then the modal shows a confirmation screen titled "Invitation sent".
The confirmation shows Email, Status, and Expires. Track those same three values afterward from the Clients table as the invitation works its way to Active.
Overview → Invite client
Send invite
Invite a client to Actionist
We'll email them a signup link that auto-attaches their workspace to your reseller account after successful sign-up.
Client email
We'll send the invite from [hello@halo.studio](mailto:hello@halo.studio) via Actionist's mail relay.
When they sign up through this link, they're auto-attached to your reseller account. You'll see them appear in Clients the moment they activate.
CancelSend invitation email
The modal renders exactly one field. There is no company name input to fill in, and nothing is sent to the backend beyond the client's email address.
If you're not sure whether you already invited someone, check the Clients table before sending again. Sending twice for the same address is what produces "A pending invitation already exists for this email." below, not a bug worth chasing.
Reading the lifecycle
Invitation states.
Five statuses cover the whole life of an invitation, from the moment you send it to the moment it either lands or lapses.
| Status | What it means | What you do |
| ------------------------- | ------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------- |
| "Pending" | Sent, not yet opened or acted on. | Nothing required. Resend only if the client says it never arrived. |
| "Accepted — awaiting org" | They finished sign-up, but their workspace has not attached yet. | Nothing required. This clears on its own once their organization finishes provisioning. |
| "Active" | The relationship is live and the client appears in Clients. | Check whether **View as client** is enabled yet. See the pipeline above. It may still be syncing. |
| "Expired" | The expiry date shown on the invitation passed before it was used. | Send a fresh invite. If it happens repeatedly for the same address, confirm you have the right email. |
| "Failed" | The invitation could not be sent or processed. | Send a fresh invite. If it keeps failing, contact Actionist support. |
Never tell a client "you have N days to accept this." No fixed number of days is defined anywhere in the product. Read the expiry date shown on the invitation itself, in the confirmation screen or in the Clients table, and go by that.
Most invitations move through these states without you doing anything. Where you actually intervene is at the ends of the path: resending after "Expired" or "Failed", and checking in on an "Active" client whose management access has not cleared yet.
When it doesn't go through
When something goes wrong.
Six messages cover every way Send invitation email can fail. Each one tells you where to look first.
| Message | Cause | Whose problem |
| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
| "This email already has an Actionist account and cannot be invited through reseller signup." | That address already owns an Actionist account outside the reseller flow. | Client's. They should sign in directly, or reach out to you outside the invite flow to get linked another way. |
| "A pending invitation already exists for this email." | You already invited that address and it has not resolved yet. | Yours. Check Clients or your recent invites before sending a second one. |
| "Enter a valid email address." | The address you typed does not parse as a valid email. | Yours. Fix the typo and resend. |
| "Invitation limit reached. Try again in a few minutes." | Too many invitations went out in a short window. | Yours. Wait a few minutes, then retry. |
| "Your reseller account isn't certified yet, or this feature is disabled." | Your reseller profile is not certified, or the feature is turned off for your account. | Yours. Confirm your certification status before trying again. |
| "Something went wrong." | Any other backend error not covered above. | Actionist's. Retry once, and if it repeats, contact support. |
For a broader symptom index across the whole reseller programme, not just invitations, see Troubleshooting.
Three of these six are yours to fix directly: a typo, a duplicate send, or sending faster than the rate limit allows. Two point back at the client's own account state. The last is the only one worth escalating rather than retrying repeatedly.
Their side of it
What the client sees.
Once a client is in, Actionist runs its own onboarding: the Agent Onboarding studio. Knowing this flow means you can talk them through it, or pick up from wherever they stopped. Some clients finish it before you ever touch their workspace. Others hand it to you half-answered and expect you to carry on from Company Overview.
A re-entry teaser greets them first: "Set up your agents", with the line "Answer a few questions about your business and Actionist proposes the agents to build." A single button, "Start", is all it takes to open the studio itself, titled "Agent onboarding" with the subtitle "Review the company memory every agent reads, then work through your agents one at a time."
Their workspace comes online in the background while they answer setup questions. Three states cover it: **Preparing**, **Ready**, and **Needs attention**. The steps shown are "Creating your workspace", "Waiting for your workspace to report in", then "Your workspace is online". Timing is described softly: "Usually ready in two to three minutes. You can keep working while it starts." If it stalls, the copy is equally calm: "Agent setup carries on. Anything that needs the workspace waits until it is back."
This mirrors the reseller side of the same syncing period. The client's workspace coming online and your management access clearing are two separate things happening at once, not one blocking the other.
Before touching individual agents, the client lands on a "Company Overview": "The memory files written from your setup answers. Open any file to read exactly what your agents will know." This is the shared context every agent reads from, worth pointing new clients to directly if they ask "what does it actually know about us?"
Every agent the client works through breaks into the same five groups:
* **Agent Instructions**. Identity, remit and team from the accepted proposal.
* **Skills**. Manual tasks, schedules and triggers.
* **Channels**. Where this agent talks to the client's team.
* **Advanced**. Delegation, access control and approval mode.
* **Apps**. Connecting the tools this agent uses.
The Apps group tracks readiness explicitly: " of connected", with "Each app still needs connecting before can use it without you." until every one is linked, at which point it reads "Every app needs is connected."
Once the five groups are in shape, the client confirms the agent: "Confirm this agent", with the warning that "Confirming turns on and enables its schedules and triggers at the same moment." Progress across the whole roster shows as " of agents confirmed", ending in "Every agent is live" once the last one is on.
The one rule to plan around
The handoff checklist.
Almost everything in a new client's workspace is yours to prepare. One category never is: whatever needs the client's own credentials or authorization. That control is disabled for any active delegated session, whatever scopes the client granted you, with the tooltip "Client action required": "This app requires the client's credentials or authorization to complete installation. Ask the client to install or connect this app directly." Build your onboarding around that boundary instead of running into it mid-setup.
Prepare this yourself
Workspace goals and the roster of agents you're proposing.
Agent Instructions: identity, remit and team for each agent.
Skills: which task packs each agent loads.
Schedules and triggers for recurring or reactive work.
Channels: where each agent talks to the client's team.
Approval mode, under Advanced, for how much each agent runs unsupervised.
Only the client can do this
Every app connection and OAuth authorization, including the static API-key form.
Anything that touches an API key, token, or other credential.
Confirming an agent yourself, if you were never granted the scope to.
Connect app
Client action required
This app requires the client's credentials or authorization to complete installation. Ask the client to install or connect this app directly.
Run it in order
A six-step onboarding checklist.
Sit down with the client before opening the app. Get plain answers to what each agent is for and what "done" looks like, so the workspace you build matches a real business, not a template.
Enter their delegated session once setup finishes. Draft the Agent Instructions, skills, channels and approval mode for each agent using what you agreed in step one.
Work through the five groups per agent. Leave Apps for last on any agent that needs a credentialed or OAuth connection, since that step waits on the client either way.
Hand the client the specific list of apps still needing their credentials or authorization. Point them at "Connect app" directly rather than describing it abstractly.
Run each agent through its actual workflow once every app shows connected. Confirming turns on schedules and triggers immediately, so test before you confirm, not after.
Walk the client through Company Overview and their own agents so they know what each one knows and does. Agree who checks in, and when.
Confirming an agent turns on its schedules and triggers immediately. Get through **Test** before you get to **Confirm this agent**, not after.
None of these six steps require anything you can't do inside a delegated session, except the one that was never yours to do in the first place. Plan the connection request early, not as an afterthought once everything else is built.
Between clients
Keeping clients separate.
Onboarding rarely happens for one client at a time. The habit that keeps their data from bleeding into each other is small: leave sessions the right way.
Exit a delegated session with the **Exit** button or the Escape key rather than navigating away or closing the tab. That is what clears the cached workspace data before you open the next client. Full detail on entering, reading the banner, and leaving cleanly lives on View as client.
This matters most in the middle of an onboarding run, when you're moving between two or three new clients in the same afternoon. Skipping the exit step is how one client's workspace data ends up lingering in view while you're meant to be looking at the next one.
What it actually looks like
A realistic first week.
Three shapes an onboarding tends to take, depending on how ready the client is to hand over their own logins. None of these are guarantees, just patterns worth recognizing early so you can plan the week around them.
Omar · Agency owner
Sends the invite the same afternoon he closes the deal. By the next morning the client is "Active" and setup has cleared, so he spends most of the first week building agents in their workspace before asking for a single connection.
a straightforward week, once setup clears
Priya · Ops consultant
Gets three clients through certification and invites all three the same day, then works one Prepare the workspace at a time. Two clients connect their own apps within days; the third takes longer to get to it, so that agent stays on Needs attention until they do.
pace set by the client, not the dashboard
Declan · Small agency, solo
Prepares the whole workspace first, agents, skills, channels and approval mode, before ever asking the client for anything. When he finally requests the app connections, it is a short, specific list rather than an open-ended conversation.
one focused ask instead of several
Onboarding a client
## Send the invite, run the checklist.
Everything up to the credentials boundary is yours to prepare. Everything past it is one clear ask.
One field to invite a client. No day count to promise, no credential you can ever see.
Read the status · watch the attention rail · hand the connection back when it's the client's to finish.
Keep going
Next steps.
Enter a delegated session, read the banner, and leave it cleanly.
The eight toggles a client controls, and the one restriction none of them can lift.
Discovery, setup, testing, handoff, training and check-ins, in more depth.
The full product reference for the Agent Onboarding studio your client runs through.
# Managing clients
Source: https://learn.actionist.ai/resellers/clients/index
Find, review and organise every client workspace linked to your reseller account, and understand why management access is sometimes unavailable.
YOUR ROSTER
## Every client you manage, in one table. Search it, filter it, act on it.
The Clients tab lists every business workspace linked to your reseller ID, with the plan, join date, status and revenue contribution for each one. This page covers how to find a client fast, what the filters actually mean, and the single most common source of confusion: why the action button is sometimes greyed out for a client that looks perfectly active.
The layout
The table at a glance.
"All business workspaces linked to your reseller ID. Click "View as Client" to load any account in the standard Actionist UI, scoped to that workspace." That is the tab's own subtitle, and it is a fair summary of everything below.
Six columns. Each renders a specific set of fields, no more.
| Column | What it shows |
| -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Client | The gradient avatar with initials, the client name, and the primary email underneath when one is on file. The domain is never shown in this cell, even though it is one of the things you can search on. |
| Plan | The plan name exactly as the backend sends it, or a dash when no plan is set. There is no relabeling or mapping applied here. |
| Joined | The date the workspace linked to your reseller ID. |
| Status | A single dot: active or inactive. |
| Revenue contribution | "Pending", a formatted amount, or a dash. Covered in full further down this page. |
| Actions | A **View as client** button, sometimes disabled. Covered in the signature section below. |
The Client cell is the one place people expect to see a domain and don't. If you're trying to tell two similarly named clients apart, use the email underneath the name, not a domain that isn't rendered.
The Plan cell is a raw pass-through of whatever the backend calls that client's plan. There's no relabeling applied here, so if a client's plan was renamed on the backend, this cell reflects that immediately, even if it doesn't match the plan names you're used to seeing elsewhere in the product.
This is the full roster, not a preview. The Overview tab's "Most recent clients" panel shows the same underlying data capped at five rows, with a "View all" link that lands you back here. If you only need a quick pulse check on your newest clients, start there. If you need to search, filter, or page through everyone, this is the page for it. See [Dashboard overview](/resellers/dashboard) for that panel.
Search
Finding a client.
The search box sits above the table with the placeholder "Search clients, domains, contacts…". It matches against more than the name shown in the Client cell.
clients / search
Search
halo
⌘K
Type at least 3 characters to search
Three things matter here:
* **Minimum three characters.** Below that, the box shows the hint "Type at least 3 characters to search" instead of querying anything.
* **300 ms debounce.** Once you're past three characters, the table waits a beat after you stop typing before it fetches, so a fast typer doesn't fire a request per keystroke.
* **The match happens on the server**, across name, domain and contact fields, not just the name string rendered in the Client cell. That's why the placeholder says "clients, domains, contacts" even though no domain column exists in the table.
If you can't find a client by name, try the domain or the contact email instead. The Client cell won't show you the domain, but the search index does look at it.
In practice this matters most when a client's company name in Actionist doesn't match the name you know them by internally. If "halo" doesn't turn up a match on the name you expected, try their domain (`halo.studio`) or the contact email you have on file for them instead of assuming the client isn't linked at all.
The keyboard chip next to the search box, showing **⌘K** or **Ctrl+K**, is decorative. There is no keyboard handler behind it anywhere in the reseller interface. Pressing it does nothing, and that's expected, not a bug. Worth knowing before it turns into a support ticket.
Narrow the roster
Filtering.
Four chips sit next to the search box, each showing a live count. Search and filters combine, so typing a query while a chip is selected narrows both at once.
| Chip | Filters on |
| ---------- | ------------------------------------------------------------------------------------------------------------- |
| All | No filter applied. Every linked workspace, in any relationship state. |
| Active | The operational status shown as the green dot in the Status column. |
| Inactive | The operational status shown as the grey dot in the Status column. |
| Historical | The underlying relationship status being canceled or force\_disconnected, not the Active/Inactive dot at all. |
Active and Inactive read the same two-state status the table already shows you. Historical reads something the table never shows directly: the four-value relationship status underneath (`pending_metadata_sync`, `active`, `canceled`, `force_disconnected`). A Historical client isn't just "not active" today, it's a relationship that has actually ended. The chip carries the tooltip "Canceled or disconnected clients, kept here for reference." to make that plain.
Two things worth understanding about that ended state:
* **A canceled relationship** means the client's own subscription lapsed or they chose to disconnect.
* **A force-disconnected relationship** is an administrative action, not something either you or the client triggers from a button in the product. If a client shows up as Historical and you weren't expecting it, that's the reason to ask support rather than to look for a setting you missed.
The Historical chip only appears once the backend actually returns that breakdown. If you don't see a fourth chip, it isn't hidden, it simply hasn't been computed for your account yet.
Search and filters combine rather than compete. Selecting **Active** and then searching "acme" doesn't show you every client matching "acme", it shows you only the ones that are both active and match that search. Switch the chip back to **All** if a search comes back emptier than you expected, since a filter left over from an earlier look at the table is a common reason for a client to seem to have vanished.
Sort is fixed to most recently linked first, and it isn't something you can change from this screen. Pagination runs 20 clients per page with Previous, the current page number, and Next, and the footer under the table reads "Showing shown of total clients" so you always know how much of the roster you're looking at.
pagination
Showing 20 of 46 clientsPrevious1Next
The question everyone asks
Why is View as client greyed out?
The Actions column always shows a **View as client** button, in lowercase c. Most of the time it's clickable. Sometimes it isn't, and the reason is rarely what people first assume.
What makes a client manageable
The backend reports that a delegated session can actually be created for this relationship.
The workspace has finished its initial setup and metadata sync, not just been linked.
The relationship is in a state where scopes can be resolved at the moment you click the button.
Nothing about that specific row's session is currently in progress or previously failed and needs a retry.
What disables the button
The backend says management isn't possible for this client right now, and gives you its own reason for it.
No reason is given, in which case the button falls back to "Managing this client isn't available right now".
A session is actively being created for that row. The button shows a spinner and stays disabled until it resolves.
The relationship has ended (canceled or force-disconnected), which is exactly what the Historical filter surfaces.
A client can show the green Active dot and still have a greyed-out **View as client** button. Status and manageability are two different fields under the hood: a workspace that is still syncing reports as active in the Status column, but isn't manageable yet. Don't read Active as a promise that the button will work. If it's disabled on an active client, the workspace is almost always still finishing setup, not broken.
There is no separate column that spells this out for you, so the button's own state, and whatever tooltip it carries, is the only signal you get. If the tooltip gives a specific reason, trust that reason over any guess. If it's the generic fallback line, treat it as "not yet", check back later, or ask the client whether their setup finished on their end.
One more thing worth knowing before you click: the permissions you get inside the session aren't cached from whenever the client last saved their settings. They're resolved from the client's live grants at the moment you click **View as client**. If a client flips a toggle off five minutes before you start a session, you'll see the narrower set, not whatever was true earlier in the day.
Manageability can change between page loads. A client's workspace finishing its sync, or a relationship changing state, can flip the button from disabled to enabled or back without any action on your part. Refresh the table rather than trusting a state you saw a few minutes ago.
Status and manageability are independent fields. An Inactive client can still be manageable if the backend allows a session to be created for that relationship. Don't infer manageability from the dot in either direction, check the button itself.
Hover the button. The tooltip carries the backend's own reason when one is available, and only falls back to the generic "Managing this client isn't available right now" when it isn't. Read the tooltip before assuming the generic case applies.
Reading the numbers
Revenue contribution.
This column has exactly three possible states. It never shows anything else.
| State | What you see | What it means |
| -------- | ------------------------------------------------- | ----------------------------------------------------------------------- |
| Deferred | "Pending", sometimes with a tooltip | The backend hasn't finished calculating this client's contribution yet. |
| Computed | A formatted currency amount, for example \$412.00 | The client's confirmed contribution, as calculated. |
| No data | A dash (`-`) | There is no amount to show for this client. |
revenue contribution
Halo Studio LLC\$412.00
Acme ConsultingPending
Northwind Freight
This "Pending" is not the same thing as the **Pending** commission status you'll see later in the Revenue ledger. In the Clients table, Pending means the backend hasn't finished computing that client's revenue contribution figure yet, a data-availability state. In the Revenue ledger, Pending describes a specific commission line item that has accrued but not yet been paid out, a payout-lifecycle state. Same word, two unrelated concepts, in two different views of the same programme. If a client shows Pending here, it says nothing about whether any commission tied to them has been paid.
If you need to know whether commission from a specific client has actually paid out, that's a question for the Revenue ledger, not this column. See [Revenue and payouts](/resellers/revenue) for the ledger's own Pending and Paid states.
Troubleshooting
States and controls.
What each visible state means, and what's worth doing about it before you escalate.
| What you see | Why | What to do next |
| -------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| The table shows only "No clients yet." | Either you genuinely have no linked clients, or the fetch behind the table failed. There is no separate error state, a failed request renders the same empty text as a real empty roster. | If you expect clients to be there, refresh the page before assuming your roster is actually empty. If it happens repeatedly, that's worth a support ticket, since the UI can't tell you which case you're in. |
| The **View as client** button is greyed out | The backend has marked this client as not manageable right now, most often because the workspace is still syncing. | Read the tooltip for the reason. If it's the generic fallback, check back shortly. See the section above for the full breakdown. |
| Revenue contribution shows "Pending" | The backend hasn't finished computing that client's figure. | Nothing to fix on your end. Recheck later. Don't confuse it with the ledger's own Pending status. |
| A spinner on the Actions button never resolves | Session creation for that row is taking longer than expected, or has silently stalled. | Give it a moment, then refresh the page. If it consistently never resolves for the same client, treat it the same as a disabled button and check the tooltip once it settles. |
| A toast reads "Client manager is currently unavailable. Please try again." | Session creation for that client failed outright. | Try again. If it keeps failing for one specific client while others work fine, that points at something client-side (their workspace) rather than your account. |
Notice the pattern: several of these states look identical to each other on the surface, "No clients yet." covering both empty and broken, a syncing client looking the same as any other active one until you try the button. When the table won't tell you which case you're in, the fastest signal is usually a refresh, followed by whether the same state persists for one client specifically or for the whole roster.
If you're not sure whether "No clients yet." means your roster is genuinely empty or the fetch failed, check the "Total clients onboarded" KPI tile on the [Dashboard overview](/resellers/dashboard). It's driven by a separate query, so a nonzero count there while this table shows nothing points at a failed fetch, not an empty roster.
From roster to workspace
Working with a client.
Once you've found the right row, stepping into that client's workspace is a short hop, not a separate tool.
Check the Actions cell isn't greyed out and isn't mid-spinner. If it is, work through the section above before you try clicking.
This mints a delegated session scoped to that one workspace, using whichever scopes the client currently has granted.
It names the client and lists exactly which permissions are active for this session, before you touch anything inside their workspace.
The full walkthrough, including what each scope unlocks and how sessions expire, lives at [View as client](/resellers/view-as-client).
Set expectations with the client before the first session, not during it. Tell them which scopes you're expecting to use, and ask them to confirm those toggles are on in their own **Manage Reseller** panel. It's a five minute conversation that avoids a wasted click on a greyed-out button later.
Agency owner · Monday roster check
Filters to Active, scans plan and revenue contribution for anything that looks off since Friday, then moves on. No search needed when the whole roster fits on one screen.
about 10 minutes
Agency owner · spotting churn
Notices a client that used to be Active now shows a grey dot, checks the Historical chip to see if the relationship actually ended, and follows up by email if it did.
about 5 minutes
Agency owner · chasing a stuck setup
A client shows Active but the button won't click. Reads the tooltip, sees it's still syncing, and pings the client to confirm they finished their side of onboarding instead of assuming the dashboard is broken.
about 10 minutes
Managing clients
## Know your roster, know the boundary.
Every client's status, plan and manageability lives in one table. When something looks off, the tooltip usually already told you why.
Search is server side, sort is fixed, and Active never guarantees manageable.
The button tells you the truth about a client's state before you click it.
Keep going
Next steps.
Starting a session, reading the banner, and leaving cleanly once the button is clickable.
How a client ends up on this roster in the first place, and the handoff that follows.
What each toggle unlocks from the client's side, and why credentials never appear here.
A fuller symptom index for when a row's state doesn't match what you expected.
# Credentials and API keys
Source: https://learn.actionist.ai/resellers/credentials/index
Your client's secrets are permanently out of your reach. Here is how that is enforced, and how to hand a connection back to the client without friction.
THE ONE FIXED RULE
## A boundary you never have to think about. It is built in, not agreed to.
Every other permission on a client's workspace is a toggle they choose to flip. Credentials are not on that list, and never will be. This page shows how that limit is enforced end to end, and how to keep a client onboarding moving the moment you hit it.
In the Manage Reseller panel
What the client sees.
A client managing your access sees eight permission toggles and one card that is not a toggle at all.
Credentials & API keys
Permanently restricted. No toggle, no exception.
HARD LIMIT
Permanently restricted. No toggle, no exception. Your reseller can never see API keys, OAuth tokens, or service-account credentials, regardless of what's enabled above.
The panel banner puts the same idea in one line: "Your reseller can only access the scopes enabled below · Credentials are always off-limits." That is not a summary of the toggles below it, it is a separate statement about a separate thing.
That separateness is structural, not just written copy. The client's nine delegated scopes are `prompts_and_instructions`, `tools_and_integrations`, `skills`, `agent_memories`, `files`, `calendar_and_schedules`, `chat_history`, `audit_logs`, and `billing_summary`. Credentials is not among them. It lives in its own hard-restrictions list, where the only recorded value for `restricted` is the literal `true`. There is no representable state in which credentials are unrestricted, because the type system never defined one.
Practically, this means a client can grant you every one of the eight toggles, including Files and Chat History, and the credentials line does not move. There is no combination of grants that adds up to visibility on a secret. Nothing you do inside a delegated session, and no setting a client flips, changes which card carries the HARD LIMIT badge.
The hard-restriction card is served from the API with a hardcoded fallback in the client, so if the network call to fetch it ever fails, the client still sees the same restricted message. Today both paths render identically, there is no version of this card that reads as unrestricted.
How it actually holds
Four layers, each one sufficient on its own.
This is not one check that a bug could slip past. It is four independent walls, stacked from the screen down to the database row.
InterfaceIn a delegated session the Credentials Vault panel does not render. It is absent, not greyed out. Separately, every app-connect control locks the moment any delegated session is active, no matter which scopes are granted.
RouteEvery credentials endpoint rejects delegated access before any business logic runs. So do machine identities and pairing codes. The request never reaches code that could act on it.
ServiceListing credentials returns metadata with secrets redacted. There is no human reveal endpoint anywhere in the service. The only plaintext path requires a machine-identity bearer token, checked against exactly which credentials that identity can reach, and it writes an audit row every time.
StorageSecrets are AES-256-GCM encrypted under a per-user key that is itself wrapped by Cloud KMS. That key is never stored in plaintext. The table the list endpoint reads from has no ciphertext column at all, so redaction is not a filter someone could forget, it is what the schema allows.
No screen to click through. The Vault panel is missing entirely in a delegated session, so there's nothing to attempt.
No door left unlocked. The rejection happens at the route, before any handler runs, for delegated sessions, machine identities, and pairing codes alike.
No reveal button, ever. Even a client viewing their own vault never sees a stored secret. Plaintext only ever flows through an audited machine-identity path.
Nothing to leak from storage. The metadata table has no ciphertext column, so a query against it cannot return a secret whatever the access level of the caller.
Notice what none of these four layers depend on: your intent, your good behaviour, or a permission a client remembered to leave off. Each one holds on its own, which is the point. A bug in the interface layer would still leave the route rejecting the request. A bug in the route would still leave the service returning redacted metadata. A bug in the service would still leave the storage layer with nothing readable to return.
Read this as an advantage
Why this is good for you.
A hard limit removes a whole category of liability from the reseller relationship. You cannot leak what you cannot see, and no breach on your end can ever expose a client's API keys or tokens, because they never passed through your hands in the first place. That also means the client never has to weigh trust against convenience when they decide how much to delegate to you. They can hand you real, working access to configure their agents, apps, and schedules without a second thought about the one thing that actually keeps their other accounts safe.
It also simplifies your own pitch. When a prospective client asks how you'll be managing their workspace, "I can configure almost everything, and I am structurally unable to see your API keys or tokens" is a sentence you can say once and never have to revisit.
You don't need a security policy to back this up in a sales conversation. It's enforced in the product, on every delegated session, for every client, with no configuration on your end required.
What to actually do
The handoff.
There is no workaround for a locked control, and you shouldn't want one. Here is the four-step move that keeps setup on track anyway.
A control that needs the client's login or secret renders disabled, with a lock icon in front of it. This is deliberate, not a bug or a missing permission on your side.
Connect
Client action required
This app requires the client's credentials or authorization to complete installation. Ask the client to install or connect this app directly.
Don't say "finish the setup." Say the app by name and the exact step: "Open Slack in the Apps section and click Connect," not "connect your tools." A vague ask sends a client hunting through a workspace they may not know well yet.
The client signs in to their own Actionist account and installs or connects the app from the Apps section. This is the only path. No reseller scope, present or future, changes that, because the guard checks whether a delegated session is active at all, not which scopes it carries.
Once the client confirms the app is connected, resume in your own delegated session. The control you handed off unlocks the moment the underlying connection exists, and everything else you were configuring around it stays exactly where you left it.
Batch these handoffs where you can. If a client onboarding needs three different app connections, list all three for the client in one message rather than pinging them each time you hit the next lock. It reads as a plan, not a series of interruptions.
The actual boundary
What you can still do.
The hard limit is narrower than it sounds. Most of setting up a client's tooling never touches a secret at all.
You can
Manage the Apps section, including tools, MCP servers, and app connections that don't require credentials, whenever `tools_and_integrations` is granted.
Browse, search, and read app details, subscriptions, and existing connections, even without that scope.
Reference an already-existing credential when wiring up a new binding, such as pointing a new agent at a connection the client set up earlier, without ever seeing or handling the plaintext.
Configure everything downstream of a connection once it exists: agents, skills, schedules, and the rest of the scopes the client has enabled.
Always the client
Installing credential-based apps.
Connecting OAuth apps.
Disabling or modifying anything tied to API keys, OAuth tokens, or other secrets, regardless of this setting.
Viewing, copying, or exporting a stored secret in any form, at any permission level.
In the product's own words, this is what `tools_and_integrations` grants and what it deliberately withholds:
"Manage the Apps section, including tools, MCP servers, and app connections that don't require credentials. Installing credential-based apps, connecting OAuth apps, and disabling or modifying anything tied to API keys, OAuth tokens, or other secrets is always off-limits, regardless of this setting."
tools\_and\_integrations scope description
MCP servers sit under the same `tools_and_integrations` grant as apps. For exactly what you can configure on an MCP server connection versus what waits on the client, treat the same credential boundary described here as the baseline, and check the MCP reference for the rest of that surface.
No. Even if a client wanted to hand you a key directly outside the product, nothing in Actionist is built to accept it from you. Every credential a client's workspace uses has to be entered by the client, inside their own session, through the Credentials Vault or an app's own connect flow.
No. Certification and scope grants govern the eight toggles. Credentials sit outside that system entirely, so no combination of certification status and granted scopes ever includes them.
Under the hood
How secrets are stored.
You will never need this to do your job, but it's worth knowing what actually backs the hard limit above.
Every secret is encrypted with AES-256-GCM under a data encryption key generated per client. That key is itself wrapped by Google Cloud KMS rather than kept in the database in the open, so a compromise of the application database alone does not expose usable secrets. The metadata table the Credentials Vault reads from to render its list has no ciphertext column at all, encrypted bytes live only in a separate table, reachable only through a machine-identity reveal path that checks which credentials that specific identity can use and logs the attempt whether it succeeds or not.
The vault stores four kinds of credential, and a stored credential can be bound to any of five things in a client's workspace. You'll recognise most of these by the app in front of them rather than the kind itself: a typical REST integration stores an `api_key`, an app that connects through a "Sign in with" flow stores a `token`, an API with an unusual auth header stores a `header_secret`, and a service-to-service or machine-to-machine integration stores `client_credentials`.
| Credential kind | What it is |
| -------------------- | ------------------------------------------------------------------------------------------------------------ |
| `api_key` | A single secret string sent as a header or query parameter, the most common shape for a REST API. |
| `token` | A bearer token, often issued through an OAuth flow, that authorizes a connection or session. |
| `header_secret` | A named header value an agent needs to attach to outgoing requests, distinct from a plain API key. |
| `client_credentials` | A client ID and client secret pair, used for OAuth2 client-credentials or service-to-service authentication. |
| Binding target | What it connects to |
| -------------------- | ------------------------------------------------------------------------------------------- |
| Agent | The specific agent that reads this secret when it makes a tool call. |
| Installed skill | A skill from the marketplace that needs its own key to reach a third-party API. |
| Installed MCP server | An MCP server connection that authenticates with this credential. |
| Connection | A third-party account link, such as an OAuth connection to a platform. |
| Runtime setting | A workspace-level setting not tied to one specific agent, skill, MCP server, or connection. |
The Credentials Vault itself is a collapsible panel inside Settings, not a tab. Its own rules hold no matter who is looking at it, client or reseller:
* No reveal button for a stored value, ever.
* No copy-to-clipboard of a secret value.
* The eye toggle applies only to the field currently being typed into. It never fetches a value that was already saved.
* Delete is blocked whenever active bindings exist, so nobody can accidentally remove a credential an agent, skill, MCP server, or connection still relies on.
* OAuth-derived credentials show **Reconnect** instead of Rotate, because there is no user-holdable secret to paste back in.
Every action on a credential, create, rotate, revoke, disable, enable, reveal, a batch reveal, refresh, validate, registering or revoking a machine identity, and the pairing-code exchange, is written to an audit log with an outcome of success, denied, or error. A reveal attempt is logged whether it succeeds or is denied.
That audit trail is what makes the machine-identity reveal path safe to have at all. It exists so an agent, skill, or MCP server can actually use the secrets bound to it at runtime, and every one of those reads is checked against what that specific identity is allowed to reach, then logged, whether or not you or the client are anywhere in the loop at that moment.
When a secret changes
Rotation and revocation.
These are client actions, not yours, but the client will ask you what happens next, so it's worth knowing.
Rotating a credential creates a brand new secret version. It does not touch any binding, so every agent, skill, MCP server, or connection already pointed at that credential simply picks up the new version the next time it resolves the secret. Nothing needs to be rewired.
Rotation is write-only. Once a new version is created there is no way to read the old value back, or the new one, for that matter. If a client asks you to "check what the rotated key is," the honest answer is that nobody can, by design.
Revoking is different. It leaves every binding in place, pointed at a credential that no longer works. The agent, skill, MCP server, or connection that depended on it doesn't fail silently or fall back to a stale value, it returns a clear error the next time it tries to use the dead credential.
Revoking a credential breaks every bound consumer until the client replaces it or re-binds a working one. If you're mid-setup and a client revokes something you're relying on, expect the affected agent or connection to start erroring immediately, not gradually.
An OAuth-derived credential doesn't get revoked in quite the same way. When it expires, it flips to a "needs re-auth" state instead, and the client reconnects the same way they connected it the first time.
None of these three actions, rotate, revoke, or reconnect, are things you trigger from inside a delegated session. What you can do is recognise the symptom when it shows up: an agent or connection that was working suddenly returning an authorization error is very often a credential the client just rotated, revoked, or that quietly expired. Flag it to the client rather than assuming something you configured is broken.
The one fixed rule
## Configure everything you can. Hand back only what you must.
The credential boundary is fixed so the rest of your access doesn't have to be small.
Credentials are enforced at the interface, the route, the service, and the storage layer, all four independently.
No toggle grants it, no exception lifts it, and no support request changes that.
Keep going
Next steps.
What you can set up yourself, and the connection steps only the client can finish.
The eight toggles the client controls, and how this hard limit sits outside all of them.
The full feature reference for how Actionist stores and manages secrets.
What a locked control or a denied request actually means, and whose problem it is.
# Reseller dashboard overview
Source: https://learn.actionist.ai/resellers/dashboard/index
The three tabs of your reseller console, what each number means, and where every common task starts.
YOUR CONSOLE
## Three tabs. One place to run every client.
Once you are certified, Overview, Clients and Revenue unlock under Master Dashboard. This page walks through all three: what each number means, where the recent clients panel and notifications come from, and which button to click for the tasks you do most. Clients and Revenue get the short version here, with a link to the full page for each.
The sub-nav
Two groups, one navigation.
The Reseller sub-navigation splits into two groups. One is gated on certification, the other never is.
Everything below assumes you are already certified. If you have not applied yet, or you are mid-quiz, start with [Getting started](/resellers/getting-started) instead. The Master Dashboard tabs described here will still be locked until you pass.
Reseller sub-nav
Master Dashboard
Overview
Clients12
Revenue
Learning & client view
Certification Hub
Knowledge Center
Manage Reseller
**Master Dashboard** holds Overview, Clients and Revenue. This is where you run the business side of reselling: invite clients, watch their status, track what you have earned. All three items are locked until you pass the certification quiz. The numeric badge on Clients is the same figure as the Total clients onboarded tile on Overview, just surfaced one level up.
Clients12
Locked until certifiedUnlocks after you pass the certification quiz.
**Learning & client view** holds Certification Hub, Knowledge Center and Manage Reseller. None of these are ever locked, because you need them before you are certified and some of them stay relevant after. Certification Hub disappears from the sub-nav the moment you pass, since there is nothing left to study for. Knowledge Center loads these same docs inside the app at `/reseller/docs`, so you never have to leave Actionist to read them. Manage Reseller only appears if your own workspace happens to be managed by another reseller, which is independent of your own reseller status.
The sub-nav header carries a badge and a one-line status once you have a profile. Certified resellers see "Certified reseller" at the top. The subtitle underneath depends on where you are in the programme:
"Apply to begin" before you have submitted an application
"Pending certification" from the moment you apply through the quiz
"Certified · " once you pass, when a company name is on file
"Certified" once you pass, when no company name is on file
"Managed workspace" when your own workspace is managed by another reseller
There is no footer on the sub-nav. If you are looking for a reseller ID here, see [What you will not find here](#what-you-will-not-find-here).
Try it
Switch between the three tabs.
A compact version of each tab, so you can see how the three fit together before reading the full breakdown below.
Your landing tab. A greeting, four KPI tiles, the Most recent clients panel, notifications, and the Help & resources panel. The only action button here is **Invite client**.
| KPI tile | Shows |
| ----------------------- | --------------------------------------------------------- |
| Total clients onboarded | The running count of clients linked to your reseller ID |
| Total revenue generated | Total Stripe payments collected across your client roster |
| Your commission earned | Your 25% cut of that revenue |
| Client status | Splits into Active and Inactive counts |
Read the full breakdown in [The Overview tab in depth](#the-overview-tab-in-depth) below.
Every workspace linked to your reseller ID, in one searchable, filterable table.
Columns: Client, Plan, Joined, Status, Revenue contribution, Actions. Search needs at least three characters. Four filters: All, Active, Inactive, Historical. Twenty rows per page.
Revenue contribution shows one of three things: "Pending" while the figure is still being computed, a formatted amount once it settles, or a dash when there is nothing to show at all.
This page only summarizes the tab. For the full column-by-column reference, search behavior, and why **View as client** is sometimes disabled, see [Managing clients](/resellers/clients).
Where commission becomes something you can track and eventually withdraw.
| KPI tile | Shows |
| ------------------- | -------------------------------------------------------------------------- |
| Lifetime commission | Everything you have earned since your first paying client |
| Pending balance | Commission accrued but not yet paid out |
| Paid to date | Commission already settled to your wallet |
| Next payout | The date your next monthly batch settles, when the backend has one to show |
Ledger columns: Client, Description, Client payment, Your cut (25%), Status. Twenty-five rows per page. The Pending and Paid counts you see reflect only the rows currently loaded, not your full history, so do not read them as a lifetime total.
Full detail, including wallet setup, lives at [Revenue and payouts](/resellers/revenue).
Home base
The Overview tab in depth.
This is the tab you land on. Everything on it is read-only except one button.
The greeting reads "Welcome back, ", and the line underneath changes with your state: "Loading your reseller dashboard…" while it fetches, "Your dashboard is ready, invite your first client to get started." with no clients yet, " client onboarded, none are active yet." once you have one client but no active ones, or " of clients are active." once at least one client is active.
**Invite client** is the only action button on this tab. There is no referral link to copy here, on this tab or anywhere else in the console. See [Onboarding a client](/resellers/client-onboarding) for the invite flow itself.
The four KPI tiles.
| Tile | What it shows | Format |
| ----------------------- | ------------------------------------------------------------- | ------------------------------- |
| Total clients onboarded | Every client ever linked to your reseller ID | A plain count |
| Total revenue generated | Total client payments across your whole roster | Money like `$25.00` |
| Your commission earned | Your 25% cut of that same revenue | Money like `$25.00` |
| Client status | How many of your clients are currently active versus inactive | Two counts, Active and Inactive |
Money renders like `$25.00`. A value the backend has not computed yet renders as a dash rather than a zero, so do not read a dash as "nothing earned." The revenue and commission tiles specifically can show a deferred tooltip while that computation is still pending, which reads either the backend's own reason or a generic "Revenue data not yet available" or "Commission data not yet available".
Most recent clients.
A panel titled "Most recent clients", capped at five rows, sorted by whoever linked to you most recently. A header link reads "View all →" and takes you to the full Clients tab. Each row carries a gradient avatar built from the client's initials, the client name, "joined ", a plan badge showing the raw plan name (or a dash when there is none), a status dot, and a **View** button.
The avatars are deterministic, not random. Each client's id is hashed into one of eleven gradient pairings, so a given client always shows the same avatar color every time you see them, whether that is here, in the Clients table, or in the delegated session banner.
With no clients yet, the panel collapses to a single line: the word **Invited** as a link that opens the invite modal directly, followed by " clients will appear here once they sign up."
The button here reads **View**, and it does the same thing as **View as client** on the full Clients tab: it starts a delegated session scoped to that client. The wording differs by tab, the behavior does not.
Overview
Total clients onboarded
12
Total revenue generated
\$1,240.00
Your commission earned
\$310.00
Client status
9 / 3
Active / Inactive
Most recent clients
HS
Halo Studio LLC
joined Aug 14
Pro
AI
Acme Inc.
joined Aug 9
Starter
NW
North Works
joined Jul 30
Pro
When something needs attention
Notifications and the attention rail.
Overview surfaces two severities of notification: info and warning. Most are routine. One type is worth understanding before it happens to you.
When several clients are stuck mid-setup at once, the dashboard collapses them into a single attention rail instead of one row per client. It reads " clients need setup attention", with a subline of "Management access stays unavailable until setup finishes." and a footer count of " affected". A toggle labeled "Review clients" (or "Hide clients" once expanded) reveals the individual rows, each tagged "Setup incomplete", plus a footer line "Management access is currently unavailable for these clients." and a link "Open client list".
"Management access unavailable" means you cannot open a **View as client** session for that client yet. It does not mean their subscription failed. Setup usually finishes on its own; there is nothing to configure from your side while it does.
Two other notification types exist alongside the attention rail: one flags a sync issue on your own reseller profile, the other marks a plain empty-client-list state. Both are routine, single-item notices rather than the collapsed rail described above. In general, treat **info** severity as a status update and **warning** severity as something worth a second look, the attention rail being the clearest example of the latter.
Timing
A client you just invited may not show up right away.
This is the single most common source of confusion on this page, so it is worth saying plainly.
The dashboard summary, the clients list, notifications and the revenue figures all cache for three minutes. If you invite a client, they sign up, and you flip straight back to a tab you already had open, they may genuinely not be there yet. This is not a bug and it is not a sign the invite failed.
If you need to confirm a specific signup right now rather than wait, search for the client by email on [Managing clients](/resellers/clients), which reads the same underlying data. A tab you have not visited in the last three minutes will fetch fresh on its own the next time you open it.
Not everything on the Reseller side shares that three-minute window. The revenue ledger refreshes every 60 seconds, your payout profile every 30, and your certification status every 30 as well. The certification quiz itself is never cached, since a stale question set would be pointless mid-attempt.
Sending an invite always shows its own success or error state right away. The three-minute delay only affects when that client then shows up in your counts and lists, not whether the invite itself went out.
Do this first
Starting a task from here.
Three things you will do from this dashboard more than anything else, and where each one actually starts.
Click **Invite client** on the Overview tab, or the **Invited** link in the empty state if you have not onboarded anyone yet. Full flow, field details and error states are covered in [Onboarding a client](/resellers/client-onboarding).
From either the Most recent clients panel or the full Clients table, click **View** or **View as client** to start a delegated session scoped to that client. See [View as client](/resellers/view-as-client) for the banner, the scopes, and how to leave cleanly.
Switch to the Revenue tab for the four stat tiles and the ledger, or set up your payout wallet if you have not yet. Full detail at [Revenue and payouts](/resellers/revenue).
Everything past these three is either configuring a specific client's workspace, which starts inside a delegated session rather than here, or reading a topic in more depth than a dashboard page needs.
If you get stuck
Getting help.
Overview carries its own "Help & resources" panel, separate from the Knowledge Center tab.
The panel's links route internally, and one card is fixed regardless of what the API sends:
| Item | Goes to | Notes |
| ------------------------- | ---------------------------- | ---------------------------------------------------- |
| Knowledge Center link | `/reseller/docs` | These same docs, loaded inside the app |
| Support link | Support | For anything you cannot resolve yourself |
| Join the reseller Discord | External, opens in a new tab | Subtitled "Private channels for certified resellers" |
If either the metrics or the recent clients panel fail to load, you will see "Could not load your dashboard metrics." or "Could not load recent clients.", each with a **Retry** button next to it.
The **Knowledge Center** tab in the "Learning & client view" group loads these exact docs inside the app, at `/reseller/docs`. If you would rather read a page like this one without leaving Actionist, that is where to go.
Support Tickets isn't available yet. A Support Tickets item exists in the underlying code but is deliberately left out of the sub-nav today. Coming soon
Common questions about this page.
A dash means the backend has not computed that value yet, not that it is zero. This shows up most on Total revenue generated and Your commission earned right after a client's first payment, before the figure has been calculated. Give it a little time and reload the tab.
That is the deferred tooltip. It appears while the backend is still computing that figure, and reads either the backend's own reason or a generic "Revenue data not yet available" or "Commission data not yet available". It clears on its own once the computation finishes.
A delegated session silently expires after one hour, or if it is torn down for any other reason. There is no error message, you are simply returned to `/reseller`. If that happens mid-task, reopen [View as client](/resellers/view-as-client) for that client and continue.
Either that client's setup has not finished syncing yet, which is what the attention rail is telling you, or the backend has flagged the session as temporarily unavailable for another reason and shows a tooltip explaining why. Neither is something you fix from your side; check back once setup completes.
Most recent clients on Overview only ever shows five rows. Click **View all →** in that panel's header, or switch to the Clients tab directly, to see your full roster with search and filters.
Boundaries
What you will not find here.
A short, honest list, so you stop looking for things that were never built.
No referral link. Invite client is the only way to bring a client in. There is no link to copy and share on your own.
No per-client billing detail. The revenue ledger shows what a client paid and your cut of it. It never shows their card, invoice, or billing history. That is deliberate.
No reseller ID footer. The sub-nav has no footer at all. If an older screenshot or document shows one, it is out of date.
None of these are gaps waiting to be filled in. The dashboard is scoped on purpose: enough to run the business side of reselling, nothing that reaches into a client's own billing or account.
Master Dashboard
## Your whole client roster, in three tabs.
Certify once, and Overview, Clients and Revenue stay open for as long as you resell.
Three tabs, one dashboard, updated on a three-minute cache.
No referral link · no per-client billing detail · no reseller ID footer.
Keep going
Next steps.
Search, filters, statuses, and why View as client is sometimes unavailable.
The invite modal, the invitation lifecycle, and a handoff checklist.
How commission accrues, what the ledger shows, and setting up a payout wallet.
Starting a delegated session, reading the banner, and leaving cleanly.
# Frequently asked questions
Source: https://learn.actionist.ai/resellers/faq/index
Straight answers on eligibility, clients, access, credentials, money, support and security, with a pointer to the guide when a question needs steps.
STRAIGHT ANSWERS
## Every question we've heard, answered straight.
Thirty questions, grouped by theme, each answered in two to five sentences. Where a page covers the topic in full, we link to it. Where the honest answer is that something is not decided yet, we say that plainly instead of hedging.
This page is for scanning, not reading start to finish. Jump to the section that matches your question below. Each accordion answers one question directly and links onward when there is more to know.
25% flat. The only commission rate that exists, snapshotted per ledger row.
One hour. How long a delegated session runs before it quietly ends.
USDC, monthly. Paid in batches, on Base by default.
Never credentials. No permission, ever, unlocks a client's API keys.
Six fields. That's all registration collects, no VAT or tax ID input renders.
20 per page. The Clients table's display limit, not a cap on how many you can have.
Who can apply, and whether a review step exists.
Limits, cancellations, and what a reseller cannot do.
Session length, revocation, and where it runs.
What a reseller can never see, and why.
Who pays whom, commission, and payouts.
Where to get help, and what isn't built yet.
Retakes, expiry, and quiz language.
Getting in
Eligibility and joining.
Who can register, what happens after you submit, and whether being a reseller and being someone's client can overlap.
Registration happens at the organisation level, and it needs to be an organisation manager who submits the form. There is no plan tier gate and no region gate anywhere in the flow. If you are not a manager, the form still renders exactly the same way, you only find out when the submission itself fails, so check your role before you start. See [Getting started as a reseller](/resellers/getting-started).
No. There is no pending-review state anywhere in the reseller phase machine. Submitting the registration form takes you straight into the Certification Hub, where you study the modules and then sit the quiz whenever you are ready. See [Getting started as a reseller](/resellers/getting-started).
No. An existing Actionist organisation registers itself as a reseller, there is no separate signup flow to complete first. The same account that runs your own workspace becomes the one that manages your clients' workspaces too. See [Getting started as a reseller](/resellers/getting-started).
Yes, and it is explicitly supported rather than an edge case. The **Manage Reseller** tab, which appears when your own organisation is managed by another reseller, is independent of your own reseller status. It stays reachable even if your own reseller access is paused, because being managed and being a manager are two separate relationships.
Not sure whether you're an organisation manager? Check before you start the registration form. Submitting as a non-manager fails at the last step, with nothing earlier in the flow warning you.
Straight answers
Building the business.
The commercial questions, rather than the product ones. The [Partner Program page](https://actionist.ai/partners/) covers these in more depth.
No. Actionist drives a client's existing apps the way a person would, by clicking and typing, so there is nothing to program. The skill that actually matters is understanding how a business runs and what work is worth handing to an agent.
The certification quiz reflects that. It covers agent configuration, prompting, skills and tools, and app connections, not programming. See [Getting started](/resellers/getting-started).
The model is built so they do not have to take it on faith. You never see a password, an API key or a token, and that is enforced on the server rather than promised in a policy. On top of that, the client picks exactly which parts of their workspace you can touch, and can change their mind at any moment without asking you.
In practice this makes the conversation easier, not harder. You can tell a prospective client that credentials are structurally out of your reach and then show them the panel where they control everything else. See [Client permissions](/resellers/permissions) and [Credentials and API keys](/resellers/credentials).
No, and it is worth being clear about the difference when you pitch. You are setting up and running AI employees that do real work, and you keep managing them over time as the business changes. The software is what you build on.
That is also why there are two separate lines of income: your own fee for the work you do, and the 25% on the client's subscription. See [How resellers work](/resellers/how-it-works).
That depends on the client list you build and what you choose to charge, so there is no figure we can honestly quote you. What we can tell you is the shape of it.
You set your own fee, which Actionist does not take a cut of. On top of that you earn a flat 25% of what each client pays Actionist, every month they stay. There is also referral income on partners you introduce, though that one is not tracked in the app today. Because the 25% recurs, each client you bring on adds to what the earlier ones are already paying, rather than replacing them.
Training on building agents and automating a business, sales resources for finding and winning businesses, and a private partner community alongside other Actionist partners. Certified resellers also get a Discord card in the dashboard's help panel.
There is also a **Partner Index**, a directory where approved partners are listed by city, industry and what they do, so businesses can find you. That is a programme benefit run outside the product, not a screen inside the app, so do not go looking for it in your dashboard.
Applying to the programme happens on the [Partner Program page](https://actionist.ai/partners/). Registering your reseller profile and taking the certification happens inside the Actionist app itself.
Those are two different steps in two different places, which trips people up. [Getting started](/resellers/getting-started) walks through the in-app half.
Working with clients
Clients.
Limits, cancellations, and the one control resellers do not have over a client relationship.
No limit is defined anywhere in the product. The Clients table paginates at 20 rows per page, but that is a display convenience, not a cap on how many client workspaces you can link to your reseller account. See [Managing clients](/resellers/clients).
This is not settled in anything we can point to in the product, and the honest answer is that we do not know how it resolves today. Do not promise a prospective client an outcome either way. Contact `partners@actionist.ai` before it comes up in a real conversation.
The relationship moves to a canceled state and appears under the **Historical** filter on the Clients table. Commission still pending for that relationship can be blocked from payout, but commission already paid is not described anywhere as being clawed back. See [Revenue and payouts](/resellers/revenue).
No. There is no control anywhere in the reseller interface to disconnect a client yourself. Disconnection is an Actionist administrative action, and the client's own path is to cancel their subscription and start a new workspace. See [Managing clients](/resellers/clients).
If a prospective client asks about switching resellers, or about being shared between two resellers, do not answer from instinct. Route the question to `partners@actionist.ai` before it becomes a promise you can't keep.
Inside a session
Access and sessions.
How long a delegated session lasts, who can end it, and where it does and does not run.
About one hour. When it lapses, the very next request you make ends the session and drops you back on your own reseller dashboard, with no warning message beforehand. Save or apply your work as you go rather than leaving something half finished. See [View as client](/resellers/view-as-client).
No. Every client-scoped read requires the delegated session credential minted for that specific relationship, and your own reseller dashboard is deliberately built to exclude client billing detail. There is no side door into a client's workspace from your own account. See [View as client](/resellers/view-as-client).
Yes, at any time, from their own Manage Reseller panel. Changes are resolved the next time a session is created, and the **Refresh permissions** button in the banner picks them up immediately, without you leaving the workspace. See [Client permissions and access](/resellers/permissions).
No notification exists anywhere in the product today. Every action you take is recorded on the server, but that record is not currently surfaced to either you or the client inside the app. Tell the client yourself when you start and when you finish, rather than assuming they can see it.
Both. The entire reseller surface, from registration through delegated sessions, works identically on the web app and the desktop app. The one exception is signup referral attribution, which only has a web entry point and nothing on desktop.
A revoked permission behaves more gently than an expired session. It locks just the affected area and leaves the rest of your session running, rather than ending the whole thing. See [View as client](/resellers/view-as-client) for the full picture.
| If this permission is missing... | This locks |
| -------------------------------- | ------------------------------------------------------------------------------ |
| Apps and MCP | The Apps browser, the agent's external tool list, terminal, and screen control |
| Files | The Files area, plus file and terminal tools |
| Skills | The Skills area, plus every skill tool |
| Agent Memories | Memory search and recall |
| Calendar and Schedules | The Calendar area, plus schedule management |
The boundary
Credentials and security.
What a reseller can never see, what happens when an app needs a client login, and how secrets are stored underneath it all.
No, and it is not a permission a client could grant even if they wanted to. Credentials sit outside the whole permission model, in a fixed restrictions list with no toggle attached to it. Every credentials endpoint refuses delegated access outright, and the Credentials Vault panel does not even render during a session, it is absent rather than disabled. See [Credentials and API keys](/resellers/credentials).
You cannot complete it. The control is disabled with the tooltip "Client action required" and the body "This app requires the client's credentials or authorization to complete installation. Ask the client to install or connect this app directly." That one step always belongs to the client. See [Apps, tools and integrations](/resellers/apps).
Yes, on the server, one row for every action taken in a delegated session. It is not currently exposed for either you or the client to read inside the app, so be straightforward that it exists but is not visible yet if a client asks. See [Credentials and API keys](/resellers/credentials).
With AES-256-GCM encryption under a per-user key, which is itself wrapped by Google Cloud KMS. That wrapping key is never stored in plaintext, and the table the list endpoint reads from has no secret column at all, so a metadata read can never leak a value. See [Credentials and API keys](/resellers/credentials).
There is no human reveal endpoint for a stored credential, for you or for the client's own team. The only plaintext path is a machine identity used by the product itself, and every attempt to reach it is audited, whether it succeeds or is denied.
Getting paid
Billing and money.
Who pays whom, how commission is calculated, and what protects a payout wallet from a costly typo.
The client pays Actionist directly, on their own subscription. You are paid a commission out of that payment, there is no reseller-side checkout or invoice you settle yourself. See [Revenue and payouts](/resellers/revenue).
A flat 25% of what the client pays Actionist. Each row in your ledger snapshots the rate that applied at the moment it was created, so a rate change later never rewrites history already earned. See [Revenue and payouts](/resellers/revenue).
Payouts run in monthly batches, in USDC, to a wallet address you configure yourself. Base is the default network, with Ethereum, Polygon and Arbitrum also offered. Rather than a fixed date, check the **Next payout** tile on the Revenue page and treat it as an estimate. See [Revenue and payouts](/resellers/revenue).
The product makes this hard to do by accident: you enter the address, re-enter it, tick three acknowledgements, then confirm it a second time by retyping. That protects against typos, but it cannot recover funds already sent to a well-formed address that is simply the wrong one. See [Revenue and payouts](/resellers/revenue).
No. Every reseller-facing money response is deliberately shaped so client billing detail cannot appear in it. The **Billing summary** permission, the most a client can grant, gives you aggregate plan usage only, never a card number or an invoice PDF. See [Client permissions and access](/resellers/permissions).
The ledger's Pending and Paid counts reflect only the rows currently loaded on that page, not your full history. Page through if a total feels off before assuming something is missing. See [Revenue and payouts](/resellers/revenue).
When you're stuck
Support.
Where to go for help, whose account a bug report lands on, and what is not built yet.
Three places. The **Knowledge Center** tab in the app loads these exact docs without leaving Actionist, the reseller Discord card on Overview links out to a private community, and the general Support area handles anything broader. See [Reseller dashboard overview](/resellers/dashboard).
It goes to your own reseller account, not the client's. The app says so explicitly: "This report goes to your reseller account," and it appears in your own support section afterward. The client never sees a bug report you filed on their behalf.
Coming soon The screen exists in the code and renders fixture data, but it is deliberately hidden from the sub-navigation today. Treat it as not available rather than looking for it. See [Reseller dashboard overview](/resellers/dashboard).
Yes, a private Discord for certified resellers, linked from the help panel on Overview. It is separate from the general Actionist community and scoped to reseller-specific questions.
The Knowledge Center tab and this page are the same content. If you'd rather stay inside Actionist while you read, open the Knowledge Center at `/reseller/docs` instead of switching to a browser tab.
The quiz
Certification.
Retakes, expiry, quiz language, and why we point you at the Hub instead of quoting a fixed number.
This is not defined in anything we can see in the product. The Certification Hub shows no attempt counter and no cooldown timer anywhere in its interface. If your retake button stays disabled for no visible reason, that is a case for Support rather than something to guess your way around.
No, there is no expiry mechanism anywhere in the reseller phase logic. Once you are certified you stay certified until an administrator changes your status, there is no periodic recertification to track. See [Getting started as a reseller](/resellers/getting-started).
Whatever your app language is set to at the moment you launch it, from seven options: English, Español, Français, Deutsch, Português, 日本語 and 中文. It cannot be changed once the quiz is running, the language control inside it is permanently disabled. Set your language in Settings first, then launch. See [Getting started as a reseller](/resellers/getting-started).
The Certification Hub shows you the exact question count and pass threshold before you start, and both numbers come from the server rather than being fixed in advance. Read that screen right before you launch, it is the only place we point you to for the current numbers. See [Getting started as a reseller](/resellers/getting-started).
| Status | What it means |
| --------------------- | ------------------------------------------------------- |
| Pending certification | Registered, not yet certified |
| Certified | Passed the quiz, Master Dashboard unlocked |
| Disabled or revoked | Reseller access paused, Manage Reseller tab still works |
One more thing
Still stuck?
This page covers judgment calls, not every message you might see on screen. For the exact wording of something you're staring at right now, the troubleshooting guide indexes every message, what it means, and whose problem it is.
Questions about the reseller programme itself, terms, disputes between resellers, anything these docs do not settle, go to `partners@actionist.ai` directly. In-app Support handles product bugs, not programme policy. See [Troubleshooting](/resellers/troubleshooting).
| If you're looking at... | Go here |
| ------------------------------------------------------------------- | --------------------------------------------------- |
| An exact error message, toast, or locked panel | [Troubleshooting](/resellers/troubleshooting) |
| A question about the programme, terms, or a specific client dispute | `partners@actionist.ai` |
| Anything about your own reseller console, tabs, or numbers | [Reseller dashboard overview](/resellers/dashboard) |
Still have a question
## Every answer here traces back to a real page.
Start there when you need the full detail, not just the short version.
Every answer on this page is checked against the product, not against a guess.
25% flat commission · one hour per session · credentials never included.
Keep going
Next steps.
Every message you can hit in the product, what it means, and whose problem it is.
Apply, study the modules, and pass the certification quiz.
How your 25% commission accrues and how payouts actually move.
The eight toggles a client owns, and the one restriction nobody can lift.
# Files, memories and chat history
Source: https://learn.actionist.ai/resellers/files-and-memory/index
Three different stores, three separate permissions, and the care each one deserves when you are working inside somebody else's business.
HANDLE WITH CARE
## You are inside somebody else's business. Treat what you find in it with the same care.
Files, memories and chat history look like one thing from the outside: a client's data. They are three separate stores, governed by three separate permissions, and one of them does not behave the way its name suggests. This page walks through what each store actually is, the trap most resellers fall into with agent memories, the three states of chat access, what a missing scope quietly takes away from the agent, and the precise, permanent line a two-stage confirmation draws before anything is deleted.
The confusion, up front
Three stores, three permissions.
Every one of these names sounds like it could mean the others. It doesn't. Read this section before the rest of the page, because the sections that follow assume you already know which store is which.
The static source assets somebody uploaded: documents, PDFs, datasets. They live in a real workspace filesystem, a shared `company/` area plus one folder per agent. Uploaded by the client's team. Governed by the `files` scope. SENSITIVE
What an agent learned while working. Markdown files, written automatically by a background memory process, stored under that same workspace and mirrored into a search index. Governed by the `agent_memories` scope. Not marked sensitive in the client's panel.
The transcript of conversations between the client's team and their agents. Written by nobody directly, it accumulates as those conversations happen. Governed by the `chat_history` scope. SENSITIVE
| Store | What it holds | Written by | Scope | Sensitive |
| ------------ | ----------------------------------------------------------------------------------------------- | ----------------------------------------------- | ---------------- | --------- |
| Files | Static source assets: documents, PDFs, datasets uploaded by the client's team | The client's team, through uploads | `files` | Yes |
| Memories | Markdown files recording what an agent learned while working, formed during client interactions | A background memory process | `agent_memories` | No |
| Chat history | The full conversation transcript between the client's team and their agents | Generated automatically as conversations happen | `chat_history` | Yes |
Notice what's actually different between rows. Files is content someone chose to add. Memories is content the agent produced on its own, as a side effect of doing its job. Chat history is neither, it's a record of what was said, not a document and not a fact the agent decided to keep. Three different origins, which is exactly why one blanket "data access" toggle would never have worked here.
The client's permission panel marks Files, Chat history and Billing summary with a **SENSITIVE** chip. Agent memories does not carry that chip, even though it is the one most people assume is the most sensitive of the three. Sensitivity, in this panel, tracks what a human reseller can read directly, not how personal the underlying data feels. Keep that distinction in mind through the next section, it is the whole reason the memory scope surprises people.
Agency operator · first session with a new client
Sees "Files" and "Memories" both mentioned in the client's grant list and assumes they're the same permission covering everything the agent knows. Opens the panel, reads the description text under each toggle, and realises Files is what the client uploaded while Memories is what the agent has since learned on its own.
about 2 minutes to sort out, once
Agency operator · asked to "clean up what the agent knows"
The client means the agent's learned memories, not their uploaded documents. Confirms `agent_memories` and `files` are both granted before starting, since reviewing memory content actually happens through Files, not through the Memory nav item.
covered in full in the section below
Read this before you go looking for a memory editor
The memory trap.
Of everything on this page, this is the single most common source of confusion. It costs almost nothing to get right once you know it, and it wastes real time if you don't.
Granting `agent_memories` does **not** open a memory editing screen. In a delegated session, it unlocks a Memory item in the navigation, and that item is a placeholder. It does not render a list of memories, a search box, or an edit form. It points you back to the workspace files instead.
What `agent_memories` actually does is let the agent itself use its memory lookup tools, `memory_search` and `memory_get`, while you are working inside that delegated session. It is a permission for the agent's own behaviour during your session, not a permission for you to browse memory content as a human.
Reading or editing the memory content that the background process has written happens through **Files**, because those Markdown files live in the ordinary workspace filesystem. That needs the `files` scope, not `agent_memories`.
Changing what an agent is *allowed* to do with memory, which buckets it can read from or write to, happens in **Agent Studio**. That needs `prompts_and_instructions`, again not `agent_memories`.
So three different questions route to three different scopes, and none of them is the one you'd guess:
"Can the agent use its memory right now?" That's `agent_memories`. It governs the agent's own tool calls during the session, nothing about what you personally can see.
"Can I read or edit what the agent remembered?" That's `files`. Memory content is Markdown, and Markdown lives in the workspace filesystem, which is where Files opens it.
"Can I change which buckets the agent is allowed to touch?" That's `prompts_and_instructions`, in Agent Studio, where agent configuration lives.
In practice this means a client can grant you `agent_memories` in good faith, expecting you to be able to review what an agent has learned, and you will land on a Memory nav item that goes nowhere useful. If that happens, don't assume the feature is broken. Check whether `files` is also granted, that is almost always the scope you actually needed.
It's worth explaining this to a client the first time it comes up, rather than letting them assume you have less access than you actually do. A client who sees you land on an empty Memory page might conclude the grant didn't take effect, when really it's working exactly as intended, just not through the screen either of you expected.
That's expected, not a bug. The Memory nav item is a placeholder regardless of what's granted. Ask the client for `files` if you need to actually see what the agent has stored, and open it through the Files view once you have it.
That's not something `agent_memories` controls either. Bucket-level read and write permissions live in Agent Studio, alongside the rest of that agent's configuration, and need `prompts_and_instructions` to reach. See the bucket section further down this page for the exact permission values involved.
It still does real work, it decides whether the agent can call `memory_search` and `memory_get` while you're delegated into the session. Without it, the agent effectively forgets it has a memory at all for the duration of your session, even though the underlying files are untouched.
Reading versus replying
Chat history and the three access states.
Chat history has a wrinkle that Files and Memories don't: seeing a conversation and taking part in it are gated by two different scopes, and the combination you hold decides which of three states you land in.
| State | Scopes held | What you see |
| ----------- | -------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Blocked | No `chat_history` | The conversation list shows: "Ask the client to grant access to chat history so you can view this." |
| Read-only | `chat_history`, without `prompts_and_instructions` | The full history is visible. The composer is disabled. The hint underneath it reads "View-only access", and hovering it shows the tooltip "Agent execution wasn't granted in this view-only session." |
| Interactive | Both `chat_history` and `prompts_and_instructions` | The full history is visible and the composer works normally, same as any other agent conversation. |
Read-only is the state that trips people up, because everything on screen looks normal except one disabled input. If you're staring at a transcript wondering why you can't reply, check whether `prompts_and_instructions` is granted alongside `chat_history`. Chat history alone only ever gets you to read-only, by design.
Attempting to modify a conversation without both scopes hits a hard stop at the application level, not just a disabled button: "Conversation History and Agents permissions are required to modify conversations in View as Client mode." If you ever see that message, it means the composer being disabled wasn't a rendering quirk, the backend is enforcing the same boundary the UI already showed you.
This pairing is deliberate, not an oversight. `chat_history` answers "can this reseller see what was said". `prompts_and_instructions` answers "can this reseller act as the agent". A client who is comfortable with the first is not automatically comfortable with the second, and the product keeps those two decisions separate rather than collapsing them into one toggle.
Scope names shorten depending on where you're looking, and that's cosmetic, not a second permission. The session banner's permissions summary uses short labels, **Memories** rather than Agent Memories, **Tools** rather than Tools & Integrations. A lock overlay on a blocked page spells out the long form instead. Same underlying scope either way, so don't read a longer label as a stricter or different requirement.
Behind the scenes
What the agent can still do.
Every scope you don't hold quietly removes a matching set of tools from the agent, not just a nav item from your view. If an agent seems to ignore a request while you're in a delegated session, this table is usually why.
| Missing scope | What the agent loses |
| ------------------------ | ------------------------------------------------------------------------ |
| `files` | Every file tool, plus the terminal tools |
| `agent_memories` | The `memory_search` and `memory_get` tools |
| `skills` | The skill tools |
| `tools_and_integrations` | The entire external tool list, emptied outright, plus the terminal tools |
| `calendar_and_schedules` | Schedule management |
Each of these fails the same way: the agent attempts the call, and the session returns "Permission denied: reseller delegated session does not include access." with the specific missing scope named in place of `{'{scope}'}`. It is not a silent no-op, the agent will surface that it was blocked and why.
Terminal access is the one item that shows up under two different rows, and that's not a mistake. It needs **both** `files` and `tools_and_integrations` at once. Losing either scope alone is enough to take the terminal tools away, even if the other one is still fully granted. If a client wants you to be able to run terminal commands on their agent's behalf, both toggles need to be on, not just one of them.
Everything external, yes. Its whole tool list for third-party apps and MCP servers is emptied outright, on top of losing the terminal tools and screen control. What survives is whatever doesn't depend on an external connection, chat itself, and anything covered by scopes you still hold, like memory lookups under `agent_memories` or file access under `files`.
That's a different boundary entirely, not this scope. Connecting credentials or authorizing a new app is blocked for any active delegated session, regardless of which scopes you hold. See [Credentials and API keys](/resellers/credentials) for that limit, it's permanent and doesn't loosen with more scopes.
What's actually inside Memories
Memory buckets and permissions.
Once you're in Files looking at what an agent has learned, it helps to understand the shape of what you're looking at. Memory is organised into buckets, and each bucket carries its own permission, not one blanket setting for the whole store.
"Memory is bucketed by scope so an agent only sees what it needs. Read lets the agent recall facts; Read & write lets it save new ones." That's the product's own framing, and it is the right mental model to carry into any client workspace: a bucket is a scope boundary, not just a folder.
Buckets are Markdown files and folders on disk, not rows in a database. A workspace starts with a default set: **business info**, **products**, **policies**, **operations** and **CRM**, and the client can create more on top of those defaults as their agents' needs grow.
Each bucket carries exactly one of three permission values, written precisely:
| Permission value | What it means for the agent |
| ---------------- | ------------------------------------------------------------------------------------------------- |
| Read/Write | The agent can recall facts already in this bucket, and save new ones back into it. |
| Read | The agent can recall facts already in this bucket, but nothing it learns is written back into it. |
| No access | The agent cannot see this bucket at all, in either direction. |
This is what "only sees what it needs" means in practice. A finance agent might hold Read/Write on operations and Read on policies, while having No access to CRM entirely, and that's a normal, intentional configuration rather than an oversight to flag.
| Default bucket | Typical contents |
| -------------- | ------------------------------------------------------------------------------------------------- |
| Business info | Company background, mission, org structure, the kind of context that rarely changes week to week. |
| Products | What the client sells, feature details, pricing structure. |
| Policies | Internal rules and external commitments the agent should respect when acting. |
| Operations | Day-to-day process detail an agent picks up while doing recurring work. |
| CRM | Facts about specific clients or contacts the agent has interacted with. |
A client can add buckets beyond these five as their agents take on new kinds of work, there's nothing fixed about the default set beyond it being where every workspace starts.
Agency operator · agent oversharing CRM detail
A client flags that a support agent is referencing account details it shouldn't need. Opens Agent Studio, finds that agent still holds Read/Write on CRM from an earlier setup, and drops it to No access instead of touching the `agent_memories` toggle, which wouldn't have targeted the actual bucket at all.
about 5 minutes
Bucket-level permissions are set per agent in Agent Studio, the same place that owns the memory scope decision covered in the section above. If a client wants an agent to stop writing to a particular bucket without cutting off memory access entirely, dropping that one bucket from Read/Write to Read is the precise tool for it, not the `agent_memories` toggle.
See [Memory](/Folders/memory) for the full reference on how buckets, retrieval and the background memory process work outside the reseller context.
The one that can't be undone
Working with files safely.
Files is the only one of the three stores where you can permanently destroy something that belongs to the client. The product puts real friction in front of that, and it's worth knowing exactly what that friction looks like before you're the one clicking through it.
A confirmation dialog appears immediately. Title: Delete ""? Body: "This permanently removes the file from disk and revokes future agent access. This cannot be undone."
A second stage asks you to retype the exact filename before anything happens: "Type the filename below to permanently delete this file." The action button reads "Delete permanently", and it stays inert until what you typed matches.
Success shows as: "" has been permanently deleted." Deleting a file also deletes its extracted AI sidecar in the same action, so the file disappears from agent retrieval at the same moment it disappears from disk. There is no separate step and no separate undo for the sidecar.
There is no recovery path once both stages are confirmed. The confirmation copy says "This cannot be undone" and means it literally, there is no trash, no version history, and no support-side restore implied anywhere in this flow. Typing the filename is not a formality, it is the only thing standing between a single misclick and a client permanently losing a source document.
Two other things worth knowing before you touch a client's Files tab:
* **Memory-managed files render read-only.** Any file the background memory process owns shows the message "This file is managed by the Memory Agent and can't be edited here." when you try to open it for editing. That's expected, it's the same store the memory process writes to, not a permissions bug on your session.
* **Two size limits govern different things, and they're easy to mix up.** Upload is capped at **25 MB per file**, that's the ceiling on what can be added to the workspace at all. Separately, any file over roughly **10 MB will not open as text inside the app**, regardless of whether it was uploaded successfully, and has to be downloaded to be read. A file can be well within the upload limit and still need downloading to actually view.
Check its size before assuming something is broken. Files over roughly 10 MB don't render as text inside the app at all, even though they uploaded successfully under the 25 MB ceiling. Download it to read it, that's expected behaviour for larger files, not a failed upload.
Look for the message "This file is managed by the Memory Agent and can't be edited here." That means the background memory process owns this file, and it's read-only by design. If it genuinely needs a correction, that's a change to make through the memory process's own inputs, not by hand-editing its output.
Ask first. There is no undo once both confirmation stages are complete, and the sidecar goes with it, so the agent's retrieval loses that source at the same moment. A quick check with the client costs a minute, a wrongly deleted source document costs the client real work to reproduce.
See [Files](/Folders/files) for the full reference on the workspace filesystem, folder structure, and how agents retrieve from it.
The honest part
Leaving a clear trail.
There is no client-facing "what did my reseller change" view today. A client sees the resulting state of their workspace after you've worked in it, the same way they'd see any other change, with nothing that specifically calls out that a reseller was the one who made it.
Every action taken inside a delegated session is recorded server side. That record exists, but it isn't surfaced to either party inside the app yet, not to you as a summary of what you did, and not to the client as a log of what a reseller touched. So the honest version of this section is simple: **the product will not tell the client what you changed. You have to.**
Two habits cover almost every case: agree with the client in advance on what you're going to touch during a session, and send a short summary afterward of what actually changed. Neither takes long, and both matter more here than in most parts of the product, because Files, Memories and Chat history are exactly the stores where "I assumed you knew" causes the most friction with a client later.
A summary doesn't need to be long to do its job. Something as short as this, sent right after you exit a session, covers the essentials:
email · session summary
Quick note on today's session in your workspace:
Removed two outdated PDFs from Files (2024 pricing sheets, superseded by the ones you sent last week).
Adjusted the support agent's memory permissions so it no longer writes to the CRM bucket.
Nothing else touched. Let me know if anything looks off.
This isn't a compliance lecture, it's the practical fallback for a gap that genuinely exists today. Until a built-in activity view ships, a two-line message after a session, what you edited, added, or deleted, is the only record the client will actually see with your name attached to it.
Handle with care
## Know which store you're in.
Files, memories and chat history each carry their own scope and their own risk. A minute spent checking which one you need saves an afternoon of confusion later.
Agent memories unlocks agent behaviour, not a browsing screen. Files and chat history both carry the SENSITIVE chip for a reason.
Deletion is permanent the moment the second confirmation matches, and no activity view watches it for you yet.
Keep going
Next steps.
The workspace filesystem in full: folder structure, uploads, and how agents retrieve from it.
Buckets, retrieval, and how the background memory process actually works outside a delegated session.
All eight toggles in one place, including the two, files and chat history, that carry the SENSITIVE chip.
Where the habit of agreeing scope up front and summarising changes afterward fits into a full engagement.
# Getting started as a reseller
Source: https://learn.actionist.ai/resellers/getting-started/index
Apply in about two minutes, pass the certification quiz, and unlock the reseller dashboard. Everything happens inside the Actionist app.
APPLY AND CERTIFY
## Two steps stand between you and your first client.
Fill in six fields about your business, then pass a certification quiz built from the Knowledge Center. Both steps happen inside the Actionist app, and the Master Dashboard unlocks the moment you pass. No separate portal, no waiting on a human to approve you.
6
fields to apply
4
study modules
7
quiz languages
15
countries in the dropdown
The path
What this page covers, and what comes after.
This page walks you through the first two stages. Onboarding clients and getting paid have their own pages, linked at the bottom.
1
ApplySix fields about your business, submitted from the Reseller tab in the app.
2
CertifyStudy four modules in the Certification Hub, then pass the quiz. Covered in full below.
3
Onboard clientsThe Master Dashboard unlocks. Invite clients and configure their workspaces.
4
Get paidCommission accrues per client invoice and settles in monthly payout batches.
No approval queue. Submit the application and the app moves you straight to the Certification Hub. Nobody has to review or approve your six fields first.
Study before you're graded. The Certification Hub and Knowledge Center are open to read from the moment you apply, well before you ever click Launch quiz.
One quiz attempt at a time. There's no partial credit and no resume. Pass it and the Master Dashboard unlocks immediately, no separate wait.
Before you touch either step, open **Settings** and confirm your app language. The certification quiz locks to whatever language your account is set to the moment you click **Launch quiz**, and there is no way to change it mid-attempt. See [Settings](/Folders/settings).
Do not mix these up
There are two applications, in two places.
This catches people out, because both are called applying and neither one replaces the other.
1
Apply to the programmeOn the Partner Program page at actionist.ai/partners. Twelve questions, about three minutes. This is how you join.
2
Register in the appSix fields in the Reseller section of Actionist itself. This is what creates your reseller profile and opens the Certification Hub.
The rest of this page covers step two, the in-app half. If you have not done step one yet, start at the Partner Program page, which also covers the commercial side: what you can charge, the ways partners structure their businesses, and what the programme provides.
Training. The programme teaches you how to build agents and automate a business. No code involved, because Actionist drives a client's existing apps the way a person does.
A partner community. Private channels alongside other Actionist partners. Certified resellers also get a Discord card in the dashboard help panel.
Sales resources. Material for finding businesses and winning them over. [Client success best practices](/resellers/best-practices) covers how to run that conversation.
Find your way around
Where the reseller section lives.
Everything reseller-related sits behind the **Reseller** tab in the app, at the in-app route `/reseller`. That tab's sub-navigation is split into two groups, and only one of them is locked before you certify.
| Sub-nav group | Items | State |
| -------------------------- | ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| **Master Dashboard** | Overview, Clients, Revenue | Locked. Every item shows a padlock with the tooltip "Unlocks after you pass the certification quiz." until you're certified. |
| **Learning & client view** | Certification Hub, Knowledge Center | Open from day one. You can read every module and browse the Hub before you've even applied. |
The **Certification Hub** entry disappears from the sub-nav once you're certified, since you no longer need it. The **Knowledge Center** entry stays, and it embeds the same learning content you're reading right now inside the app.
A **Manage Reseller** entry can also appear in the Learning & client view group, but only when your own workspace is itself managed by another reseller. That is unrelated to your certification status. See [How resellers work](/resellers/how-it-works).
Underneath the sub-nav, your account moves through a small set of states. Here's the whole path, including the one you hope never to see.
unregisteredNo profile yetYou see the landing view, then the registration form covered below.
pending\_certApplied, not certifiedYou land in the Certification Hub. Master Dashboard stays locked.
quizA run is in progressOnly reached by explicitly clicking Launch quiz or Retake quiz, never automatically.
certifiedYou passedMaster Dashboard unlocks. Certification Hub drops out of the sub-nav.
The application is one screen, six fields, and takes most people under two minutes.
From the left sidebar, click **Reseller**. If you have no reseller profile yet, you land on a landing view with a **Back to overview** link and an **Application** stage tag above the form.
The form title reads **"Tell us about your business"**, with the subtitle **"We'll use this for payouts, tax reporting, and the client-facing reseller profile shown on each managed workspace."** Fill in the six fields described below.
Click **Submit application**. The button reads **"Submitting…"** while the request is in flight. On success, the app moves you straight to the Certification Hub, no approval wait and no separate confirmation step.
Six fields render, in this order:
| Field | Notes |
| --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| First name | Placeholder `John`. |
| Last name | Placeholder `Doe`. |
| Company / Agency name | Full width. Placeholder `Halo Studio LLC`. |
| Business email | Placeholder `hello@halo.studio`. Read-only and pre-filled from your account. Only becomes editable if your account has no email on file, in which case you'll see: "Your account has no email on file. Enter a business email here, or add one to your account first." |
| Website | Placeholder `halo.studio`. Auto-normalizes when you tab out of the field. |
| Country of operation | Dropdown, defaults to United States. See the full list below. |
That's the whole form. There's no tax ID or VAT field on this screen, whatever any older internal notes might say. **Company / Agency name** is worth getting right the first time, it's what shows up on the client-facing reseller profile attached to every workspace you manage, not just an internal label. Clicking **Cancel** discards the form and returns you to the landing view, nothing is saved until you submit.
Type `halo.studio` into **Website** and tab out, and it becomes `https://www.halo.studio` automatically. Already typed `http://` or `https://` yourself? The form leaves it alone. Already includes `www.`? It won't get doubled up.
Docs and the Knowledge Center are always available; no submission required. Next, pass the certification quiz to take your reseller account live.
Every field is required, and validation only appears after your first click on **Submit application** (email and website format errors are the exception, they check as you type). If you're not sure what's missing, click **Submit application** once, empty form and all, and read what lights up: "First name is required.", "Last name is required.", "Company name is required.", "Business email is required.", "Enter a valid email", "Website URL is required.", "Enter a valid URL", "Country is required."
reseller / application
← Back to overview · Application
Tell us about your business
We'll use this for payouts, tax reporting, and the client-facing reseller profile shown on each managed workspace.
**Country of operation** is a fixed dropdown, not free text. It defaults to United States.
United States, United Kingdom, Germany, France, Netherlands, Spain, Italy, Sweden, India, Singapore, Australia, Canada, Brazil, Japan, UAE.
Pick the closest match for now so the field is never left blank, then mention your actual country to `partners@actionist.ai`. It's used for payouts and tax reporting, so it's worth getting right even if you have to follow up after submitting.
Step two
Study in the Certification Hub.
Submitting your application drops you straight into the Hub. Its title reads **"Certification Hub"**, subtitle **"Everything you need to know before taking the certification quiz. Browse the modules in any order, and start the quiz whenever you're ready."**, and a **"Pending certification"** status pill sits at the top.
The Hub itself, not this page and not any other marketing copy, is the authority on how many questions the quiz has and what score passes it. It renders a live spec line straight from the certification API, something like `{'{{count}}'} questions · pass at {'{{percent}}'}%`, filled in with whatever currently applies. Older marketing copy elsewhere mentions a fixed exam length and six modules. Ignore it. The Hub only ever shows four modules, and this page won't quote you a number either.
reseller / certification-hub
Certification Hub
Pending certification
Everything you need to know before taking the certification quiz. Browse the modules in any order, and start the quiz whenever you're ready.
questions · pass at %
Most important topics
A sample of what the quiz covers. More material lives in the full Knowledge Center.
Agent ConfigurationHow agents are built, scoped, and deployed safely inside an Actionist workspace.
Prompting & InstructionsWriting system prompts, few-shot examples, and the guardrails that keep agents on-task.
Skills & ToolsComposing skills, MCP servers, and structured outputs into reliable agent behavior.
"Once you start, the quiz can't be paused or resumed. Don't refresh or close the window, reloading ends the attempt and you'll have to retake it from scratch."
That warning tooltip shows on every version of the button, whether it reads **Launch quiz**, **Retake quiz**, or **Starting…**. There is one more state worth knowing about: the button force-disables, with no explanation shown anywhere on the page, when the backend flags both `canStartQuiz` and `canRetakeQuiz` as false. If that happens to you, don't assume it's broken. Go straight to [Troubleshooting](/resellers/troubleshooting).
Each module maps to a real boundary you'll live with once you're managing client workspaces. Here's what each one actually covers.
Building an agent with a clear role and clear boundaries: what it can access, what it shouldn't touch, and how a client's grant for **Allow reseller to modify agent Prompts & Instructions** maps to what you're actually allowed to edit inside their workspace. See [Agents, prompts and instructions](/resellers/agents) for the delegated-session version of this.
Writing system prompts and few-shot examples that hold up under real client use, plus the guardrails that keep an agent from wandering off-task. It's the same craft whether you're building for your own workspace or a client's, the quiz tests judgment here, not memorized syntax.
Choosing, installing, and maintaining the skills and MCP servers an agent calls on, and reading structured tool output well enough to trust it. See [Skills](/resellers/skills) and [MCP servers](/Folders/mcp).
What you can wire up yourself under a client's **Allow reseller to manage Apps and MCP** grant, and exactly where the line sits: installing a credential-based app, connecting OAuth, and anything touching a secret always stays with the client, no matter what's enabled. See [Apps, tools and integrations](/resellers/apps).
Try it
A real quiz question.
This is the same style of question the real quiz asks. In the actual quiz you pick an option, then click **Check** to lock it in, that's a separate step so you don't reveal the answer by accident. Here, just click an option below.
Sample question
Which permission scope lets a reseller configure MCP servers and tool settings inside a client's workspace?
Nice, that's right. Apps and MCP (the `tools_and_integrations` scope) is what lets a reseller manage MCP servers, tools, and app connections that don't require credentials.
Not quite. Apps and MCP (the `tools_and_integrations` scope) is the one that covers MCP servers and tool settings. Try that option.
Correct
That scope is also the one with the most exceptions attached to it: even with it granted, installing a credential-based app or connecting an OAuth app always stays with the client. See [Apps, tools and integrations](/resellers/apps) for the full boundary.
Step by step
Taking the quiz.
Do this before you click **Launch quiz**, not after. The quiz locks to whatever language your Actionist account is set to at the moment you launch it, out of 7 supported languages: English, Español, Français, Deutsch, Português, 日本語, and 中文. The in-quiz language button is permanently disabled, and its tooltip says exactly why: "Language is set from your account settings. To change it, exit the quiz, update your language in Settings, then retake the exam." Change it in [Settings](/Folders/settings), then come back and launch.
The top bar shows the brand **"Reseller Certification"**, a progress readout formatted `{'{{ordinal}}'} / {'{{total}}'}`, a running count of correct answers, and a close button. For each question: pick an option, click **Check** (it reads **"Checking…"** while pending), read the feedback, either **"Nice, that's right"** or **"Not quite"** plus a short explanation either way, then click **Continue**. On the final question, that button reads **Submit quiz** instead. Clicking the close button doesn't just exit, it opens the leave modal covered a couple of accordions down, so nothing there is silent.
Results show three numbers no matter how you did: Correct (`score/total`), Score (a percentage), and Best streak, the longest run of consecutive correct answers in that attempt. On a pass you'll see **"You're certified!"** and **"Welcome to the Actionist Reseller program. Your Master Dashboard is now unlocked. Onboard clients, track revenue, and manage their workspaces directly from the Reseller tab."** Click **Enter my Dashboard** to go straight there.
You'll see **"Almost there"** and **"You scored of . You need correct to pass. Take it again whenever you're ready, every retake pulls a fresh set of questions."** Two buttons: **Back to Hub** or **Retake quiz** right away. Every retake is a new question set, memorizing the last attempt won't carry you through the next one, so it's worth actually reading the four study modules rather than brute-forcing it.
Click the close button and a modal appears: **"Leave the certification quiz?"** with the body **"Your progress on this attempt will not be saved. If you leave now, this counts as a used attempt and you'll start from question 1 next time."** It also shows three live stats, Answered, Correct so far, and Remaining, then two buttons, **Keep going** or **Cancel and exit**. There is no partial save. An abandoned attempt is a used attempt, full stop.
The payoff
What unlocks on pass.
Master Dashboard, unlocked. Overview, Clients, and Revenue drop their padlocks and become fully usable, no page reload needed.
Certification Hub disappears. The sub-nav entry is hidden once you're certified. Knowledge Center stays put for reference.
Your badge updates. The sub-nav header now reads "Certified reseller", and your profile subtitle shows "Certified · ".
You can invite clients. The Overview tab's **Invite client** button and the whole onboarding flow are usable the moment you land there.
Nothing else changes. Certification only turns on the reseller layer. Your own workspace, agents, and billing are untouched by any of this.
Certified. From here, everything about running your client roster lives on the [Getting started with your dashboard](/resellers/dashboard) and [Onboarding a client](/resellers/client-onboarding) pages.
Good to know
Things that trip people up.
When the backend flags both `canStartQuiz` and `canRetakeQuiz` as false, the button force-disables and the Hub shows no explanation at all, not a tooltip, not a banner. This is not a bug you can fix from the form. Go to [Troubleshooting](/resellers/troubleshooting) and work through what to check.
If a run is already `in_progress` (say you left mid-quiz and came back), the CTA reads **Retake quiz**, and clicking it cancels that run entirely and starts a brand new attempt from question 1. There is no continue-where-you-left-off option. Partial progress is never resumable, on any path back into the quiz.
Language locks in the instant you click **Launch quiz**, not before. If it's wrong, exit the quiz, change your language in [Settings](/Folders/settings), and launch again. There's no in-quiz language switch, the button for it is permanently disabled by design.
That's expected. It's read-only and pre-filled from your account by default. It only becomes an editable text field if your account has no email on file at all, in which case a note appears telling you to add one there or add one to your account first.
Most of the friction on this page traces back to one habit: set your language before you launch, and treat every CTA warning as literal. The quiz genuinely does not forgive a refresh, and a disabled button genuinely does not explain itself. Everything else here is a two-minute form and four short modules.
Reseller onboarding
## Apply, certify, and start onboarding clients.
Both steps live inside the app. Set your language first, then get started.
No fixed question count or pass threshold stated here, the Certification Hub always shows the current ones.
Six fields to apply · Four study modules · One dashboard once you're certified.
Keep going
Next steps.
The relationship model behind everything you just certified into.
KPI tiles, recent clients, and where every common task starts once you're in.
The invite flow, the invitation lifecycle, and a handoff checklist for your first real client.
Where your app language lives, set it before you launch the quiz.
# How resellers work in Actionist
Source: https://learn.actionist.ai/resellers/how-it-works/index
The relationship model behind the programme: what links you to a client, what you can reach, what stays theirs, and how the whole thing ends.
THE MODEL
## One account, many workspaces, none of them yours.
A reseller runs a portfolio of client businesses from a single Actionist account. Each client keeps their own workspace, their own data and their own subscription. You get scoped, revocable access to do the work, and a flat cut of what they pay.
The shape
Three things, connected by one link.
Almost every question about the programme resolves once you can picture these three objects and the one that joins them.
One per organisation, not per person. It carries your company details, your certification, and the status that decides whether the dashboard is open to you.
An ordinary Actionist organisation with its own subscription, its own agents and its own data. Nothing about it belongs to you.
The link between the two. It is what commission is calculated against, what a delegated session is opened for, and what carries the permissions the client granted.
You register an organisation, not yourself. That is why applying needs an organisation manager rather than any signed-in user.
Client data never crosses over. Your dashboard holds counts and totals. It does not hold their documents, conversations or billing details.
Access is borrowed, not held. You reach a client workspace through a session that is created, scoped, and thrown away.
Where you are
Your reseller account has exactly one state at a time.
The whole Reseller section is driven by a single computed phase. Knowing which one you are in explains everything the interface is doing.
unregisteredNot applied yetYou see the programme landing page and the application form. Docs and the Certification Hub are already open to you.
pending\_certApplied, not certifiedThe Certification Hub is your home. Overview, Clients and Revenue show padlocks.
quizAn attempt is openA quiz run exists. It never resumes, so returning here means cancelling it and starting fresh.
certifiedFully openOverview, Clients and Revenue unlock. The Certification Hub disappears from the navigation.
blockedPaused or revokedThe dashboard closes. Only Actionist support can lift this.
There is no review or approval step between applying and certifying. Submitting the application form takes you straight to the Certification Hub. The gate is the quiz, not a person. See [Getting started as a reseller](/resellers/getting-started).
Being blocked does not take away the **Manage Reseller** tab. That tab exists because *your* workspace is managed by somebody, which is a separate fact from your own reseller status. A certified reseller can be another reseller's client at the same time, and the product supports that deliberately.
Per client
A relationship has its own life.
Separate from your account status, each client link moves through its own states. The Clients table simplifies these into Active or Inactive, which is why the table sometimes looks like it is lying to you.
| State | What it means | What you can do |
| ------------------ | ------------------------------------------------------------------------------------ | -------------------------------------------------------------------- |
| Syncing | The client signed up and their workspace is attaching. It can already read as Active | Wait. Management access is genuinely unavailable until this finishes |
| Active | Live and manageable | Everything the client granted |
| Canceled | The client's subscription ended | Nothing. The client moves to the Historical filter |
| Force disconnected | An Actionist administrator severed the link | Nothing. This is not something either party triggers |
The syncing state is the single most common source of confusion. A client can display a green Active dot and still have **View as client** greyed out, because operational status and management availability are two different fields. Hover the disabled button for the specific reason. See [Managing clients](/resellers/clients).
You inviteAn email invitation goes out. Only one can be pending per address.
They sign upTheir new workspace attaches to your reseller account automatically.
They pay, you earnEach client payment creates a ledger entry with your cut recorded against it.
The dividing line
Your dashboard is deliberately thin.
This is worth understanding early, because it explains why the reseller dashboard shows so little about each client. It is not an oversight.
Lives in your reseller account
Client names, join dates, plan names and an active or inactive status.
Totals: how many clients, how much revenue they generated, what you earned.
A commission ledger, one row per client payment, showing your cut.
Your own payout wallet and payout history.
Never leaves the client's workspace
Their documents, agent memories and conversation history.
Their card details and invoice documents. The ledger states plainly that client billing details are not visible.
Their API keys, tokens and service-account credentials, permanently.
Anything at all, unless you have an open delegated session for that client.
You reach a client's actual workspace only through a delegated session, and only while it is open. There is no background sync, no mirrored copy, and no way to read their content from your own dashboard. See [View as client](/resellers/view-as-client).
Their side
The client decides what you can touch.
Every managed client gets a **Manage Reseller** panel showing who you are and eight toggles controlling what you can reach. Nothing is granted by default and nothing is permanent.
They see youCompany name, contact person, email and the month you were certified.
They set the scopeEight toggles. Three are flagged as sensitive. All start from a deliberate choice.
The server enforces itLocked areas are refused at the source, not just hidden in the interface.
Credentials stay lockedNo toggle exists for secrets. There is no state in which you can see them.
Credentials & API keys
Not a permission that can be granted, by anyone
HARD LIMIT
This shapes the working relationship more than anything else in the product. You can prepare a client's entire workspace, but the moment a step needs their login or their secret, the app hands it back to them. Plan for that rather than being surprised by it. [Client permissions and access](/resellers/permissions) covers the toggles, and [Credentials and API keys](/resellers/credentials) covers the boundary.
The commercial part
The client pays Actionist. You earn a cut.
Your client holds their own Actionist subscription and pays for it themselves. There is no reseller checkout and you never front their bill.
Every client payment creates a ledger row recording the payment and your cut. The rate is fixed and each row keeps the rate that applied when it was created.
Pending balances settle in monthly batches to a wallet you configure. The Revenue tab shows the next estimated payout date.
Nothing stops you charging the client your own fee for the work you do on top. That arrangement is between you and them and Actionist does not handle it. The 25% is the commission on their Actionist subscription.
Three lines of income, one of them automated.
It is worth being precise about which part of the money Actionist actually touches, because only one of the three shows up in your dashboard.
| Income | Who sets it | Who collects it | Where you see it |
| ------------------------------------------ | ---------------------- | ----------------------------- | ---------------------------------------------------- |
| Your own fee for setup and ongoing work | You | You, directly from the client | Nowhere in Actionist. It is your invoice, your terms |
| 25% of the client's Actionist subscription | Fixed by the programme | Actionist, then paid to you | The Revenue ledger, one row per client invoice |
| Referral income on partners you introduce | The programme | Actionist | Not surfaced in the app today |
There is no referral dashboard, referral link, or referral ledger in the reseller section today. If you are planning to build on referral income, agree the terms with the partners team in writing first rather than assuming the app will track it for you.
[Revenue and payouts](/resellers/revenue) covers the ledger, the wallet setup and what happens when a payment is refunded. The [Partner Program page](https://actionist.ai/partners/) covers the commercial side, including the ways partners structure their businesses.
Be straight about this
A managed workspace stays managed.
A client can reduce you to no access whatsoever with eight clicks. What they cannot do is detach the workspace from your reseller account on their own.
The exact wording a client reads in their panel is: "This workspace is permanently managed by reseller. To disconnect, you'll need to cancel your current subscription and create a new workspace."
Turn off any of the eight permissions, at any moment, without telling you. Their workspace keeps running exactly as before. Your next delegated session simply has less in it.
There is no notification to you when this happens. If an area you were using is suddenly locked, that is usually why.
Severing the relationship itself. That is an administrative action, not a button either party has. If a client genuinely needs to leave a reseller relationship, that is a conversation with Actionist support rather than something you or they can action in the app.
Set expectations at the start rather than at the end. Tell a prospective client that the relationship is durable by design, that they control access permission by permission, and that credentials are never included whatever they enable.
In practice clients who understand the model tend to grant more, not less, because there is nothing left to be anxious about.
Finding it
Where the Reseller section sits.
**Reseller** is an item in the main Actionist sidebar. Opening it reveals a sub-navigation of its own, split into two groups.
| Group | Items | Availability |
| ------------------------ | ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| Master Dashboard | Overview, Clients, Revenue | Locked until you pass the certification quiz |
| Learning and client view | Certification Hub, Knowledge Center, Manage Reseller | Open from the start. The Hub disappears once certified, and Manage Reseller only appears if your own workspace is managed |
The **Knowledge Center** tab loads these very docs inside the app. If you are reading this on the web, the same pages are one click away while you work.
The Reseller section is one of two areas that stay locked inside a delegated session, along with Projects. You cannot manage your own reseller account from inside a client's workspace, which is exactly what you would want.
The reseller model
## Built so nobody has to trust you blindly.
Scoped access the client controls, a boundary nobody can cross, and a commission that tracks itself.
One reseller account, many client workspaces, no shared logins anywhere in the model.
Eight client-controlled permissions · Server-enforced · Credentials outside the model entirely.
Keep going
Next steps.
Apply and certify. Both happen inside the app and take an afternoon at most.
The eight toggles, what each one opens, and the one nobody can lift.
How you actually get into a client workspace, and how to leave it cleanly.
How commission accrues and how to set up a payout wallet safely.
# Reseller Learn Hub
Source: https://learn.actionist.ai/resellers/index
Everything a certified Actionist reseller needs: how the programme works, how to run a portfolio of client workspaces from one dashboard, and where the boundaries sit.
RESELLER PROGRAM
## Resell Actionist. Run a portfolio from one dashboard.
Set up AI employees for businesses and get paid every month they keep running. You charge your own fee, earn a flat 25% on what each client pays Actionist, and configure their agents, apps and schedules on their behalf. No shared passwords. No separate logins. Credentials are never on the table.
The path
From application to first payout.
Four phases, each gated by the one before it. The dashboard unlocks the moment you pass the certification quiz.
1
ApplySix fields about your business. The app moves you straight to the Certification Hub on submit.
2
CertifyStudy four modules, then pass the quiz. Set your app language first, because the quiz locks to it at launch.
3
Onboard clientsOverview, Clients and Revenue unlock immediately. Invite clients by email and configure their workspaces.
4
Get paidCommission accrues per client invoice. Pending balances settle in monthly payout batches, in USDC.
No credential sharing. A delegated session gives you the real Actionist UI scoped to a client workspace, without ever exposing their API keys or tokens.
The client holds the dial. Eight permission toggles. Each client grants exactly what they trust, and can change it whenever they like.
A fresh quiz every attempt. Retakes pull a new question set, so you are demonstrating knowledge rather than memorising answers.
Why resell
More than a referral link.
Certified resellers get a real management layer: tracked commission, one dashboard across every client, and an access model that keeps clients in charge.
Your cut on every client payment, tracked live in the Revenue ledger and paid out in USDC to a wallet you configure.
**View as client** loads the standard Actionist UI scoped to one workspace. No duplicated tooling, no second login.
Eight toggles the client controls, enforced server side. Credentials and API keys carry a permanent hard limit.
The economics
You get paid every month, not just once.
Most people who build an automation for a business get paid one time, then it stops. As a partner you stay in, and there are three separate lines of income rather than one.
You decide what to charge each business for setting up and running their AI employees. That arrangement is between you and them, and Actionist does not take a cut of it.
A flat 25% of what each client pays Actionist, for as long as they keep using it. Tracked per invoice in the Revenue ledger and paid out in USDC.
Bring in other partners and earn on the partners you introduce. This is a programme arrangement rather than something you manage in the app today.
It stacks. A one-time job pays once and then you start again. Each client you bring on adds to what the ones before are already paying you.
Billing is handled. Your client subscribes to Actionist directly and pays Actionist directly. You never front their bill or chase their card.
No income is promised. What you earn depends on the client list you build and what you choose to charge. Nothing here is a projection.
The 25% is the only part Actionist calculates and pays. Your own fee and any referral arrangement sit outside the app. [Revenue and payouts](/resellers/revenue) covers the part the ledger tracks, and [How resellers work](/resellers/how-it-works) explains where the boundary between the three sits.
Start here
Reseller basics.
Read these three in order if you are new. They cover the relationship model, then the application and certification.
The relationship model, what a managed client actually is, and which parts of a workspace stay with the client.
The application form field by field, the Certification Hub, and everything the quiz expects of you.
The eight toggles, what each one unlocks, and the one restriction no client can lift.
Day to day
Your reseller dashboard.
Three tabs under **Master Dashboard** in the Reseller sub-navigation, plus the invite flow that fills them.
KPI tiles, recent clients, notifications, and where every common task starts.
Search, filters, statuses, and why the **View as client** button is sometimes unavailable.
The invite modal, the invitation lifecycle, and a handoff checklist that survives contact with a real client.
How commission accrues, what the ledger shows, and how to set up a payout wallet safely.
Working for clients
Inside a client workspace.
A delegated session puts you in the client's workspace with the scopes they granted, for one hour at a time.
Starting a session, reading the banner, what each scope unlocks, and how to leave cleanly.
The Manage Reseller panel from the client's side, and what changes when they flip a toggle.
Why secrets are permanently out of reach, and how to hand a connection back to the client.
Scope by scope
What you can configure.
One page per area, each written for the delegated session rather than for the client's own use. Links out to the full feature docs where you need more depth.
Building agents with a clear role and boundaries, and improving the prompts behind them.
What you can set up yourself, and the connection steps only the client can finish.
Choosing, adding and maintaining the reusable task packs an agent loads on demand.
Three different stores, three different scopes, and the care each one deserves.
Recurring agent work, time zones, and checking that a schedule still makes sense.
The one fixed rule
Credentials are never yours to see.
Every other permission is a toggle the client owns. This one is not a toggle at all.
Credentials & API keys
Permanently restricted. No toggle, no exception.
HARD LIMIT
Your client's API keys, OAuth tokens and service-account credentials are never visible to you, whatever else they have enabled. The restriction is enforced on the server, and it is not something a client, a reseller, or Actionist support can lift.
In practice this means one thing you should plan around: you can prepare almost everything in a client's workspace, but the moment a step needs their login or their secret, the app hands it back to them. See Credentials and API keys for how to make that handoff painless.
Ways to do it
There is more than one way to build this.
The mechanics in these docs are the same whichever route you take. Most partners end up mixing a few of these rather than picking one.
You already have clients. Add AI employees as a monthly service, run every client from one dashboard, and earn a cut on top of your own fee.
Start with one business at a time. No team and no code needed. Set it up yourself and grow at your own pace.
Get good at one type of business, then repeat it. Reuse the same agent setup, the same skills and the same schedules across similar clients.
Charge your own fee on top and earn every month a client stays. Your price, your margin, and the billing handled for you.
Bring in other agencies and builders and earn on the partners you introduce, so your income is not capped by your own hours.
Grow a local or online group and build a network under you. Turn a following into partners.
Who it is for
If any of these sound like you, you can do this.
You do not need to write code. Actionist drives a client's existing apps the way a person would, so the skill that matters is understanding how a business actually runs, not programming. The certification quiz tests exactly that. See [Getting started](/resellers/getting-started).
When you are running
Guidance and support.
Discovery, setup, testing, handoff, training and check-ins, anchored to what the product actually does.
A symptom index. What the message means, whose problem it is, and what to check first.
Eligibility, clients, access, credentials, billing, support and security, answered plainly.
Certified reseller program
## Become a Certified Reseller.
Apply in minutes, pass the certification, and start building your client roster.
No credential sharing, ever. Eight client-controlled scopes, enforced on the server.
Credentials and API keys carry a hard limit with no toggle and no exception.
Keep going
Next steps.
Start with the relationship model before anything else.
Apply and certify. Both happen inside the app.
The full agent reference, for when you are configuring a client's workspace.
How Actionist stores secrets, and why that design protects your clients.
# Client permissions and access
Source: https://learn.actionist.ai/resellers/permissions/index
Eight toggles the client owns, one restriction nobody can lift, and exactly what each permission unlocks inside their workspace.
THE CLIENT HOLDS THE DIAL
## Eight toggles they own. One line nobody crosses.
Every client decides what their reseller can see and change, toggle by toggle, and can change their mind at any time. Credentials are not on the list, because credentials are never on the list.
For the client
The Manage Reseller panel.
When a workspace is managed by a reseller, a **Manage Reseller** item appears in the client's Reseller sub-navigation. That panel is where all of this is decided.
They see who you are. The panel shows your company name, your contact person, a clickable email address, and the month you were certified.
They set the scope. Eight toggles, three of them marked SENSITIVE. Nothing is granted by assumption.
They can change it whenever. Saving sends only the toggles that actually changed, so flipping one off never quietly resets another.
A client who is not managed by anyone sees a single line instead: "Your workspace is not currently managed by a reseller." If a client tells you the panel is missing, that is usually because the relationship has not finished attaching yet. See [Onboarding a new client](/resellers/client-onboarding).
Try it
What each toggle actually unlocks.
Permissions are abstract until you see them as doors. Switch the toggles below to watch a client workspace open up. This is the real mapping the app uses.
Grant a permission, see what opens
Home
Agents
Onboarding
Impact
Apps
Skills
Memory
Files
Calendar
Settings
Marketplace
Learn
Support
Reseller
Projects
Chat History without Prompts & Instructions opens Home in view-only mode. You can read the conversation history, but the composer stays disabled.
Always open, no permission needed Always locked, whatever is granted
Two areas are locked in every delegated session regardless of what the client grants: the **Reseller** section itself, and **Projects**. You cannot use a client's workspace to manage your own reseller account, and the planning surface has no delegated permission defined yet.
The list
Eight permissions, in the order the client sees them.
Three carry a SENSITIVE marker. That marker is a prompt to think, not a block, and the client can still grant them.
Prompts & Instructions
Edit agent configuration, including system prompts and instructions on this workspace's agents.
On
Apps and MCP
Manage the Apps section, including tools, MCP servers, and connections that do not require credentials.
On
Skills
Install, enable, disable, or remove skills.
On
Agent Memories
View and modify what agents learned while working, including memories formed during customer interactions.
Off
Files SENSITIVE
Audit, replace, or remove proprietary documents, PDFs, and datasets the agents reference.
Off
Calendar & Schedules
View and edit scheduled agent runs, recurring jobs, and calendar-connected workflows.
On
Chat History SENSITIVE
Read the full conversation history between the client's team and their agents.
Off
Billing summary SENSITIVE
View aggregate plan usage. Card details and invoice documents are never included.
Off
Credentials & API keys HARD LIMIT
Server-enforced permanent restriction. There is no toggle for this row.
always off
The exact wording each client reads is longer than the summaries above. Two are worth quoting in full, because they draw lines that surprise people.
"Manage the Apps section, including tools, MCP servers, and app connections that don't require credentials. Installing credential-based apps, connecting OAuth apps, and disabling or modifying anything tied to API keys, OAuth tokens, or other secrets is always off-limits, regardless of this setting."
Read that last clause carefully. Granting this permission does not let you finish a connection that needs a login. Nothing does. See [Apps, tools and integrations](/resellers/apps).
Files: "Audit, replace, or remove proprietary documents, PDFs, and datasets your agents reference. Distinct from Memories, Files are the static source assets you uploaded."
Agent Memories: "View and modify ephemeral agent state, including memories formed during customer interactions."
They are genuinely different stores with different permissions. [Files, memories and chat history](/resellers/files-and-memory) explains why granting one does not imply the other, and why the Agent Memories permission does not open a memory editor.
"View aggregate plan usage. They never see your credit card or invoice PDFs."
That is enforced in the shape of the data itself, not by a filter. Every reseller-facing response about money is typed so that client billing details cannot be included. See [Revenue and payouts](/resellers/revenue).
Coming soon
An audit logs permission exists in the access model and helps open the Settings area, but there is no toggle for it in the client's panel today, so a client cannot currently grant it. Do not plan work around it.
Not a toggle
Credentials sit outside the whole system.
The banner above the toggle list tells every client the same thing: "Your reseller can only access the scopes enabled below · Credentials are always off-limits".
Credentials & API keys
Permanently restricted. No toggle, no exception.
HARD LIMIT
"Permanently restricted. No toggle, no exception. Your reseller can never see API keys, OAuth tokens, or service-account credentials, regardless of what's enabled above."
This is stronger than a permission set to off. Credentials are not a member of the permission model at all. They live in a separate restrictions list whose restricted value is a fixed constant, so there is no state the software can represent in which a reseller has credential access. [Credentials and API keys](/resellers/credentials) walks through the four layers that enforce it.
When it takes effect
Changing a permission mid-relationship.
Client flips a toggleNothing is sent yet. The change is local until they save.
Save changesOnly the toggles that actually changed are sent, so one revoke never clears another grant.
SavedA confirmation shows for a couple of seconds, then clears.
Your next sessionScopes are resolved when a session is created, so the change lands on your next one.
You do not have to leave and come back. The **Refresh permissions** button in the delegated session banner picks up the current grants without losing your place. It works by creating a fresh session behind the scenes, which is why the client's panel describes changes as taking effect on your next session.
If a client revokes a permission you were relying on, the affected area shows "Access restricted" rather than ending your session. Only an expired or deleted session ends the whole thing. See [View as client](/resellers/view-as-client).
What they see
The Manage Reseller panel, as the client sees it.
Managed Reseller
Your account is managed by
Halo Studio
Mira Santos[contact@halo.studio](mailto:contact@halo.studio)Certified Reseller since Mar 2026
Your reseller can only access the scopes enabled below · Credentials are always off-limits
What can your reseller access?
Prompts & Instructions
Apps and MCP
Skills
Agent Memories
Files SENSITIVE
Calendar & Schedules
Chat History SENSITIVE
Billing summary SENSITIVE
Credentials & API keys
HARD LIMITalways off
Save changes
Ending it
A managed workspace stays managed.
The panel is direct about this, and you should be too when you set expectations with a prospective client. The exact wording they read is: "This workspace is permanently managed by reseller. To disconnect, you'll need to cancel your current subscription and create a new workspace."
What a client can do at any time
Turn any of the eight permissions off, immediately and without asking you.
Reduce you to no access at all while keeping their workspace running normally.
Contact you directly from the panel using the email shown there.
What needs more than a toggle
Detaching the workspace from your reseller account. There is no self-service button for it.
Force-disconnecting a relationship. That is an Actionist administrative action.
Granting credential access. It is not representable, by anyone, ever.
Because a client cannot detach themselves, be straightforward at the start of a relationship about what you will and will not touch. A client who understands the model tends to grant more, not less.
In practice
Ask for what the work needs.
A useful pattern is to start narrow, do visible work, and ask for more only when a specific task requires it.
Prompts & Instructions, plus Apps and MCP, plus Skills. Enough to create agents, wire tools and install skill packs. Most setup work fits here.
Add Calendar & Schedules so you can adjust recurring work, and Chat History if the client wants you diagnosing conversations rather than guessing.
Add Files when you need to fix the source documents an agent reads, and Agent Memories when an agent has learned something wrong.
Agency owner
New client, first week. Asks only for Prompts & Instructions and Apps and MCP, builds three agents, and sends the client a list of the four app connections they need to authorise. Nothing sensitive requested, nothing to negotiate.
fastest path to live
Support engineer
A client reports an agent replying oddly. Asks for Chat History for the investigation, reads the transcript, corrects the instructions, and tells the client they can switch it back off.
scoped to the task
Onboarding lead
Client's agent keeps citing an outdated price list. Asks for Files, replaces the source document, confirms the change, and summarises exactly which file was replaced.
one file, one message
Reading the room
States and controls.
| What you see | Why | What to do next |
| -------------------------------------------------------------- | ------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------- |
| A section shows "Access restricted" | The client has not granted that permission, or revoked it since your session started | Click **Refresh permissions** in the banner. If it is still locked, ask the client to enable it |
| "This page is not available while viewing a client workspace." | The Reseller or Projects area, which no permission unlocks | Nothing. Exit the session to reach your own reseller dashboard |
| Home loads but you cannot type a message | Chat History is granted, Prompts & Instructions is not | Ask for Prompts & Instructions if you need to run the agent, not just read it |
| An app's Connect button is greyed out with a lock | Always the case in a delegated session, whatever is granted | Ask the client to connect that app themselves. See [Apps](/resellers/apps) |
| A client says the Manage Reseller panel is missing | Their workspace has not finished attaching yet | Check the Clients table. See [Onboarding a new client](/resellers/client-onboarding) |
A revoked permission degrades one area. It does not end your session or log you out. If you are suddenly returned to your own dashboard, that is session expiry instead, which is covered in [Troubleshooting](/resellers/troubleshooting).
Permissioned by design
## Access your clients can reason about.
Eight toggles they control, one restriction nobody controls, and no shared passwords anywhere in the model.
Enforced on the server, not in the interface. Revocable by the client at any moment.
Eight toggles · Three marked sensitive · Credentials outside the model entirely.
Keep going
Next steps.
How a session actually starts, what the banner tells you, and how to leave cleanly.
The four layers that make the hard limit real, and how to hand a connection back.
Why three permissions cover three genuinely different stores.
Setting expectations early so permission requests never feel like an imposition.
# Revenue and payouts
Source: https://learn.actionist.ai/resellers/revenue/index
How your 25% commission accrues, what the ledger shows, and how to set up a payout wallet without losing money to a typo.
GET PAID
## Every client payment, tracked to the cent. Paid out in USDC, on your terms.
Your flat-percentage cut on every Stripe payment from your clients. Pending balances are settled in monthly payout batches. This page covers how that commission accrues, what every ledger row and status actually means, and how to add a payout wallet without losing funds to a single mistyped character.
The mechanics
How commission works.
Five steps happen between a client's invoice and money in your wallet. Nothing here is manual on your side.
Client paysA client's plan renews and Stripe processes that invoice on their workspace's billing.
Ledger entry createdActionist writes a new row to your ledger for that payment. Nothing is aggregated or batched at this step.
Commission snapshotted at 25%The programme's current rate is captured onto the row itself, not looked up again later.
Balance goes PendingYour cut sits in Pending until the next payout batch runs.
Settles in a monthly batchPending rows move to Paid together, once a month, in USDC.
Flat, not tiered. 25% is a hardcoded literal in the client contract. There is no ladder that changes with volume, and the ledger's own column header spells it out: "Your cut (25%)".
Snapshotted, not recalculated. Each row keeps the rate that applied when it was created. If the programme rate ever changes, your historical rows are unaffected.
Reversals, never edits. A refunded or disputed client payment adds a new row pointing back at the original entry. The original row is never rewritten or deleted.
**Worked example.** A client on the Pro plan renews for \$122.00 through Stripe. Actionist writes one ledger row for that invoice, snapshots the current 25% rate onto it, and calculates \$122.00 × 25% = **\$30.50**. That \$30.50 is your cut. It sits in Pending until the next monthly batch runs, then moves to Paid, untouched by anything that happens to the programme rate afterward.
Stretched over a full cycle, that one row looks like this.
| Point in time | What's true of that \$30.50 row |
| ------------------------------------- | ---------------------------------------------------------------------- |
| The day the invoice is paid | Ledger row created, Status: Pending. |
| Every day after, until the next batch | Still Pending. Counted in your Pending balance tile. |
| The day the monthly batch runs | Status flips to Paid, and it's included in that batch's USDC transfer. |
| After the batch | Counted in Paid to date. No longer part of your Pending balance. |
Multiply that one row by every client you onboard, and the four tiles in the next section are just this table, summed.
Signature exhibit
Your revenue at a glance.
Four tiles summarize the account. The ledger underneath is where every one of those numbers is actually earned, row by row.
If the backend has not computed a next payout date yet, the Next payout tile renders "—" instead of a countdown. See Payout timing below.
reseller/revenue · ledger
Halo Studio LLCAugust invoice · Pro\$30.50
Acme Inc.August invoice\$18.75
Nova RoboticsAugust invoice · Starter\$12.25
Bright Path Co.August invoice · Pro\$9.40
PaidPendingUSDC on Base
The one status to flag
When a commission is blocked.
A row marked Pending (not payable) has been accrued correctly, but Actionist has blocked it from moving into a payout batch. The row does not show why. There is no toggle, no form, and no setting on your side that changes this.
The invoice month shown in the row's Description column.
The amount shown in Your cut (25%), so support can find the exact row.
Support can see the reason behind the block even though you can't. There's no form on this page that will surface it for you, so don't go looking for one.
A block applies to that one row, tied to one client and one invoice. It doesn't touch commission from your other clients, and it doesn't affect your ability to add clients, run delegated sessions, or use anything else on your dashboard.
Refunds and disputes
Reversals.
When a client's payment is refunded or disputed after your commission has already accrued, the ledger does not touch the original row.
A new row, not an edit. The refund or dispute produces a separate reversal row that points back at the original ledger entry. The original stays exactly as it was, with the same client, description, and amount it always had.
Rates stay put. Because commission is snapshotted per row, a reversal that appears after a programme rate change still nets out against the rate the original row actually used, not today's rate.
Nothing is deleted. Your ledger is a complete history. A reversed payment leaves a visible trail of two rows rather than one row that quietly disappears.
If a reversal lands after the original row has already been paid out, that's a support conversation. Reach out the same way you would for a blocked commission: [partners@actionist.ai](mailto:partners@actionist.ai).
**Worked example.** The Pro plan row from the earlier example earned you \$30.50 in commission on a \$122.00 client payment. Two weeks later, the client disputes that charge with their card issuer and Stripe refunds it. Actionist doesn't delete or edit your original \$30.50 row. It adds a second row that points back at the original, netting your commission on that invoice back to zero. Your ledger still shows both rows, so the history stays complete.
When money moves
Payout timing.
Pending balances settle in monthly payout batches. Everything sitting in Pending on the day a batch runs moves to Paid together, in USDC, to the wallet you have configured.
For the specific timing of your next batch, look at the Next payout tile on the Revenue page rather than assuming a fixed day. It counts down in days and names the payout network, for example "in 12 days · USDC on Base."
The date behind the Next payout tile is an estimate, not a guarantee. Treat it as a planning signal, and don't commit to a client on a specific payout date based on it. If the tile shows "—", no next-payout date has been computed yet, check back later rather than assuming something is wrong.
If a client asks when you're getting paid on their account, point to the fact that payouts run monthly rather than quoting a day from the Next payout tile. The tile is there for your own planning, not as a commitment you pass along.
Omar · Agency owner
Checks the Next payout tile once a week rather than daily. The countdown only matters once it's down to a handful of days, so a weekly glance is enough to plan around.
one habit, once a week
June · Solo consultant
Skims the ledger for any Pending (not payable) row right after each client's invoice date, since that's the earliest point a block would show up, and emails support the same day if one appears.
checked right after invoicing
Your ledger and a client's own billing history are two different views of the same underlying payment. Yours shows commission, theirs shows their invoice. See Billing for what a client sees on their side.
Signature exhibit
Setting up your payout wallet.
Payouts move on-chain, in USDC, and on-chain transfers cannot be undone. The flow is two separate steps on purpose: submit an address, then retype and confirm it before it goes live.
On the Revenue page, the payout method card shows your current state. Click **Add wallet** if none is configured, or **Change wallet** to replace an active one. If support has disabled payouts on your account, this becomes a non-interactive **Disabled** button and the flow below does not apply, contact support instead.
The modal opens with an eyebrow reading "Irreversible · Add wallet" or "Irreversible · Change wallet" (or "Verify · Confirm wallet" if you're returning to confirm one already submitted), and a title to match: "Add your payout wallet", "Change your payout wallet", or "Confirm your payout wallet". The intro line is direct: "Crypto payouts are final and on-chain. Once a payout transaction is broadcast, Actionist cannot reverse it, recall it, or recover funds." Below that: "If the address is wrong by a single character, your funds are lost forever."
Choose from Base (USDC), Ethereum (USDC), Polygon (USDC), or Arbitrum (USDC). Base is the default, and it's the network Actionist recommends unless you have a specific reason to use another. The Token symbol field is read-only, it always reads USDC, and no control on the modal changes it.
Paste your full receiving address: 42 characters, starting with `0x`, followed by 40 hexadecimal characters. Help text tracks it as you go: "Paste your full receiving address (42 characters, starts with 0x)." before you start, "Format looks valid. Confirm below by retyping or pasting again." once it matches the pattern, or "That doesn't look like a valid Base address. Expected 0x followed by 40 hex characters." if it doesn't. The modal only checks the format, so a hardware wallet address or a multisig address works exactly like any other, as long as it's a valid address on the network you picked.
You must check all three before submitting: that you verified this is a USDC address on the Base network and not another chain, that an incorrect address cannot be recovered and Actionist is not liable, and that you control this wallet and it is not a shared or guessed exchange address.
Click **Save wallet address** (or **Replace wallet address** if you're changing an existing one). A toast confirms "Wallet submitted. Awaiting confirmation." The payout method card now shows "Pending: `{{addr}}` (awaiting confirmation)" instead of an active wallet.
Submitting doesn't finish the flow, it only stages the address. A second step asks you to retype the pending address exactly. This field doesn't give you live mismatch feedback as you type, it holds at "Re-paste to confirm, we compare character-by-character." and the **Confirm wallet** button stays disabled until what you typed matches character for character, at which point it resolves to "Addresses match." (or "Addresses do not match." if it doesn't).
Click **Confirm wallet**. A toast confirms "Payout wallet confirmed." and the card switches to its active state: the first six characters of the address, an ellipsis, the last four characters, and "· receiving address on file" underneath, with "Confirmed `{{date}}`" as the secondary line.
**Changing an existing wallet** runs through the exact same eight steps, with "Change wallet" and "Change your payout wallet" in place of "Add wallet" and "Add your payout wallet". A confirmed wallet stays active until you complete both the submit step and the retype-and-confirm step for a replacement, there's no state where an old and new address are both live at once.
Add your payout wallet
Irreversible · Add wallet
Crypto payouts are final and on-chain. Once a payout transaction is broadcast, Actionist cannot reverse it, recall it, or recover funds.
Only use a USDC-compatible address on the Base network. Sending to the wrong chain destroys the payout.
Do not use a centralized exchange deposit address unless it explicitly supports USDC on Base.
Triple-check the first 6 and last 4 characters. Clipboard hijackers swap addresses silently.
Actionist staff will never ask for your seed phrase or for a test payment.
Network
Base (USDC)
Token symbol
USDC
Receiving address
0x7a3Fb92c...pasting
Format looks valid. Confirm below by retyping or pasting again.
I verified this is a USDC address on the Base network, not another chain.
I understand an incorrect address cannot be recovered and Actionist is not liable.
I control this wallet. It is not a shared or guessed exchange address.
Save wallet address
Once you click Confirm wallet, the address is live and the next payout batch will send USDC to it on Base by default. Actionist cannot reverse a broadcast payout, recall it, or recover funds sent to the wrong address or the wrong chain. Retype it carefully, and check the first six and last four characters before you confirm.
Actionist staff will never ask for your seed phrase, your private key, or a "test payment" to verify a wallet. Treat any message asking for one as a scam, and report it to [partners@actionist.ai](mailto:partners@actionist.ai) without following its instructions.
A payout confirmed is a payout sent. There's no undo button on-chain.
why the flow makes you retype the address before it goes live
Reading the card
Payout method states.
The payout method card only ever shows one of these at a time. The button next to it changes with the state.
| What the card shows | What it means | What to do |
| ---------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| "No wallet on file. Add an address to receive payouts" | You haven't configured a payout method yet. Your commission still accrues normally. | Click **Add wallet** and complete the two-step flow above. |
| "Pending: `{{addr}}` (awaiting confirmation)" | You submitted an address but haven't completed the retype-and-confirm step. | Click **Confirm wallet**, retype the address exactly, and confirm. |
| "`{{head}}`…`{{tail}}` · receiving address on file" | An address is confirmed and active. Payouts will go here. | Nothing, unless you're replacing it. Click **Change wallet** to do that. |
| "Payouts disabled by support." | Actionist support has disabled payouts on your account. | Contact [partners@actionist.ai](mailto:partners@actionist.ai). The button reads a non-interactive **Disabled**. |
| "Could not load your payout method." | The card failed to load. | Click **Retry**. |
| "Payout details are temporarily unavailable. `{{reason}}`" | A backend condition is temporarily blocking your payout details, with a short reason attached. | Read the reason shown. If it's unclear or persists, contact support. |
The address itself always renders the same way: the first six characters, an ellipsis, then the last four. A secondary line underneath reads "Confirmed `{{date}}`" once active, or "Updated `{{date}}`" after a change. The network line above it reads "`{{token}}` on `{{network}}`", which defaults to "USDC on Base".
No wallet configured
Commission still accrues normally, moving through Pending and eventually Paid.
The card reads "No wallet on file. Add an address to receive payouts".
Nothing moves in the next payout batch. There's nowhere for it to go yet.
Wallet confirmed
The card shows the first six and last four characters of your address.
"· receiving address on file" and "Confirmed `{{date}}`" sit underneath it.
The next monthly batch pays your Pending balance to that address, in USDC.
None of this changes how commission accrues. Whether or not you've configured a wallet, every client payment still writes its own row, still gets its 25% snapshotted, and still moves through Pending toward Paid. A wallet only determines where the money goes once it's ready to move.
When something doesn't load
States and controls.
The Revenue page has three independent panels: your KPI tiles, your payout method, and your ledger. Each fails and empties separately.
| Message | Where it appears | Next step |
| ---------------------------------------- | ---------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
| "Could not load revenue totals." | The four KPI tiles at the top of the page. | Click **Retry**. Your underlying commission data is unaffected, this is only a load failure. |
| "Could not load your payout method." | The payout method card. | Click **Retry**. Your wallet configuration, if any, is unaffected. |
| "Could not load the transaction ledger." | The ledger table. | Click **Retry**. |
| "No transactions yet." | The ledger table, when it loads successfully but is empty. | Nothing to do. This is the normal state before your first client payment. |
Each of these is a genuine load failure, not a sign that your commission or your wallet has been reset. Work through it in order before contacting support:
Click Retry on the panel that failed.
If it fails again, reload the whole page.
If it still fails, treat it the same way as a blocked commission and reach out to Actionist Support.
A failed load on one panel doesn't tell you anything about the other two. It's normal for your KPI tiles to load fine while the ledger is still spinning, or the other way around.
25% flat, every client
## Get your wallet set up once. Get paid every month after.
Add a payout wallet, keep an eye on the ledger, and let the monthly batch do the rest.
25% flat commission, snapshotted per row, never recalculated after the fact.
Reversals are new rows, not edits · payouts settle monthly in USDC · nobody at Actionist will ever ask for your seed phrase.
Keep going
Next steps.
Where these ledger rows come from: the clients whose invoices generate your commission.
What to check before opening a support case, and what's a support case from the start.
Billing, access, and payout questions answered plainly.
How billing works on the client side of the workspace you're earning commission from.
# Calendar and schedules
Source: https://learn.actionist.ai/resellers/schedules/index
Review and adjust the recurring work a client's agents do, and get the time zones right when your client is in another country.
RECURRING WORK
## Their agents run on a clock. Make sure it's the right one.
With **Calendar & Schedules** granted, you can see and adjust the recurring jobs a client's agents run, run one on demand, and untangle a run that looks like it never happened. Almost every mistake here traces back to one thing: a time zone nobody checked.
The permission
One toggle, two surfaces.
The client grants this from their **Manage Reseller** panel as **"Allow reseller to manage Calendar & Schedules"**, described to them as: "View and edit scheduled agent runs, recurring jobs, and calendar-connected workflows on this workspace." In the scope enum it is `calendar_and_schedules`.
The top-level Calendar tab. A workspace-wide view across every agent on that client's account, unlocked by this scope alone.
The Schedule tab in Agent Studio. The recurring-run settings for one specific agent, opened from inside that agent's record.
The Schedule tab has a second requirement. Agent Studio itself only opens with `prompts_and_instructions`, so a session holding `calendar_and_schedules` alone reaches the top-level Calendar tab but not the per-agent Schedule tab. Without `prompts_and_instructions`, Agent Studio renders as a disabled form and every tab inside it, Schedule included, is unreachable.
Without this scope, both surfaces show the same locked panel: **"Access restricted"**, then "The client hasn't granted access to Calendar & Schedules in this delegated session." An agent asked to touch its own schedule during that session refuses the same way: "Permission denied: reseller delegated session does not include calendar\_and\_schedules access."
This page is the reseller-specific view of scheduling. For the full mechanics of the calendar and schedule builder outside a delegated session, see [Schedules](/Folders/schedules).
Inside the [Reseller mode banner](/resellers/view-as-client), this permission shows up as a short **Calendar** chip, alongside Prompts, Tools, Skills, Memories, Files, Chat History and Billing. If **Calendar** is missing from that list, this permission was not granted for the session you are in, whatever the Manage Reseller panel shows on the client's side.
The building blocks
What a schedule is made of.
Every schedule targets one agent task, and is either one-time or recurring. Recurring schedules add a frequency, an interval, and a stop rule.
| Property | What it sets |
| -------------------------- | ------------------------------------------------------------------------------------------------ |
| Target | The agent task this schedule fires. Every schedule belongs to exactly one agent. |
| Type | One-time, or recurring. |
| Frequency (recurring only) | One of six: Minutely, Hourly, Daily, Weekly, Monthly, Yearly. |
| Interval | A multiplier from 1 to 365 applied to the frequency, for example every 2 weeks or every 90 days. |
| Weekly detail | Day-of-week chips, for schedules on a Weekly frequency. |
| Monthly detail | A single day-of-month, for schedules on a Monthly frequency. |
| Stop rule | Never, on a specific date, or after a set number of occurrences. |
A one-time schedule fires once, at the date and time you set, and is done. A recurring schedule keeps firing according to its frequency and interval until its stop rule ends it.
Minutely, Hourly, Daily, Weekly, Monthly, and Yearly all take the same interval field, a multiplier from 1 to 365. An interval of 1 means every unit, an interval of 3 on a Daily frequency means every three days.
A Weekly schedule needs at least one day-of-week chip selected, and can select several, so "every Tuesday and Thursday" is one schedule, not two. A Monthly schedule takes a single day-of-month instead.
**Never** keeps a recurring schedule running indefinitely. **On date** ends it after a specific calendar date. **After a number of occurrences** ends it once it has fired that many times, whichever comes first if combined with other settings.
Change a single occurrence of a recurring schedule and you are prompted for scope before the edit applies: **this occurrence**, **this and following**, or **all occurrences**. Picking the wrong one is the easiest way to silently reshape a series a client is depending on, so read the prompt before confirming.
Read this section twice
Every schedule remembers its own time zone.
Time zone is not an agent setting and there is no working-hours field anywhere. It lives on the schedule, and only there. A schedule fires from the zone stored on it, whoever happens to be looking at it, and whatever zone that person is sitting in.
Schedule · Weekly client report
Target
Maya · Send weekly report
Frequency
Weekly, every 1 week, on Monday
Time zone
America/New\_York
Runs at 9:00 AM in America/New\_York. That's 2:00 PM in your time zone (Europe/London).
A schedule's time zone defaults to whatever system time zone **you** are on when you create it, not the client's. If you open a delegated session and build a schedule for a client on the other side of the world without touching the time zone field, it will fire on your clock, not theirs. This is the single most likely mistake a reseller makes on this page, and it is entirely avoidable: always set the zone explicitly.
Setting a client schedule correctly, from another country:
From the Calendar tab or the agent's Schedule tab, inside a delegated session for that client's workspace.
It will already show a value, almost always your own system zone if this is a new schedule. Do not assume it matches the client.
Change it explicitly. Ask the client if you are not certain, rather than guessing from their country.
When the schedule's zone differs from yours, the amber line spells out both times side by side. Confirm the client-facing time is the one you meant to set.
After the first run, the run history confirms the actual fire time. That is your proof the zone was set correctly, not just entered correctly.
On demand
Running one now.
**Run now** lives on the Schedule tab inside Agent Studio, next to the specific schedule you are looking at. It is not available from the top-level Calendar list, so testing a schedule means opening the agent it belongs to.
| State | What you see |
| ------------------ | ---------------------------------------------------------------------------- |
| Schedule enabled | **Run now** is clickable |
| Schedule disabled | **Run now** is greyed out, tooltip "Enable this schedule to run it manually" |
| Run starts | Toast "Scheduled run started" |
| Run fails to start | Toast "Could not start this scheduled run" |
**Run now** is a real run, not a preview or a dry run. It executes the agent task exactly as the schedule would, with every action it takes actually happening. Use it to confirm a schedule fires correctly, not as a safe way to inspect one.
A reseller holding `calendar_and_schedules` can click **Run now** in a delegated session the same way the client can in their own workspace.
Two switches, one checker
Enabling, disabling, and conflicts.
There are two independent switches that stop a schedule from running, and one checker that stops two schedules from colliding.
The per-schedule switch. Disabling one schedule stops future occurrences from being computed. What happens to a run already in flight at the moment you flip it is not documented, so do not state one way or the other if asked.
The agent-level scheduling preference. One setting on the agent itself, whose hint reads "When disabled, all scheduled jobs for this agent are paused." Flipping this pauses every schedule that agent owns at once, without touching their individual settings.
Conflict checking runs live while you build a schedule, before you save it, and it is scoped to the agent. Two schedules for the **same** agent that overlap trigger a conflict banner and block the save. Two schedules for **different** agents can occupy the exact same slot with no warning at all, because each agent runs in its own lane.
The conflict window is based on the schedule's duration, not just its start time. A schedule with an under-set or missing duration can look free when it actually overlaps a real run, so a duration that is too short can hide a genuine clash rather than prevent one.
In practice
How resellers actually use this page.
Agency owner, new client abroad
Sets up a client's first weekly report schedule from a delegated session, catches that the time zone field is still on their own city, and changes it before saving. Checks back after the first run to confirm the fire time in the client's local clock.
the one habit that avoids most tickets
Support engineer, "it didn't run"
Opens View as client, works the four-step diagnostic below in order, finds the schedule enabled but the agent hosted on a machine that was asleep at the scheduled hour, and tells the client to move that agent to a cloud placement.
found on step three, most times
Account manager, monthly review
Opens the Calendar tab across a client's agents, uses Run now on a schedule that looked idle to confirm it still works, and tightens an interval that had been firing more often than the client actually needed.
one pass per client, no surprises
Diagnose in order
When a scheduled run looks stuck.
Work through these four checks in order. Most "it didn't run" reports resolve on the first two.
Check both switches: the schedule's own toggle, and the agent-level scheduling preference. Either one being off silently stops future runs.
No row for the expected time means the schedule never fired. A row that exists but shows no useful result means it fired, and the instructions themselves were the problem, not the schedule.
An agent hosted on someone's own machine only fires while that machine is awake and online. A machine that sleeps or shuts down stops every schedule tied to it. An agent on a cloud placement keeps firing regardless.
The schedule fires in its own stored zone, not yours and not necessarily the client's either. A run that "never happened" has often already happened, just not when someone expected.
A related but separate wrinkle: the Schedule tab inside Agent Studio is itself headed "Scheduled runs" in the interface, but it lists the configured schedules, not their execution history. For the history itself, go to **Agent Studio → Runs**. Each row there records its source, so a scheduled firing is distinguishable from one you started manually with **Run now**.
| What you see | Likely cause | What to check |
| ------------------------------------------------------ | ------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
| No row in **Agent Studio → Runs** at the expected time | The schedule never fired | Both enable switches, then the stored time zone against the expected local time |
| A row exists but the result is empty or wrong | It fired, the instructions or a tool call failed | The agent's Instructions and Soul, and any recent tool or connection change |
| It always fires hours off from expected | Time zone mismatch, most often defaulted to the creator's zone | The schedule's stored time zone, compared to the cross-zone warning line |
| A schedule silently stopped recurring | It hit its stop rule, or the agent-level preference was flipped off | The stop rule (On date or occurrence count), and the agent's scheduling preference |
| Save is blocked with a conflict banner | Another schedule on the **same agent** overlaps this one | The other schedule's time and duration, not just its start time |
For every other message you might hit in a delegated session, and whose problem it is, see [Troubleshooting](/resellers/troubleshooting).
Not a schedule feature
What actually pauses a run for a human.
Approvals have nothing to do with schedules. Two separate things can stop an unattended run and wait for a person, and neither one lives on the Calendar or Schedule tab.
The agent's approval mode
If a scheduled run triggers a tool call the agent's approval mode requires sign-off for, it waits on that approval exactly as it would in a live chat.
This is set per agent, not per schedule, so it applies the same way whether the run started on a timer or with **Run now**.
A blocker
An agent files a blocker when an unattended run hits something only a person can fix, such as a missing credential or a broken connection.
Blockers surface under **Needs attention**. In a live chat, the same situation just prompts the agent to ask you directly, since you are already there.
Event-driven automation is a different feature entirely, called **Triggers**, and it is not covered here. For the full story on approval modes and blockers, see [Oversight](/Folders/oversight). For the event-driven side of automation, see [Triggers](/Folders/reactions).
If a client asks why their agent "waited for someone" overnight, the schedule itself is almost never the cause. Check the agent's approval mode first, then **Needs attention** for an open blocker, before you go anywhere near the Calendar tab.
Calendar and schedules
## Recurring work, set to the right clock.
One scope, two surfaces, and one field that decides whether a client's agents run on time or on yours.
Scoped by one permission, enforced on the server, checked for conflicts before it ever saves.
Stored zone decides the fire time · Run now is a real run · Approvals and blockers are separate from schedules.
Keep going
Next steps.
The full builder reference: recurrence, stop rules, and the calendar view outside a delegated session.
Approval modes and blockers in full, including what counts as a risky tool call.
What else changes on an agent record once you are inside a client workspace.
Every message you can hit in a session, what it means, and whose problem it is.
# Skills
Source: https://learn.actionist.ai/resellers/skills/index
Reusable task packs an agent loads on demand. How to choose, add, review and maintain them for a client when the skills permission is granted.
REUSABLE PLAYBOOKS
## A skill is a playbook an agent reaches for on its own. You stock the shelf, the agent picks the book.
With the `skills` permission granted, you can install, upload, enable, disable and remove skills for a client's workspace from the Apps section. This page covers how to pick the right ones, add them safely, wire up any secret they need, and keep a live client's skill set healthy. It also covers the single most confusing part of this permission: what `skills` unlocks on its own, and what it silently doesn't.
The basics
What a skill is, quickly.
A skill is a portable behaviour pack an agent loads at runtime. Physically it's a folder containing a `SKILL.md` file: YAML frontmatter on top, a Markdown body underneath holding the actual instructions. Nobody invokes a skill by hand. The agent reads the incoming request, matches it against every enabled skill's trigger phrases, and loads whichever playbook wins. That matching happens the same way in chat, inside a workflow, and on an unattended schedule or trigger, so a skill you set up once keeps firing everywhere the agent runs.
Because a skill is just a folder, it isn't tied to the workspace it was built in. A skill you wrote for one client's recurring task can be uploaded as an archive into a different client's workspace, provided that client has actually granted you `skills`.
skills/refund-request-handler/SKILL.md
name:refund-request-handler
title:Refund Request Handler
description:Confirms an order, checks refund eligibility, then issues the refund in Stripe.
version:1.3.0
triggers:"process a refund for order", "customer wants their money back"
credentials:stripe\_api\_key
context:fork
# Refund Request Handler
1.Confirm the order number and the stated reason before touching Stripe.
A few frontmatter fields matter more than the rest once you're the one adding skills for a client:
`name` and `title`. The internal identifier and the human-readable label you see in the catalogue and in an agent's Skills tab.
`description` and `version`. What the skill is for, and which build of it is currently installed.
`triggers`. The natural-language phrases that make an agent reach for this skill instead of another one.
`credentials`. Any secret the skill declares it needs. Covered in full further down this page.
`context`. `inline` runs the skill in the main conversation. `fork` runs it in a sub-agent with its own context budget, useful for a long or noisy task you don't want cluttering the main chat.
What makes a skill worth adding is that it fires the same way everywhere. Once a skill is enabled and an agent is watching for its triggers, a chat message, a workflow step, and an unattended schedule run all match against the same phrases the same way. You aren't configuring three separate behaviours for three surfaces, you're configuring one.
This page is about choosing, adding and maintaining skills in a delegated session, not the field-by-field mechanics of authoring one. For the full reference on `SKILL.md`, triggers, and everything else a skill can declare, see [Skills](/Folders/skills).
Keep that page open alongside this one if you're drafting a new skill's frontmatter for the first time. It's the place to check a field you're unsure about before you save.
Read this before you touch anything
One permission runs the shelf. A second runs the agent.
`skills` unlocks the Skills sub-page under **Apps**, plus a Skills tab inside **Agent Studio**. Those are two different surfaces, and only one of them actually responds to your clicks with `skills` alone.
The client sees this as a single toggle: "Allow reseller to manage Skills", described to them as "Install, enable, disable, or remove skills from the skill marketplace." That "skill marketplace" wording is older client-facing copy. The Apps section itself calls the same collection the catalogue today, which is the term used throughout this page.
With Skills alone
Browse and search the catalogue from Apps → Skills.
Install a skill, or upload one as an archive.
Enable or disable a skill at the workspace level.
Remove a skill from the workspace entirely.
Author a new skill conversationally with the built-in skill creator.
Needs Agents too
Turn a skill on or off for one specific agent, in that agent's Skills tab.
Open the credential binding drawer for a skill that needs a secret.
Any other control inside Agent Studio, for any tab, not just Skills.
**`skills` alone does not give you working per-agent controls.** It gives you the workspace-level skill set: install, upload, enable, disable, remove, all from Apps. But the per-agent Skills tab lives inside **Agent Studio**, and the whole studio is wrapped in a disabled fieldset unless the session also holds `prompts_and_instructions`. With `skills` alone, you can open an agent's Skills tab and *see* which skills it has enabled, but every control on it is disabled. You cannot toggle a skill on or off for that agent, and you cannot open its credential binding drawer. This is the single most confusing thing on this page, and it catches people who assume "manage Skills" means the whole skills story end to end.
In practice: with only `skills` granted, you're stocking and maintaining the shelf. Whether a given agent actually picks a skill up, and whether it's wired to the secret it needs, is a decision made from Agent Studio, which needs `prompts_and_instructions` as well. If a client wants you fully hands-on with skills, tell them both toggles need to be on, not just the one labelled Skills.
It's worth saying plainly why this split exists rather than treating it as an inconsistency. A skill installed at the workspace level is still just sitting on the shelf. Deciding which agent picks it up, and whether it's allowed to touch a paid API on the client's behalf, is closer to editing that agent's actual configuration than it is to app management, which is exactly the boundary `prompts_and_instructions` already draws for prompts and instructions. Skills sits on both sides of that line, which is why it needs a partner scope to be fully usable.
The same shape shows up one level up, too. Apps itself unlocks with either `tools_and_integrations` or `skills`, so a client can grant you access to install and enable skills without handing over anything else in Apps. That's a deliberate, narrow grant, and the Agent Studio lock is the same idea applied one layer deeper.
Sourcing
Where skills come from.
Every skill in a workspace arrived by one of four routes. All four land in the same place: the workspace's own skill catalogue, visible from Apps → Skills.
BundledShips with the app by default. Nothing to install.
Catalogue installPulled in from the shared skill catalogue.
Uploaded archiveA packaged skill folder, dropped in from outside Actionist.
Skill creatorAuthored conversationally, by describing what you want to an agent.
Workspace catalogueWhere every skill lives once it's in, regardless of how it got there.
"Catalogue install" above means browsing the shared catalogue and pulling a single skill into this specific workspace. Once it's in, it sits in that workspace's own catalogue view alongside anything that arrived by the other three routes, that's the "Workspace catalogue" node the pipe ends on. Two different things share the word catalogue here: the shared source you install from, and the workspace's own list of what's currently installed.
With `skills` granted, you can drive three of those four routes yourself: installing from the catalogue, uploading an archive, and running the conversational skill creator to author something new. The fourth, bundled skills, needs no action from anyone.
**Publishing to the community catalogue is off, categorically, in a delegated session.** This applies to every kind of listing, whether you authored it yourself in that session or are trying to push up something built earlier. Authoring and publishing on someone else's behalf isn't something the reseller programme allows. You can build a skill for a client and use it in their workspace. You cannot put it out for other workspaces to install.
Once a skill lands in the workspace catalogue, Apps → Skills treats it the same regardless of which of the four routes brought it in. There's no separate "uploaded" or "bundled" tab to check later, install, enable, disable and remove all work identically no matter where the skill originally came from.
Walkthrough
Adding a skill for a client.
Everything up to the last step happens with `skills` alone. The last step needs `prompts_and_instructions` too, so read it as a checkpoint rather than something you can always finish yourself.
A session holding only `skills` lands directly on the Skills sub-page, not on Browse. The Apps container itself opens with either `tools_and_integrations` or `skills`, whichever the session has.
Look for a skill that matches a task the client actually does repeatedly. If nothing in the catalogue fits and you have a packaged skill folder, upload it as an archive instead.
Installing adds the skill to the workspace. Enabling makes it available for an agent to load the next time a trigger phrase matches. Both steps happen from Apps, and both work with `skills` alone.
Open that agent's Skills tab in Agent Studio. If the session also holds `prompts_and_instructions`, flip the per-agent toggle on there. If it doesn't, the tab is view-only for you, so ask the client to flip it, or confirm with them that both scopes should be granted going forward.
Install for what the client's team actually does over and over, not for everything that looks useful. A workspace full of enabled skills gives an agent more trigger phrases to weigh against every incoming request, which makes it slower to find the right one and easier to mismatch. Start from a real recurring task, add the one skill that covers it, and confirm it fires correctly before you add the next.
If you're not sure a task is recurring yet, wait. A skill installed for a one-off request is one more thing to review later, for no ongoing benefit.
Priya · Agency ops lead
A client's support team keeps asking their agent to handle the same kind of refund request by hand. Priya installs a refund-handling skill from the catalogue, enables it workspace wide, then confirms with the client that the agent should also have it turned on directly.
setup in about 10 minutes
Priya · weekly reporting
A different client wants a weekly summary sent every Friday. Priya uploads a skill built for a previous client's near-identical reporting format, enables it, and leaves the per-agent assignment and any credential binding to the client's admin since this session only holds `skills`.
upload in under 5 minutes
Priya · quarterly cleanup
Reviewing a long-running client's Apps → Skills list, Priya finds two skills nobody has referenced in months. She disables both rather than removing them straight away, in case they're still bound somewhere she hasn't checked, then removes them for good once a few weeks pass with no complaints.
review in about 15 minutes
Credentials
Skills that need a secret.
Some skills declare a `credentials` requirement in their frontmatter, the refund-handling example above needed `stripe_api_key`. That requirement has to be satisfied before the skill can actually run.
A skill's credential requirement is wired up in a **binding drawer**, opened from that skill's row in an agent's Skills tab, which puts it squarely inside the two-scope catch above. To open it at all, the session needs both `skills` and `prompts_and_instructions`. Once it's open:
You can reference an existing stored credential. Pick one already saved in the client's Credentials Vault and bind it to the skill, without ever seeing the plaintext value.
You cannot create or reveal a secret. Pasting in a brand-new value, or viewing what's already stored, is permanently off-limits, no matter what else is enabled.
If a skill needs a secret the client hasn't stored yet, the honest answer is to ask them to add it to the Credentials Vault first. Once it exists, you can bind it. See [Credentials and API keys](/resellers/credentials) for the full boundary, including why there's no reveal button anywhere in a delegated session.
Check whether the session also holds `prompts_and_instructions`. The binding drawer lives inside an agent's Skills tab in Agent Studio, and that whole studio is disabled without it. `skills` alone gets you to the workspace-level install and enable, not the drawer.
No. Creating or revealing a secret is off-limits regardless of what else is enabled, including for testing. Bind an existing stored credential, or ask the client to add the one you need.
That's a conversation for the client, not a workaround on your end. Point them at [Credentials and API keys](/resellers/credentials) so they know what the vault expects, then bind it once it's stored.
No. Rotating a stored credential doesn't touch existing bindings. The skill picks up the new secret automatically the next time it resolves the credential, so a rotation on the client's side doesn't require you to redo the binding.
None of this is a workaround to route around. It's the same hard limit that applies everywhere else in a delegated session: reference what's stored, never see or set the value underneath it.
Keeping the shelf healthy
Maintaining them.
Enable, disable and remove sound like three flavours of the same action. They aren't. Each one behaves differently against a run that's already using the skill, and picking the wrong one on a client that's mid-workday is the fastest way to turn a routine cleanup into a support ticket.
Enable. Turns availability back on for the next matching trigger. The fastest way to undo a disable.
Disable. Pauses future loads without touching a run already in progress. The safe default when you're unsure.
Remove. Deletes the skill folder outright. Undoing it means reinstalling, not flipping a switch back.
| Action | Effect on a live agent | Reversible |
| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------ |
| Enable | Makes the skill available to load the next time a trigger phrase matches. No effect on runs already in progress. | Yes, disable it whenever you like |
| Disable | Does not interrupt a run that has already loaded the skill. It only stops the agent from loading it again on the next trigger match. | Yes, re-enable it whenever you like |
| Remove (uninstall) | Deletes the skill folder from the workspace entirely. An agent still referencing it simply stops matching, there's nothing left to load. | Only by reinstalling it from scratch |
Read that middle row twice if you're about to disable something on a client that's mid-workday. Disabling is the gentle option: nothing currently running gets cut off, it just won't be picked up again. Removing is the blunt one: the skill is gone, and any agent that used to reach for it quietly stops reaching for anything at all, with no error to flag it.
Changing a client's skill set while their team is actively working on it can produce confusing behaviour even when nothing technically breaks. A disabled skill still finishes its current run, but the very next request that would have matched it now falls through to something else, or to nothing. If you're removing a skill rather than just disabling it, do it outside the client's active hours when you can, or tell them beforehand so a sudden change in an agent's behaviour doesn't read as a bug.
When you're not sure which action is appropriate, disable first. It costs nothing to reverse, it never interrupts a run already underway, and it buys you time to confirm with the client before you commit to something that needs a fresh install to undo. Save removal for a skill you're confident the client's workspace genuinely doesn't need anymore.
That single habit, disable before you remove, covers most of the situations that would otherwise turn into an awkward conversation with a client mid-workday.
Skills, for a client workspace
## Stock the shelf. Let the client wire the last mile.
Install, enable and maintain from Apps with `skills` alone. Per-agent assignment and credential binding need `prompts_and_instructions` alongside it.
Publishing to the community catalogue is never available in a delegated session, for any listing.
Credential binding references stored secrets only, and never reveals or creates one.
Keep going
Next steps.
The full reference: SKILL.md fields, trigger design, and how the skill creator works.
Where the per-agent Skills tab lives, and what else needs prompts and instructions.
The Apps section skills sits inside, and how it splits from tools and MCP servers.
Why binding references a stored secret instead of ever showing you one.
# Troubleshooting common reseller issues
Source: https://learn.actionist.ai/resellers/troubleshooting/index
A symptom index for the reseller surface. What each message means, what to check first, and whether it is yours, the client's, or one for Actionist Support.
SYMPTOM INDEX
## You have the exact message on screen. Here is what it means.
This page is a lookup table, not a tutorial. Find the string, read what it means, and check who owns the fix, you, the client, or Actionist Support.
Read this first
How to use this page.
Find the exact string you are looking at, read what it means, and check the chip on the right. Every row below carries one of three chips telling you who actually resolves it.
You
Something on your side of the reseller surface: a form field, a filter, a retry button, a setting you can change yourself.
Client
Only the client can grant it, connect it, or enable it, from inside their own workspace.
Support
Nothing in the interface moves this further, for either of you. Email [partners@actionist.ai](mailto:partners@actionist.ai).
Standing advice before you escalate anything: retry once, or reload the page once. A surprising number of these clear on the second attempt. If the same message is still there after that, do what the chip says.
Getting certified
Registration and certification.
Messages from the application form, the Certification Hub, and the phase gate that decides whether your Master Dashboard is unlocked yet. See [Getting started](/resellers/getting-started).
"First name is required." (and the same message for last name, company name, business email, website, and country)
One of the six registration fields was empty when you clicked **Submit application**. Field errors only appear after that first click, so submitting once is the way to reveal what is missing. Fill in the flagged field and submit again.
You
"Enter a valid email" / "Enter a valid URL"
Format checks that run as you type in the business email and website fields. Correct the format and the message clears on its own.
You
"Your account has no email on file. Enter a business email here, or add one to your account first."
Business email is normally read-only and pre-filled from your account. This copy appears instead when your account has no email on record, and the field becomes editable so you can type one in directly.
You
A raw, technical-looking validation message under your own error
The backend is rejecting something the form itself did not flag. Retry with the field you think it means corrected. If the message is unreadable or does not point at anything on the form, send it to Support exactly as shown.
Support
"Launch quiz" or "Retake quiz" greyed out, with no explanation shown
The backend has decided you cannot start or retake right now, and nothing in the interface says why. Wait a few minutes and check the Certification Hub again. If the button stays disabled, this is a Support case.
Support
"Reseller access paused" / "Your reseller profile is currently disabled or revoked. Contact support if you believe this is in error."
Your profile status is `disabled` or `revoked`. There is no self-service path back from this state.
Support
"Could not load reseller profile" / "Check your connection and try again."
The profile fetch failed. Click the retry action first. If it keeps failing, send Support roughly when it happened.
Support
Locked padlocks on Overview, Clients, and Revenue, tooltip "Unlocks after you pass the certification quiz"
Expected behavior before certification, not a fault. The Master Dashboard group stays locked until you pass the quiz.
You
Bringing clients in
Invitations.
Everything the "Invite a client to Actionist" modal can show you, from a bad email address to a status stuck mid-flight.
"This email already has an Actionist account and cannot be invited through reseller signup."
There is no self-service way to attach an existing account to your reseller ID. Send Support the client's email and ask them to link it.
Support
"A pending invitation already exists for this email."
You already sent this client a link. Ask them to check spam, or wait for the existing invitation to expire before sending another.
You
"Enter a valid email address."
A format check on the **Client email** field. Fix the address and send again.
You
"Invitation limit reached. Try again in a few minutes."
A rate limit, not a block. Wait a few minutes, then send the invite again.
You
"Your reseller account isn't certified yet, or this feature is disabled."
Check your status pill in the sub-navigation. If it already reads **Certified reseller** and you still see this, it is a Support case.
Support
An invitation stuck at "Accepted — awaiting org" for a long time, or showing "Failed"
No further detail is surfaced in the interface for either state. Send Support the client's email and the status you see.
Support
Master Dashboard
Clients list.
Read the second row below carefully. It looks identical to a genuine empty state but is not, and that distinction is the single most useful thing on this page. See [Managing clients](/resellers/clients).
"No clients yet."
This exact text shows both for a genuinely empty client list and for a failed fetch. There is no separate error state. Reload the page first. If you know clients exist and this persists, it is a Support case.
Support
"View as client" greyed out
Hover the button for the reason. Most often the client's workspace is still finishing setup, an **Active** client can still be unmanageable while that runs. Wait and check again, and escalate if it persists.
Support
"Managing this client isn't available right now"
The fallback tooltip the interface shows when the backend has no specific reason to give. Wait and retry. If it never clears for one client, send Support that client's name.
Support
"Client manager is currently unavailable. Please try again."
A toast that fires when session creation fails. Retry once, this is usually momentary.
You
Revenue contribution showing "Pending"
The backend has not finished computing that client's contribution yet. Hover the cell for the reason if one is given. Nothing to fix, this clears on its own.
You
The keyboard-shortcut chip next to search does nothing when clicked
It is decorative. No handler is wired to it anywhere in the interface. Not a bug, just search normally.
You
"Type at least 3 characters to search"
Search will not fire below three characters, and matching happens server-side above that. Type one more character.
You
A client appearing under the **Historical** filter
The relationship is canceled, or was force-disconnected by an Actionist admin. Force-disconnection is not something either of you can trigger or reverse yourselves, so this is a Support case if you did not expect it.
Support
Inside a client's workspace
Delegated sessions.
What happens when a "View as client" session ends, locks a panel, or refuses an agent a tool. See [View as client](/resellers/view-as-client) for the full mechanism.
Suddenly back on your own reseller dashboard, with no message
Your session expired or was revoked. The teardown is deliberately silent, there is no toast or banner warning you first. Start a new session and carry on.
You
"Access restricted" / "The client hasn't granted access to permission in this delegated session."
One area is locked, the session itself is fine. Click **Refresh permissions** in the banner in case the client just granted it. If it is still locked, ask the client to enable that toggle.
Client
"This page is not available while viewing a client workspace."
You have landed on **Reseller** or **Projects**. No permission unlocks either area from inside a delegated session, that is by design, not a missing grant. Exit the session to reach them from your own dashboard.
You
The **Refresh permissions** button spins but never confirms
It fails silently by design and the banner just stays as it was. Click it again. If it never confirms, send Support the client's name and roughly when it happened.
Support
Home loads but the message composer is disabled, hint "View-only access", tooltip "Agent execution wasn't granted in this view-only session."
You have **Chat History** but not **Prompts and Instructions**. Opening an agent chat to actually work in it needs both. Ask the client to grant the second one.
Client
"Ask the client to grant access to chat history so you can view this."
The reverse gap: you have prompts and instructions but not chat history. Ask the client for that toggle.
Client
An agent replying "Permission denied: reseller delegated session does not include permission access."
The agent's own tools are filtered by the same scopes as the interface. If you see this mid-conversation, the fix is a permission the client needs to grant, not a different prompt.
Client
The hardest boundary
Apps and connections.
Every control here that touches a credential or an authorization is locked for the entire duration of any delegated session. No permission changes that. See [Apps, tools and integrations](/resellers/apps).
"Client action required" / "This app requires the client's credentials or authorization to complete installation. Ask the client to install or connect this app directly."
Every connect, reconnect, install, and disconnect control shows this in a delegated session, regardless of which permissions the client granted. Always ask the client to do it themselves, from their own account.
Client
The Credentials Vault panel is missing entirely from Settings
Expected. The panel does not render at all during a delegated session, it is absent rather than disabled. See [Credentials and API keys](/resellers/credentials).
All four describe a state only the client can fix, since fixing any of them means touching a credential or an authorization grant. Pass the badge text along to the client.
Client
An app showing "Coming soon"
No connection method works for that app on this deployment yet. There is nothing to configure around it in the app today. If a client needs it, send Support the app name.
Support
Automation
Schedules and runs.
A schedule that looks fine but never actually fires is almost always one of a few things, checked in order.
A schedule that never fires
First, confirm it is enabled. Second, check **Agent Studio → Runs** for a row, no row means it never fired at all. Third, check where the agent runs, one on someone's own machine stops the moment that machine sleeps. Fourth, check the time zone, a schedule fires in the zone it was stored in, not the one you are reading it from.
You
"Run now" disabled, hint "Enable this schedule to run it manually"
You cannot trigger a disabled schedule by hand either. Enable it first.
You
"Could not start this scheduled run"
Retry once. If it keeps failing for the same schedule, send Support the schedule name and the time you tried.
Support
Getting paid
Revenue and payouts.
Load failures, wallet validation, and the one ledger status with no self-service fix at all. See [Revenue and payouts](/resellers/revenue).
"Could not load revenue totals." / "Could not load your payout method." / "Could not load the transaction ledger."
Each has its own **Retry** button on the tile. Click it. If the same tile keeps failing to load, send Support which tile and roughly when.
Support
"No transactions yet."
Genuinely empty, unlike the Clients list above. Nothing to fix, you have no ledger rows yet.
You
"Payout details are temporarily unavailable. reason"
Read whatever reason is given, it is usually specific. If the reason is empty and the message does not clear on its own, send Support the exact text.
Support
"Payouts disabled by support."
Your payout profile has been disabled on the backend. There is no toggle for this anywhere in the interface.
Support
"Pending (not payable)" on a ledger row
A blocked commission. No reason is surfaced in the interface and there is no self-service fix, even though the backend records one internally. Send Support the row's client and month.
Support
The Pending or Paid filter count looking wrong against the full ledger
The ledger filter is client-side and only counts the rows currently loaded on the page, not your true total. Not a bug, just a scoping detail worth knowing.
You
"That doesn't look like a valid Base address. Expected 0x followed by 40 hex characters."
The pasted address does not match the expected format for USDC on Base. Check you copied the full 42-character address.
You
"Addresses do not match."
The confirmation step compares your retyped address character-by-character against the first entry. Re-paste carefully.
You
The **Save wallet address** button staying disabled
All three acknowledgement checkboxes need to be ticked, the address format needs to be valid, and both address fields need to match, all at once. Check each condition in turn.
You
The confirm step giving no feedback beyond a disabled button
Retype the pending address exactly as shown. The button enables once the two match character-for-character.
You
Skip straight here if you recognize one of these
When it is definitely Actionist Support.
Seven situations where nothing in the reseller interface, and nothing the client can do either, moves things further. Email [partners@actionist.ai](mailto:partners@actionist.ai) directly rather than retrying again.
A paused or revoked reseller profile. "Reseller access paused", no self-service reinstatement exists.
A blocked commission. "Pending (not payable)" with no reason shown in the interface.
Payouts disabled by support. No toggle anywhere turns this back on.
A stuck certification retake. "Launch quiz" or "Retake quiz" that stays greyed out after waiting.
A force-disconnected relationship. A client sitting in the Historical filter that you did not expect there.
An existing account that needs attaching. "This email already has an Actionist account", there is no in-app path to link it to your reseller ID.
Any generic error that survives one retry. If reloading or retrying once does not clear it, stop retrying and escalate instead.
Include with every request:
* The exact message text, copied rather than paraphrased.
* The client's name or email, if the issue is about one specific client.
* Roughly when it happened.
* What you already tried, so Support does not repeat it (retry, reload, wait).
The honest part
Generic messages, and why they are hard.
A handful of messages recur across the reseller surface precisely because the interface has no more specific thing to tell you. They are not bugs in the sense that something is broken, they are the honest shape of "the backend could not classify this."
"Something went wrong."
Appears on registration, invitations, and wallet operations whenever an error cannot be classified into anything more specific. Retry once, then send Support the exact screen you were on.
Support
"Managing this client isn't available right now"
The no-reason fallback for a disabled **View as client** button. The backend has a specific reason internally, it just is not always sent to the interface.
Support
"No clients yet."
Conflates a genuinely empty list with a failed fetch. Covered above, worth repeating here because it is the clearest example of the pattern.
You
"This page is not available while viewing a client workspace."
Never tells you which permission would help, because none would. Reseller and Projects are locked structurally, not by a missing grant.
You
None of these four are worth escalating on their own. They only become a Support case when the underlying action, loading a dashboard, starting a session, sending an invite, keeps failing after you retry.
Still stuck
## Send the exact message, not a description of it.
The string on screen is usually enough for Support to know exactly where you are. Copy it, don't paraphrase it.
Every entry here is verified against the live product, not the marketing copy.
Copy the exact string · check the chip · escalate once, not repeatedly.
Keep going
Next steps.
Shorter answers to the questions that come up before anything has gone wrong.
The full mechanism behind delegated sessions, banners, scopes, and exits.
Commission, the ledger, and how to set up a payout wallet correctly the first time.
Where to go when a reader here points you past the reseller surface entirely.
# View as client
Source: https://learn.actionist.ai/resellers/view-as-client/index
A delegated session puts you inside a client workspace with the permissions they granted, for one hour at a time, without a shared password anywhere.
WORKING FOR CLIENTS
## Their workspace, your hands, no shared password.
Click **View as client** and the full Actionist interface loads, scoped to one client's workspace. You see what they see, within the permissions they granted. No second login, no credentials handed over, no screenshare.
The mechanism
What a delegated session is.
It is not an impersonation of the client's account and it is not a copy of their data. It is a short-lived, scoped credential that travels with every request you make while the session is open.
You click View as clientActionist asks the server for a session against that one client relationship.
Scopes are resolvedThe server reads the client's current grants and stamps them onto the session.
Your cache is clearedAnything held from your own workspace is dropped so the two never mix.
You land somewhere usefulThe app opens the first area your scopes actually unlock, never a locked page.
One hour, then it stops. Sessions are deliberately short-lived. When one lapses you simply start another.
Scoped at the source. Permissions are resolved when the session is created and enforced on the server, not hidden in the interface.
Everything is recorded. Each action taken in a delegated session writes an audit row on the server.
Your own account never changes. You stay signed in as yourself the entire time, which is exactly why a bug report filed during a session goes to your account rather than the client's.
Try it
Reading the Reseller mode banner.
A purple stripe sits at the top of the screen the whole time a session is open. It is your one reliable answer to "whose workspace am I in?". Toggle the permissions below to see how it changes.
The standard Actionist interface loads here, scoped to Halo Studio's workspace. Anything the banner does not list is locked.
Credentials & API keys
Never listed, whatever else is granted
HARD LIMIT
The banner uses short labels. **Prompts** is Prompts and Instructions, **Tools** is Apps and MCP, **Memories** is Agent Memories, and **Calendar** is Calendar and Schedules. The locked-panel messages you meet inside the workspace use the longer names, so do not be thrown by the difference.
Step by step
Opening a client workspace.
Go to **Clients** in the reseller sub-navigation, or use the **Most recent clients** panel on Overview. Search needs at least three characters. See [Managing clients](/resellers/clients).
**View as client** is active only when the relationship allows management. A client can show as Active and still not be manageable while their workspace is finishing setup. Hover a greyed-out button to see the reason.
The button shows a spinner while the session is created. Your own cached workspace data is cleared at this point, deliberately.
You arrive at the first area your permissions unlock. Read the **Permissions** list in the banner before you start work so you know what is available.
Use the app normally. Anything the client did not grant shows a lock rather than failing silently.
Click **Exit to Reseller Dashboard** or press **Escape**. This is not optional housekeeping, see below.
If session creation fails you get a toast reading "Client manager is currently unavailable. Please try again." Retry once. If it keeps failing on the same client, check they are not in the Historical filter, which would mean the relationship has ended.
Nice touch
You never land on a locked page.
Rather than dropping you on Home and letting you discover it is locked, the app walks the navigation in order and opens the first area your permissions actually unlock.
| Permissions granted | Where you land |
| ----------------------------------- | ----------------------------------------------------------------- |
| Prompts & Instructions | Home |
| Chat History only | Home, in view-only mode |
| Apps and MCP | The Apps browser |
| Skills but not Apps and MCP | The Skills area directly, skipping the browser you could not open |
| Calendar & Schedules only | Calendar |
| Nothing that opens a workspace area | Marketplace, which needs no permission |
That last row is a useful diagnostic. If a session drops you straight into Marketplace, the client has not granted anything that opens a workspace area yet. Ask them to check their Manage Reseller panel.
Inside the workspace
Locks you will meet, and what they mean.
A locked area shows a shield and two lines: "Access restricted", then "The client hasn't granted access to permission in this delegated session." Two areas use a different message because no permission unlocks them at all.
Unlocked by a permission
Home, Agents, Onboarding and Impact open with Prompts and Instructions.
Apps opens with either Apps and MCP or Skills.
Calendar, Memory, Files and Skills each open with their matching permission.
Settings opens with Billing summary.
Marketplace, Learn and Support are always open. Browsing needs no permission.
Locked no matter what
The **Reseller** section. You cannot manage your own reseller account from inside a client workspace.
**Projects**, the planning surface, which has no delegated permission defined yet.
The **Credentials Vault** panel in Settings, which does not render at all during a delegated session.
Every app **Connect**, **Reconnect**, **Install** and **Disconnect** control, regardless of permissions.
Those last two are worth internalising early. The Credentials Vault is absent rather than disabled, and app connection controls are locked for every delegated session with no permission that changes it. See [Credentials and API keys](/resellers/credentials) and [Apps, tools and integrations](/resellers/apps).
Deeper than the interface
The agent inherits your permissions too.
Permissions do not stop at the buttons. If you ask a client's agent to do something during a delegated session, the agent's own toolset is filtered by the same scopes.
| Permission missing | What the agent loses |
| -------------------- | --------------------------------------------------------------- |
| Apps and MCP | Its entire external tool list, plus terminal and screen control |
| Files | Every file tool, plus the terminal tools |
| Agent Memories | Memory search and memory recall |
| Skills | Every skill tool, and skills stop appearing at all |
| Calendar & Schedules | Schedule management |
When an agent hits one of these it says so rather than failing quietly: "Permission denied: reseller delegated session does not include permission access." If you see that mid-conversation, the fix is a permission, not a prompt.
Terminal access is the one case that needs two permissions at once. An agent can only run terminal commands when both **Files** and **Apps and MCP** are granted.
The clock
One hour, and a refresh button.
The circular arrow in the banner picks up the client's current grants without losing your place. Use it right after asking a client to enable something. It shows a spinner, then a tick for a couple of seconds.
If it fails it does so quietly and the banner simply stays as it was. Click it again. If it never confirms, see [Troubleshooting](/resellers/troubleshooting).
A session lasts about an hour. When it lapses, the next request you make ends the session and returns you to your own reseller dashboard.
This happens **without a message**. If you are suddenly looking at your own dashboard mid-task, that is almost always what happened. Start a new session and carry on.
Because expiry is silent, save or apply work as you go rather than leaving a long edit half-finished. A long unsaved edit is the one thing an expiry can actually cost you.
A revoked permission behaves differently and more gently. It locks the affected area and leaves the rest of your session running, because losing one permission is not a reason to throw away the whole session.
Do this properly
Always exit with the button or Escape.
Exiting is what clears the client's data out of your app. Navigating away, closing a tab or switching windows does not.
You exitClick Exit to Reseller Dashboard, or press Escape from anywhere.
Session endsThe delegated credential is deleted on the server.
Cache is clearedEverything loaded from that client's workspace is dropped.
Back to your dashboardYou return to your own reseller view, ready for the next client.
This is the habit that keeps clients separate. Exit one client fully before opening the next, and you will never wonder whose workspace a stale panel belongs to.
In practice
How agencies actually use sessions.
Agency owner
New client accepted. Opens a delegated session, drops in three starter agents, wires the tools that need no login, writes the instructions, then sends one message listing the four apps the client has to connect themselves.
live in an afternoon
Support engineer
Client reports an agent misbehaving. Opens View as client, reads the run history, corrects the instructions, and replies with what changed. No screenshare, no request for screenshots.
usually under 15 min
Account manager
Monthly review. Opens each client in turn, checks what the agents actually did, adjusts a schedule or two, and exits properly between clients so nothing carries over.
one pass, no mix-ups
Quick reference
States and controls.
| What you see | Why | What to do next |
| ------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
| **View as client** greyed out | The relationship does not currently allow management, often because setup is unfinished | Hover for the reason. Wait, or see [Managing clients](/resellers/clients) |
| Toast: "Client manager is currently unavailable. Please try again." | Session creation failed | Retry once. If it persists on one client, check the Historical filter |
| "Access restricted" on a panel | That permission was not granted, or was revoked | Click **Refresh permissions**. If still locked, ask the client |
| "This page is not available while viewing a client workspace." | Reseller or Projects, which no permission unlocks | Exit the session to reach your own dashboard |
| Suddenly back on your own dashboard | The session expired, silently | Start a new session |
| Refresh shows a spinner but never a tick | The refresh failed quietly | Click it again, then see [Troubleshooting](/resellers/troubleshooting) |
| A lock icon on an app **Connect** button | Always the case in a delegated session | Ask the client to connect it. See [Apps](/resellers/apps) |
Delegated sessions
## Real access without a shared login.
One click into a client workspace, one hour of scoped access, and one key that never leaves their vault.
Scoped when the session starts, enforced on the server, audited on every action.
One hour per session · Exit clears everything · Credentials never included.
Keep going
Next steps.
The eight toggles behind every lock you will meet, and what each one opens.
The work you will do most often once you are inside a client workspace.
What you can configure, and the connection step that always belongs to the client.
Every message you can hit in a session, what it means, and whose problem it is.