Skip to main content

Why Agents

Runlayer lets you build multiple Agents, each for a different job. Instead of one general assistant with broad access, you create focused agents for specific workflows, teams, or risk levels. Each Agent combines:
  • Instructions (main prompt + optional skills)
  • A chosen model
  • A curated set of MCP connectors and tools
  • Optional deployment channels (Slack, schedules, webhooks)
This gives you reusable, policy-governed automation you can scale across use cases.

Agents for any purpose

You can create agents for almost any internal workflow, for example:
  • Support agent: summarize tickets, query product docs, draft replies
  • Incident agent: triage alerts, pull logs, post status updates
  • RevOps agent: collect CRM context, prep account briefs
  • Security agent: review policy denials, summarize risk events
  • Platform ops agent: monitor MCP health and failed tool calls
  • Leadership reporting agent: weekly usage + adoption summaries
  • Code review agent: receive GitHub pull request webhooks, use GitHub MCP tools to fetch the diff, and draft review feedback
Pattern: one purpose per agent, minimal tool scope, clear prompt contract. Agents can also generate and publish artifacts (reports, datasets, files) during their runs, so automated report generation and document distribution workflows are covered as part of the same agent run. Agents are best as an automation layer on top of your existing systems, not a replacement for them: runs are short-lived (see Runtime limits) and the agent workspace and memory should not replace your source-of-truth systems. For long-running, stateful services, deploy a custom MCP server with Runlayer Deploy instead.

Set up an agent

1

Create the Agent

Go to Agents and click Create new.You can start from scratch or pick a template. Templates pre-fill the name, prompt, connectors, and built-in tools so you can get running faster. Templates are distilled from real workspace patterns — examples include 1:1 Prep, Release Notifier, Account Intelligence, Daily Briefing, and others. The available set may change as new patterns are added.In setup, define:
  • Name
  • Main prompt (required)
  • Privacy: Private or Public (workspace-visible)
  • Custom icon (optional — pick from the built-in icon library or upload your own; synced to Slack when a Slack app is configured)
  • Built-in tools (for example, Memory or Code mode)
2

Attach connectors and tools

Add one or more connectors (MCP servers), then select which tools are enabled. This is the core capability boundary for the agent. Connectors that require OAuth show a Connect button on the connector card or a guided setup dialog with per-connector status. Connecting creates a session grant that shares your OAuth credentials with the agent. When you start your first interactive chat with an agent, a delegation is also auto-granted so the agent can act on your behalf without a separate authorization step.
3

Configure model + behavior

Open the agent detail page and set:
  • Model — defaults to the workspace recommended model when one is set; available models depend on which providers are configured in Settings → AI Providers (see LLM providers below)
  • Model settings — optional per-model reasoning tuning (see Model settings)
  • Instructions (prompt)
  • Skills
  • Optional env vars (see Environment variables)
4

Test in chat

Chat with your agent interactively. The chat streams responses in real time and shows tool calls inline so you can verify prompt behavior, connector access, and model output before deploying.The chat automatically injects Runlayer tools (search, run, manage) so the agent can reason about your Runlayer workspace without you manually adding the Runlayer connector first.
5

Choose deployment mode

