Skip to main content
Runlayer is a commercial AI control plane: an MCP gateway, a catalog, runtime security, agent identity and governance, and Runlayer Agents. You create those agents in its UI or from clients your teams already use, such as Slack, Claude, Cursor, ChatGPT, and Codex. A Runlayer agent is a prompt, a model, a set of MCP connectors, optional skills and env vars, and triggers. Each of those has a Guild counterpart, and the Guild version lives in files you can review, version, and share on the Hub.

Who this is for

Teams with Runlayer Agents who want agents as code: reviewable files, semver versions, forks from a Hub, and triggers managed from a CLI.

Concept map

Before you start

Inventory

Runlayer agents live in Runlayer, so collect their definition from the UI or from a runlayer_agent Terraform resource. Terraform covers the prompt, model, connectors, skills, env var names, and built-in tools. Read triggers, sharing, and approvals from the agent’s page in the app, and check its version history in case it was edited there.
  • Name, main prompt, and instructions.
  • Model and any fallback.
  • Each MCP connector and the tools selected on it.
  • Skills and env var names (never values).
  • Built-in tools in use: memory, code mode.
  • Triggers: schedules, webhooks, API, Slack mentions and channel monitors, Microsoft Teams, iMessage, audit-event triggers.
  • Subagents and allowed agents, the network access policy, GitHub access, and memory scopes.
  • Guarded tools and who approves them.
  • Whether the agent acts on behalf of users or as its own account.

Steps

1

Pick the agent type and scaffold

Text in and out with tools: Native. Code mode turned on, or a prompt that relies on shell commands, files, the browser, or GitHub access: OpenClaw. Typed input or deterministic steps: TypeScript. Every Runlayer agent has a sandbox, so decide by what the prompt actually uses.
--category and --owner stop the CLI from prompting, which a script or coding agent can’t answer. List categories with guild agent categories.
2

Move the prompt

PROMPT.md
“Ask before creating the page” relies on the ui_prompt built-in in the next step: the agent confirms with the user, and the run pauses until someone answers. That covers the sign-off half of a Runlayer guarded call. For the other half, which agents can call the operation at all, add a credential policy rule scoped to the agent and workspace.
3

Map connectors to integrations

guild.yaml
For a connector with no Guild integration, create one from the service’s OpenAPI spec or MCP server with guild integration create.
4

Set the agent's settings

Move each non-secret Runlayer env var, such as a channel name or a Notion parent page, into a workspace variable. A Native prompt reads it as {{env.KEY}}.
Workspace variables can appear in chat logs and model instructions, so recreate secrets as credentials instead.
5

Test

guild agent test uploads only the files git tracks, so git add -A stages new files such as logic.ts first. Without it, the cloud build fails with “Cannot find module ’./logic.ts’”.
6

Publish and recreate triggers

This recreates a Slack mention trigger. For a Slack channel monitor, use --event message and invite the Slack agent to the monitored channels.For a Runlayer cron schedule, use a CRON trigger. It accepts a timezone, such as Europe/Athens, and Guild converts the schedule to UTC:
The first guild agent save --wait --publish after guild agent init fails with “No saved state… use —force” because of the .gitignore the scaffold writes. Add --force to that first save for now.
You can also publish with the Publish Agent to Guild GitHub Action instead of guild agent save --publish. The Action needs an account API key with the agents:write scope:

Credentials and policies

Runlayer Agent Accounts become Guild credentials:
  • An agent that acts on behalf of the invoking user uses member-scoped credentials, with identity mapping so Slack- or GitHub-started runs act as the right person.
  • A machine-to-machine agent uses a credential dedicated to that agent.
Runlayer policies on servers and tools become credential policies on operations and resources.

What doesn’t map 1:1

Runlayer’s ToolGuard and AgentGuard scanners, argument-level policies, and Shadow AI discovery go beyond Guild credential policies. Both products restrict agent egress: Runlayer with a per-agent network access policy, Guild by cutting container network access before the agent runs, so only Guild proxies can reach out.
Runlayer guarded calls are approved by the requester and expire after set windows; a pending request lapses after 24 hours. Guild has no requester-only approval with an expiry window. It splits a guarded call into two controls. To control which agents can call the operation at all, add a credential policy rule scoped to the agent and workspace that allows or denies that operation. DENY wins. To have a person sign off on each call, have the agent confirm with ui_prompt first. The run pauses until someone answers.
Runlayer audit-event triggers with semantic conditions, and schedule_continuation, have no direct Guild equivalent. Use a schedule trigger instead.
Runlayer agents can start from Microsoft Teams or iMessage. Guild has no trigger for either. Check guild integration list for the service first.
Runlayer offers customer-hosted runtimes on ECS or Kubernetes. Guild is hosted only.

Three ways to migrate

guild-migrate skill

Paste the Runlayer agent’s fields into your coding agent and ask: “Rebuild this Runlayer agent on Guild.”

Publish Agent to Guild Action

Commit the port to your repository, then publish it from GitHub Actions with an account API key.

Migration agent

Commit the agent spec to a repository and point Migrate to Guild at it. The guild-migrate skill ships in the same package.
A worked example (Runlayer agent spec, then a Guild Native agent) lives in examples/migrations/runlayer/ in the guild-migrate repository.

Native agents

PROMPT.md, guild.yaml, and constraints.

Credential policies

ALLOW/DENY rules by operation, resource, agent, and workspace.
Last modified on November 2, 2026