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 arunlayer_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
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
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 Workspace variables can appear in chat logs and model instructions, so recreate secrets as credentials instead.
{{env.KEY}}.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
--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.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.
What doesn’t map 1:1
Runtime security scanners
Runtime security scanners
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.
Requester approvals
Requester approvals
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.Audit-event triggers and continuations
Audit-event triggers and continuations
Runlayer audit-event triggers with semantic conditions, and
schedule_continuation, have no direct Guild equivalent. Use a schedule trigger instead.Microsoft Teams and iMessage triggers
Microsoft Teams and iMessage triggers
Runlayer agents can start from Microsoft Teams or iMessage. Guild has no trigger for either. Check
guild integration list for the service first.Self-hosted runtimes
Self-hosted runtimes
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.
examples/migrations/runlayer/ in the guild-migrate repository.
Related pages
Native agents
PROMPT.md, guild.yaml, and constraints.Credential policies
ALLOW/DENY rules by operation, resource, agent, and workspace.