Use one or more:
  • Schedules for recurring runs — each schedule includes a timezone and an interpretation mode: UTC cron (default — the cron expression is evaluated in UTC) or Local wall clock (the cron expression is evaluated in the selected timezone, automatically adjusting for DST). Runs triggered at common cron times (e.g., top of hour) may start a short time after the scheduled minute. Scheduled runs execute as the schedule creator — their identity, delegation, and connector credentials — so on a shared agent, each user with edit access can add their own schedule and get runs under their own identity (every schedule card shows a Runs as … badge). If the creator loses access to the agent or is deactivated, their schedule is disabled automatically. If a scheduled run fails, the schedule creator receives a Slack DM (when Slack is connected)
  • Webhooks for event-driven runs — each webhook can optionally require authorization. Authorization is off by default: any caller with the full webhook URL (which contains a secret token) can trigger runs, so treat the URL as a secret. When authorization is enabled, callers must include a valid API key in the x-runlayer-api-key header (an Authorization: Bearer header is reserved for user session JWTs and does not accept API keys); unauthenticated requests are rejected. You can create a scoped API key directly from the webhook dialog. Identical payloads sent to the same webhook within 30 seconds are treated as duplicate deliveries and ignored; different webhooks, including webhooks for different agents, are handled independently. Each webhook can also enable Run as agent account mode: when enabled, the run executes under the agent’s own agent account identity instead of the webhook caller’s identity, so sessions and audit logs attribute the run to the agent account. This is useful for true machine-to-machine automation where no human user triggers the webhook
  • Slack integration (if configured) — run result DMs (Notifications → Run results in the agent’s Slack settings) can be set to Always, Errors only, or Never. Errors only and Always also cover the DM sent when a scheduled run fails to start; Never turns it off. These DMs come from the agent’s own Slack app. Agents without their own app still get run failure and budget DMs from the workspace Slack app, with Budget alerts and Run failures toggles on the agent’s Slack card. Run failures DMs the person a scheduled or webhook run runs as when it fails to start or fails mid-run. The built-in say tool lets agents post messages to Slack from any trigger type (Slack, playground, webhook, or schedule) as long as the agent has a connected Slack app; no Slack MCP connector is required. It can DM a person by Slack user ID or by email, so a run started outside Slack can still reach people, for example DM me when you’re done in the playground or DMing the assignee named in a webhook payload. The say tool returns the posted message’s Slack ts, which the agent can pass back as thread_ts on a later call to post threaded follow-ups in the same conversation. It can also share files the agent wrote in its workspace (reports, exports, images) by passing their paths as attachments — up to 10 files of 10 MB each, uploaded to the same channel or thread right after the message. A companion react tool adds or removes emoji reactions as the agent bot, by default on the Slack message that started the run, so you can tell an agent in its prompt to react :white_check_mark: once a PR is open or :triangular_flag_on_post: when it is blocked. It can also react to another message by channel ID and message timestamp, and follows the same outbound messaging controls as say; turn off Emoji reactions in the agent’s Slack settings to stop it reacting at all. The say tool posts as the agent (its Slack app bot); Slack MCP connector send tools like slack_send_message instead post as the connected user — see Message identity. Admins can restrict where agents post using outbound messaging controls — block DMs, channel posts, or specific channels per agent
  • Event triggers (if enabled in your workspace) — in the agent’s Agent → Triggers section, choose Add trigger → Audit event to run the agent when selected Runlayer platform events fire. Unlike webhooks (which external systems call in to), event triggers react to Runlayer’s own audit event stream — any audit event type can be selected, for example tool_call, access_denied, or security_violation. In the new or edit trigger dialog, use the optional Semantic condition field (max 2,000 characters) to describe which matching events should actually start a run. Leave it blank to run for every selected event. Trigger cards show a Semantic condition badge when one is set; open the card to view, edit, or clear the full prompt. Example: a security agent triggered on access_denied and security_violation events, with Runlayer MCP attached to pull surrounding audit context and summarize the incident (see Use Runlayer MCP inside agents)
  • Slack channel monitors (if enabled in your workspace) — the agent watches selected Slack channels (including private channels) and reacts to new top-level messages, optionally filtered by a semantic condition prompt. Replies inside a thread never trigger a monitor; the agent answers those only when mentioned or, if Thread follow-ups is on in its Slack settings, after a mention earlier in that thread or in a thread the agent started itself. The agent replies in the channel only when it has something to add; runs where it stays silent are still listed in the agent’s activity
All trigger types are configured from the web UI — no code required. Schedules use cron expressions with a timezone picker, webhooks are set up in a dialog, event triggers use an event-type picker and optional Semantic condition field, and channel monitors can filter with a natural-language condition prompt.To test before going live, exercise the agent’s prompt and connectors in chat first. Webhooks can be tested immediately by sending a request to the webhook URL with curl or Postman (include the x-runlayer-api-key header if authorization is enabled). For schedules and event triggers, check the Sessions tab after the first trigger fires to confirm the run behaved as expected.You can disable an agent at any time using the toggle on the agent detail page. Disabled agents skip scheduled runs, reject webhook calls, and return an error for Slack interactions. Re-enable the toggle to resume normal operation.
6

Validate in Sessions

Check run history for status, token/cost usage, and execution trace. Failed runs can be retried directly from the Sessions view, and any past run can be resumed in chat — click the run to open it, then click Open in chat to continue the conversation with the full prior context loaded. Runs triggered from Slack show conversation, channel, and trigger details with a link to the originating Slack message.Each run also includes a collapsible Security section showing ToolGuard scan results — policy denials, security violations, and warnings — so you can audit security events inline without leaving the Sessions view.Tighten prompt/tool scope before broad rollout.

Allowing an agent to invoke other agents

In Allowed agents on the calling agent’s detail page, choose Add agents (or +). Search for agents, review their connections, then choose Add agents in the dialog to grant access. You can select up to 50 agents you have permission to use. Approve always stops adding agents once a calling agent has 50; remove one first. Agent accounts with no Runlayer-hosted agent behind them (external agents using client credentials) can’t hand work to Runlayer agents: there is no agent to add under Allowed agents. Adding authorizes the calling agent to invoke those targets on your behalf. The first approved call establishes the target’s access through your connected accounts. Missing accounts still need to be connected. Each user of a shared agent chooses their own selection; the owner’s selection does not grant access for other users. Choose Remove agent from a target’s menu to immediately block new calls from that agent. This keeps your separate access to the target. Losing permission to use either agent also prevents calls. If the target’s connected access is revoked or expires, choose Renew access from that target’s menu to reauthorize it. Adding or removing another agent does not renew existing permissions. These personal permissions are not copied when an agent is cloned or restored from version history. The calling agent uses the Runlayer MCP run_agent tool and needs Can hand work to other agents turned on under Capabilities on its detail page. An existing target connection alone does not authorize another agent to call it. Agents cannot grant themselves this permission. Choosing an agent as your main agent in Go turns its delegation on, even if you turned it off before. With delegation on, an agent hands a task off as soon as another agent fits it, or you name one, instead of asking whether it should; the approval below is where you decide. What happens when the calling agent hands work to another agent:
  • Target in Allowed agents: the handoff runs without asking.
  • Target not in Allowed agents, you’re in the conversation: you get an approval showing the target, the exact task, and what the agent shares. Choose Approve once to run this handoff only, Approve always to add the target to Allowed agents for this calling agent, or Deny. The same choices appear on the approval card in chats, Slack, and Microsoft Teams; the Inbox offers Approve and Deny only.
  • Target not in Allowed agents, nobody is present (schedules, webhooks, event triggers, channel monitors): the handoff is refused. Add the target to Allowed agents first.
