Gestión de tareas nativa de IA donde los agentes de código son compañeros de pleno derecho. Despliega PostgreSQL (pgvector), el backend en Go y la app web en Next.js.

Tres servicios, sin necesidad de almacenamiento de objetos externo. Los adjuntos van a un volumen persistente en el backend.
RESEND_API_KEY vacío, lee el código en el log del servicio
backend — busca Verification code.ALLOW_SIGNUP=false y
DISABLE_WORKSPACE_CREATION=true en el backend y reinícialo.El daemon se ejecuta en tu propio ordenador, no en Zeabur. El servidor de Multica es solo la API, el hub de WebSocket y la base de datos.
brew install multica-ai/tap/multica
multica setup self-host \
--server-url https://TU_DOMINIO_API \
--app-url https://TU_DOMINIO
Las dos URL son distintas a propósito. --app-url es la aplicación web donde
inicias sesión; --server-url es el dominio de la API, que la CLI comprueba en
/health antes de guardar nada. Esa ruta no la reenvía la aplicación web, así
que apuntar --server-url al dominio de la app hace que la configuración
informe de que el servidor no es accesible.
Los navegadores no se ven afectados en ningún caso: permanecen en el dominio de
la app para todo, incluido el WebSocket, por lo que las cookies nunca cruzan
orígenes y COOKIE_DOMAIN se queda sin definir.
El lado del navegador sigue al host que visitas: la aplicación web sirve /api,
/auth, /uploads y /ws desde su propio origen, y el cliente deriva wss://
de window.location. Nada de eso está fijado a un dominio, así que la interfaz
y el WebSocket siguen funcionando en uno nuevo sin configuración.
El backend es la parte que no se entera. Nunca lee el host de la petición: todas las URL públicas que emite vienen de variables de entorno. Tras asignar un dominio nuevo, actualiza estas en el servicio backend y reinícialo:
| Variable | Dale el valor | Qué se rompe si queda obsoleta |
|---|---|---|
MULTICA_APP_URL | nuevo origen de la app | El onboarding muestra el host antiguo; las invitaciones y los correos con código enlazan a él |
FRONTEND_ORIGIN | nuevo origen de la app | Respaldo de lo anterior; comprobación de origen CSRF |
CORS_ALLOWED_ORIGINS | nuevo origen de la app | Las llamadas de origen cruzado se rechazan |
MULTICA_PUBLIC_URL | nuevo origen de la API | multica setup self-host entrega al daemon la URL antigua |
Con esquema y sin barra final. Todas fallan en silencio: la aplicación sigue
cargando y parece correcta. Después de cambiarlas, abre /api/config y confirma
que daemon_app_url y daemon_server_url coinciden con los dominios que estás
usando realmente.
Una advertencia que conviene conocer antes de asociar un dominio propio:
MULTICA_PUBLIC_URL viene como ${ZEABUR_API_URL}, y esa variable integrada se
resuelve al dominio *.zeabur.app generado automáticamente incluso después
de asociar uno personalizado junto a él. No sigue al dominio personalizado. Así
que en cuanto pongas tu propio dominio en el backend, sustituye
${ZEABUR_API_URL} por ese dominio, escrito completo.
Después vuelve a ejecutar multica setup self-host con el nuevo --server-url
en cada máquina que ejecute un daemon: la CLI guarda la URL, así que los daemons
existentes seguirán usando la antigua hasta que lo hagas.
S3_BUCKET se deja sin definir, así que el backend recurre al disco local y
escribe en el volumen /app/data/uploads. Para pasar más adelante a
almacenamiento compatible con S3 (R2, MinIO, B2), define S3_BUCKET,
AWS_ENDPOINT_URL, AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY en el backend.
Añade ATTACHMENT_DOWNLOAD_MODE=proxy cuando el endpoint no sea accesible desde
el navegador. Los archivos existentes no se migran automáticamente.
El volumen de uploads fija el backend a una sola réplica. Pasa primero a S3 si
necesitas más, y añade REDIS_URL: sin Redis, los eventos en tiempo real
recurren a la memoria del proceso y la limitación de peticiones de autenticación
queda desactivada.
Multica se distribuye bajo una Apache License 2.0 modificada con condiciones adicionales sobre uso comercial alojado/incrustado, marca y atribución. El uso interno dentro de una sola organización no requiere licencia comercial; ofrecerlo como servicio a terceros sí. Retirar el nombre, el logotipo o los avisos de copyright de Multica de la interfaz requiere una exención de marca por escrito.
Código: https://github.com/multica-ai/multica · Licencia: https://github.com/multica-ai/multica/blob/main/LICENSE