Skip to content
Open
Changes from 10 commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
f575fc2
docs: sync cloud-agent with merged PRs (2026-10-16)
github-actions[bot] Oct 16, 2026
4249b41
Merge remote-tracking branch 'origin/main' into HEAD
github-actions[bot] Oct 17, 2026
811a9d8
Merge remote-tracking branch 'origin/main' into HEAD
github-actions[bot] Oct 20, 2026
a10999c
docs: sync cloud-agent with merged PRs (2026-10-20)
github-actions[bot] Oct 20, 2026
d841a4b
Merge remote-tracking branch 'origin/main' into HEAD
github-actions[bot] Oct 22, 2026
b43b5d9
Merge remote-tracking branch 'origin/main' into HEAD
github-actions[bot] Oct 23, 2026
c995f82
docs: sync cloud-agent with merged PRs (2026-10-23)
github-actions[bot] Oct 23, 2026
cdda06a
Merge remote-tracking branch 'origin/main' into HEAD
github-actions[bot] Oct 24, 2026
907b3b9
docs: sync cloud-agent with merged PRs (2026-10-24)
github-actions[bot] Oct 24, 2026
c71bd73
docs: sync cloud-agent with merged PRs (2026-10-25)
github-actions[bot] Oct 25, 2026
bf2084e
Merge remote-tracking branch 'origin/main' into HEAD
github-actions[bot] Oct 27, 2026
9080230
Merge remote-tracking branch 'origin/main' into HEAD
github-actions[bot] Oct 28, 2026
2bf9656
docs: sync cloud-agent with merged PRs (2026-10-28)
github-actions[bot] Oct 28, 2026
d514059
Merge remote-tracking branch 'origin/main' into HEAD
github-actions[bot] Oct 29, 2026
98dd158
docs: sync cloud-agent with merged PRs (2026-10-29)
github-actions[bot] Oct 29, 2026
9dd4b80
Merge remote-tracking branch 'origin/main' into HEAD
github-actions[bot] Oct 30, 2026
2e66333
docs: sync cloud-agent with merged PRs (2026-10-30)
github-actions[bot] Oct 30, 2026
80ace67
docs: sync cloud-agent with merged PRs (2026-10-31)
github-actions[bot] Oct 31, 2026
f7fffec
Merge remote-tracking branch 'origin/main' into HEAD
github-actions[bot] Nov 3, 2026
cbf7055
docs: sync cloud-agent with merged PRs (2026-11-03)
github-actions[bot] Nov 3, 2026
cf6ad8e
Merge remote-tracking branch 'origin/main' into HEAD
github-actions[bot] Nov 4, 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
62 changes: 60 additions & 2 deletions packages/kilo-docs/pages/code-with-ai/platforms/cloud-agent.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,14 +61,30 @@ On the **General** tab:
- **Default sandbox** — the sandbox for new sessions when a repository has no override. The dialog names the sandbox that **Platform default** resolves to, so you can see what a session uses when nothing else applies.
- **Repository overrides** — set or clear a sandbox and an [agent environment profile](#agent-environment-profiles) for an individual repository.

The **Profiles** tab hosts the full profile manager: the profile list on the left and a detail pane on the right with **Overview**, **Variables**, **Setup**, **Slash Cmds**, **MCP**, **Skills**, and **Agents**.
The **Profiles** tab hosts the full profile manager: the profile list on the left and a detail pane on the right with **Overview**, **Variables**, **Setup**, **Slash Cmds**, **MCP**, **Skills**, **Agents**, **Instructions**, and **Import**.

Each change saves as you make it. In an organization, members see the settings read-only; only owners and admins can change them.

When you start a session, the sandbox is resolved in this order: the sandbox you pick in the new-session field, then the repository override, then the owner default, then the platform default. A saved choice that is no longer offered, or that is not available for the repository, falls through to the next level. The new-session picker preselects the sandbox that applies and tags it **Default**.

Vercel sandboxes are offered for GitHub repositories only. If your account cannot select a sandbox, the settings show where sessions run as plain text and the new-session page hides the picker.

## Repository environments

Each repository can have one saved environment that applies automatically when a session starts, so you do not set up the same workspace for every chat. A repository environment holds:

- A sandbox size
- One setup script
- Variables, including secrets (encrypted at rest)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SUGGESTION: Clarify which repository environment values are encrypted

This bullet groups variables and secrets under "encrypted at rest", but line 86 says "New and replaced variable values are encrypted; values stored before encryption remain compatible", and the profiles section (lines 167-168) deliberately distinguishes plaintext environment variables from encrypted secrets. Readers deciding where to put a sensitive value cannot tell whether plain variables in a repository environment are stored encrypted now, and what the legacy-values caveat means for them. One sentence naming which fields are encrypted would settle it.


Open **Env** beside a repository to create or edit its environment. In an organization, owners and admins can manage repository environments; other members see them read-only.

When a repository environment applies, its setup script replaces the setup commands from the selected [agent environment profile](#agent-environment-profiles). The profile's variables and agent settings still apply. A warning beside the profile picker explains when a profile's setup is replaced.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SUGGESTION: State how repository environment values interact with profile variables and per-session overrides

This paragraph explains that the setup script replaces the profile's setup commands and that "the profile's variables ... still apply", but a repository environment also stores variables. If the repository environment and the profile define the same key, the page does not say which wins. It also does not connect to the later section stating that per-session env vars and startup commands override the selected profile (line 187) — that text now predates the repository environment layer and does not say how a session-level setup command relates to a repository environment's setup script. A short precedence statement would avoid readers guessing.


Repository environments follow the same automatic-resolution policy as automatic profiles: sessions started by automated code reviews, Security Agent sessions, and unknown origins do not automatically receive a repository environment.

Setup scripts run through Bash with `-e -o pipefail`, so the script stops at the first failing command. New and replaced variable values are encrypted; values stored before encryption remain compatible.

## Queueing follow-up messages

The composer stays editable while a session is being prepared or finalized, so you can keep typing and send follow-up messages without waiting for the current turn to finish. Sent messages are queued and processed in order, and the composer shows the current phase while it waits. While a session is still loading, when its connection is unresolved, or when a chat is read-only, the composer does not accept submissions, but anything you have typed is preserved.
Expand Down Expand Up @@ -138,6 +154,12 @@ Use the side-by-side toggle in the file viewer to switch between a unified diff

These are saved snapshots, not a live view of the checkout. Diffs may be unavailable for binary, unsupported, or large files, or when there are too many changes to save in full.

## Previewing a running app

You can preview a web app running inside a Cloud Agent session's sandbox. When a session serves an app on a port, the web interface shows a preview button and preview links, and selecting one opens the running app in a new browser tab. Each preview is served from its own hostname that targets the session's workspace and port, so different sessions and ports do not collide.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SUGGESTION: Consider documenting who can reach a preview URL

This paragraph explains that each preview is served from its own hostname targeting the session's workspace and port, but it does not say whether that URL requires a Kilo sign-in or is reachable by anyone holding the link. Since the preview exposes a web app running inside the sandbox, one sentence about the access model (and whether previews should be treated as shareable/public) would help readers decide what they expose there.


Preview is available to every Cloud Agent account.

## Agent Environment Profiles

Agent environment profiles are reusable bundles of environment settings for cloud-agent sessions. A profile can include:
Expand All @@ -150,6 +172,16 @@ Profiles are owned by either a user or an organization. Names are unique per own

In the web app, manage profiles from the **Profiles** tab of the [Cloud Agent settings dialog](#choosing-where-sessions-run).

Only organization owners and admins can create, edit, or delete an organization-owned profile. Other members can open the profile and use it for a session, but they see its settings read-only. Personal profiles are unaffected — every account can create and manage its own.

### Importing a local configuration

You can import a local Kilo configuration ZIP into a profile to move your agents, slash commands, skills, and instructions into the cloud. Open the profile in the **Profiles** tab and use the **Import** tab.

Kilo validates the archive and shows a preview of what it contains before anything is saved. Review the preview, then confirm to replace the profile's agents, slash commands, skills, and instructions. Definitions that match keep their IDs, and definitions missing from the archive are removed; variables, setup commands, and MCP servers are not changed. If the archive is invalid — for example, it uses a reserved built-in agent name — Kilo shows the validation error and disables the import.

Imported instruction files appear on the profile's **Instructions** tab.

## Environment Variables & Secrets & Startup Commands

You can customize each Cloud Agent session by also defining env vars and startup commands on the fly. These will override any Agent Environment Profile you've selected:
Expand Down Expand Up @@ -248,18 +280,42 @@ When creating a trigger, you choose an **activation mode** that cannot be change

### Configuration

Triggers utilize [agent environment profiles](#agent-environment-profiles) to configure the execution environment for triggered sessions. The agent resolves the profile at runtime, so profile updates apply automatically to future executions. Profiles referenced by triggers cannot be deleted until those triggers are updated or removed.
Triggers can use an [agent environment profile](#agent-environment-profiles) to configure the execution environment for triggered sessions, or run without one and use the repository and account defaults. The agent resolves the profile at runtime, so profile updates apply automatically to future executions. Profiles referenced by triggers cannot be deleted until those triggers are updated or removed.

Which profiles a trigger offers depends on how it runs. Organization triggers run as the organization webhook bot by default and select organization profiles; a trigger created with **Run as webhook creator** selects personal profiles instead. Clearing a profile returns the trigger to the repository and account defaults, and existing triggers keep the profile they already have until you change it.

For models that support it, webhook and scheduled triggers can set a **reasoning effort** next to the model selector. **Default** leaves the model's behavior unchanged; a specific effort applies to each session the trigger starts.

Triggers do not support manual env var or setup command overrides at this time.

### Request body validation

Webhook triggers can validate each request body against a JSON Schema before the request is captured. When a body does not match the schema, Kilo rejects it with HTTP 400 and does not capture or queue it.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SUGGESTION: Explain what validation does with non-JSON bodies

Triggers accept non-JSON content types, and the template variables section says {{bodyJson}} falls back to the raw body when the payload is not parseable JSON, so some requests reaching this validator will not be JSON. This paragraph does not say whether a schema applies to those requests (rejected with 400, skipped, or treated as a parse failure). The next paragraph also lists "value limits" without saying what they are. Naming the accepted body shape and the non-JSON behaviour would make the schema editor's scope clear.


The schema editor supports standard JSON Schema keywords, including `pattern`, `const`, `enum`, nested objects and arrays, required fields, and value limits. Matching uses native ECMAScript regular expressions, which are not bounded in matching time, so prefer `const` for a fixed value such as a URL and `enum` for a fixed list over a complex pattern.

### Sandbox selection

When your account can choose a sandbox, the trigger form shows a **Sandbox** field. Choices are grouped by provider and filtered to the runtimes available for the selected repository, including the Cloudflare Containers runtime where it applies. **Automatic** keeps the default Cloud Agent routing.

Existing triggers keep any allocation they already have. Legacy allocations are not offered when you create a trigger or change its sandbox.

### Run as webhook creator

By default, organization triggers run as the organization webhook bot. When you create an organization trigger, you can instead select **Run as webhook creator** so each session runs with your identity. Organization billing and repository scope stay with the organization.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SUGGESTION: Mention that shared organization settings still apply

This explains that each session runs with your identity, but not that organization profiles and repository settings remain shared and are resolved at run time. Members who can edit those settings can therefore affect what a creator-run session executes under your identity. One sentence about that trust boundary would help readers decide whether to opt in.


This is a create-time choice and cannot be changed later. Only you, the creator, can edit a creator-run trigger or run it on demand. Existing triggers keep using the organization webhook bot; create a new trigger to use creator mode.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SUGGESTION: Clarify where "run it on demand" applies

Creator-run mode also covers scheduled triggers, and only scheduled triggers have an invoke action — the section below states that webhook triggers have no invoke action. Consider saying that you can run a creator-run scheduled trigger on demand, so readers do not look for a Run action on creator-run webhook triggers.


Creator-run webhooks require shared-secret authentication. Set a header name and a secret of at least 16 characters when you create the trigger, and send the same header with every request. Kilo revalidates your account, the organization, and your direct membership before each delivery and retry. If that authorization fails, the request fails instead of falling back to the organization bot.

### Scheduled Triggers

Scheduled triggers fire on a recurring schedule using cron expressions. You can configure them with a simple frequency picker (every 10 minutes, hourly, daily, weekly) or enter a raw cron expression for full control. Each trigger has a configurable timezone (default: UTC) and handles daylight saving time transitions automatically.

The minimum schedule interval is 10 minutes. Scheduled triggers use `{{scheduledTime}}` and `{{timestamp}}` as prompt template variables (webhook-specific variables like `{{body}}` are not available since there is no inbound HTTP request).

Scheduled triggers do not accept inbound requests. They run only from their schedule or from the invoke action described below.

### Invoking a scheduled trigger on demand

To run an active scheduled trigger immediately, select the **Play** action on its row and confirm. When editing one, use **Save and invoke now** to save your changes before starting the run. Paused triggers cannot be invoked, and webhook triggers have no invoke action.
Expand Down Expand Up @@ -317,6 +373,8 @@ You can reference data in a trigger’s prompt template using these placeholders
- `{{scheduledTime}}` - the time the schedule fired (ISO string)
- `{{timestamp}}` - capture timestamp (ISO string)

Kilo expands placeholders in the prompt template once. A placeholder that arrives inside captured request data, such as `{{headers}}` within a webhook body, stays as literal text and is not expanded again.

{% callout type="warning" title="Security Considerations" %}
Care should be taken when deciding to use webhooks as they are susceptible to prompt injection attacks. Especially in scenarios where webhook payloads may contain untrusted input. At this time we recommend using webhooks only for trusted sources.
{% /callout %}
Expand Down