---
title: Instalación
description: >-
  Instalá Agora en Ubuntu o Debian con un solo comando, o compilalo desde el
  código fuente.
sidebar:
  icon: download
---
## Requisitos [#requirements]

- **Ubuntu o Debian**, x86_64 o arm64, con systemd.
- **Google Chrome o Chromium.**
- **Xvfb.**
- Acceso root (`sudo`) para instalar el binario, el usuario de sistema `agora` y el servicio.

El instalador se encarga de todo: Xvfb, VA-API, Google Chrome (Chromium en arm64) y el usuario de sistema.

## Instalación en una línea [#one-line-install]

```bash
curl -fsSL https://agora.olimpia.dev/install.sh | sudo sh
```

Descarga la última versión para tu arquitectura y verifica su SHA-256 (o compila desde el código fuente si todavía no hay ninguna versión publicada), instala `/usr/local/bin/agora`, crea el usuario sin privilegios `agora` que corre las apps y los navegadores, y habilita el servicio de systemd `agora`. Si lo volvés a correr, actualiza en el lugar y reinicia el servicio solo si algo cambió. Si preferís, leé el script antes: [agora.olimpia.dev/install.sh](https://agora.olimpia.dev/install.sh).

Si Claude Code, Codex o Paseo están instalados para el usuario que corrió `sudo`, también registra el servidor MCP de Agora (`agora mcp`), instala el skill de Agora e instala el plugin de Paseo.

Pasá las opciones después de `sh -s --`, por ejemplo `curl -fsSL https://agora.olimpia.dev/install.sh | sudo sh -s -- --no-agents`:

| Opción | Qué hace |
| --- | --- |
| `--version vX.Y.Z` | Instala esta versión en lugar de la última. |
| `--prefix DIR` | Instala en `DIR` en lugar de `/usr/local`. |
| `--source DIR` | Compila desde un checkout local en lugar de descargar. |
| `--no-agents` | No configura Claude Code, Codex, el skill ni Paseo. |
| `--no-paseo` | No instala el plugin de Paseo. |

Comprobá que el daemon esté levantado y mostrá tu token de administrador:

```bash
systemctl status agora
curl -s http://127.0.0.1:7788/v1/health
sudo agora token
```

:::warning
El token de administrador da control total sobre todos los workspaces. No lo dejes en el historial de la shell, en logs ni en chats, y a los agentes dales [tokens de cursor](/es/concepts#cursors).
:::

## Abrí el dashboard [#open-the-dashboard]

El daemon escucha solo en `127.0.0.1:7788`. Abrí `http://127.0.0.1:7788` en la misma máquina y pegá el token de administrador. Desde otra máquina, usá un túnel SSH:

```bash
ssh -L 7788:127.0.0.1:7788 you@your-server
```

Para tener acceso remoto permanente, poné Agora detrás de un túnel autenticado, como Cloudflare Tunnel con Access. Mirá el [modelo de seguridad](/es/security).

## Compilar desde el código fuente [#build-from-source]

Necesitás Go, un toolchain de C y los headers de x264 y libva (Agora codifica H.264 a través de cgo, con VA-API para codificar por GPU cuando hay un dispositivo disponible).

```bash
sudo apt install xvfb libx264-dev libva-dev pkg-config build-essential
git clone https://github.com/olimpiacloud/agora && cd agora
make build
sudo install -m 0755 bin/agora /usr/local/bin/agora
sudo useradd --system --create-home --home-dir /var/lib/agora-apps --shell /usr/sbin/nologin agora
sudo cp deploy/agora.service /etc/systemd/system/
sudo systemctl daemon-reload && sudo systemctl enable --now agora
```

## Correrlo sin systemd [#run-without-systemd]

`agora serve` corre en primer plano. Como root guarda el estado en `/var/lib/agora`; como usuario normal, en `~/.agora`.

```bash
agora serve --listen 127.0.0.1:7788 --home ~/.agora
```

| Flag | Valor por defecto | Qué hace |
| --- | --- | --- |
| `--listen` | `127.0.0.1:7788` | Dirección HTTP. Las direcciones que no son loopback se rechazan salvo que `AGORA_ALLOW_PUBLIC=1`. |
| `--home` | `/var/lib/agora` o `~/.agora` | Directorio de estado (también `AGORA_HOME`). |
| `--apps-user` | `agora` | Usuario sin privilegios para las apps y los navegadores cuando corre como root. |
| `--chrome` | detección automática | Binario de Chrome o Chromium. |
| `--rtc-port` | `0` | Puerto UDP único para WebRTC (`0` elige puertos efímeros). |
| `--rtc-interfaces` | todas | Interfaces separadas por comas para los candidatos de WebRTC. |
| `--rtc-loopback` | `true` | Ofrece candidatos ICE de loopback. |
| `--idle-after` | `5m` | Marca un workspace como inactivo después de este tiempo sin actividad. |
| `--suspend-after` | `0` | Suspende los workspaces inactivos después de este tiempo (`0` significa nunca, por defecto). |

Siguiente: el [inicio rápido](/es/quickstart).
