Skip to main content
Deploy your package as a managed SLNG agent and test it in the browser. Unmute turns your authored files into a deployment body. SLNG runs the agent, so this route needs no Docker image or Python project. On this page:

Quickstart

For a new package, run this from the directory that will contain my-agent:
Terminal
In the console:
  1. Enter my-agent as the name.
  2. Open Identity → Target and select SLNG.
  3. Open Behavior → Advanced → Advanced target settings → Deployment region and enter one supported SLNG region.
  4. Return to Create agent, review the package and confirm.
The region field is labelled optional in the console, but SLNG requires it. This path creates a package without code-target turn settings. A saved organisation manifest may restrict the choices; see manifest-based initialization. Already have a package declaring a slng target? Start here. Run these commands from the directory containing my-agent:
Terminal
The profile name production is your local label for a credential. Use your own name. Before deploying, check the organisation shown by the preview and supply any missing resources it names. A successful deploy prints the agent ID. Open that agent in the SLNG dashboard and choose Test → Web session. The sections below explain each step.

1. Choose the target

Merge this target into an existing targets.yaml. eu-north is one example; choose a supported region that serves your models and language.
targets.yaml
string
required
Set to slng. The surrounding target name selects this build with --target and names its directory under build/.
string or one-item list of strings
required
Exactly one SLNG region. There is no default. Omission, an unknown region and multiple regions are refused.
The package needs a name, one entry agent, a prompt, a fixed greeting, and bindings for reasoning, speech recognition and speech generation. Keep those in agent.yaml and the prompt files it references. SLNG owns runtime versions, capacity and turn detection. Omit target version, pins, sdk_language, connection and warm_instances. Tasks, handoffs and package-local Python are unavailable on this target. See the complete target limits.

Choose models and their region

Set model bindings under models.think, models.listen and models.speak in agent.yaml. A target can override an existing binding by name. See model configuration for the authored shape. The SLNG driver joins a provider and model with /, unless the model already contains /. It forwards each binding’s params into that component’s provider options. It does not test model availability or provider option support offline. Use SLNG’s model discovery instructions to select models available to your organisation, language and region. The Unmute model pages explain the bindings and target differences. Provider defaults apply to omitted options; an accepted package can still fail when a provider receives its first request. deployment_region selects the hosted agent’s region. An upstream model’s inference location is a separate provider setting. Choosing a hosting region does not move that provider’s inference service.

2. Select the organisation

Install the voiceai CLI and sign in with an API key from the destination organisation. The login prompt keeps the key out of your command history:
Terminal
Unmute needs a voiceai release that supports checked, resolved pushes. It checks that capability before pushing and gives upgrade guidance if it is missing. voiceai 0.1.18 supports this flow. No Python SDK version is yours to install for this target.
Environment keys override the selected profile. Unmute reads SLNG_API_KEY, then VOICEAI_API_KEY, then the profile. It also loads the package’s .env and .env.local. Remove unintended deployment keys from those files and your shell when using a profile. Check the preview’s organisation before deploying.
There is no separate Unmute project selector for SLNG. The credential selects the organisation, and --profile selects a saved credential when no environment key overrides it. Use the same profile for every command below.

3. Supply credentials

These settings have different owners: Model credentials registered through BYOK are separate from tool secrets. Choose a supported model in the organisation; putting its provider key in a local .env file does not configure managed-agent BYOK. The generated build/slng/README.md lists the Vault requirements visible to the compiler. Deployment also checks credentials required by published tools and MCP servers. A declaration names a requirement; it does not supply its value. See Credentials and the SLNG Vault. Create a missing tool secret by name and enter its value at the hidden prompt:
Terminal
Replace SERVICE_API_TOKEN with a name in your package’s requirements. The read command reports metadata, including has_value, without displaying the value. Vault writes require an organisation admin. For a batch, prepare a private file containing only required tool credentials:
runtime.secrets.env — placeholders; replace before use
Terminal
Keep the file outside build/ and out of source control. Do not upload an entire development environment or the deployment key as a tool secret. A real unmute deploy can also offer to fill missing Vault entries with your consent; a dry run cannot fill them.

4. Preview and deploy

You can inspect the generated files before any account checks:
Terminal — from the directory containing my-agent
Both commands work offline. Compilation writes agent.json, README.md and compile-report.json into my-agent/build/slng/. The report lists checks that need the live account. Edit the authored package and compile again; generated files are replaced. Deploy from the same parent directory, passing the authored package path:
Terminal
deploy validates and compiles again automatically. It resolves hosted tool names and MCP selections in the chosen organisation, checks the resolved contracts, and pushes that checked body. It writes a deploy-report.json beside the generated files when it reaches the push stage. A dry run changes no remote state. A real run may refresh MCP discovery or create Vault entries with your consent before a later check fails. Its report records those changes. The agent is written only after its required checks pass. The deployed name joins the package name and target name: package my-agent with target slng deploys as my-agent-slng. SLNG assigns a separate agent ID. The report records that ID, but Unmute stores no deployment lockfile: later pushes resolve the name again. Find the resource with:
Terminal
Do not post build/slng/agent.json with voiceai agents create. The compiled body still contains names that deployment must resolve to platform identifiers.