Once a handoff starts, the calling agent doesn’t have to wait or poll for it: Runlayer wakes the calling agent’s conversation in a new turn when the target’s run finishes (see Waiting on external work). If an agent hands work to several agents at once, its conversation wakes once, when the first run finishes, and checks the others then. Handoffs nest at most two levels deep: an agent, the agent it hands work to, and that agent’s own handoff. A handoff back to an agent already in the chain is refused, so two agents can’t keep handing the same work back and forth. When this shipped, handoffs that scheduled and triggered runs made on your behalf in the previous 30 days were added to your Allowed agents shortly after the update, so they keep working: up to the 50 most recent targets per calling agent. Handoffs you approved once in a conversation were not. Approvals hide tokens and keys in the task and arguments they show. Other long random-looking values show their first and last characters plus a fingerprint that tells different values apart; UUIDs, payment record ids, and commit SHAs in GitHub links or commit fields stay visible. The agent still sends the task as written. This section selects existing saved agents. Subagents defines inline assistants within the current agent’s runtime.

Cloning an agent

Any workspace member can clone an agent from the agent detail page (overflow menu → Clone) or from the agent card on the list page. Cloning copies the agent’s configuration, attached connectors, and tools into a new agent owned by you. Only the agent owner can delete an agent; cloning is available to everyone. Cloning is the supported way to create an independent copy of an agent — to roll back changes to the same agent, use version history instead. Agents can also be created and managed programmatically via Runlayer MCP tools (create_agent, update_agent, and the set/add/remove_agent_connectors and set/add/remove_agent_skills tools) — including from inside another agent that has the Runlayer connector attached.

Version history

Every saved change to an agent creates a new version. Open the overflow menu on the agent detail page and choose Version history to browse them — each version shows the agent’s identity, model, instructions, capabilities, connectors and skills, subagents, and environment variables as they were at that point. Anyone who can view the agent can browse its history. Restoring requires edit access and is non-destructive: it creates a new version from the one you selected (labeled “Restored from vN”) rather than rewriting history. If the selected version references connectors or skills that no longer exist or that you can’t access, those are skipped and the restore is reported as partial. Agent update entries in the audit log include the version each change created.

Browsing and filtering agents

The Agents list page supports:
  • Sorting by newest, oldest, most runs, most used (unique users), last used, or alphabetical
  • Ownership tabs — All agents, Created by me, or Shared with me
  • Inventory tab — every agent you can edit (the whole workspace for agent admins) with its owner, model, runs over the last 8 weeks, and upkeep issues: a model upgrade available, idle (no run in 30+ days), never run, or owner left. Select agents to upgrade their model, move them all to a model you pick (useful for models with no direct successor), or disable them in bulk.
  • Status filter to show only active or disabled agents
  • Search by agent name or description
  • Owner avatar on agent cards showing who owns the agent
  • Usage badges on agent cards showing run count and how many people use the agent
  • Connector icons on agent cards showing attached connectors
  • Failure badge on agent cards when the latest run failed
  • A lock badge on private agents you don’t own
The list loads with infinite scroll, so large workspaces stay fast. Use these controls to quickly find agents in workspaces with many agents.

Runtime capabilities

The main prompt you write is combined with Runlayer’s runtime instructions. The runtime prompt tells the agent what tools exist, how to use connected MCP servers, where it can write files, and which environment limits apply. Agents can use:
  • Connected MCP server tools and resources selected on the agent
  • Built-in local tools for shell commands, file reads, file writes, and edits
  • Web browsing (a real Chromium browser for fetching and interacting with web pages; limit what it can reach with the network access policy)
  • Artifact publishing (shareable file URLs)
  • Skills attached to the agent
  • A persistent SQLite memory database, when memory is enabled
  • A persistent workspace filesystem, scoped to that agent
  • Subagents, when configured
  • Slack message delivery tools, when Slack is connected
  • Scheduled continuations, when enabled: the agent ends its run and is woken up later to continue the same conversation
  • Git access to your GitHub repositories (clone, push, open pull requests) as your organization’s GitHub App, when GitHub access is enabled and granted to the agent

Filesystem workspace

Agents run in a sandbox with a writable workspace at /tmp/workspace. Files the agent writes there are restored on future runs for the same agent, so recurring agents can keep generated reports, scripts, checkpoints, small datasets, and other working artifacts. Filesystem persistence is scoped by agent ID. Other agents do not share those files, and the workspace should not replace your source-of-truth systems. Use it for working state and generated artifacts, then re-check external systems when current data matters.

Artifact publishing

Agents can publish reports, interactive HTML, images, and other files as persistent Runlayer links. Artifact publishing is enabled by default for new agents. See Artifacts for the overview and Create and update for example prompts, publishing tools, limits, and updates at the same URL.

Artifact sharing

Artifact viewers must sign in to your organization. Access can come from direct artifact shares or the originating agent’s Artifact sharing setting. See Share and control access for the available modes and how inherited access works.

