Saltar a contenido

OpenDesign

Entorno local-first para diseño asistido. URL pública: https://opendesign.matias7235.com.ar.

Rutas y servicio

Qué Dónde
Compose /opt/docker/opendesign/compose.yaml
Imagen derivada /opt/docker/opendesign/Dockerfile
Variables y token /opt/docker/opendesign/.env (modo 600; no versionado)
Datos persistentes de OpenDesign /opt/docker/opendesign/open_design_data/
Estado aislado de Pi /opt/docker_mounts/opendesign/pi-agent/
Espacio de trabajo /opt/docker_mounts/opendesign/workspace/
Puerto local 127.0.0.1:7456

Contenedor: open-design. La imagen derivada parte del digest fijado de OpenDesign e instala @earendil-works/pi-coding-agent@0.84.2. Caddy publica el servicio HTTPS y el puerto no queda accesible fuera del host.

Autenticación

Se conserva la autenticación nativa de OpenDesign con OD_API_TOKEN; no se deshabilita la autenticación ni se inyecta un Bearer en Caddy. Al acceder desde el navegador, usar el usuario open-design y el token guardado localmente en .env. No copiar el token en documentación, tickets o repositorios.

OPEN_DESIGN_ALLOWED_ORIGINS está limitado a https://opendesign.matias7235.com.ar.

Pi y espacio de trabajo

Pi está disponible como pi en PATH y OpenDesign lo invoca con PI_BIN=/usr/local/lib/node_modules/@earendil-works/pi-coding-agent/dist/cli.js. El binario pertenece a la imagen; no se monta Pi, npm, ~/.pi, /home/matias, Docker socket, SSH ni credenciales del host.

PI_CODING_AGENT_DIR=/pi-agent y PI_CODING_AGENT_SESSION_DIR=/pi-agent/sessions usan únicamente el mount aislado. Su settings.json fija defaultProjectTrust: "never"; no se crea ni se copia auth.json o claves durante el despliegue.

Este es un entorno confiable, sin sandbox de filesystem para Pi: comparte los permisos internos de OpenDesign y puede leer/escribir /workspace y leer /app/.od. Los únicos mounts adicionales son los directorios aislados de Pi y del espacio de trabajo, ambos propiedad de UID/GID 1001 y modo 700.

OpenDesign usa oficialmente Project locations. /workspace está registrado como la ubicación Workspace predeterminada: los proyectos nuevos seleccionados allí se crean en /workspace/<id-del-proyecto>. No se usa una variable de entorno no soportada para alterar la raíz de proyectos.

Pi usa OpenRouter desde su estado aislado bajo /pi-agent. El modelo predeterminado es openrouter/z-ai/glm-5.3-flash, registrado en /pi-agent/models.json porque Pi 0.84.2 todavía no lo incluye en su catálogo integrado. Los límites configurados siguen el proveedor superior publicado por OpenRouter: contexto de 1.048.576 tokens y salida máxima de 131.072 tokens.

La credencial permanece únicamente en /pi-agent/auth.json y no se documenta ni versiona. Para renovar la autenticación, un administrador debe ejecutar localmente sudo docker exec -it open-design pi /login. Después, comprobar el catálogo con sudo docker exec open-design pi --list-models. OpenDesign expone el modelo como openrouter/z-ai/glm-5.3-flash; la opción Default (CLI config) también resuelve a ese modelo mediante defaultProvider y defaultModel en /pi-agent/settings.json.

Operación

# Estado y logs
sudo docker compose --project-directory /opt/docker/opendesign ps
sudo docker logs -f open-design

# Salud local (lee el token sin mostrarlo)
sudo bash -c 'set -a; . /opt/docker/opendesign/.env; set +a; curl --fail --silent --show-error -u "open-design:$OD_API_TOKEN" http://127.0.0.1:7456/api/health'

# Reconstruir/actualizar: revisar el digest y la versión de Pi aprobados
sudo docker compose --project-directory /opt/docker/opendesign build --pull
sudo docker compose --project-directory /opt/docker/opendesign up -d

# Rollback: restaurar el digest anterior conocido en compose y recrear
sudo docker compose --project-directory /opt/docker/opendesign up -d

Para detenerlo temporalmente: sudo docker compose --project-directory /opt/docker/opendesign down.

Backup

Detener el servicio para un respaldo consistente y guardar datos junto con la configuración (el archivo .env contiene el token y debe protegerse):

sudo docker compose --project-directory /opt/docker/opendesign stop
sudo tar czf /tmp/opendesign-$(date +%F).tar.gz \
  /opt/docker/opendesign/compose.yaml \
  /opt/docker/opendesign/Dockerfile \
  /opt/docker/opendesign/.env \
  /opt/docker/opendesign/open_design_data \
  /opt/docker_mounts/opendesign/pi-agent \
  /opt/docker_mounts/opendesign/workspace
sudo docker compose --project-directory /opt/docker/opendesign start

Para restaurar, detener el stack, recuperar open_design_data/, pi-agent/, workspace/, compose.yaml, Dockerfile y .env con permisos .env 600, y ejecutar build --pull seguido de up -d. Si Pi se autenticó posteriormente, pi-agent/ contiene material sensible y debe conservar dueño 1001:1001 y modo 700.

Proveedor IA

Pi usa OpenRouter con z-ai/glm-5.3-flash como modelo predeterminado. models.json, settings.json y la credencial viven en /opt/docker_mounts/opendesign/pi-agent/, fuera de Git; el backup de ese directorio debe tratarse como sensible. No almacenar claves en el repositorio, documentación, tickets ni .env de OpenDesign.