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.