Viewing and deleting artifacts

Open the agent’s Artifacts tab or the main Artifacts library to browse published files. See Find and manage for previews, downloads, tags, version history, and deletion.

Shell and code execution

Agents can run normal shell commands in the sandbox. This lets them inspect files, transform data, install or use available packages, compile code, run test suites, generate artifacts, and call command-line tools. Common runtime tools include Bash, Git, Node.js, npm, pnpm, TypeScript, Python 3, uv, ruff, ripgrep, jq, yq, SQLite, PostgreSQL client tools, curl, wget, zip, and unzip. For office files, the sandbox also includes headless LibreOffice (convert Word, Excel, and PowerPoint files to and from PDF, and recalculate spreadsheet formulas), qpdf, poppler PDF utilities, and the Python libraries openpyxl, pandas, python-docx, python-pptx, XlsxWriter, and pypdf.

Network access policy

Each agent can restrict which internet hosts its sandbox may reach. The policy applies to the hosts the agent chooses to reach from anything it runs: shell commands such as curl or git clone, package installs, the web fetch tool, and the built-in browser, which every agent has. Traffic to Runlayer itself and to the agent’s connectors is never affected, and neither is the error reporting the sandbox itself depends on unless a block list names it. Package registries and other hosts the agent’s tools reach follow the policy like any other host. Open the agent’s Network access section and choose Edit, then a mode:
  • Unrestricted (default): the agent can connect to any public host.
  • Allow list: the agent can only connect to the listed hosts. Every other connection it opens is blocked; with no hosts listed, the agent cannot connect to any host of its own choosing.
  • Block list: the agent can connect to any public host except the listed ones.
Each entry is a hostname, optionally with a port. github.com matches exactly that host. *.githubusercontent.com matches any subdomain, but not the apex domain, so list both when you need both. Without a port only HTTPS on port 443 is allowed; a port such as api.example.com:8443 allows TLS on that port. The sandbox proxy carries TLS only, so an entry never grants SSH, plain HTTP, or another protocol. IP addresses, private networks, and cloud metadata endpoints are always blocked. Changes apply to the agent’s next run. A blocked request fails inside the sandbox with an egress_denied error that names the host, and the agent is instructed to report the block to the user rather than work around it. A plain http:// request (for example curl github.com with no scheme) is not a block: it fails with egress_https_required and the agent is instructed to retry the same URL over https://. The policy controls which hosts the agent connects to; it does not inspect or limit what data the agent sends to an allowed host.
A policy decides which host the agent connects to, not every site that host can pass traffic on to. A shared CDN or proxy behind an allowed host can route a connection to another site it serves, including a host on your block list: the site name travels inside encrypted traffic (the HTTP Host header, or the inner server name of an Encrypted Client Hello), which the sandbox proxy does not decrypt. Connection logs record the host the agent connected to, not the site reached through it. Allow only hosts whose service you trust, and prefer specific hostnames over broad CDN domains.
Network access policies are enforced by the sandbox egress proxy, which ships with the AgentCore sandbox runtime: Runlayer-hosted deployments and self-hosted AWS deployments that run the agent runtime in VPC networking mode with the proxy enabled. Where the proxy is not deployed, including the Kubernetes agent sandbox, the setting does not appear; an agent that already has a policy still shows it so it can be removed, and fails to run until it is. Where the proxy is deployed but does not yet enforce policies for your workspace, the setting shows that policies are not enforced and an allow list or block list cannot be saved. A policy is never silently ignored. Contact Runlayer if you are unsure which runtime your workspace uses.

Environment variables

Each agent can define optional environment variables in its advanced settings (visible to the agent owner and admins). They are encrypted at rest and injected into the agent’s sandbox runtime, so shell commands and tools can read them (for example $MY_VAR). Use them for non-OAuth configuration like API base URLs or service tokens the agent needs in shell commands. Credentials for OAuth-protected MCP connectors are handled separately through session grants, not environment variables — you don’t paste OAuth tokens into agent env vars.

Waiting on external work

An agent that has to wait for something outside its control, such as CI checks, a deployment, a long job, or a person’s reply, does not need to sleep or poll. Every agent can call schedule_continuation with a delay (1 minute to 24 hours) and a note about what to check, then finish its run. Runlayer starts a new run at that time that continues the same conversation, with the note as its input. The continuation appears as its own run linked to the one that scheduled it.
  • Calling schedule_continuation again replaces the pending wake-up; cancel_scheduled_continuation drops it. Either call is refused if that wake-up is already starting its run, and the tool result says so.
  • Files under /tmp/workspace survive only if the runtime session is still warm when the continuation lands (short delays). The tool result tells the agent whether that is the case so it can save what it needs first.
  • A continuation is not started if the original run was cancelled, or if the agent was disabled or deleted in the meantime.
  • Slack-started conversations continue in the same thread; the agent uses say to post when the thread should hear from it.

Runtime limits

  • Agent runs are short-lived; long-running services and background daemons are not a good fit.
  • Runs are limited to 8 hours (configurable per deployment).
  • Interactive terminal programs that require a TTY are not supported.
  • Writes outside /tmp/workspace should be treated as temporary.
  • Hidden directories, dependency folders, and common build output directories are not intended for persistent file sync.
  • Local tools and MCP calls still pass through Runlayer policy, scanning, and audit flows.
  • Network access depends on the runtime environment and the configured connectors, credentials, and policies.

