- Quickstart - the native deployment command
- Choose the target - region and supported package features
- Select the organisation - authentication and destination
- Supply credentials - model keys and tool secrets
- Preview and deploy - files, checks and identity
- Verify the agent - a complete browser interaction
- Every later deploy - update the same agent
- Secrets-only updates - add, replace and remove values
- Advanced - hosted tools and optional integrations
- Troubleshooting - symptoms and fixes
- Where to go next - related guides
Quickstart
For a new package, run this from the directory that will containmy-agent:
Terminal
- Enter
my-agentas the name. - Open Identity → Target and select SLNG.
- Open Behavior → Advanced → Advanced target settings → Deployment region and enter one supported SLNG region.
- Return to Create agent, review the package and confirm.
slng target? Start here. Run these commands
from the directory containing my-agent:
Terminal
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 existingtargets.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.
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 undermodels.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
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.
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
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
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
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
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
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
--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. Inspectagents 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
--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 refuseslocal: 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 whenunmute 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 inarguments:
session.json
Terminal
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.