Skip to main content
This guide walks you through running Agent Stack in your own self-hosted environment so you can evaluate, develop, and integrate agents as backend services. Agent Stack provides a consistent runtime for agents—handling model access, storage, authentication, and service wiring—so teams can move from agent code to a running service with minimal setup. Agent Stack deploys with Kubernetes via our provided Helm chart, ensuring a standardized setup within your infrastructure. Agent Stack is designed for trusted environments and early-stage integration work. It’s well suited for local development, shared team environments, and internal evaluation. It is not intended to be directly exposed to untrusted public traffic or used as a hardened, multi-tenant production platform today. If you’re evaluating Agent Stack for broader organizational use, deploy it behind your existing network and security boundaries. If you’re an application or agent developer, this guide helps you get agents running in your deployment environment and callable from your application. If you’re part of a platform or IT team, this guide provides a concrete runtime to assess how agent services run inside your infrastructure using our Helm-based deployment, how they integrate with your security and observability tooling, and how they fit your deployment standards. Proceed to the installation guide below to configure your environment and deploy the Agent Stack cluster.

Requirements

Before deployment, ensure your environment meets these specifications:
OpenShift Users: Use the OpenShift CLI for login and administration.

Deployment Steps

1. Generate Encryption Key

Agent Stack requires an encryption key for secure data handling. Generate this using Python before creating your configuration file.

2. Create Configuration File

Create a config.yaml file to define your registry, agents, and security keys. This is a minimal example, more advanced options are explained in the Configuration Options section.

3. Install the Chart

Deploy the stack to your cluster using Helm.
It may take a few minutes for the pods to start.

4. Port-Forwarding

By default, ingress is not configured. You can port-forward the service to access the platform. In a separate terminal, run:

5. Setup the LLM

After the platform becomes ready, set up your model provider (and login if auth is enabled):

6. Test the Deployment

Verify the installation by listing available agents and running a test command:

Configuration Options

Authentication & Security Settings

The current authentication model is basic and intended for development use. For any deployment beyond local testing, carefully consider your security requirements and network access controls.

Disable Authentication

For local testing environments without authentication.

Basic Authentication

A straightforward method requiring an admin password for certain endpoints.

Bundled Keycloak (Default OIDC)

Use an internal Keycloak instance to handle OIDC and bridge to GitHub, Google, or SAML. Keycloak is deployed automatically when auth.enabled is true.

External OIDC Provider

Connect your own OIDC provider (e.g., Auth0, Okta, or your own Keycloak) by disabling the bundled Keycloak.
Critical: Endpoint ExposureIf using OIDC (Bundled or External), you must expose the following endpoints publicly via Ingress, Gateway API, OpenShift Routes, or other tools:
  • UI: https://example.com
  • API: https://api.example.com used by the CLI to authenticate
  • Keycloak: https://keycloak.example.com used by the UI and CLI to authenticate
⚠️ Failure to configure these endpoints with proper https may leave your application vulnerable.

Accessing & Configuring Keycloak

  • Local Access: kubectl port-forward svc/agentstack-keycloak 8336:8336 -> Access at http://localhost:8336
  • Production Access: Create an Ingress for the agentstack-keycloak service.
  • Setup: Log in (default credentials: admin / retrieve from secret). -> navigate to Identity Providers -> add your provider (GitHub, Google, etc.).
Email Verification Required:Agent Stack requires the email_verified claim to be true in JWT tokens. Ensure:
  • Users verify emails before authenticating
  • The email_verified claim is mapped to the token (included by default in the email scope)
  • External providers pass the email verification status correctly
Without verified emails, authentication will fail with “Verified email not found” error.
The Agent Stack Keycloak integration is automatically provisioned with the following architecture:Realm: agentstackClients:
  • agentstack-server: Backend service client (Confidential, Service Accounts enabled).
  • agentstack-ui: Frontend UI client (Confidential, Standard Flow).
  • agentstack-cli: Command Line Interface client (Public, Standard Flow).
Roles:
  • agentstack-admin: Full system access.
  • agentstack-developer: Access to agent management.
Audiences:
  • Audience mappers are dynamically configured to ensure tokens are valid for the UI and API URLs defined in your config.

Exposing the Platform

To move beyond local port-forwarding, you must expose the following services using Ingress or OpenShift Routes.

Configuring External Services & Storage

By default, Agent Stack includes PostgreSQL and SeaweedFS (S3-compatible storage). For production environments, it is highly recommended to use external, managed services.

External PostgreSQL

To use an external PostgreSQL instance, disable the built-in subchart and provide connection details. This is required if you prefer a managed database like AWS RDS or Google Cloud SQL. Example configuration:
If the migration fails while installing the vector extension, you can disable automated creation and run the SQL manually.
Then make sure the following SQL statements were executed in your database:

External S3 support

You may want to have Agent Stack connect to an external object storage rather than installing seaweedfs inside your cluster. This chart allows you to specify credentials for an external storage streaming with the externalS3. You should also disable the seaweedfs installation with the seaweedfs.enabled option. Example configuration:

Redis

Redis is used for rate limiting and caching. While disabled by default, it is required if replicaCount > 1 to ensure counters are synchronized across replicas. Enable Built-in Redis:
External Redis: To use an external Redis instance, ensure the built-in subchart is disabled (default) and provide connection details:

Security and Traffic Control

Rate Limiting

Rate limiting is recommended for production environments as a protection against overloading the platform.
If you are running multiple replicas (replicaCount > 1), Redis is required for rate limiting to work correctly across all instances. Without Redis, each replica maintains its own rate limit counters, allowing users to exceed limits by distributing requests across replicas.

Cross-Origin Resource Sharing Configuration

Agent Stack supports Cross-Origin Resource Sharing (CORS) to allow web applications hosted on different domains to interact with the Agent Stack API.
  • cors.enabled: Set to true to enable CORS. Default is false.
  • cors.allowOrigins: A list of origins (e.g., http://localhost:3000) that are allowed to make cross-site requests to the Agent Stack API.
  • cors.allowMethods: A list of HTTP methods (e.g., GET, POST) that are allowed for cross-origin requests. Default is ["*"].
  • cors.allowHeaders: A list of HTTP request headers (e.g., Content-Type, Authorization) that can be used when making the actual cross-origin request. Default is ["*"].
  • cors.allowCredentials: Set to true to indicate that the client can send cookies and HTTP authentication credentials with the cross-origin request. Note that allowOrigins cannot be ["*"] when allowCredentials is true. Default is false.

Agent Management

To manage agents within Agent Stack, you must configure how the platform accesses existing images, how it registers them for use, and how it builds new agents from source code.

Configuring Private Access

If your agent images or source code are hosted in private environments, you must provide authentication credentials to allow the cluster to retrieve them.

Private Image Registries

When using agents stored in private Docker registries, you must specify the name of a Kubernetes custom-registry-secret. This allows the cluster to pull the images during deployment.

Private GitHub Repositories

For building agents from private or Enterprise GitHub repositories, Agent Stack supports both Personal Access Token (PAT) and GitHub Apps. This configuration enables the build engine to clone your source code.

Agent Registration

Once access is configured, you must define which agents are available to the platform. You can do this by listing specific images or by syncing with a remote catalog.

Static Agent Registration

Use this method to manually define specific agent images and their unique environment variables.
To upgrade an agent, change its version tag and redeploy using helm upgrade.

External Agent Registry

Instead of manual listing, you can point to a remote registry file. This is ideal for teams managing a large, dynamic catalog of agents.
To upgrade an agent, change its version in the registry and wait for automatic synchronization (up to 10 minutes).

Agent Builds

Agents can be built from a GitHub repository directly in the cluster. To enable this feature, you will need to setup a few things:
  • Docker image registry credentials with write permissions, see Private image registries
  • GitHub credentials to access private or enterprise GitHub repositories (optional)
  • External cluster for better security (optional)
OpenShift Users: In-cluster builds require a service account with the appropriate Security Context Constraints (SCC) to allow the elevated permissions necessary for container image construction.

Advanced Configuration

The guide above covers the primary configuration paths for production environments. For a comprehensive list of every available parameter, including low-level resource limits, node selectors, and detailed sub-chart settings, refer to the source configuration file. All configuration options, including their default values and technical descriptions, are documented in the values.yaml file within the official repository. If your infrastructure has specific requirements (such as custom sidecars, unique volume mounts, or specific network policies) that are not currently exposed via the Helm chart, please open a GitHub issue to request a new configuration toggle.

Operations & Maintenance

Management Commands

Upgrading

Once Agent Stack is running, use these Helm and kubectl commands to manage the lifecycle of your deployment.

Troubleshooting

If you encounter issues during or after deployment, use the following commands and checklists to diagnose the problem.

Common Issues

Platform not starting:
Authentication issues:
  • Redirect URIs: Your Identity Provider must whitelist https://<your-url>/api/auth/callback. For CLI usage, you must also whitelist http://localhost:9001/callback.
  • CLI Application: Consider creating a separate public OIDC application for the CLI
  • Audience Claim: The audience claim in your JWT must match the public URL of your application exactly, with no trailing slash (e.g., https://example.com).
  • Proxy Headers: If you are behind a load balancer or ingress, trustProxyHeaders: true must be enabled in your config to correctly forward request URLs.