Runtime enforcement inside the sandbox

ToolGuard scanning and sandbox protection are applied inside the agent runtime: tool calls and tool results are inspected before and after execution, sensitive arguments can be masked, and denied calls are blocked. A blocked call surfaces an error to the agent run. MCP tool calls already enforced at the Runlayer proxy are not enforced twice. See ToolGuard. Customer-facing extension points are documented in the Runlayer Hooks SDK.

Human-in-the-loop approvals

When a guarded tool call fires during a run (for example, a policy or security scanner requires approval), the run pauses and approvers receive a Slack notification. The run stays paused until an approver allows or denies the call, then continues (or fails) accordingly. This lets you keep sensitive tools available to agents without giving up a human checkpoint.

Usage limits

Agents support two independent limit types to prevent runaway usage: run limits and cost budgets. A run is rejected if either limit is exceeded.

Run limits

Agents have daily and weekly run limits. Defaults are set at the workspace level in Settings → General and apply to all agents. To override limits for a specific agent, open its Monitor tab and click Limits. Each override sets a separate daily and weekly cap for that model (the weekly cap must be greater than or equal to the daily cap). Limits use rolling 24-hour and 7-day windows, so when an agent reaches its limit, new runs are rejected until older runs age out of the window.

Cost budgets

Each agent can also have daily and weekly spending caps in USD, based on actual LLM token costs. Budgets are per-agent and independent — they are not pooled or shared across agents (run-limit defaults are workspace-wide, but each agent’s spend counts only against its own budget). Set them from the Limits button on the agent’s Monitor tab, which shows 24-hour and 7-day usage against each limit on its Runs and Cost tiles. Both values must be set together (or both cleared), and the weekly cap must be greater than or equal to the daily cap. When an agent’s accumulated cost reaches the budget, new runs are rejected until older spend ages out of the window.

Budget alerts

When Slack is connected, the agent owner receives a DM when an agent crosses 75%, 90%, or 100% of its daily or weekly run limit. For cost budgets, the owner is notified when a run is rejected because the budget was exceeded (there are no pre-threshold warnings for spend). Budget alerts are enabled by default. Toggle them per agent under Notifications → Budget alerts in the agent’s Slack settings, or, for an agent without its own Slack app, with the Budget alerts switch on its Slack card.

LLM providers

Agents need at least one LLM provider configured to run. Admins manage providers in Settings → AI Providers. When multiple providers are configured, the model picker in the agent detail page shows all available models. Each agent can use a different model, and an agent can be bound to a specific provider configuration so it only sees (and routes through) that provider’s models — useful for team-level cost isolation. For Bedrock, your IAM role’s trust policy must allow the Runlayer service principal with the external ID shown in the provider form. Click Validate connection to check the role and list the models your AWS account has enabled in that Region. Every enabled model is checked by default and replaces the default Bedrock registry, so users only see models that will actually run; uncheck any you want to hide. This needs bedrock:ListFoundationModels, bedrock:ListInferenceProfiles and bedrock:GetFoundationModelAvailability on the role (included in the permission policy shown in the form). You can still add other model IDs by hand, or skip validation and use the default Bedrock model list. If you use a custom application inference profile ARN as the model, also grant bedrock:GetInferenceProfile so Runlayer can tell which model the profile serves: the model picker then names the profile after that model (for example Claude Sonnet 4.6 · my-profile) and runs show their cost. Without it the picker shows the raw ARN and those runs show “Cost unavailable”. Anthropic models on Bedrock also need a one-time use case details form submitted in the account that role lives in — see Bedrock model access.

Runlayer Assistant model

The built-in Runlayer Assistant runs on Runlayer’s Bedrock model by default (or, on deployments without Bedrock, on your recommended model). Admins can move it to any model one of the workspace’s providers serves, such as an internal OpenAI-compatible gateway, with the Runlayer Assistant model picker in Settings → AI Providers. The same picker sits in the Model section of the assistant’s own page, along with its model settings. The choice applies to the assistant in the web app and in Slack. When a newer model of the same family replaces the one you picked (for example Claude Opus 4.6 to Claude Opus 5.5), the assistant moves to it on the same provider, unless a role restriction reserves the newer model. Its prompt and connectors stay managed by Runlayer. Admins can set a workspace-wide recommended model in Settings → AI Providers. The recommended model is highlighted in the model picker and used as the default for new agents (when unset, new agents default to Claude Opus 4.8). To manage spend, set a smaller model (for example Claude Haiku 4.5 or GPT-5.4 Mini) as the recommended model so new agents default to it, and reserve larger models for agents that need them — each agent can override the default from its own model picker. Pair this with cost budgets and per-model run limits for hard caps, provider binding for team-level cost isolation (see above), and Analytics for cost visibility.

Model settings

Each agent can optionally tune how its model reasons. The available knobs depend on the model family: Configure these on the agent detail page under the model picker. Leave them unset to use provider defaults.
Self-hosted deployments can also enable Bedrock-hosted Anthropic models via Terraform without the AI Providers UI. See Agent Sandbox LLM Gateway for details.

Agent memory

