Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
69b8f8d
docs: add v0.10 release notes and update upgrade guide for 0.10 beta1
Rachael-Graham Jul 27, 2026
a488649
docs: add v0.10 beta2 release notes
Rachael-Graham Jul 27, 2026
b9422af
docs: add v0.10 beta3 release notes
Rachael-Graham Jul 27, 2026
4e266fd
Update page.mdx
Rachael-Graham Jul 27, 2026
511e1bc
Apply suggestions from code review
Rachael-Graham Jul 27, 2026
29c0b4f
edits
Rachael-Graham Jul 27, 2026
7409daf
Merge pull request #420 from Rachael-Graham/rlg-0.10.x-betas
Rachael-Graham Jul 27, 2026
9fad8d3
Update page.mdx
Rachael-Graham Jul 27, 2026
505a06b
other doc guides
Rachael-Graham Jul 27, 2026
731300d
links
Rachael-Graham Jul 27, 2026
0607b93
beta10
Rachael-Graham Jul 27, 2026
4c07f90
beta11
Rachael-Graham Jul 27, 2026
eb24bcd
Update src/app/docs/kagent/observability/launch-ui/page.mdx
Rachael-Graham Jul 28, 2026
b4d863d
updates
Rachael-Graham Jul 28, 2026
7a36826
fixes
Rachael-Graham Jul 28, 2026
f623e20
Merge branch 'betas-4+' into betas-10+
Rachael-Graham Jul 28, 2026
8deeec9
Merge pull request #421 from kagent-dev/betas-4+
Rachael-Graham Jul 28, 2026
aab09dc
Merge branch 'v0.10.0-docs' into betas-10+
Rachael-Graham Jul 28, 2026
fb61470
Update page.mdx
Rachael-Graham Jul 28, 2026
92e3253
Update page.mdx
Rachael-Graham Jul 28, 2026
1559b81
edits
Rachael-Graham Jul 28, 2026
631797f
Update page.mdx
Rachael-Graham Jul 28, 2026
7bb02d4
Merge pull request #423 from kagent-dev/betas-10+
Rachael-Graham Jul 28, 2026
7ff69ad
gemini.maxOutputTokens
Rachael-Graham Aug 5, 2026
55af45b
Bedrock guardrails & timeouts
Rachael-Graham Aug 5, 2026
fde24b2
agent deploy config (envFrom & deploymentAnnotations)
Rachael-Graham Aug 5, 2026
2632fbd
Disable default ModelConfig
Rachael-Graham Aug 5, 2026
16193f7
Rel notes
Rachael-Graham Aug 5, 2026
baff7e5
wording edits
Rachael-Graham Aug 5, 2026
232d65a
Add links to other guides in relnotes
Rachael-Graham Aug 5, 2026
961bfd8
Merge pull request #436 from kagent-dev/0.10.0-rc1-docs
Rachael-Graham Aug 5, 2026
d044afa
Merge branch 'main' into v0.10.0-docs
Rachael-Graham Aug 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/app/docs/kagent/concepts/agent-substrate/page.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,9 @@ Agent Substrate is composed of a control plane, a data plane, and snapshot stora

### Declarative agents

Run a (Go) declarative agent on Agent Substrate by creating a `SandboxAgent` resource. It carries the same spec as a regular `Agent`, but the kagent controller runs it as a sandboxed workload on the runtime instead of a plain Deployment.
Run a declarative agent on Agent Substrate by creating a `SandboxAgent` resource. It carries the same spec as a regular `Agent`, but the kagent controller runs it as a sandboxed workload on the runtime instead of a plain Deployment. All three declarative runtimes are supported: **Go** (default), **Python**, and **BYO**.

Session history for Go and Python declarative sandbox agents is persisted to a local SQLite database backed by the agent's `durableDir` volume, so conversation state survives pod restarts and Deployment rollouts. Session metadata is mirrored to PostgreSQL to support session-listing APIs. BYO agents do not get local session storage automatically; set the `kagent.dev/local-session-storage` annotation on the `SandboxAgent` if your BYO agent implements its own local store.

### AgentHarness

