# Web, desktop & mobile

Where every control lives in the web app, how to install and update the desktop and mobile apps, and how to point any client at a self-hosted instance.

Canonical page: https://kortix.com/docs/clients

The Kortix apps are the visual surface for your projects. In them you start and follow sessions, review change requests, and configure projects and accounts. The web app runs at [kortix.com](https://kortix.com). The desktop app renders the same web app in a native window. The mobile app is a native iOS and Android app.

This page covers the web, desktop and mobile apps. For the terminal, see the [CLI](/docs/cli) and the [TUI](/docs/tui).

## Get the apps

Open [kortix.com/download](https://kortix.com/download), or use a direct link:

| Platform | Get it | Build |
| --- | --- | --- |
| macOS | [kortix.com/download/macos](https://kortix.com/download/macos) | One universal `.dmg` for Apple silicon and Intel |
| Windows | [kortix.com/download/windows](https://kortix.com/download/windows) | 64-bit `.exe` installer |
| Linux | [kortix.com/download/linux](https://kortix.com/download/linux) | `.AppImage`, x86_64 only. There is no arm64 build. |
| iPhone and iPad | [App Store](https://apps.apple.com/app/kortix/id6754448524) | |
| Android | [Google Play](https://play.google.com/store/apps/details?id=com.kortix.application) | |
| Terminal | `curl -fsSL https://kortix.com/install \| bash` | macOS and Linux. On Windows, use WSL. See [CLI](/docs/cli#install). |

Each desktop link redirects to the installer in the latest GitHub release. If the installer cannot be found, the link opens the [releases page](https://github.com/kortix-ai/suna/releases/latest).

## Find your way around

### Open a project

After sign-in, Kortix opens `/projects/start`. This route opens the project you had open last in this browser, or your only project. It opens `/projects`, the project selector, when you have a pending invite, when you have several projects and no last project, or when you have no project. The selector lists pending invites. Kortix never creates a project for you.

To create a project, open the project menu at the top of the sidebar and select **Switch Project** → **Create a project…**, or go to `/new`. See [Projects](/docs/project).

### The sidebar

| Entry | What it does |
| --- | --- |
| Project menu (top left) | **Switch Project** (projects grouped by account, **Account settings**, **Create a project…**, **Create an account…**), **Settings**, **Download app** (web only), **Connect MCP**, **Your computer**, theme, help, **Log out**. |
| Bell | Your notification inbox. Shown when the project has the `notification_center` flag on. |
| Search | Opens the command palette. |
| **New session** | Opens the project home with an empty composer. |
| **Customize** | Every project setting. See [Where settings live](#where-settings-live). |
| **Apps** | The project's Apps. Shown when the project has the `apps` flag on. See [Apps](/docs/apps). |
| Session list | Your sessions, grouped and filtered. See below. |
| **Review** | Work waiting on a person before it can continue, such as change requests. See [Git](/docs/git). |
| **Reminders** | The project's reminders. Shown when the `reminders` flag is on and a reminder is not done. See [Triggers & reminders](/docs/connect/triggers). |
| **Files** | A file browser over the project's git repository. Needs read access to project files. When shared folders are on for the account, this entry reads **Repo**. |
| **Connect GPT subscription** | Connects a ChatGPT subscription as a model provider. Shown on a free plan until a subscription is connected. See [Models](/docs/project/models). |
| **Connect MCP**, **Connect your computer** | Shortcuts to add Kortix to an MCP client and to pair this machine. Dismiss each with its **×**. See [Kortix MCP server](/docs/connect/mcp) and [Computers](/docs/connect/computers). |

The session list menu sets three things:

- **Grouping**: Status, Activity, Source, Owner or None.
- **Ordering**: Last activity, Date created or Name.
- **Filters**: Status, Source (where the session started), Labels, Owner and Access.

Sessions that an agent starts appear under the session that started them. Expand them from that row.

Project members are managed in the account, not in the sidebar. Open **Account settings** → **Projects**, or type "members" in the command palette. See [Accounts & access](/docs/accounts).

### The command palette

Press `Mod+K` (`Cmd+K` on macOS, `Ctrl+K` elsewhere), or select the search icon. The palette searches sessions, files, projects, agents and settings, and runs actions such as inviting members. `Mod+O` opens the palette on the project list.

## The session page

A session page shows the conversation, the composer below it, and a header above it.

### The composer

- **Agent picker**: the agent that runs the next turn.
- **Model picker** and **effort picker**: the model and its reasoning effort for the next turn. See [Models](/docs/project/models).
- **Attachments**: select the attach button, paste a file, or drag it into the composer.
- `@` mentions an agent, another session, or a file in the repository.
- `/` opens skills, commands and actions: **Switch model**, **Switch agent**, **Set reasoning effort**, **Attach file**, **Compact session** and **Show context**.
- The ring next to the send button shows how much of the model's context window the session uses.

While a turn runs:

| Key | Result |
| --- | --- |
| `Enter` | Steers the running turn. The agent reads the message at its next step. If the session cannot take messages mid-turn, or another member started the turn, the message waits for the turn to end. |
| `Cmd+Enter` / `Ctrl+Enter` | Queues the message. It appears in a list above the composer and runs as its own turn. |
| `↑` at the start of the composer | Takes the last queued message back for editing. |
| `Esc` three times, each within 4 s of the last | Stops the turn. The first two presses show a hint. |

See [Talk to a running agent](/docs/work/sessions#talk-to-a-running-agent).

### The header

The indicators on the right of the header appear only when they have something to show:

- **Changes**: the files this session changed. Select it to see the diff.
- **Approvals**: actions a connector policy holds for a person. Approve or deny each one. See [Connectors](/docs/connect/connectors).
- **Reminders**: reminders set on this session.
- **Agent config update available**: the base branch has a newer config. Select **Reload config** to restart the agent runtime on it, or **Ask agent to sync** to have the agent merge the base branch first. If a new config fails to load, the chip reads **Config failed to load** and shows the config that runs now.

The **Terminal**, **Browser** and **Files** buttons open those tools for the session's sandbox. On a narrow window they are in the **Developer tools** menu. The side panel beside the conversation holds the **Plan**, **Outputs**, **Preview** and **Context** cards. `Mod+I` shows or hides it. On a narrow window, select **Show panel**.

**Share** sets who can open the session: only you, specific people, or the whole project. Its **Public link** section creates a read-only link to the conversation that anyone can open without signing in. Copy or revoke the link there. See [Who can open a session](/docs/work/sessions#who-can-open-a-session) and [Public links](/docs/work/sessions#public-links).

### The session menu

Select the arrow next to the session title.

| Item | Result |
| --- | --- |
| **Rename…** | Changes the session name. |
| **Restart** | Reboots the session's sandbox in place. The disk and the branch are kept. |
| **Reload config** | Restarts the agent runtime on the newest config from the base branch and fast-forwards the session's `/workspace` checkout. It ends a running turn, so it asks for confirmation while the agent works. |
| **Stop** | Stops the session's sandbox. See [Stop, resume and delete](/docs/work/sessions#stop-resume-and-delete). |
| **Copy session ID**, **Copy session link** | Copies the `session_id` or the page URL. |
| **Mute notifications** | Stops notifications for this session. Shown with the `notification_center` flag on. |
| **Fork conversation** | Copies this conversation into a new conversation in the same sandbox and opens it. Shown when the session's runtime supports it. |
| **Export conversation** | Copies the transcript or downloads it as a file. |
| **Summarize conversation** | Compacts the conversation to free context. Shown when the session's runtime supports it. |
| **Delete** | Deletes the session. |

Only the session owner or a project manager sees **Restart**, **Reload config**, **Stop** and **Delete**. The API answers anyone else with `403`.

## Where settings live

Kortix has three settings surfaces. Each one has a different scope.

### Customize: the project

Select **Customize** in the sidebar. Every tab is at `/projects/<id>/customize/<tab>`.

| Tab | What it holds | Read |
| --- | --- | --- |
| **Agents** | The project's agents and what each one may do | [Agents & permissions](/docs/project/agents) |
| **Skills** | The project's skills | [Agents & permissions](/docs/project/agents) |
| **Connectors** | Connectors and their accounts. The **Channels** scope holds Slack, Teams and email. | [Connectors](/docs/connect/connectors), [Slack, Teams & email](/docs/connect/channels) |
| **Triggers** | Schedules, webhooks and app events | [Triggers & reminders](/docs/connect/triggers) |
| **Models** | Models, providers and provider keys | [Models](/docs/project/models) |
| **Secrets** | Encrypted credentials and who can use them | [Secrets](/docs/project/secrets) |
| **Files** | Shared folders. Shown when shared folders are on for the account. | See below |
| **Settings** | General, Git repo, Sandbox templates, Feature flags and Upgrades | See below |

**Customize** → **Settings** has five sections:

| Section | What it holds |
| --- | --- |
| **General** | The project name and icon, and project deletion |
| **Git repo** | The repository the project runs from, its base branch, and who can reach it. See [Git](/docs/git). |
| **Sandbox templates** | The recipe for the machine a session runs on, and its build history. See [Sandboxes & previews](/docs/work/runtime). |
| **Feature flags** | Features the project switches on. See [Feature flags](/docs/project#feature-flags). |
| **Upgrades** | Changes an agent makes to the project. Every run opens a change request for you to review. |

The sidebar **Files** entry and **Customize** → **Files** are different things. The sidebar entry browses the project's git repository. **Customize** → **Files** holds shared folders: one private folder per person, plus folders you share. A new session mounts your own folder at `/drives/me` and each folder shared with you or the project at `/drives/<folder name>`.

### Settings: you

Press `Mod+,`, or select **Settings** in the project menu. These settings follow you across projects and accounts.

| Tab | What it holds |
| --- | --- |
| **Profile** | Your picture, name, email and organizations |
| **Security** | Two-factor authentication and the devices signed in as you |
| **Appearance** | Theme, wallpaper, and how much a conversation shows |
| **Notifications** | How a running session gets your attention |
| **Language & shortcuts** | The display language and the tab modifier key |
| **Personal access keys** | API keys that act as you, for the CLI, a script or a CI job. See [Sign-in, SSO & API keys](/docs/accounts/identity). |

### Account settings: the account

Open the project menu → **Switch Project** → **Account settings**.

| Group | Sections |
| --- | --- |
| Account | **Settings** (name and security), **Branding**, **Git** (GitHub App installations), **API keys** (service-account keys) |
| Access | **Members**, **Groups**, **Projects**, **Roles**, **Identity**, **Audit log**, **Help** |
| Billing | **Plan**, **Usage** |

See [Accounts & access](/docs/accounts) and [Plans & credits](/docs/credits).

## Keyboard shortcuts

`Mod` is `Cmd` on macOS and `Ctrl` elsewhere. `Tab-mod` is the modifier key set in **Settings** → **Language & shortcuts**. It is `Ctrl` by default on every platform.

| Shortcut | Action |
| --- | --- |
| `Mod+K` | Open or close the command palette |
| ``Mod+` `` | Open a terminal in the current session's sandbox |
| `Mod+O` | Switch project |
| `Mod+J` or `Tab-mod+T` | New session |
| `Mod+B` | Show or hide the sidebar |
| `Mod+I` | Show or hide the session side panel |
| `Mod+,` | Open Settings |
| `Ctrl+W` | Close the session tab. In the desktop app, `Cmd+W` also works. |
| `Tab-mod+Shift+T` | Reopen the last closed tab |
| `Tab-mod+Shift+]` or `Tab-mod+Alt+→` | Next tab |
| `Tab-mod+Shift+[` or `Tab-mod+Alt+←` | Previous tab |
| `Tab-mod+1` … `Tab-mod+8` | Go to tab 1 to 8 |
| `Tab-mod+9` | Go to the last tab |

The desktop app adds menu shortcuts:

| Shortcut | Action |
| --- | --- |
| `Mod+N` | New session |
| `Mod+Shift+W` | Close the window |
| `Mod+L` | Copy the URL of the current page |
| `Mod+0`, `Mod++`, `Mod+-` | Actual size, zoom in, zoom out |
| `Cmd+[`, `Cmd+]`, `Cmd+Shift+H` (macOS) | Back, forward, home |
| `Alt+←`, `Alt+→`, `Alt+Home` (Windows, Linux) | Back, forward, home |

## Desktop app

The desktop app is the web app in a native window, with automatic updates and a tray for a connected computer.

### First launch

A new install asks which instance to use before it loads a page:

- **Kortix Cloud** connects to kortix.com.
- **Self-hosted** connects to the URL you type.

URL rules for **Self-hosted**:

- A bare host gets `https://`. A bare loopback host (`localhost`, `127.0.0.1`, `[::1]`) gets `http://`.
- A URL that contains a username or password is refused.
- The app checks the URL with an 8 s timeout. Any HTTP answer counts as reachable. If the host does not answer, the app shows the error and offers **Continue Anyway**, for a host that is only reachable on a VPN.

To change the instance later, select **Kortix** → **Change Kortix Instance…** on macOS, or **View** → **Change Kortix Instance…** on Windows and Linux. If the instance cannot be reached at launch, the same window opens with **Can't reach `<host>`**.

### Sign in

Sign-in opens your system browser. After you sign in, the browser returns you to the app. Connector sign-in popups open inside the app.

### Updates

The app updates itself from the stable channel. It checks at launch and every 6 hours, and downloads the update in the background. When the update is ready, an **Update ready** dialog offers **Restart now** and **Later**. If you select **Later**, the update installs when you quit. Select **Check for Updates…** (in the **Kortix** menu on macOS, the **View** menu elsewhere) to check now.

### Install path, tray and notifications

- On macOS, run the app from `/Applications`. A connected computer needs that fixed path.
- With a connected computer, closing the last window keeps the app in the menu bar or tray. The computer agent runs as a separate service and stays connected after you quit. See [Computers](/docs/connect/computers).
- The desktop app has no push service. While its window is open it polls for notifications and shows them as OS notifications. See [Where they appear](/docs/work/sessions#where-they-appear).

## Mobile app

The mobile app runs on iPhone, iPad and Android.

### Sign in

| Method | Where |
| --- | --- |
| **Continue with Google** | iOS and Android |
| **Continue with Apple** | iOS only |
| **Continue with email** | iOS and Android |
| **Continue with SSO** | When the instance has SAML single sign-on on. See [Sign-in, SSO & API keys](/docs/accounts/identity). |
| **Self-hosted** | Connects the app to your own instance. See below. |

To use your own instance, select **Self-hosted** on the sign-in screen. The **Self-hosted instance** sheet takes the instance's web URL or its API URL, for example `kortix.example.com`.

- The URL must use `https://`. Plain `http://` works only for loopback, `.local`, and private network addresses (`10.x`, `172.16.x` to `172.31.x`, `192.168.x`).
- The app checks that the host is a Kortix instance before it connects. Then it reloads on the new instance.
- **Use Kortix Cloud** switches back.

### What you can do

- Open projects and start sessions from the project home.
- Follow and continue sessions. Attach photos from the camera or the library, attach files, and dictate a message.
- Browse the project's files.
- Read your notification inbox across projects.
- Set push notifications, sounds and language in settings.

## Connect to a self-hosted instance

Every client works with a self-hosted instance. Point each one at the instance's URL.

| Client | How to connect |
| --- | --- |
| Web | Open the instance's own web URL in a browser. |
| CLI | On another machine: `kortix hosts add my-kortix --url https://api.kortix.example.com --dashboard-url https://kortix.example.com --login`, then `kortix hosts use my-kortix`. On the machine that runs `kortix self-host`: `kortix hosts login selfhost`. Any command takes `--host <name>`. |
| TUI | `kortix tui --host selfhost`, or any host name from `kortix hosts ls`. |
| Desktop | Choose **Self-hosted** at first launch, or select **Change Kortix Instance…**. |
| Mobile | Select **Self-hosted** on the sign-in screen. |

To run your own instance, see [Self-hosting](/docs/host).