Agent memory provides persistence across runs through two complementary systems: Workbench memory is an optional built-in persistent SQLite database an agent can use to save structured notes and state between runs. Enable it from the agent’s advanced settings when the agent should remember information across runs. Use workbench memory for things like:
  • Durable preferences or instructions specific to that agent
  • IDs, checkpoints, or summaries from earlier runs
  • Lightweight working state for recurring tasks
The agent can write new rows, update earlier records, and query what it saved in prior runs using the run_agent_memory_sql tool. Results larger than 16 KB are not returned inline: the tool call fails with an error that tells the agent to page with LIMIT/OFFSET, aggregate in SQL, or pass output_file to write every row as JSON Lines to a file in its workspace. Agents can also open the database read-only from bash or Python for large reads.

Example prompts

  • “Remember that Acme prefers weekly status updates every Monday.” The agent can save that preference in its memory and use it in later runs for Acme-related work.
  • “Store the last processed Zendesk ticket ID as 18423 and pick up from there next run.” The agent can write that checkpoint, then retrieve it later to avoid starting from scratch.
  • “What do you already remember about our Q2 board report workflow?” The agent can query its stored notes, summarize what it finds, and use that as context for the current task.
Workbench memory is scoped to a single agent. Other agents do not share it, and it should not replace your source-of-truth systems. Use it to help an agent stay consistent over time, then re-check live systems when current data matters. Scoped memory stores long-term facts that persist across conversations. When enabled, the agent can use remember to save facts (preferences, feedback, project context) to one of the scopes below, and forget to retire outdated entries. Saved facts are loaded into later runs that have access to the same scope.

Memory scopes

Memory context (the settings icon next to the Memory toggle) chooses which scopes an agent can use. The same scopes apply to both systems: each scope has its own workbench database and its own scoped facts, and run_agent_memory_sql takes an explicit scope on writes. Choosing a scope:
  • Channel is the safest default for Slack-facing agents: what the agent learns in one channel or DM stays there.
  • User is for personal preferences. Because it follows the person, anything the agent saved from a private DM can come up when that person talks to it in a shared channel.
  • Agent is global. Use it for facts every user of the agent should benefit from, such as checkpoints or team conventions.
Runs that execute as an agent account, such as webhook or channel-monitor runs, have no person or Slack conversation bound to them, so they can only use Agent memory. Including a person’s ID in the input or sending them a DM doesn’t give the run that person’s User or Channel memory. A custom workbench table, for example one created with CREATE TABLE IF NOT EXISTS my_notes (...), lives inside the scope you write it to. It doesn’t make data visible to other scopes.

Self-improving agents

Each agent has an opt-in Self-improving agents toggle. With it on, the agent automatically distills reusable skills from its successful runs. Distilled skills are private to that agent — they are managed automatically, don’t appear in the shared skill picker, and can’t be attached to other agents. Distilled skills are managed for you — you don’t create, edit, or attach them — and future runs of that agent use them automatically.

Improving agents over time

Several documented mechanisms let a recurring agent get better across runs: Memory and workspace usage are driven by the agent’s instructions — prompt the agent to save checkpoints or query what it already knows (see the example prompts above). Self-improving agents is the automatic path: once opted in, it runs after successful runs without prompt changes.

Subagents

An agent can delegate work to subagents — lightweight child agents that run inside the parent agent’s sandbox with their own name, description, prompt, and optional model override. Subagents inherit the parent’s connectors and tools but follow their own instructions, so you can split a complex workflow into focused sub-tasks without creating separate top-level agents. To add subagents, open the agent detail page and look for the Subagents section. Click Add subagent, then fill in: Each agent supports up to 50 subagents. You can edit or remove subagents from the same section. Subagents can also be managed programmatically through Runlayer MCP tools (add_agent_subagent, update_agent_subagent, delete_agent_subagent). Subagents have no connector or tool configuration of their own — only a name, description, prompt, and optional model override. The parent’s connectors and tools are resolved when a run starts, so changes to the parent agent’s attached connectors or enabled tools apply automatically to the next run; there is no separate sync or versioning step.

Agent policies

Each agent has a dedicated Policies section on its detail page where you can define access rules scoped to that agent’s connectors and tools. Agent policies work like server-level policies but are managed directly from the agent rather than from each connector individually. To add a policy, open the agent detail page, scroll to the Policies section, and click Add policy. Each policy includes: Agent policies are visible only to the agent owner. Use them to restrict what a specific agent can do beyond the connector-level permissions — for example, allowing an agent to read but not write, or limiting queries to specific tables.

Error notifications