5. Verify the agent

Open the deployed agent in the dashboard and choose Test → Web session. Fill required call inputs, allow microphone access, and start the session. See SLNG’s test panel. Say a short question and wait for a relevant answer. If the package uses a tool, exercise one safe tool interaction and check the result. A greeting proves audio output; a response to your question also checks input and reasoning. Use the returned agent ID and call ID to read the call. Replace the angle-bracket placeholders before running:
Terminal
Check the transcript, tool results and any call_end_reason. A completed push proves that the platform accepted the configuration. A completed interaction is the deployment smoke check; application-specific tests still come next.

Every later deploy

Change your authored prompt, model bindings, configuration or tool references, then preview and update with the same target and profile:
Terminal
Unmute regenerates the body on each run. There is no image to rebuild and no secrets file required on update. Existing Vault values remain in the Vault. A push replaces the agent configuration. Fields edited only in the dashboard can be overwritten, and tool references removed from the package are detached. Read the preview’s removals. Hosted tools resolve to their latest published versions on each deploy; a committed code-target mirror does not pin them here. The same deployed name updates the existing agent. If the name is ambiguous, pass --agent-id <agent_id>. The ID remains the same on update. An unchanged push creates no version. Test a fresh session after each change; Unmute offers no worker restart or rolling-update controls for this managed runtime. For rollback, SLNG’s Versions tab can restore a saved version after showing its checks. Bring the authored package back into agreement before the next deploy, which would replace that restored configuration again.

Renaming the agent

Changing the package or target name creates a different deployment name. It can create a second agent and leave the first running. Integrations holding the old ID keep reaching the old agent. Inspect agents list and update those integrations deliberately; a rename is not a migration.

Secrets-only updates

For an existing Vault name, update its value without compiling or deploying:
Terminal
The first command prompts for the replacement. Omit --overwrite when adding a new name. If it already exists, the CLI asks before replacing it; a non-interactive run refuses without overwrite consent. For a file, --secrets-file runtime.secrets.env --overwrite adds new entries and replaces listed existing entries. It does not remove entries omitted from the file. List metadata with voiceai --profile production secret list. SLNG resolves tool credentials at execution time, so changing an existing Vault value needs no agent rebuild. Check a fresh tool interaction after rotation; do not assume an active call has refreshed every credential. To remove a secret, use the dashboard’s Vault page. The CLI has no delete command. SLNG blocks deletion while active configurations or calls still reference it. Remove the use first, deploy that change if needed, then delete. See Vault management. Replacing a stored value does not create or revoke its provider key. Do those operations in the provider’s account. For model credentials, use BYOK rotation.

Advanced

Reuse tools and shared code

Start with supported package declarations. For external services, reference published hosted tools or select named MCP tools from your organisation. The SLNG target publishes no tool code and refuses local: and webhook: tool bodies. It has no package-local Python imports, shared-module packaging, custom Dockerfile, dependency override or lifecycle hook. Publish and maintain the tool on SLNG, or choose LiveKit or Pipecat when the package must own Python. A hosted tool needs no local mirror for this target. unmute pull is for a package that also compiles to a code target, where that mirrored tool runs.

Receive phone calls

Configure a carrier connection through SLNG Telephony, then attach the inbound trunk when unmute deploy offers it or in the agent’s Telephony tab. The attachment does not change the carrier’s routing. Inbound calls supply no web-session input payload. Give required injected inputs valid defaults or leave those arguments for the model to collect. Call the number and inspect the new SLNG call record. Outbound calling needs its own outbound connection; an inbound attachment does not enable it.

Create a session for your own client

Save this complete request body, filling any required call inputs in arguments:
session.json
Terminal
The result contains livekit_url and livekit_token for your client. Treat the token as a credential. This command requests a session; it opens no browser and does not prove a worker joined. Keep deployment keys on your server.

Troubleshooting

A dry run may report an unusable MCP snapshot. A real deploy can refresh it once and recheck it. A local-module error belongs to a LiveKit or Pipecat build: SLNG does not execute the package’s Python files.

Where to go next

Going live

The package-to-deployment workflow across targets.

unmute deploy

Every flag and deployment check.

The SLNG target

Model bindings, Vault references and target limits.

Credentials

Declare names and supply values separately.