# HelixML > AI agent orchestration platform. Build AI agents with skills, knowledge, sandboxes, and integrations. ## Docs - [Overview](https://helix.ml/docs): What Helix is, how it runs, and where to start. - [Quickstart](https://helix.ml/docs/quickstart): Create an account, connect a repository, run your first spec task, and watch an agent open a pull request. Fifteen minutes, one engine. - [Helix Cloud](https://helix.ml/docs/install-cloud): Managed Helix. Sign up, connect a repo, and run agents. No installation, no infrastructure to manage. - [Mac App](https://helix.ml/docs/install-mac): Run the full Helix stack locally on Apple Silicon. Credentials and code stay on your machine. - [Self-hosting](https://helix.ml/docs/install-self-hosting): Run Helix on your own Linux servers or Kubernetes cluster. - [Manage your organisation](https://helix.ml/docs/guide-organizations): Create an organisation, invite members, assign teams, manage API keys and secrets, and configure org-level AI providers. - [Manage your backlog on the Kanban board](https://helix.ml/docs/guide-manage-backlog): Create spec tasks, move them through stages, run agents in parallel, and track progress across your project. - [Connect a source repository](https://helix.ml/docs/guide-connect-repo): Connect GitHub, GitLab, or Bitbucket repositories to a Helix project so agents can read and commit to your code. - [Review an agent's work and merge the PR](https://helix.ml/docs/guide-review-and-merge): How to read an agent's execution, give feedback, review the pull request, and handle edge cases before merging. - [Choose and configure a code agent](https://helix.ml/docs/guide-choose-code-agent): Claude Code, Goose, Qwen Code, and Zed Agent are four pluggable engines for the same agent loop. This guide tells you when to pick which. - [Build an internal knowledge base](https://helix.ml/docs/guide-knowledge-base): Use Helix Code Intelligence to index your codebase and give agents and humans a searchable, always-current understanding of your repositories. - [Configure Goose recipes](https://helix.ml/docs/guide-goose-recipes): How to attach parameterised recipe playbooks to a Goose project, what the recipe file format supports, and how spec-task authors fill in recipe parameters at task creation time. - [Work in a sandbox](https://helix.ml/docs/guide-sandbox): How to interact with an agent's desktop environment. View the live stream, type commands, browse files, and use the terminal. - [Configure LLM providers](https://helix.ml/docs/guide-llm-providers): Connect Anthropic, OpenAI, Google, Groq, AWS Bedrock, NVIDIA NIM, Ollama, and other providers to Helix so agents have inference available. - [Build an agent app](https://helix.ml/docs/guide-agent-apps): Create a conversational AI agent with skills, knowledge, and triggers. Covers the full configuration flow. - [Add RAG knowledge bases](https://helix.ml/docs/guide-rag-knowledge): Attach documents, web content, and data sources to an agent app so it can answer questions grounded in your content. - [Configure triggers](https://helix.ml/docs/guide-triggers): Extend an agent app beyond the chat UI. Respond in Slack, Teams, Discord, on a schedule, or via webhook. - [How the agent loop works](https://helix.ml/docs/concept-agent-loop): The plan→implement→review cycle that every spec task runs through, and why each step exists. - [Projects, spec tasks, and the board](https://helix.ml/docs/concept-projects): The core mental model. What a project is, what a spec task is, and how the Kanban board organises work. - [Agent apps and code agents](https://helix.ml/docs/concept-agents): Helix has two distinct types of agent. Understanding the difference prevents confusion about what each one does and when to use which. - [Sandboxes and the desktop environment](https://helix.ml/docs/concept-sandboxes): What a Helix sandbox is, how isolation works, and what runs inside the containerized Linux desktop that agents use. - [Code intelligence](https://helix.ml/docs/concept-code-intelligence): How Helix builds and uses a deep structural understanding of your codebase, for agents and for humans. - [Security and data residency](https://helix.ml/docs/concept-security): How Helix isolates agent work, where your code and credentials live, and what "runs on your infrastructure" actually means. - [Kodit (Open-Source)](https://helix.ml/docs/kodit): Code and Document Indexing Server - [Helix Org](https://helix.ml/docs/concept-helix-org): Helix Org is a system for running AI agents as persistent workers inside an organisation structure, with roles, streams, and managed activation. - [Configuration reference](https://helix.ml/docs/ref-configuration): Environment variables, Helm values, project YAML, and agent app YAML schema for Helix deployments. - [Supported models and providers](https://helix.ml/docs/ref-models): The LLM providers Helix supports and the model identifiers to use in project and assistant configuration. - [Settings reference](https://helix.ml/docs/ref-settings): Every settings panel in Helix (account, organisation, and admin), with what each control does and where to find it. - [Sandbox runtimes](https://helix.ml/docs/ref-sandbox-runtimes): Desktop environment options, container images, and resource requirements for Helix agent sandboxes. - [Architecture for operators](https://helix.ml/docs/deploy-architecture): How Helix's components fit together. What runs where, what talks to what, and what you need to provide. - [Linux & Kubernetes](https://helix.ml/docs/deploy-linux-kubernetes): Install Helix on a Linux server or Kubernetes cluster, from licensing through first login. - [Sovereign Server](https://helix.ml/docs/deploy-sovereign-server): A 4U rack server with 8× NVIDIA RTX 6000 Pro GPUs and 768 GB VRAM, Helix pre-installed. Ship to your data centre, power on, run hundreds of concurrent agents with zero cloud dependency. - [Mac App — operator settings](https://helix.ml/docs/deploy-mac-operators): VM management, disk expansion, LAN sharing, licensing, and updates for the Mac App. - [Upgrade and migrate](https://helix.ml/docs/deploy-upgrade): How to upgrade a self-hosted Helix deployment to a new version, and how to migrate data between environments. - [Troubleshooting](https://helix.ml/docs/troubleshooting): Common problems and their fixes. If something isn't working, start here. - [Glossary](https://helix.ml/docs/glossary): One definition per concept. Use these terms consistently throughout your work with Helix. --- ## What is Helix? Helix is infrastructure for running AI agents on your own servers. Every agent gets a full isolated environment: desktop, terminal, filesystem, and browser. Your team gets a fleet dashboard showing what every agent is doing in real time. Your data stays on your infrastructure. Helix hosts three kinds of agent workload: **Code agents** work through development tasks: read a spec, plan, implement in an isolated sandbox, and open a pull request. Engineers set direction, approve plans, and review output. See [How the agent loop works](/docs/concept-agent-loop). **Agent apps** are conversational assistants connected to your knowledge, APIs, and communication channels. They respond to user messages, Slack threads, webhooks, and scheduled triggers. See [Build an agent app](/docs/guide-agent-apps). **Helix Org workers** are persistent, role-based agents that operate as part of an organisation. Workers subscribe to event streams, carry out tasks across activations, collaborate with other workers, and escalate decisions to human managers. See [Helix Org](/docs/concept-helix-org). All three share the same foundation: isolated sandboxes, fleet-level observability, and infrastructure you control. ## Where it runs | Deployment | Good for | |---|---| | [Helix Cloud](/docs/install-cloud) | Fastest start — sign up and go | | [Mac App](/docs/install-mac) | Local on Apple Silicon — credentials and code never leave your machine | | [Linux & Kubernetes](/docs/deploy-linux-kubernetes) | Self-hosted on your own servers or any Kubernetes cluster | | [Sovereign Server](/docs/deploy-sovereign-server) | Pre-installed rack server shipped to your data centre — zero cloud dependency | ## Where to start **Evaluating Helix?** → [Quickstart](/docs/quickstart) — one tutorial, one engine, works in under ten minutes. **Building an agent app or knowledge base?** → [Build an agent app](/docs/guide-agent-apps) or [Set up a knowledge base](/docs/guide-rag-knowledge). **Setting up Helix Org workers?** → [Helix Org](/docs/concept-helix-org). **Mid-task and need something specific?** → [Guides](/docs/guide-manage-backlog) — one guide per workflow. **Want to understand the model before making decisions?** → [Concepts](/docs/concept-agent-loop) — the why behind the how. **Deploying to production?** → [Deploy & Operate](/docs/deploy-architecture) — install, configure, scale. --- This tutorial uses Helix Cloud and Claude Code. It picks one path and stays on it — no forks, no "or you could also". Once you've done this once, the [Guides](/docs/guide-manage-backlog) cover everything else. ## 1. Sign up Go to [app.helix.ml](https://app.helix.ml) and sign in with Google. You'll be asked to create an organization name — this can be your company name or your own name for a personal workspace. After signing in, complete the onboarding steps: 1. **Create an organization** — give it a name 2. **Add an AI provider** — the built-in Helix providers work on Cloud; or add your own Anthropic or OpenAI key under **Account → AI Providers** ## 2. Create a project and connect a repository From the dashboard, click **New Project**. Give the project a name that matches what you're building. On the **Repositories** tab, click **Connect & Browse** and follow the GitHub OAuth flow to authorize Helix. Once authorized, pick the repository you want the agent to work in. Helix will index the repository for code intelligence — this runs in the background and takes a few minutes for large repos. ## 3. Write a spec task Inside your new project, click **New Task**. Write a one-paragraph description of what you want done. Be specific about outcomes, not implementation. For example: > Add input validation to the `createUser` form. Email addresses should be validated with a regex. Required fields (name, email) should show an inline error message when left blank on submit. No changes to the backend. Click **Save**, then click **Start Planning**. ## 4. Review and approve the plan The agent enters a planning loop. It reads your repository, analyses the codebase, and produces a step-by-step execution plan pushed to a `helix-specs` branch in your repository. Read the plan. If something looks wrong, highlight the text and submit feedback — the agent will revise. When the plan looks right, click **Approve**. ## 5. Watch the implementation After approval, the agent moves into a sandbox — an isolated Linux desktop with Zed IDE, a terminal, and a browser. You can watch it work live via the video stream in the task view, or switch away and come back later. The agent makes commits on a working branch as it goes. ## 6. Open the pull request When the agent finishes, click **Open PR**. This creates a pull request in GitHub from the agent's working branch. From here, follow your normal review process: run CI, request reviews, check the diff, and merge when you're happy. If CI finds problems, go back to the task and tell the agent what failed — it will fix and push again. --- ## What to do next - [Manage your backlog on the Kanban board](/docs/guide-manage-backlog) — run multiple tasks in parallel - [Connect more repositories](/docs/guide-connect-repo) — GitLab and Bitbucket also work - [Choose a different code agent](/docs/guide-choose-code-agent) — Goose, Qwen Code, and Zed Agent are also available - [How the agent loop works](/docs/concept-agent-loop) — understand the model behind what you just did --- Helix Cloud is the fastest path to running agents. Sign up at [app.helix.ml](https://app.helix.ml). Infrastructure, sandboxes, authentication, and scaling are all managed for you. ## Getting started 1. **Sign up** at [app.helix.ml](https://app.helix.ml) with a Google account 2. **Create an organization** 3. **Add an AI provider** — built-in Helix providers work immediately, or bring your own Anthropic or OpenAI key 4. **Create a project** and connect a GitHub, GitLab, or Bitbucket repository 5. **Write spec tasks** and let agents do the work See the [Quickstart](/docs/quickstart) for a step-by-step walkthrough of the full flow. ## What's included - **Managed sandboxes** — isolated desktop environments provisioned on demand for each spec task - **All LLM providers** — Anthropic, OpenAI, Google, and more available out of the box - **Source control integration** — GitHub, GitLab, and Bitbucket via OAuth - **Code intelligence** — automatic repository indexing with semantic search - **Team access** — invite teammates and share projects ## Running Helix on your own infrastructure? If you want data to stay on your own servers, see: - [Mac App](/docs/install-mac) — local on Apple Silicon, zero cloud dependency - [Linux & Kubernetes install](/docs/deploy-linux-kubernetes) — self-hosted on your own servers or a Kubernetes cluster - [Sovereign Server](/docs/deploy-sovereign-server) — a pre-installed rack server shipped to your data centre --- The Mac app runs the entire Helix platform on your Mac — agents, sandboxes, control plane, and optionally local models. Your SSH keys, `.env` files, tokens, and development data never leave your hardware. Requires **Apple Silicon (M1 or later)** with **16 GB+ unified memory** and **macOS 14 (Sonoma) or later**. ## What runs locally - **Helix control plane** — the API and UI, running on your machine - **Agent sandboxes** — up to 15 isolated desktop environments simultaneously, GPU-accelerated via Apple Silicon - **LAN sharing** — give your team access without exposing anything to the internet For inference, use your Anthropic or OpenAI API key, or run fully local models with Ollama on 64 GB+ unified memory. ## First launch 1. Download and open the Mac app 2. Complete the initial setup wizard — it provisions a local UTM virtual machine for the sandboxes 3. Sign in (local account or connect to Helix Cloud for team features) 4. Open the Helix UI at [http://localhost:8080](http://localhost:8080) 5. Add an AI provider under **Account → AI Providers** 6. Create a project and connect a repository See the [Quickstart](/docs/quickstart) for the full flow from project to pull request. ## Memory and concurrency | Unified memory | Concurrent agent desktops | |---|---| | 16 GB | ~2–3 | | 32 GB | ~6–8 | | 64 GB+ | 12–15, plus local model inference | ## Operator settings For disk expansion, VM management, updates, and LAN sharing configuration, see [Mac App — operator settings](/docs/deploy-mac-operators). ## Don't have Apple Silicon? - [Helix Cloud](/docs/install-cloud) — managed, nothing to install - [Linux & Kubernetes](/docs/deploy-linux-kubernetes) — self-hosted on any server with NVIDIA or AMD GPUs --- Self-hosting Helix is the first chapter of operating it. The install guide lives alongside the GPU configuration, scaling, and observability docs — so the operator lands in one place and finds everything in sequence. **→ [Linux & Kubernetes install](/docs/deploy-linux-kubernetes)** That page covers: - Licensing requirements - Single-server install (Linux with NVIDIA or AMD GPU) - Kubernetes install via Helm (control plane chart + sandbox chart) - External inference provider configuration - Environment variables and tuning ## Air-gapped / enterprise deployments For organisations that require data to stay fully on-premises with no cloud dependency, see: **→ [Sovereign Server](/docs/deploy-sovereign-server)** A pre-configured 4U rack server with Helix pre-installed — plug in, power on, done. ## Just evaluating? If you're not ready to manage infrastructure, start with [Helix Cloud](/docs/install-cloud) — it's free to try and takes under five minutes. --- An organisation is a shared workspace. Members of an organisation can collaborate on agent apps, share knowledge bases, and use org-level resources (providers, secrets, API keys). Most production deployments run inside an organisation. ## Create an organisation 1. Click your account name in the top bar → **Organisations**. 2. Click **New Organisation**. 3. Enter a **Name** and **Slug** (the short URL identifier). The slug is permanent. 4. Optionally set an **Auto-join domain** — any user who signs up with an email address from that domain is automatically added to the organisation. ## Invite members Go to **Organisation → People** and click **Invite Member**. Enter the email address. The invited user receives a link and is added to the organisation on first login. ### Roles | Role | Permissions | |------|-------------| | **Owner** | Full access including billing, org deletion, and member management | | **Admin** | Manage members, providers, secrets, and API keys; cannot delete the org | | **Member** | Use shared resources; create and manage their own agent apps | ## Teams Teams are sub-groups within an organisation. Use them to control which agent apps and resources a group of members can access. 1. Go to **Organisation → Teams**. 2. Click **New Team**, give it a name. 3. Add members to the team. 4. Assign teams to specific agent apps in the app's **Access** tab. ## Organisation API keys Org API keys authenticate API calls to agents on behalf of the organisation (not any individual user). Use them in server-side integrations where you don't want to expose a user's personal key. Go to **Organisation → API Keys** → **New API Key**. Give it a descriptive name and copy the generated key — it is shown only once. Use it in the `Authorization: Bearer ` header for API requests. ## Secrets Secrets store sensitive values (API keys, tokens, passwords) and expose them to agent apps as environment variable references. Storing values as secrets means they never appear in plain text in your agent configuration. ### Create a secret Go to **Organisation → Secrets** → **New Secret**. - **Name** — the reference name used in configurations, e.g., `OPENAI_API_KEY` - **Value** — the secret value (stored encrypted at rest) ### Use a secret Reference a secret anywhere in your agent configuration with `${SECRET_NAME}`: ```yaml # In an API skill header Authorization: Bearer ${OPENAI_API_KEY} # In an MCP server environment variable env: DATABASE_URL: ${DATABASE_URL} ``` Secrets are resolved at runtime and never exposed in logs or API responses. ## Configure org-level AI providers Org-level providers are shared across all members and agent apps in the organisation. Members use org providers without needing to configure their own API keys. Go to **Organisation → Providers** → **Add Provider**. For each provider, enter: - **Provider type** — Anthropic, OpenAI, Google Gemini, Groq, Ollama, Amazon Bedrock, NVIDIA NIM, xAI, or any OpenAI-compatible custom endpoint - **Base URL** — for custom providers - **API key** — use a [secret reference](#secrets) rather than a raw key See [Configure LLM providers](/docs/guide-llm-providers) for per-user provider setup. ## Organisation settings **Organisation → Settings** controls: - **Name** and **Slug** — rename the org (slug changes affect all URLs) - **Auto-join domain** — automatically add users who sign up with a matching email domain - **Delete organisation** — permanent; removes all data including agent apps, knowledge bases, and secrets Only owners can delete an organisation. --- Each Helix project has a Kanban board where spec tasks move through stages: **Draft → Planning → Approved → Implementing → Review → Done**. This guide assumes you've already done the [Quickstart](/docs/quickstart) and have a project with at least one repository connected. ## Creating a spec task Click **New Task** inside a project. Write a one-paragraph description of the desired outcome — not an implementation plan. Good specs describe *what* should be true when done, not *how* to get there. Tips: - Be specific about scope. "Add input validation to the login form" is better than "improve the login page". - Reference specific files, functions, or UI elements if relevant. - State what should *not* change if there's a risk of over-reach. ## Planning and approval Click **Start Planning** on a Draft task. The planning agent reads your repository and produces a step-by-step execution plan, pushing it to a `helix-specs` branch in your repository. **Reviewing the plan:** Read each step. If something looks wrong, highlight the text and submit feedback — the agent will revise and re-plan. **Approving:** When the plan looks right, click **Approve**. This commits to the plan and moves the task to **Implementing**. You can approve or reject without reading every line — the pull request is the real review gate. ## Running tasks in parallel Helix can run multiple tasks at the same time. Each task gets its own isolated sandbox. You don't need to wait for one to finish before starting another. **Split-screen view:** Click the split-screen icon to see multiple agent desktops side by side. Each panel can be maximized, minimized, or closed independently. Practical limit: your concurrency is bounded by the number of sandboxes available on your plan or deployment. On Helix Cloud, this scales automatically. On self-hosted, it's bounded by your GPU capacity. ## Reviewing implementation While a task is **Implementing**, you can: - Watch the agent's desktop live via the video stream - Switch away and come back when it finishes - Interact with the agent directly by typing in the task thread When the agent finishes, the task moves to **Review**. Click **Open PR** to create a pull request in your repository. ## Handling merge conflicts If your repository moved while the agent was working, GitHub may report merge conflicts on the PR. Go back to the task and tell the agent to fix them: > There are merge conflicts on the PR. Please rebase against main and resolve them. The agent will rebase and force-push to the PR branch. Once CI passes again, merge as normal. ## Using Optimus for backlog management Optimus is a Helix agent you can enable on a project to help manage the backlog itself. When enabled, it watches your GitHub issues on a schedule and prepares new spec tasks from them — so issues flow automatically into the board without manual triage. Enable Optimus from the project **Settings** tab under **Automations**. --- Helix needs access to your repository to index it for code intelligence, clone it into agent sandboxes, and push agent commits. This guide covers connecting repositories for all three supported source control providers. ## GitHub ### Helix Cloud 1. Inside a project, go to the **Repositories** tab 2. Click **Connect & Browse** 3. Follow the GitHub OAuth flow — Helix requests repository access scoped to the repositories you select 4. Pick the repositories to attach to this project 5. Click **Save** Helix will index the repository immediately. Semantic search and the wiki become available once indexing is complete (a few minutes for most repos, longer for very large ones). ### Self-hosted If your Helix is behind a firewall and GitHub.com can't reach it, you'll need to configure a GitHub App manually: 1. Go to **Settings → Source Control** in the Helix admin panel 2. Follow the GitHub App setup instructions — Helix will generate the App manifest and callback URL 3. Install the App on your GitHub organization and select the repositories For GitHub Enterprise Server, also set `HELIX_GITHUB_BASE_URL` to your GHES URL in your Helix configuration. ## GitLab 1. Go to **Settings → Source Control → GitLab** in the Helix admin panel 2. Create a GitLab OAuth application in your GitLab instance: - **Redirect URI**: `https://your-helix-url/api/v1/oauth/callback/gitlab` - **Scopes**: `api`, `read_user`, `read_repository` 3. Paste the Client ID and Secret into the Helix settings 4. In a project, click **Connect & Browse** and authorize with your GitLab account Works with gitlab.com and self-hosted GitLab instances. ## Bitbucket 1. Go to **Settings → Source Control → Bitbucket** in the Helix admin panel 2. Create an OAuth consumer in your Bitbucket workspace settings: - **Callback URL**: `https://your-helix-url/api/v1/oauth/callback/bitbucket` - **Permissions**: Repositories (Read, Write), Pull requests (Read, Write) 3. Paste the Key and Secret into the Helix settings 4. In a project, click **Connect & Browse** and authorize with your Bitbucket account ## Multiple repositories per project A project can have multiple repositories attached. This is useful when: - The feature spans a frontend and backend in separate repos - You want the agent to have access to a shared library repo - You're using Goose recipes stored in a separate repo One repository is designated **primary** — that's the repository the agent clones first and where it opens pull requests by default. Set the primary repo on the **Repositories** tab. ## Detaching a repository Go to the **Repositories** tab, click the three-dot menu on the repository, and click **Detach**. This removes it from the project but does not delete the repository or its code. The agent will no longer have access to it on future tasks. --- Agents never push code to your main branch or merge pull requests without you. This guide covers what to do between "implementation done" and "PR merged". ## Reading the implementation While the agent is working, or after it finishes, you can see what it did in two places: **The task thread** shows the agent's tool calls in sequence — what files it read, what commands it ran, what edits it made. Scan this to understand the agent's reasoning, not just the output. **The live desktop view** shows the agent's screen in real time via video stream. You can click into the stream and type directly to the agent if you want to redirect it mid-implementation. ## Reviewing the diff When a task reaches **Review** status, click **Open PR** to create a pull request in your repository. From there, use your normal review process — GitHub / GitLab / Bitbucket diffs, CI results, preview deployments. Things to look for in an agent diff: - **Scope creep** — the agent touched files you didn't expect. Read the diff, not just the summary. - **Test coverage** — did the agent write tests? Are they meaningful or just stubs? - **Existing patterns** — did the agent follow your project's conventions? If not, see [Giving feedback](#giving-feedback). ## Giving feedback If the implementation is wrong or incomplete, go back to the task and tell the agent in plain language: > The validation fires on every keystroke, which is annoying. It should only fire on blur (when the user leaves the field). The agent will read your feedback, reopen the sandbox, fix the issue, and push to the same PR branch. You can give feedback as many times as needed. Each round trips through the same plan→implement cycle, so significant changes go through another approval step. ## Requesting changes on the PR If you request changes via GitHub's review UI, the agent won't automatically see them — you need to go back to the Helix task and explicitly describe what needs fixing. Copy-paste the relevant comments from GitHub into the task thread. ## Handling merge conflicts If your main branch moved while the agent was working: 1. Go to the task 2. Tell the agent: "There are merge conflicts on the PR. Please rebase against main and resolve them." 3. The agent will rebase and force-push to the branch Wait for CI to pass again, then merge. ## Merging Merge the PR from your source control provider — Helix doesn't merge for you. Once merged, Helix marks the task as **Done** (on the next sync). ## If something went badly wrong If the agent made a mess and you want to start fresh: 1. Close the PR without merging — the branch stays in your repo but the agent won't touch it again 2. Delete the agent's branch if you want a clean slate 3. Reopen the task with updated guidance, or write a new task The agent's commits are on a separate branch; your main branch was never touched. --- Every Helix project uses a **code agent** — the software that runs inside the sandbox, reads your codebase, and makes changes. Four engines are available. They all run in the same isolated desktop, stream through the same UI, and produce pull requests the same way. The choice is about the agent's harness, model access, and workflow features. ## Quick reference | Agent | Runtime value | Best when | |---|---|---| | **Claude Code** | `claude_code` | You want Anthropic's latest models with Anthropic's own harness | | **Goose** | `goose_code` | You want parameterised, reusable task recipes | | **Qwen Code** | `qwen_code` | You want a fully open-source stack or local models | | **Zed Agent** | `zed_agent` | You want in-editor agents with no extra CLI to maintain | If you're not sure, start with Claude Code or Zed Agent — they're the lowest-friction choices. ## Selecting an agent for a project Set the `runtime` on the agent in your project YAML: ```yaml apiVersion: helix.ml/v1alpha1 kind: Project metadata: name: my-app spec: repositories: - url: "https://github.com/org/my-app" branch: main primary: true agent: name: "My Agent" runtime: claude_code # or goose_code, qwen_code, zed_agent ``` --- ## Claude Code [Claude Code](https://www.anthropic.com/claude-code) is Anthropic's official command-line coding agent. Helix launches the `claude` CLI inside the sandbox and connects it to Zed over ACP. ```yaml agent: name: "Claude Code" runtime: claude_code ``` Claude Code manages its own model selection internally — you don't set `model` or `provider`. ### Credential modes **API key (default):** Routes through the Helix proxy using your configured Anthropic provider. No client-side OAuth needed. **Subscription:** Use your Claude Pro or Max subscription directly. ```yaml agent: runtime: claude_code code_agent_credential_type: subscription ``` The first session walks through an OAuth flow; credentials are persisted to the sandbox for subsequent sessions. ### Pick Claude Code when - You want the latest Claude models with Anthropic's own prompt design and tool set - You want your Claude subscription quota to power agents instead of a metered API key - You want Claude Code ecosystem integrations (skills, MCPs, hooks) without rebuilding them --- ## Goose [Goose](https://github.com/block/goose) is an open-source agent from the Agentic AI Foundation. Its key feature is **recipes** — reusable, parameterised playbooks you attach to a project once and invoke per task from a structured form. ```yaml agent: name: "Goose Agent" runtime: goose_code model: claude-sonnet-4-6 provider: anthropic ``` ### Project recipes Recipes are YAML files in your repository. Attach them to the project, and Helix renders a parameter-capture form on the task creation screen for each one: ```yaml agent: runtime: goose_code goose: recipes: - name: triage path: .goose/recipes/triage.yaml - name: fix-flaky-test path: .goose/recipes/fix-flaky-test.yaml ``` A recipe file looks like: ```yaml version: "1.0.0" title: "Triage failing CI" instructions: | Stay focused on the failing CI run. Produce a triage note. prompt: | Investigate the failing CI run at {{ ci_url }} for branch {{ branch }}. parameters: - key: ci_url input_type: string requirement: required - key: branch input_type: string requirement: required ``` Starter recipes (triage, release notes, fix-flaky-test, implement-from-spec) are available in [`examples/goose_recipes/`](https://github.com/helixml/helix/tree/main/examples/goose_recipes). For the full recipe configuration reference — parameter types (string, select, file), `recipe_repo_url`, and the spec-task form workflow — see [Configure Goose recipes](/docs/guide-goose-recipes). ### Pick Goose when - You want to codify recurring task types ("how we triage CI failures", "how we cut release notes") as versioned, reusable recipes - You want structured parameter capture at task creation time — no free-text prompting for context the agent always needs --- ## Qwen Code [Qwen Code](https://github.com/QwenLM/qwen-code) is an open-source agent that speaks the OpenAI API — so it works with any provider behind that interface, not just Qwen models. ```yaml agent: name: "Qwen Coder" runtime: qwen_code model: qwen3-coder-480b provider: helix ``` Helix routes the agent through its `/v1` proxy in OpenAI-compatible mode, so any provider you've configured under **Account → AI Providers** is available — set `provider` to match. ### Pick Qwen Code when - You want a fully open-source agent stack (no Anthropic dependency) - You're running local models on a Helix runner - You need to point the agent at a self-hosted OpenAI-compatible endpoint --- ## Zed Agent The Zed Agent is the built-in agent panel in the [Zed editor](https://zed.dev). Helix doesn't launch a separate CLI — the user opens Zed's agent panel and interacts with it directly inside the sandbox desktop. ```yaml agent: name: "Zed Agent" runtime: zed_agent model: claude-sonnet-4-6 provider: anthropic ``` Like the other agents, the model routes through Helix's `/v1` proxy, so any configured provider works. ### Pick Zed Agent when - You want a fully in-editor experience with no extra CLI to install or maintain - You want to interact with the agent directly in the IDE panel rather than through a separate Helix thread --- ## Switching agents You can change a project's agent runtime at any time by editing the project YAML. Active spec tasks continue with the agent that started them; new tasks pick up the new runtime. The [Concepts: Agents vs code agents](/docs/concept-agents) page explains the underlying distinction if you want to understand the model. --- Helix Code Intelligence (powered by [Kodit](https://github.com/helixml/kodit)) builds a structured index of your repositories. Agents use it automatically when working on spec tasks; you can also query it directly to understand your codebase. ## What gets indexed When you connect a repository to a project, Helix indexes it immediately: - **Code structure** — functions, classes, types, imports, exports across all files - **Semantic embeddings** — vector representations for semantic ("find code that validates email addresses") and keyword search - **Auto-generated wiki** — a page per major component or module, updated on each push The index stays current: every push to the repository triggers a re-index of changed files. ## Searching the codebase Open a project and click the **Code Intelligence** tab. From there you can: - **Semantic search** — describe what you're looking for in plain language > "authentication middleware that validates JWT tokens" - **Keyword search** — find specific identifiers, function names, or string literals - **File browser** — list and browse files as the agent sees them - **Read a file** — inspect any file exactly as the agent would read it - **Changelog** — an automated commit-by-commit changelog for the repository These are the same tools the agent uses via MCP — querying the search interface is a good way to verify what the agent can see before writing a spec task. ## Adding external repositories Code Intelligence works with both private repositories (connected to your project) and external public repositories. To index a public repository without adding it as a project repository: 1. Go to **Settings → Code Intelligence** 2. Click **Add Repository** 3. Enter the repository URL This is useful for indexing shared libraries, SDKs, or reference codebases that agents and developers need to understand but shouldn't commit to. ## The automated wiki For each indexed repository, Helix generates a wiki — a set of prose pages describing the major components, their relationships, and their purpose. The wiki is updated automatically on each push. Access it from the **Code Intelligence** tab → **Wiki**. The wiki is useful for: - Onboarding new developers to an unfamiliar codebase - Giving agents a higher-level understanding of architecture before they start reading files - Understanding what changed in a recent push (the changelog integrates here) ## For agents: how code intelligence improves output Without code intelligence, agents re-read many files to build context, sometimes missing relevant code elsewhere in the codebase. With code intelligence, the agent can: - Search for existing implementations before writing new ones (reduces duplication) - Find all callers of a function before changing its signature (avoids breakage) - Read the architectural context of a component before modifying it In practice this reduces the rate of agents rewriting things that already exist and breaking things they didn't know were connected. ## Connecting MCP to local IDEs The Kodit MCP server is accessible externally, so you can connect your local IDE or Claude Desktop to the same index your agents use: 1. Go to **Settings → Code Intelligence → MCP Access** 2. Copy the MCP server URL and token 3. Add it to your local MCP client configuration This gives your local IDE the same semantic search, file browse, and wiki the agents use — a useful way to explore large or unfamiliar codebases. --- [Goose](https://github.com/block/goose) supports **recipes** — reusable, parameterised playbooks for recurring tasks such as triaging a failing CI run, writing release notes, or reviewing a spec document. You define a recipe once, commit it to a repository, attach it to a Goose project, and Helix renders a structured form on the spec-task creation screen for each recipe. The agent receives a fully baked recipe at session start — no free-text prompting to gather context. This guide covers everything after the initial [agent selection](/docs/guide-choose-code-agent#goose). For the basic Goose project YAML, start there. ## Attach recipes to a project Recipes are declared in the `goose.recipes` list on the project agent. Each entry names a recipe and gives its path relative to the repository it lives in: ```yaml apiVersion: helix.ml/v1alpha1 kind: Project metadata: name: my-app spec: repositories: - url: "https://github.com/org/my-app" branch: main primary: true agent: name: "Goose Agent" runtime: goose_code model: claude-sonnet-4-6 provider: anthropic goose: recipes: - name: triage path: .goose/recipes/triage.yaml - name: fix-flaky-test path: .goose/recipes/fix-flaky-test.yaml ``` By default, `path` resolves against the primary repository. If your recipes live in a separate repository, add that repository to the project and point `recipe_repo_url` at it: ```yaml spec: repositories: - url: "https://github.com/org/my-app" branch: main primary: true - url: "https://github.com/org/goose-recipes" branch: main agent: runtime: goose_code goose: recipe_repo_url: "https://github.com/org/goose-recipes" recipes: - name: triage path: recipes/triage.yaml - name: release-notes path: recipes/release-notes.yaml ``` `path` is repo-relative and free-form — `.goose/recipes/` is a convention, not a requirement. ## Recipe file format A recipe is a small YAML file in the repository: ```yaml version: "1.0.0" title: "Triage failing CI" description: "Walk through a failing CI run and produce a triage note." instructions: | You are helping diagnose a failing CI run. Stay focused on the run the user provided; do not wander into unrelated branches or issues. prompt: | Investigate the failing CI run at {{ ci_url }} for branch {{ branch }}. Identify the failing step, root-cause the failure, and produce a triage note covering what failed, the likely cause, the smallest plausible fix, and whether the failure looks flaky. parameters: - key: ci_url input_type: string requirement: required description: "URL of the failing CI run" - key: branch input_type: string requirement: required description: "Branch the run was for" ``` | Field | Required | Description | |-------|----------|-------------| | `version` | Yes | Recipe schema version. Use `"1.0.0"`. | | `title` | Yes | Display name shown in the recipe dropdown. | | `description` | No | Shown below the title in the form. | | `instructions` | No | Prepended to the agent's system prompt at session start. | | `prompt` | Yes | The opening user message. May contain `{{ param }}` placeholders. | | `parameters` | No | List of inputs the agent needs; each becomes a form field. | `prompt` and `instructions` may use Jinja-style `{{ key }}` placeholders. The key must match a `parameters[].key` value. ## Parameter types Each parameter in the list becomes one field on the task creation form. ### String The most common type. Renders as a text input. ```yaml parameters: - key: branch input_type: string requirement: required description: "Branch name to operate on" - key: head_ref input_type: string requirement: optional default: HEAD description: "Ref to compare against (defaults to HEAD)" ``` Set `default` to pre-fill the field. Optional parameters without a default render as empty. ### Select Renders as a dropdown. Declare the allowed values in `options`: ```yaml parameters: - key: audience input_type: select requirement: required options: - engineering - customer - marketing description: "Who the release notes are for" ``` ### File Renders as a dropdown populated from the **Attachments** section of the same spec-task form. The agent receives the absolute path to the file inside the sandbox — no separate upload step, no size limit beyond the attachment limit itself. ```yaml parameters: - key: spec_doc input_type: file requirement: required description: "Spec document to review" ``` When the task is created, Helix commits the attachment to the project's `helix-specs` branch (the same mechanism used for all spec-task attachments), then rewrites the `{{ spec_doc }}` placeholder from the bare filename to the absolute path inside the agent's workspace. The agent can read the file with its normal tool calls. File inputs work for any file type the agent can consume: spec PDFs, markdown docs, CSVs, log dumps, screenshots. ## Starter recipes The Helix repository ships six ready-to-use recipes under [`examples/goose_recipes/`](https://github.com/helixml/helix/tree/main/examples/goose_recipes): | Recipe | Description | Notable parameters | |--------|-------------|-------------------| | `triage.yaml` | Triage a failing CI run | `ci_url` (string), `branch` (string) | | `fix-flaky-test.yaml` | Diagnose and fix a flaky test | `test_name` (string) | | `release-notes.yaml` | Generate release notes between two refs | `base_ref` (string), `head_ref` (string, default=HEAD), `audience` (select) | | `review-spec.yaml` | Review a spec document | `spec_doc` (file), `area` (string) | | `error-log-triage.yaml` | Triage an error log dump | `log_file` (file) | | `implement-from-spec.yaml` | Implement a feature from a spec | `spec_doc` (file) | They cover the full range of parameter types. Copy them into your repo at `.goose/recipes/.yaml`, or reference them directly by attaching `helixml/helix` as a second repository and using `recipe_repo_url`: ```yaml spec: repositories: - url: "https://github.com/org/my-app" branch: main primary: true - url: "https://github.com/helixml/helix" branch: main agent: runtime: goose_code goose: recipe_repo_url: "https://github.com/helixml/helix" recipes: - name: release-notes path: examples/goose_recipes/release-notes.yaml - name: triage path: examples/goose_recipes/triage.yaml ``` ## Creating a spec task with a recipe When you create a spec task against a Goose project that has recipes configured, the task creation form shows a **Goose Recipe** dropdown listing every declared recipe by name. 1. Pick a recipe from the dropdown. The parameter form for that recipe appears below it. 2. Fill in the required fields (and optionally override any optional defaults). 3. For file parameters, stage the file in the **Attachments** section first — it will appear in the file dropdown. 4. Submit the task. Leave the dropdown on **None (vanilla Goose)** to run the agent without a baked recipe — it starts with only the project-level instructions, and all declared recipes are still available as slash commands inside the thread for interactive use. ## Limits - Recipes live in a git repository. Edit and version them with your normal review process; there is no in-Helix recipe editor. - Parameter values are baked at session start. To change values, restart the session with a new spec task. - A `recipe_repo_url` must be a repository already attached to the project — the URL is a key into `spec.repositories`, not a freestanding URL. - If a declared recipe file is missing or malformed, Helix surfaces a warning in the project settings UI rather than failing the whole agent. The remaining recipes continue to work. --- Every spec task runs inside a sandbox — an isolated Linux desktop with Zed IDE, a terminal, and a browser. You watch the agent work via a live video stream in your browser, and can interact directly at any point. ## Viewing the agent's desktop In the task view, the video stream shows the agent's desktop in real time. The agent works autonomously, but you can watch its progress: file edits appear in the IDE, terminal commands run in the shell, browser navigation is visible. Click the **Maximize** button to expand the stream to fill your browser window. ## Interacting with the agent Click anywhere in the stream to focus it, then type. The agent sees your input as a message in its thread. Use this to: - Redirect the agent mid-implementation ("actually, use the `useState` hook, not `useReducer`") - Answer a question the agent asked - Point the agent at a specific file or test that's failing The agent reads your input and responds in the thread. It continues working in the same sandbox — no restart needed. ## Multiple sandboxes: split-screen mode Click the split-screen icon in the project view to see multiple agent desktops side by side. Each panel is a separate task running independently. You can: - Maximize or minimize individual panels - Add panels for running tasks - Remove panels without stopping the underlying task Split-screen is useful for reviewing multiple tasks in parallel or comparing two implementation approaches side by side. ## What's inside each sandbox Each sandbox gets: - **Zed IDE** — the editor the agent uses for reading and editing files - **Terminal** — bash, full standard tooling (git, docker, curl, etc.) - **Firefox browser** — for testing web apps, reading docs, accessing APIs - **Agent thread** — the conversation between the Helix control plane and the agent The sandbox starts with your repository pre-cloned, based on whatever repos are attached to the project. ## Accessing files from the agent's workspace While a task is running, you can read files from the agent's working directory via the task view's **Files** tab. This is useful for checking intermediate output — a generated file, a log, a draft — without waiting for the agent to commit. ## Sandbox lifetime A sandbox lives for the duration of a spec task session. When the session ends: - The sandbox container is destroyed - Files are not persisted except what the agent committed to git - The agent's git commits are on the working branch — nothing is lost if the sandbox disappears If a session ends unexpectedly (network drop, crash), you can resume from the task view — Helix will start a new sandbox and clone the repository again from where the agent left off. ## Sandboxes and security Each task runs in its own isolated container with: - A separate filesystem (no access to the host or other tasks) - An isolated network (separate subnet per session, no cross-session traffic) - Its own Docker daemon (via the Hydra isolation layer) See [Sandboxes — how they work](/docs/concept-sandboxes) for the full architecture. --- Helix doesn't bundle its own models — it routes to providers you configure. Providers can be set at three levels: - **User** — personal providers, visible only to you (**Account → AI Providers**) - **Organisation** — shared across all org members (**Organisation → Providers**); see [Manage your organisation](/docs/guide-organizations) - **Installation** — configured in Helm values for self-hosted deployments; available to all users on the instance This guide covers UI configuration and Helm values. For org-level providers, see [Manage your organisation: Configure org-level AI providers](/docs/guide-organizations#configure-org-level-ai-providers). ## Adding a provider in the UI Go to **Account → AI Providers** and click **Add Provider**. Select the provider type, paste your API key, and save. ### Supported providers | Provider | Notes | |---|---| | **Anthropic** | Claude models (Sonnet, Opus, Haiku). Recommended for coding agents. | | **OpenAI** | GPT-4o, o1, o3, and other OpenAI models | | **Google Gemini** | Gemini models via the Gemini API | | **NVIDIA NIM** | GPU-accelerated inference; add the NIM base URL and API key | | **AWS Bedrock** | Claude and other models via Amazon Bedrock; configure region and AWS credentials | | **Groq** | Ultra-low latency open-source model inference (Llama, Mistral, Gemma) | | **Cerebras** | Wafer-scale inference for fast open-source models | | **xAI Grok** | Grok models from xAI | | **Together AI** | Wide catalogue of hosted open-source models | | **Fireworks AI** | Fast inference for open-source models | | **Ollama** | Local model server; run models on your own hardware | | **Custom (OpenAI-compatible)** | Any endpoint that speaks the OpenAI `/v1/chat/completions` API — vLLM, LM Studio, LocalAI, etc. | Once a provider is added, its models become available in the **Model** dropdown on any project, agent app, or agent. ## Choosing a model for a coding project Set `model` and `provider` on the agent in your project YAML: ```yaml spec: agent: name: "My Agent" runtime: claude_code model: claude-sonnet-4-6 provider: anthropic ``` Claude Code is an exception — it manages its own model selection. Set `runtime: claude_code` and omit `model`/`provider`. ## Helix Cloud: built-in providers On Helix Cloud, built-in Helix inference providers are available by default — you can use these without adding your own API keys. Add your own keys if you want to use a specific model tier or route to your own accounts. ## Self-hosted: configure providers via Helm For Kubernetes deployments, configure providers under `controlplane.providers` in your `values.yaml`. Use `existingSecret` to keep API keys out of your values file and git history: ```bash kubectl create secret generic anthropic-api-key \ --from-literal=api-key="sk-ant-..." ``` ```yaml controlplane: providers: anthropic: existingSecret: "anthropic-api-key" existingSecretApiKeyKey: "api-key" openai: existingSecret: "openai-api-key" existingSecretApiKeyKey: "api-key" groq: existingSecret: "groq-api-key" existingSecretApiKeyKey: "api-key" vllm: baseUrl: "http://my-vllm.vllm.svc.cluster.local:8000/v1" ``` See [Linux & Kubernetes](/docs/deploy-linux-kubernetes) for the full Helm values reference. ## Local models with Ollama (Mac App) On the Mac App with 64 GB+ unified memory, run models locally via Ollama: 1. Install [Ollama](https://ollama.com) 2. Pull a model: `ollama pull llama3.3` 3. In Helix, add an **Ollama** or **Custom (OpenAI-compatible)** provider with base URL `http://localhost:11434/v1` and no API key 4. The model appears in the model dropdown as `llama3.3` Toggle wifi off and the agent still works — entirely local. ## AWS Bedrock Bedrock uses AWS IAM credentials rather than an API key: 1. Add an **AWS Bedrock** provider and choose your region. 2. Provide an IAM access key and secret (or use an instance role for EC2/EKS deployments). 3. Enable the models you want in the [AWS Bedrock console](https://console.aws.amazon.com/bedrock) — models must be explicitly enabled per region. For Helm-based deployments: ```yaml controlplane: providers: bedrock: region: "us-east-1" existingSecret: "aws-credentials" existingSecretAccessKeyKey: "access-key-id" existingSecretSecretKeyKey: "secret-access-key" ``` ## Anthropic via GCP Vertex AI For organisations that prefer to route Anthropic inference through Google Cloud: ```yaml controlplane: providers: anthropic: vertexProjectID: "my-gcp-project" vertexRegion: "us-east5" vertexCredentialsSecret: "gcp-vertex-credentials" ``` See the chart's `values-example.yaml` for the full shape. ## Model availability The [Reference: Supported models](/docs/ref-models) page lists model identifiers and which providers support them. --- Agent apps are Helix's chatbot and automation builder. An agent app has a system prompt, an LLM, optional skills (web search, APIs, MCP), optional knowledge bases (RAG), and optional triggers (Slack, cron, webhook). Users interact with it through the Helix chat UI, an embedded widget, or an API call. This guide walks the full configuration flow. Agent apps are distinct from [spec tasks and coding agents](/docs/concept-agents), which do autonomous software development inside sandbox containers. ## Create an agent app 1. Navigate to **Agents** in the left sidebar. 2. Click **New Agent**. 3. Give the agent a name and, optionally, a description and avatar. Helix creates a minimal agent: a default model, no system prompt, no skills. ## Configure the model Open the **Settings** tab. Under **Model**: - **Provider** — choose from your configured providers (Anthropic, OpenAI, Google, Ollama, etc.). See [Configure LLM providers](/docs/guide-llm-providers). - **Model** — pick the specific model. Available models depend on which providers are enabled. - **System prompt** — the instruction context the model receives before every conversation. Write it in first person: *"You are a support assistant for Acme Corp…"* - **Temperature** — 0 for precise and deterministic, 1 for balanced, 2 for creative. - **Max tokens** — cap on the response length. - **Context limit** — number of past messages included per turn (1 = no memory of prior turns; higher values increase context but cost more). ### Reasoning model For tasks that benefit from an extended thinking step before responding, enable a **Reasoning model** (e.g., Claude 3.7 Sonnet with extended thinking, o3). Helix will use the reasoning model for planning and the main model for the final reply. ## Add skills Skills are tools the agent can call. Enable them in the **Skills** tab. ### Built-in skills | Skill | What it does | |-------|-------------| | **Web Search** | Searches the internet and reads result pages | | **Browser** | Opens URLs and extracts page content as markdown | | **Calculator** | Solves mathematical expressions | | **Email** | Sends email when the agent decides it's needed | | **Azure DevOps** | Reads and writes to Azure DevOps work items | | **Project Manager** | Creates and updates project tasks inside Helix | Toggle each skill on or off. Each skill exposes one or more tools the LLM can invoke when the user's message makes it relevant. ### API integrations Connect any REST API by providing an OpenAPI schema. The agent reads the schema and can call any endpoint when relevant. 1. Click **Add API**. 2. Provide a name, description, and OpenAPI schema (paste YAML/JSON or link to a URL). 3. If the API requires authentication, set the `Authorization` header using a [secret reference](/docs/guide-organizations#secrets): `${MY_API_KEY}`. For OAuth-protected APIs, set the **OAuth provider** field. The user is prompted to authorise once; the agent uses the token automatically after that. ### MCP servers [Model Context Protocol](https://modelcontextprotocol.io/) lets agents connect to external tool servers. Add an MCP server in the **Skills** tab → **Add MCP**. **HTTP transport** (most common for remote servers): ``` Name: GitHub URL: https://mcp.example.com/github Header: Authorization: Bearer ${GITHUB_TOKEN} ``` **Stdio transport** (runs as a subprocess inside the agent's container): ``` Name: Filesystem Command: npx Args: -y @modelcontextprotocol/server-filesystem /workspace ``` For OAuth-authenticated MCP servers, set the **OAuth provider** field. ## Add knowledge bases (RAG) Knowledge bases give the agent long-term memory over a set of documents. When the user sends a message, Helix searches the knowledge base and injects the relevant chunks into the context. See [Add RAG knowledge bases](/docs/guide-rag-knowledge) for the full knowledge source configuration. ## Set up triggers By default, the agent is only reachable through the Helix chat UI. Triggers extend that reach. See [Configure triggers](/docs/guide-triggers) for detailed setup instructions for each trigger type. **Supported triggers:** - **Slack** — the agent responds to @-mentions or messages in configured channels - **Microsoft Teams** — same pattern as Slack - **Discord** — responds to messages in configured servers/channels - **Cron** — runs on a schedule with a fixed input prompt (useful for reports, summaries) - **Azure DevOps** — responds to work item events - **Crisp** — handles live chat conversations - **Webhook** — any external system can POST to a generated URL to trigger the agent ## Configure appearance The **Appearance** tab controls how the agent looks when embedded: - **Name** and **Avatar** — displayed in the chat header - **Conversation starters** — suggested prompts shown to new users - **Theme** — light or dark - **Allowed domains** — restrict widget embedding to specific hostnames ## Manage access The **Access** tab controls who can use the agent: - **Private** — only you - **Organisation** — any member of your org - **Public** — anyone with the link (no login required) You can also share the agent with specific users. ## API and embedding The **Developers** tab shows: - **API endpoint** and an example `curl` request — POST a message and receive the response (streaming or non-streaming) - **Embed snippet** — drop a `