When enabled for your deployment, Agent → Error notifications sends attention alerts to up to five destinations per agent: shared Slack channels, shared Microsoft Teams channels, or public HTTPS webhooks. Disabled destinations count toward this limit. Users with access to the agent can read masked destinations. Reading recent delivery history, managing destinations, testing them, rotating signing secrets, and discovering channels require Manage organization settings as well as agent access. Private managed assistants are excluded; existing personal Slack notices continue independently. Choose Add destination, then Destination type. Slack uses the shared Runlayer App; select the workspace on Enterprise Grid, then the channel. An organization default channel and an agent-specific Slack app are not required. Invite the shared app to missing or private channels, then Refresh channels. Teams requires the shared app installed in the intended team and an observed channel message or mention. Only complete tenant, team, and channel references are selectable. Set up missing shared apps in Workspace settings → Integrations; notifications never fall back to a different channel. The two conditions default on: Run failures and Unresolved tool errors. A failed run takes priority over tool warnings, with one attention event per persisted run and destination. A successful run with unresolved tool errors remains Succeeded. Recovery means an observable later success for the same connector, tool, and canonical input in that run. A success with different input or through a different tool does not prove recovery. Errors swallowed inside shell/code execution and unobserved child traces are outside this guarantee. Alerts contain bounded safe summaries, tool names/counts, source, time, and an agent/run link; they exclude prompts, arguments, outputs, exception text, and response bodies. All runs is the default. Automated runs only includes scheduled, incoming webhook, event, and connector poll runs; manual Run now/Retry, REST, MCP, Slack, and Teams runs are excluded. The default Cooldown (seconds) is 900 (15 minutes). Enter whole seconds from 0 to 2,592,000 (30 days). Matching repeated alerts are suppressed after a successful send; failed sends do not consume cooldown. You can disable a destination, change conditions or cooldown with Edit, or Remove it. Operational notification settings are excluded from agent versions and clones. Restoring a version preserves current routes; transferring the agent preserves routes, and deleting the agent disables them and cancels pending work. Test queues a generic agent.notification.test event. It has source/outcome test, a server-generated UUID, and no real run or accepted-attempt ID. It bypasses attention conditions, source scope, and ordinary cooldown, but requires an enabled route and agent and is throttled to once per destination per 60 seconds. Test queued confirms acceptance, not external delivery. Recent deliveries shows the latest 50 records, including queued, sending, sent, suppressed, cancelled, and failed states. Completed history is retained for 30 days. Sent means the receiver or channel service accepted the request. Delivery is at least once: receivers must handle duplicates. Retries reuse the event ID and use a fresh signing timestamp. Retryable failures have bounded durable retries; permanent failures stop retrying. Route edits advance the revision and cancel pending sends for the old revision. An in-flight external request cannot be recalled by editing, disabling, deleting, or changing a flag. Invalid/unauthenticated requests, disabled-agent refusals, duplicate incoming requests, cancellations, and eval/simulated runs do not generate attention alerts. Accepted failures before run creation are covered when acceptance is captured durably; process death before any durable run/job/intent is outside the recovery guarantee. There is no historical backfill.

Webhook receivers

Enter a public Webhook URL and an optional Bearer token. The stored URL stays masked and bearer tokens are never shown again. Creating a webhook, converting a Slack or Teams destination to webhook, or confirming Rotate secret → Rotate signing secret issues a fresh Standard Webhooks signing secret, shown only once. Copy it to your receiver before closing. Replace destination on an existing webhook retains its signing secret and replaces the URL and bearer token; leaving the replacement bearer blank removes it. Use Rotate signing secret to obtain a new key. Config-only edits preserve credentials. Rotation immediately invalidates the old key, so coordinate the receiver update. Closing clears the disclosure; an explicitly copied secret remains in your OS clipboard. Receivers need public DNS and HTTPS with a valid certificate. Private, loopback, link-local, and metadata destinations are rejected. DNS is checked and an allowed address pinned before transmitting the body, with TLS hostname verification. Redirects are not followed. The request budget is ten seconds and responses are bounded; acknowledge promptly after durably accepting work. Deployment operators must permit backend DNS/public egress for destination validation and worker DNS/public HTTPS egress for delivery, and run the durable notification worker jobs. Use trusted TLS configuration; private-only receivers require a public HTTPS ingress. Verify webhook-id, webhook-timestamp, and webhook-signature against the exact raw request body before parsing it. The following standard-library example checks HMAC-SHA256 and a five-minute timestamp window; pass your secret from a secret manager. Header names should be normalized to lowercase by your HTTP adapter.
After verification, atomically deduplicate on event_id in durable storage while accepting work, then return a 2xx response. Check your expected organization and agent IDs, validate the versioned payload, impose a request-body limit, and treat missing or malformed headers as authentication failures. If configured, check the bearer token as well. Do not log the bearer, signing secret, full URL, or raw request/response content. Signature validation alone is not duplicate suppression.

Deployment pilot

agent-error-notifications defaults off. Enable it in the backend and worker processes as well as the frontend; a frontend URL flag override alone cannot enable capture, API access, or delivery. While off, existing pending rows are preserved for resumption and new attention events are not captured. Operators can use an approved flagd override or a scoped FF_ENABLE = "agents,agent-error-notifications" process override for a deployment pilot. Apply the same opt-in to backend and worker and verify the deployed processes; keep the central default off until promotion.

Multi-agent strategy

Use multiple agents instead of one overloaded agent:
  • Split by business function (Support, Security, Ops, GTM)
  • Split by data sensitivity (low-risk vs privileged systems)
  • Split by trigger type (human chat vs scheduled vs webhook)
  • Keep prompts short and role-specific
  • Keep connector/tool permissions narrow per agent

Ownership and access

  • The agent owner is shown on the agent detail page (below the webhook section)
  • Agent owners and admins with the Manage Agents capability can edit core settings (including the enable/disable toggle); advanced settings (model, environment variables, subagents) are visible only to admins and the agent owner
  • Admins with the Manage Agents capability can transfer an agent to a new owner in the same organization from the Share modal
  • When you create or update an agent, you automatically receive access to the connectors attached to it
  • Public agents are accessible to workspace users
  • Non-owners may have read/run access but not edit rights
  • All calls still pass through your Runlayer policy model and scanner stack

