Version Sets & Promotion
Manage version sets for safe deployment promotion from development through production.
Version sets define which agent, state machine, and model preferences a service uses. They let you iterate safely, like Git branches, while keeping production stable.
Purpose: pin exact versions for a service run (agent, state machine, LLM model preferences).
Analogy: treat version sets like Git branches for your service configuration.
Every service carries two special sets, edge and release, with platform-enforced guardrails:
What Each Special Set Means
edge(locked default settings)Always the latest agent and state machine, with no explicit LLM preferences.
Cannot be updated via the upsert API and cannot be deleted.
Use it for quick local validation or smoke checks, not for stable user exposure.
release(default exposed to users)Used by conversations and real-time APIs when
service_version_set_nameis not provided.Cannot be deleted, but can be updated to promote a tested configuration to production.
Creating and Updating Version Sets
Create/Update: use the Service Version Set upsert API to create named sets (for example,
personal-alex,test,preview). All sets exceptedgeare updatable.Delete: allowed for custom sets, but not for
edgeorrelease. Deletion is blocked if a set is referenced by any simulation unit tests.Permissions:
Create:
Service:CreateVersionSetUpdate:
Service:UpdateVersionSetDelete:
Service:DeleteVersionSet
How Version Sets Are Used at Runtime
Conversation APIs default to
releaseifservice_version_set_nameis omitted.Simulation unit tests and test runs must explicitly specify the target version set.
Services are created with both
edgeandreleaseby default.releaseequalsedgeunless you specify otherwise at creation time.
Recommended Workflow (Git-Branch Style)
Personal branch
Create a personal version set (for example,
personal-yourname) withforge version-set upsert personal-yourname -s MyService -e <env> --latest --apply, pin agent and state machine versions, and set LLM preferences.Iterate locally and validate via small, focused simulation unit tests.
Merge into
testUpsert the shared
testversion set with your candidate configuration (--copy-from personal-yourname).Run your simulation unit test set on
test. Fix regressions here.
Promote to
previewCopy the
testconfiguration intopreviewwithforge version-set upsert preview -s MyService -e <env> --copy-from test --apply.Run the full simulation suite on
previewand conduct stakeholder UAT.
Release
If
previewpasses full sims and UAT, promote withforge version-set promote preview release -s MyService -e <env> --apply, which auto-creates arelease-previousbackup for one-command rollback.Don't delete
releaseoredge. Use them as stable anchors.
Promotion Flow
CLI Reference
The Agent Forge CLI covers the full version-set lifecycle from the terminal: listing and inspecting sets, upserting with pinned or copied configurations, diffing, promoting with auto-backup, rolling back, and discovering services and asset versions. All mutating commands are dry-run by default and run pre-flight validation.
Validation rules for channels, presets, and LLM preferences are driven by service tags. See Channel Tagging: Validation for the canonical rules table.
Practical Tips
Naming Conventions
Names may contain letters, digits,
-, and_only, with a maximum length of 40 characters.Prefer lowercase for readability and consistency.
Examples:
personal-alex,test,preview,release.
Operating Tips
Drift control: treat
releaseas immutable except during deliberate promotion. Keep a changelog of which version set was promoted, when, and by whom.Deprecate rather than delete: the platform blocks deletion of sets referenced by simulations. When many artifacts depend on a set, prefer deprecation and migration over deletion.
Fast rollback: use
forge version-set rollbackto quickly revert to the previous release configuration. Therelease-previousbackup is created automatically when promoting torelease.Observability: compare simulation metrics between
test,preview, andreleaseto quantify impact before promotion.
API Touchpoints
API References
Create a new service. Depending on whether an active service with the same name already exists, the endpoint behaves differently:
- If
is_activeisFalse, creates an inactive new service. - If
is_activeisTrueand no active service with the given name exists, creates a new active service. - If
is_activeisTrueand an active service with the given name exists, this endpoint throws an error.
The new service will automatically contain an edge version set that uses the latest Agent and ServiceHierarchicalStateMachine versions with no LLM model preference.
It will also create a release version set, that will equal to what's specified in the request if the release_version_set is specified, or equal to edge if not.
Permissions
This endpoint requires the following permissions:
Service:CreateServicefor the service to create.Service:CreateVersionSetfor theedgeandreleaseversion sets.
The username should be set to {org_id}_{user_id}, and the password should be the Amigo issued JWT token that identifies the user.
Amigo issued JWT token that identifies an user. It's issued either after logging in through the frontend, or manually through the SignInWithAPIKey endpoint.
An optional organization identifier that indicates from which organization the token is issued. This is used in rare cases where the user to authenticate is making a request for resources in another organization.
The Mongo cluster name to perform this request in. This is usually not needed unless the organization does not exist yet in the Amigo organization infra config database.
[]The ID of the state machine that this service uses.
^[a-f0-9]{24}$The ID of the agent that this service uses.
^[a-f0-9]{24}$The name of this service.
A description of this service.
Whether the newly-created service is active. Only active services are visible to users on the dashboard. You can later adjust the activeness of this service.
A list of keyterms that are easy to get wrong during audio transcriptions that tend to occur commonly in audio sessions using this service.
Succeeded.
The ID of the newly created service.
This error could be thrown due to the following reasons:
- The specified ID for agent or service hierarchical state machine versions in the
releaseversion set does not belong to the agent or service hierarchical state machine of the service. - The specified agent or state machine doesn't have any versions.
- The specified LLM config is invalid.
Invalid authorization credentials.
Missing required permissions.
The specified organization, agent, or service hierarchical state machine do not exist.
An active service with the given name already exists.
Invalid request path parameter or request body failed validation.
The user has exceeded the rate limit of 20 requests per minute for this endpoint.
The service is going through temporary maintenance.
POST /v1/{organization}/service/ HTTP/1.1
Host: api.amigo.ai
Authorization: Bearer YOUR_SECRET_TOKEN
X-ORG-ID: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 424
{
"service_hierarchical_state_machine_id": "text",
"agent_id": "text",
"name": "text",
"description": "text",
"is_active": true,
"release_version_set": {
"agent_version_number": 1,
"service_hierarchical_state_machine_version_number": 1,
"llm_model_preferences": {
"ANY_ADDITIONAL_PROPERTY": {
"llm_name": "openai_gpt-5.2-2025-12-11",
"params": {
"ANY_ADDITIONAL_PROPERTY": "anything"
}
}
}
},
"keyterms": [
"text"
],
"tags": {
"ANY_ADDITIONAL_PROPERTY": "text"
}
}{
"id": "text"
}Upsert a service version set
Upsert a version set for the specified service. Replace the existing version set with the same name if any, or create a new one.
Note that the edge version set cannot be updated.
Permissions
This endpoint may require the following permissions:
Service:CreateVersionSetif the version set does not exist.Service:UpdateVersionSetif the version set already exists.
The username should be set to {org_id}_{user_id}, and the password should be the Amigo issued JWT token that identifies the user.
Amigo issued JWT token that identifies an user. It's issued either after logging in through the frontend, or manually through the SignInWithAPIKey endpoint.
An optional organization identifier that indicates from which organization the token is issued. This is used in rare cases where the user to authenticate is making a request for resources in another organization.
Identifier of the service.
^[a-f0-9]{24}$Name of the version set to upsert.
^[A-Za-z0-9_-]+$The Mongo cluster name to perform this request in. This is usually not needed unless the organization does not exist yet in the Amigo organization infra config database.
[]Succeeded.
No content
The agent or service hierarchical state machine version in the request do not belong to the agent or state machine of the service, or attempted to update the edge version set, or the supplied LLM config is invalid.
Invalid authorization credentials.
Missing required permissions.
The specified organization or service do not exist.
Invalid request path parameter or request body failed validation.
The user has exceeded the rate limit of 30 requests per minute for this endpoint.
The service is going through temporary maintenance.
PUT /v1/{organization}/service/{service_id}/version_sets/{version_set_name}/ HTTP/1.1
Host: api.amigo.ai
Authorization: Bearer YOUR_SECRET_TOKEN
X-ORG-ID: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 237
{
"version_set": {
"agent_version_number": 1,
"service_hierarchical_state_machine_version_number": 1,
"llm_model_preferences": {
"ANY_ADDITIONAL_PROPERTY": {
"llm_name": "openai_gpt-5.2-2025-12-11",
"params": {
"ANY_ADDITIONAL_PROPERTY": "anything"
}
}
}
}
}No content
Delete a service version set
Delete the given verion set from the given service.
This endpoint will error if the version set is used in any simulation unit tests.
Permissions
This endpoint requires the following permissions:
Service:DeleteVersionSetfor the version set.
The username should be set to {org_id}_{user_id}, and the password should be the Amigo issued JWT token that identifies the user.
Amigo issued JWT token that identifies an user. It's issued either after logging in through the frontend, or manually through the SignInWithAPIKey endpoint.
An optional organization identifier that indicates from which organization the token is issued. This is used in rare cases where the user to authenticate is making a request for resources in another organization.
Identifier of the service.
^[a-f0-9]{24}$Name of the version set.
The Mongo cluster name to perform this request in. This is usually not needed unless the organization does not exist yet in the Amigo organization infra config database.
[]Succeeded.
No content
The specified version set is used in a simulation unit test, or is the edge or release version set.
Invalid authorization credentials.
Missing required permissions.
The specified organization, service, or version set do not exist.
Invalid request path parameter failed validation.
The user has exceeded the rate limit of 30 requests per minute for this endpoint.
The service is going through temporary maintenance.
DELETE /v1/{organization}/service/{service_id}/version_sets/{version_set_name}/ HTTP/1.1
Host: api.amigo.ai
Authorization: Bearer YOUR_SECRET_TOKEN
X-ORG-ID: YOUR_API_KEY
Accept: */*
No content
These endpoints enforce the guardrails described above: service creation initializes both special sets, the upsert API accepts release and custom sets, and the delete API rejects the protected and simulation-referenced sets.
Last updated
Was this helpful?

