> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devin.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Configuración avanzada

> Configuraciones avanzadas de Devin Desktop, como compatibilidad con SSH, Dev Containers, WSL, configuración del marketplace de extensiones, zonas de diff y acceso a .gitignore para Cascade.

Todas las configuraciones avanzadas se encuentran en Devin Settings. Puedes acceder desde el menú desplegable de la esquina superior derecha → Devin Settings o desde Paleta de comandos (Ctrl/⌘+Shift+P) → Open Devin User Settings.

<div id="enabling-cascade-access-to-gitignore-files">
  # Habilitar el acceso de Cascade a los archivos .gitignore
</div>

Para permitir que Cascade acceda a los archivos que coinciden con los patrones del `.gitignore` de tu proyecto, ve a Devin Settings y luego a "Cascade Gitignore Access". De forma predeterminada, está desactivado. Para conceder acceso, actívalo haciendo clic en el interruptor.

<div id="agent-diff-zones">
  # Zonas de diff del agente
</div>

Cuando un agente edita archivos, Devin Desktop muestra **zonas de diff**: regiones resaltadas en línea en el editor que muestran exactamente qué cambió, con controles para aceptar o rechazar cada bloque. Todos los agentes usan zonas de diff de forma predeterminada.

Puede desactivar las zonas de diff para agentes que no sean Cascade en Devin Settings → User Interface → **Agent Diff Zones**. Cuando están desactivadas, las ediciones de los agentes que no son Cascade se aplican directamente al archivo y la barra de herramientas muestra un sencillo botón para descartar en lugar de controles para aceptar o rechazar.

<div id="ssh-support">
  # Compatibilidad con SSH
</div>