Sharing an agent

Agents are shared from the Share button on the agent detail page. Sharing supports two permission levels: Grants can target individual users, groups, or roles, so you can share an agent with a specific team at use-only or edit level. Users with Can edit access can also add their own schedules to the agent; each schedule runs under its creator’s identity and connector credentials, so one shared agent can run on behalf of several users without duplicating it (each user still grants connector access themselves first). The same Share modal controls general access — Only people invited (private) or Everyone at your organization — and lets admins with the Manage Agents capability transfer ownership. Advanced settings (model, environment variables, subagents) remain visible only to the agent owner and admins regardless of sharing.

Shared agents and user credentials

When multiple users use a shared agent against OAuth-protected connectors, credentials resolve per caller: if the calling user has connected the connector themselves (a personal session grant), their own OAuth credentials are used; otherwise the call falls back to a shared session grant if one exists. This keeps each user’s data access governed by their own permissions where possible. See Session grants for the full resolution order and examples.

Who does the agent run as?

The identity a run executes under depends on how it was triggered — and that identity is whose connections are used (personal grant first, shared grant as fallback): The chip next to each OAuth connector says whose account its runs use. Runs as each user means every run uses the account of the user it executes as, per the table above (their chats, plus schedules, event triggers, channel monitors, and webhook calls they created). Always runs as a named user means that user shares their connection, and it is used for everyone’s runs on that agent. To have everyone who uses your agent run on your connection, so teammates don’t each have to connect, open the agent, click the connector, and set Account used to Always your account. Only the agent’s owner can change this, and only after connecting the connector themselves. Switching replaces other users’ own connections for that connector on this agent. Every run then acts with your upstream permissions, and teammates still need access to the connector itself. To go back, choose Each user’s own account.

Gradual rollout

Agents don’t have to launch workspace-wide at once:
  1. Create the agent as Private and validate behavior in chat.
  2. Share it with a pilot user, group, or role at Can use level and monitor the Sessions tab; tighten prompt and tool scope as needed.
  3. Widen general access to Everyone at your organization (or mark the agent Public) when you’re confident.
Agent policies and connector-level access policies apply throughout, so broader visibility never bypasses access control.

Security and isolation

How agent execution is isolated, in one place:
  • Sandboxed execution — each agent runs in an isolated sandbox (see Runtime limits) with a writable workspace at /tmp/workspace. On Kubernetes (sandboxMode: k8s) that is kubernetes-sigs Agent Sandbox with gVisor or Kata Containers on the sandbox nodes — see Runlayer Operator — K8s Agent Sandbox.
  • Per-agent filesystem — workspace persistence is scoped by agent ID; other agents do not share those files (see Filesystem workspace).
  • Per-agent memory — the optional workbench memory is scoped to a single agent; other agents cannot read it (see Agent memory). Scoped memory separates visibility by user or channel.
  • Policy, scanning, and audit on every call — local tools and MCP calls pass through Runlayer policy, ToolGuard scanning, and audit flows, plus any agent policies scoped to that agent.
  • Tenant isolation — Runlayer deployments are isolated per tenant: dedicated-account and dedicated-VPC topologies isolate at the AWS account or network boundary, and the multi-tenant Runlayer Operator gives each tenant its own namespaces, database, Redis, and IAM roles on a shared EKS cluster. See the Account Strategy & Isolation section in Deployment Overview.

Use Runlayer MCP inside agents

Runlayer MCP is a first-party connector that lets an agent reason about your Runlayer workspace itself (analytics, audit logs, inventory, governance). To use it in an agent:
  1. Install/enable the Runlayer server in your workspace.
  2. Add that connector to the agent.
  3. Test with focused prompts (examples below).
Example prompts:
  • “Use Runlayer MCP to export top tools used in the last 30 days and summarize top failure causes.”
  • “List recent policy denied events and group by connector.”
  • “Show all connectors with low usage but high error rate.”
  • “List pending access requests and summarize by team.”
Mutating Runlayer MCP actions are confirm-gated (for example confirm=true) and permission-gated (admin/owner where required).

Manage agents with Terraform

Agents can also be provisioned as code. The runlayer_agent resource in the Runlayer Terraform provider manages the prompt, model, connectors and tool allowlists, skills, built-in tools, tags, and environment variables; runtime settings such as triggers, sharing, and usage limits stay in the app. See Manage Agents with Terraform.

Agents vs Agent Accounts

Agents are the workers: a prompt, a model, a curated set of connectors and tools, and the triggers that run them. Agent accounts are the identity those workers carry. Every Agent is backed by an agent account that Runlayer creates for it, and runs that execute as the agent account (webhooks in Run as agent account mode) are attributed to it. For agents you build outside Runlayer, create an agent account yourself and authenticate with its client credentials. See Agent Accounts.

Runlayer MCP

Built-in MCP for analytics, audit logs, inventory, governance

Agent Accounts

Programmatic auth + delegated access model

Agents as code

Provision agents with the Terraform provider

Policies

Control what agents and users can do

MCP Troubleshooting

Debug connector, auth, and permission failures