Expand Down
77 changes: 69 additions & 8 deletions src/app/docs/kagent/concepts/agents/page.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -238,13 +238,13 @@ To learn more about using skills in your agents, see the [Skills example guide](

## Runtime

You can choose between two Agent Development Kit (ADK) runtimes for declarative agents: **Python** (default) and **Go**.
You can choose between two Agent Development Kit (ADK) runtimes for declarative agents: **Go** (default) and **Python**.

| Feature | Python ADK | Go ADK |
|---------|-----------|--------|
| Startup time | ~15 seconds | ~2 seconds |
| Ecosystem | Google ADK, LangGraph, CrewAI integrations | Native Go implementation |
| Resource usage | Higher (Python runtime) | Lower (compiled binary) |
| Feature | Go ADK | Python ADK |
|---------|--------|-----------|
| Startup time | ~2 seconds | ~15 seconds |
| Ecosystem | Native Go implementation | Google ADK, LangGraph, CrewAI integrations |
| Resource usage | Lower (compiled binary) | Higher (Python runtime) |
| Default | Yes | No |
| Memory support | Yes | Yes |
| MCP support | Yes | Yes |
Expand All @@ -256,7 +256,7 @@ Select the runtime via the `runtime` field in the declarative agent spec.
spec:
type: Declarative
declarative:
runtime: go # or "python" (default)
runtime: go # or "python"
modelConfig: default-model-config
systemMessage: "You are a helpful agent."
```
Expand All @@ -267,6 +267,45 @@ spec:

For more benchmarks and details, see the [Go vs Python runtime blog post](/blog/go-vs-python-runtime).

## Deployment configuration

Control how the agent's Kubernetes Deployment is configured in the `spec.declarative.deployment` stanza.

### Environment variables

Use `env` to set individual environment variables, or `envFrom` to bulk-inject all keys from a ConfigMap or Secret.

```yaml
spec:
declarative:
deployment:
env:
- name: LOG_LEVEL
value: debug
envFrom:
- configMapRef:
name: my-agent-config
- secretRef:
name: my-agent-secrets
```

### Deployment annotations

Use `deploymentAnnotations` to add annotations to the Deployment object itself. This field is distinct from the `annotations` field, which targets pod template metadata only.

```yaml
spec:
declarative:
deployment:
deploymentAnnotations:
argocd.argoproj.io/sync-wave: "5"
notifications.argoproj.io/subscribe.on-degraded.slack: my-channel
annotations:
prometheus.io/scrape: "true" # pod template only
```

`deploymentAnnotations` is useful for GitOps tooling such as Argo CD sync waves and Flux annotations, which key off Deployment-level metadata rather than pod metadata.

## Memory

Your agents can save and retrieve relevant context across conversations using vector similarity search. When you enable memory on an agent, it receives three additional tools (`save_memory`, `load_memory`, `prefetch_memory`) and automatically extracts key information every 5th user message.
Expand Down Expand Up @@ -300,10 +339,32 @@ Compaction removes older conversation events to free up space in the context win

## Sandboxed Agents

You can run a declarative agent in an isolated sandbox by creating a `SandboxAgent` resource instead of a regular `Agent`. A `SandboxAgent` runs on [Agent Substrate](/docs/kagent/concepts/agent-substrate): the kagent controller runs it as a gVisor-sandboxed actor instead of a Deployment, snapshotting it to object storage when idle and rehydrating it on demand. The spec mirrors the `Agent` spec, with a few constraints: sandboxed agents always use the Go ADK runtime, and `spec.skills` and `BYO` agents are not supported. Configure substrate placement with the optional `spec.substrate` field (for example, `workerPoolRef`).
You can run a declarative agent in an isolated sandbox by creating a `SandboxAgent` resource instead of a regular `Agent`. A `SandboxAgent` runs on [Agent Substrate](/docs/kagent/concepts/agent-substrate): the kagent controller runs it as a gVisor-sandboxed actor instead of a Deployment, snapshotting it to object storage when idle and rehydrating it on demand. The spec mirrors the `Agent` spec. All three runtimes are supported: **Go** (default), **Python**, and **BYO**. For Go and Python agents, session history is persisted to a local SQLite database in the agent's `durableDir` volume, so conversation state survives pod restarts and Deployment rollouts. BYO agents do not get local session storage automatically. Configure substrate placement with the optional `spec.substrate` field (for example, `workerPoolRef`).

For setup steps, see the [Agent Substrate example](/docs/kagent/examples/agent-substrate).

## A2A AgentCard metadata

When another agent or client discovers your agent over the [A2A protocol](https://google.github.io/A2A/specification/#5-agent-discovery-using-an-agent-card), it reads a machine-readable AgentCard from your agent's `/.well-known/agent.json` endpoint. You can enrich that card with optional metadata fields on the `Agent` spec.

```yaml
spec:
iconUrl: https://example.com/icons/my-agent.png
documentationUrl: https://docs.example.com/my-agent/
version: "1.0.0"
provider:
organization: My Organization
url: https://example.com
```

| Field | Description |
|-------|-------------|
| `iconUrl` | URL to an icon image representing the agent. Must be a valid URI. |
| `documentationUrl` | URL to human-readable documentation for the agent. Must be a valid URI. |
| `version` | Version string for the agent, such as `"1.0.0"`. |
| `provider.organization` | Name of the organization responsible for the agent. |
| `provider.url` | URL to the agent provider's website or documentation. Must be a valid URI. |

## Agents as Tools

kagent also supports using agents as tools. Any agent you create can be referenced and used by other agents you have. An example use case would be to have a PromQL agent that knows how to create PromQL queries from natural language. Then you'd create a second agent that would use the PromQL agent whenever it needs to create a PromQL query.
Expand Down
137 changes: 137 additions & 0 deletions src/app/docs/kagent/introduction/installation/page.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -317,6 +317,143 @@ controller:

This example loads all key-value pairs from the `controller-secrets` secret as environment variables in the controller pod.

### Customize Kubernetes resources

Use the following Helm values to meet cluster admission policies or integrate with external tooling.

#### Pod labels

Add labels to the pod templates of the controller and UI Deployments. Pod labels can be useful for clusters with policies (OPA Gatekeeper, Kyverno) that require specific labels on every pod.

A global `podLabels` map applies to all component pods; per-component values override it:

```yaml
podLabels:
team: platform

controller:
podLabels:
cost-center: infra

ui:
podLabels:
cost-center: frontend
```

To add labels to all **agent** pods, use `controller.agentDeployment.podLabels`.

#### ServiceAccount annotations

Add annotations to the controller and UI ServiceAccount resources. These annotations are required for cloud provider workload identity integrations (GCP Workload Identity, AWS IRSA, Azure Workload Identity) that grant IAM permissions to workloads by annotating their Kubernetes ServiceAccount.

```yaml
controller:
serviceAccount:
annotations:
iam.gke.io/gcp-service-account: kagent@my-project.iam.gserviceaccount.com

ui:
serviceAccount:
annotations:
iam.gke.io/gcp-service-account: kagent-ui@my-project.iam.gserviceaccount.com
```

#### Deployment annotations

Add annotations to the controller and UI Deployment resources. For example, to add annotations for cluster autoscaler or Datadog:

```yaml
controller:
annotations:
cluster-autoscaler.kubernetes.io/safe-to-evict: "false"

ui:
annotations:
cluster-autoscaler.kubernetes.io/safe-to-evict: "false"
```

To add annotations to the controller **Service** (for AWS Load Balancer Controller or ExternalDNS), use `controller.service.annotations`.

#### Default nodeSelector for agent deployments

Set a default `nodeSelector` that is applied to every agent Deployment that the controller creates. This setting can be useful when admission policies require a `nodeSelector` on all Deployments, since agents created through the UI carry none by default.

```yaml
controller:
agentDeployment:
nodeSelector:
kubernetes.io/os: linux
```

Per-agent `nodeSelector` values in the `Agent` spec take precedence over this default.

#### Deploy companion resources with extraObjects

Use `extraObjects` to deploy arbitrary Kubernetes manifests in the same Helm chart lifecycle as kagent. Entries are rendered through `tpl`, so they can reference the release context.

```yaml
extraObjects:
- apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: kagent-api-key
namespace: "{{ .Release.Namespace }}"
spec:
refreshInterval: 1h
secretStoreRef:
name: my-store
kind: ClusterSecretStore
target:
name: kagent-api-key
data:
- secretKey: ANTHROPIC_API_KEY
remoteRef:
key: anthropic-api-key
```

### Disable the default ModelConfig

By default, kagent creates a `ModelConfig` resource and associated Kubernetes Secret for the provider that you set with `providers.default`. To skip this and manage `ModelConfig` resources entirely outside the Helm chart, set `providers` to null:

```yaml
providers: null
```

When `providers` is null (or omitted), kagent does not create the `ModelConfig` or its Secret. Use this setting when you apply `ModelConfig` resources through GitOps, a separate Helm chart, or another external process.

### Private registry and image mirroring

If your cluster cannot pull from `ghcr.io` directly, such as in air-gapped environments, corporate proxies, or mandatory image scanning, you can mirror the kagent images to an internal registry and configure the chart to pull from this registry.

kagent uses three independently configurable image locations:

| Helm value | Default image | Description |
|---|---|---|
| `image.registry` | `ghcr.io` | Global registry prefix applied to all images that do not set their own registry. |
| `controller.agentImage` | `ghcr.io/kagent-dev/kagent/app` | Python ADK runtime image used for Python and BYO declarative agents. |
| `controller.goAgentImage` | `ghcr.io/kagent-dev/kagent/golang-adk` | Go ADK runtime image used for Go declarative agents. Must be set separately from `agentImage`. |

To redirect all images to an internal mirror, set `image.registry` to your registry and override both agent images:

```yaml
image:
registry: my-registry.example.com

controller:
agentImage:
registry: my-registry.example.com
repository: kagent/app
tag: v0.10.0
goAgentImage:
registry: my-registry.example.com
repository: kagent/golang-adk
tag: v0.10.0
```

When unset, the `registry` and `pullPolicy` fields of `agentImage` and `goAgentImage` default to the global `image.registry` and `image.pullPolicy` values. For many mirror setups, setting only `image.registry` and overriding `repository` and `tag` on each image is sufficient.

> **Note**: If you set only `agentImage` without also setting `controller.goAgentImage`, Go declarative agents still try to pull the Go ADK image from its default location, `ghcr.io`. The controller logs a startup warning when the two image registries differ.

## Uninstallation

Refer to the [Uninstall](/docs/kagent/operations/uninstall) guide.
Expand Down
52 changes: 52 additions & 0 deletions src/app/docs/kagent/observability/launch-ui/page.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,58 @@ If you prefer to manually set up port-forwarding, or if you're on a platform whe

3. When you're done, stop the port-forward by pressing `Ctrl+C` in the terminal where the port-forward is running.

## Expose the UI outside the cluster

Port-forwarding is suitable for local access. For persistent or team-accessible deployments, use one of the following options.

### LoadBalancer service

Set `ui.service.type: LoadBalancer` in your Helm values to provision a cloud load balancer for the UI service.

```yaml
ui:
service:
type: LoadBalancer
```

After the load balancer is provisioned, get the external IP or hostname from the service.

```bash
kubectl get svc -n kagent kagent-ui
```

### OpenShift Route

On OpenShift clusters, kagent automatically creates an edge-terminated `Route` for the UI when the `route.openshift.io/v1` API is present. The route is enabled by default via `ui.route.enabled: true`.

The default HAProxy timeout is overridden to 120 minutes to prevent long-lived A2A and SSE streams from being terminated. To adjust the timeout:

```yaml
ui:
openshiftRoute:
annotations:
haproxy.router.openshift.io/timeout: 60m
```

To disable the auto-created Route and front the UI with your own ingress instead, set `ui.route.enabled: false`.

### Gateway API HTTPRoute

If your cluster uses a Gateway API implementation such as kgateway, Istio, or Envoy Gateway, you can enable an `HTTPRoute` for the UI with `ui.httpRoute.enabled: true`.

```yaml
ui:
httpRoute:
enabled: true
parentRefs:
- name: my-gateway
namespace: gateway-system
hostnames:
- kagent.example.com
```

The `parentRefs` field is required and must reference an existing `Gateway`. The `HTTPRoute` resource requires the Gateway API CRDs (`gateway.networking.k8s.io/v1`) to be installed in your cluster.

## Next steps

You can use the UI to view and manage your agents, tools, and models. For more information, see the following guides:
Expand Down
37 changes: 37 additions & 0 deletions src/app/docs/kagent/operations/operational-considerations/page.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,43 @@ spec:
```
</div>

## Long-running connections

Agents that run multi-step tasks or stream results over SSE can take minutes or longer to respond. To ensure that long-running sessions work correctly from end to end, tune the following timeout values together.

### Streaming timeouts

The UI uses nginx as a sidecar proxy and a client-side EventSource for streaming. Both have independent inactivity timeouts that default to 1800 seconds (30 minutes).

| Helm value | Default | Description |
|---|---|---|
| `ui.streamTimeoutSeconds` | `1800` | Client-side EventSource inactivity timeout. |
| `ui.nginx.proxyReadTimeout` | `1800s` | nginx `proxy_read_timeout` — max time between successive reads from the upstream. |
| `ui.nginx.proxySendTimeout` | `1800s` | nginx `proxy_send_timeout` — max time between successive writes to the upstream. |

To ensure that the nginx proxy is not the silent limit, set `ui.streamTimeoutSeconds` to a value greater than or equal to `ui.nginx.proxyReadTimeout`. For example, to support 2-hour sessions:

```yaml
ui:
streamTimeoutSeconds: 7200
nginx:
proxyReadTimeout: 7200s
proxySendTimeout: 7200s
```

On OpenShift, also set the HAProxy route timeout via `ui.openshiftRoute.annotations`. For more information, see [Expose the UI outside the cluster](/docs/kagent/observability/launch-ui#expose-the-ui-outside-the-cluster).

### A2A client timeout

When one agent calls another agent as a tool over the A2A protocol, the request uses an HTTP client with a configurable timeout. The default is no timeout (`""`), which replaced a previous hard-coded 3-minute limit.

If you need to enforce a ceiling on A2A call duration, set `controller.a2aClientTimeout`:

```yaml
controller:
a2aClientTimeout: "10m" # empty string = no timeout (default)
```

## Proxy configuration for agent traffic

When agents and MCP servers run behind an API gateway or proxy, you can configure kagent to route agent-to-agent and agent-to-MCP traffic through that proxy. Set `proxy.url` in your Helm values to the proxy endpoint.
Expand Down
Loading
Loading