La compatibilidad habitual con SSH en VSCode tiene licencia de Microsoft, así que implementamos la nuestra específicamente para Devin Desktop. Requiere que tengas [OpenSSH](https://www.openssh.com/) instalado, pero por lo demás tiene dependencias mínimas y debería "simplemente funcionar", como de costumbre. Puedes acceder a SSH en `Remote-SSH` desde la Paleta de comandos o mediante el botón `Open a Remote Window` en la esquina inferior izquierda.
Esta extensión ha funcionado muy bien en nuestro desarrollo interno, pero hay algunas limitaciones y bug conocidos:

* Actualmente, solo admitimos conexiones SSH a hosts remotos basados en Linux.

* La extensión habitual de Microsoft "Remote - SSH" (y la extensión [open-remote-ssh](https://github.com/jeanp413/open-remote-ssh)) no funcionará; por favor, no las instales, ya que entran en conflicto con nuestra implementación.

* Por ahora, no contamos con todas las funcionalidades de la extensión SSH de Microsoft. Principalmente, solo admitimos lo más importante: conectarte a un host. Si tienes solicitudes de funcionalidades, ¡háznoslo saber!

* Para acceder a un devcontainer en un host remoto después de conectarte mediante SSH, usa la Paleta de comandos (Ctrl/Cmd+Shift+P) y elige una de las siguientes opciones:

<Frame>
  <img src="https://mintcdn.com/cognitionai/WE51TvKjsiyk1ZHl/desktop/assets/windsurf/ssh-devcontainer-options.png?fit=max&auto=format&n=WE51TvKjsiyk1ZHl&q=85&s=4a7de13e7604b6569cec985d92bfa75d" width="394" height="65" data-path="desktop/assets/windsurf/ssh-devcontainer-options.png" />
</Frame>

* El reenvío del agente SSH está activado de forma predeterminada y usará la conexión más reciente de Devin Desktop a ese host. Si tienes problemas con esto, prueba a recargar la ventana para actualizar la conexión.

* En Windows, verás algunas ventanas de `cmd.exe` cuando se te pida tu contraseña. Esto es normal; pronto las eliminaremos.

* Si tienes problemas, primero asegúrate de que puedes conectarte por ssh a tu host remoto usando `ssh` normal en una terminal. Si el problema persiste, incluye la salida de la pestaña `Output > Remote SSH (Devin)` en cualquier reporte de bug.

<div id="dev-containers">
  # Dev Containers
</div>

Devin Desktop es compatible con Development Containers en Mac, Windows y Linux, tanto para flujos de trabajo locales como remotos (mediante SSH).

Requisitos previos:

* Local: Docker debe estar instalado en tu máquina y ser accesible desde la terminal de Devin Desktop.
* Remoto por SSH: Conéctate a un host remoto con Devin Desktop Remote-SSH. Docker debe estar instalado y ser accesible en el host remoto (desde la shell remota). Tu proyecto debe incluir un `devcontainer.json` o una configuración equivalente.

Comandos disponibles (tanto en ventanas locales como remotas):

1. `Dev Containers: Open Folder in Container`
   * Abre un nuevo espacio de trabajo con un `devcontainer.json` especificado.
2. `Dev Containers: Reopen in Container`
   * Vuelve a abrir el espacio de trabajo actual en un contenedor nuevo definido por tu `devcontainer.json`.
3. `Dev Containers: Attach to Running Container`
   * Conéctate a un contenedor de Docker existente y vincula tu espacio de trabajo actual a él. Si el contenedor no sigue la [Development Container Specification](https://containers.dev/implementors/spec/), Devin Desktop intentará detectar, en la medida de lo posible, el usuario remoto y el Environment.
4. `Dev Containers: Reopen Folder Locally`
   * Cuando estés conectado a un contenedor de desarrollo, desconéctate y vuelve a abrir el espacio de trabajo en el sistema de archivos local.
5. `Dev Containers: Show Devin Desktop Dev Containers Log`
   * Abre la salida del registro de Dev Containers para solucionar problemas.

Estos comandos están disponibles en la Paleta de comandos y también aparecerán cuando hagas clic en el botón `Open a Remote Window` de la esquina inferior izquierda (incluido cuando estés conectado a un host remoto mediante SSH).

Relacionado:

* `Remote Explorer: Focus on Dev Containers (Devin Desktop) View` — abre rápidamente la vista de Dev Containers.

<div id="known-limitations">
  ### Limitaciones conocidas
</div>

Devin Desktop no ejecuta actualmente los [comandos del ciclo de vida de Dev Container Specification](https://containers.dev/implementors/json_reference/#lifecycle-scripts):

* `onCreateCommand`
* `updateContentCommand`
* `postCreateCommand`
* `postStartCommand`
* `postAttachCommand`

Esto aplica tanto a los comandos del ciclo de vida a nivel de contenedor (definidos en `devcontainer.json`) como a los comandos del ciclo de vida a nivel de feature (definidos en `devcontainer-feature.json`). Tampoco se realiza la instalación de dotfiles.

**Qué sí funciona:**

* Scripts `install.sh` de feature (se ejecutan en tiempo de compilación de la imagen)
* `mounts` de feature (los volúmenes se montan en el tiempo de ejecución del contenedor)
* Campo `entrypoint` de feature (se ejecuta cada vez que se inicia el contenedor)
* Todas las demás operaciones en tiempo de compilación de la imagen (Dockerfile, docker-compose, features)

<div id="workaround-using-a-feature-entrypoint-for-runtime-setup">
  ### Solución alternativa: cómo usar un entrypoint de una feature para la configuración del tiempo de ejecución
</div>

Si estás creando una feature de Dev Container que necesita ejecutar una configuración al iniciar el contenedor (por ejemplo, para configurar archivos desde un volumen montado), usa el campo `entrypoint` de la feature en lugar de un comando del ciclo de vida. El entrypoint se ejecuta cada vez que se inicia el contenedor, una vez montados los volúmenes, y es completamente autónomo: quienes usen tu feature no tienen que modificar su `devcontainer.json`.

En tu `devcontainer-feature.json`, declara el entrypoint:

```json theme={null}
{
    "name": "my-feature",
    "id": "my-feature",
    "version": "1.0.0",
    "mounts": [
        { "type": "volume", "source": "my-volume", "target": "/data/my-dir" }
    ],
    "entrypoint": "/usr/local/share/my-feature/entrypoint.sh"
}
```

En tu `install.sh` (se ejecuta al compilar la imagen), escribe el script de entrypoint:

```bash theme={null}
#!/usr/bin/env bash
set -e
mkdir -p /usr/local/share/my-feature
cat > /usr/local/share/my-feature/entrypoint.sh << 'EOF'
#!/bin/sh
# Configuración dependiente del montaje (se ejecuta en cada inicio del container, el volumen está montado)
if [ -d /data/my-dir ]; then
    mkdir -p /etc/myapp
    cp /data/my-dir/config /etc/myapp/config
fi
exit 0
EOF
chmod +x /usr/local/share/my-feature/entrypoint.sh
```

<Note>
  El script de entrypoint debe realizar su configuración inicial y finalizar normalmente. No lo termines con `exec "$@"` — el propio wrapper de entrypoint de la CLI se encarga de ceder el control al comando del contenedor. Mantén el script liviano, ya que se ejecuta de forma síncrona antes de que se conecte el IDE.
</Note>

<div id="wsl-beta">
  # WSL (beta)
</div>

A partir de la versión 1.1.0, Devin Desktop ofrece compatibilidad beta con Windows Subsystem for Linux. Debes tener WSL ya configurado en tu equipo con Windows.

Puedes acceder a WSL haciendo clic en el botón `Open a Remote Window`, en la esquina inferior izquierda, o en `Remote-WSL` desde la Paleta de comandos.

<div id="extension-marketplace">
  # Marketplace de extensiones
</div>

Puedes cambiar el marketplace desde el que descargas extensiones. Para hacerlo, ve a `Devin Settings` y modifica la configuración de la URL del Marketplace en la sección `General`.

<Frame>
  <img src="https://mintcdn.com/cognitionai/WE51TvKjsiyk1ZHl/desktop/assets/windsurf/marketplace.png?fit=max&auto=format&n=WE51TvKjsiyk1ZHl&q=85&s=9815a3e8bfc880187c2fc01126c8264b" width="3420" height="2130" data-path="desktop/assets/windsurf/marketplace.png" />
</Frame>

<div id="devin-desktop-plugins">
  ## Plugins de Devin Desktop
</div>

<AccordionGroup>
  <Accordion title="Devin Pyright">
    Busca "Devin Pyright" o pega `@id:codeium.windsurfPyright` en la barra de búsqueda de extensiones.
  </Accordion>
</AccordionGroup>
