Pulsa / para buscar

Toda la documentación
docs Ejecútalo en algún sitio Autoalojamiento

Se ejecuta enAutoalojado

selfhost ▸ tu servidor

Tu servidor, tu coordinador.

El coordinador open-core corre en hardware tuyo. El único requisito es Docker — ninguna base de datos, caché ni cola externa que operar, y ninguna función capada en lo que se entrega.

AGPL-3.0-only. La oferta de código la sirve tu propia instalación, en /api/about.

install ▸ tres comandos

Levántalo.

install.sh

git clone https://github.com/usewrit/writ.git && cd writ
./scripts/gen-env.sh
docker compose up -d --build

Luego abre http://localhost:8000 y crea tu cuenta. El primer build es lento porque el runtime de extracción documental y OCR va integrado: a partir de ahí la extracción funciona sin conexión.

El coordinador no lanza navegadores por sí mismo. Nada se ejecuta hasta que conectas un agente — eso es el diseño, no una limitación de una versión gratuita.

Conecta el primer agente

En la app: Fleet → Connect a new agent, que acuña un código de emparejamiento. Después, en la máquina que hará el trabajo:

connect-agent.sh

curl -fsSL http://localhost:8000/agent.sh | sh -s -- WRIT-4K2P-9XQ

Los códigos de emparejamiento son de un solo uso y caducan en 15 minutos. El agente llama hacia fuera al coordinador, así que no hay puertos entrantes que abrir en la máquina.

dominio ▸ un comando

Dominio público y HTTPS.

Un comando lleva una instalación de localhost a un hostname real con un certificado real:

deploy.sh

./scripts/deploy.sh writ.example.com [email protected]
  1. Comprueba Docker, los puertos y que tu dominio ya apunta a este servidor.
  2. Escribe todos los ajustes derivados del dominio en el archivo de entorno, de forma coherente.
  3. Levanta el proxy inverso incluido con certificados Let’s Encrypt automáticos.
  4. Espera al certificado y verifica la URL HTTPS en vivo.

Se puede volver a ejecutar sin riesgo: úsalo para cambiar de dominio, reparar un despliegue a medias, o después de un docker compose down. Los secretos existentes nunca se rotan.

El día a día

Docker Compose corriente, porque no es otra cosa. Añade --profile tls a cualquiera de estos si desplegaste con el proxy inverso:

operate.sh

docker compose logs -f
docker compose restart
docker compose down

# Removes the data volumes too — this deletes your data.
docker compose down -v

# Add --profile tls to any of these if you deployed with the reverse proxy.
docker compose --profile tls logs -f

secretos ▸ ocho obligatorios

Secretos sin los que la pila no arranca.

./scripts/gen-env.sh genera los ocho por ti. En producción la pila se niega a arrancar si alguno está ausente, vacío o mide menos de 32 caracteres:

WRIT_JWT_SECRET
API_SECRET_KEY
HMAC_SECRET_KEY
RECORDER_AUTH_SECRET
INTERNAL_API_SECRET
GATEWAY_SECRET
DOC_EXTRACT_SECRET
SECRET_ENCRYPTION_KEY

Haz copia de SECRET_ENCRYPTION_KEY en un sitio separado del volumen de datos. Es la clave con la que se cifran tus secretos guardados. Si la pierdes, esos secretos no se pueden recuperar — ni por ti ni por nadie.

Ajustes de producción

Cuatro ajustes pesan de verdad en cuanto sales de localhost:

AjustePor qué importa
WRIT_PUBLIC_URLEstructural: los agentes lo llaman y el script de instalación lo incrusta. Producción se niega a arrancar sin él.
ENVIRONMENT=productionMantenlo. Es lo que impone la fuerza de los secretos y las reglas de abajo.
CORS_ORIGINSPon orígenes explícitos. Un comodín se rechaza en producción.
FORWARDED_ALLOW_IPSPonlo cuando corras tras tu propio proxy, para que las direcciones de cliente se lean bien.

ejecución ▸ dos contenedores

Qué corre de verdad.

Dos contenedores, más un proxy inverso opcional. No hay base de datos, caché ni cola externa que operar, respaldar o actualizar.

ContenedorPuertoQué es
Coordinador8000La API, la app web y su propia base de datos integrada.
Extracción documental8092Extracción de documentos y OCR, incluida para funcionar sin conexión.
Proxy inverso80 · 443Opcional, bajo el perfil de compose tls. Certificados automáticos.

Ambos servicios exponen un endpoint de salud, para que tu monitorización tenga algo que consultar.

cuenta ▸ dueño único

La primera cuenta.

Pon el email, la contraseña y el nombre del administrador en el archivo de entorno antes del primer arranque — o deja la contraseña en blanco y termina la configuración en el navegador, con el email ya rellenado en la página de setup.

WRIT_ADMIN_EMAILEl email del dueño, o simplemente la dirección prellenada en la página de setup.
WRIT_ADMIN_PASSWORDDéjala en blanco para terminar la configuración en el navegador.
WRIT_ADMIN_NAMENombre visible de la cuenta del dueño.

Este build es de dueño único: en cuanto existe una cuenta, un segundo intento de registro se rechaza con 403. No hay restablecimiento de contraseña por email — recupera con el script de reinicio incluido, que ejecutas en el propio servidor.

mcp ▸ writ-selfhost

Apunta un asistente a tu propio coordinador.

Tu coordinador se registra como writ-selfhost, a propósito — para convivir con la app Writ Desktop, que se registra como writ, y con Writ Cloud, que se registra como writ-cloud.

connect-mcp.sh

claude mcp add writ-selfhost -e WRIT_API_KEY=<YOUR_API_KEY> \
  -- npx -y writ-mcp --url http://localhost:8000

La clave API debe llevar el scope mcp:execute, o cada llamada se rechaza. Añade junto a él los scopes de recursos que quieras darle al asistente.

alcance ▸ dentro y fuera

Qué viene en la caja y qué no.

Incluido, sin funciones capadas

Todo esto viene en el build autoalojado y no lo restringe ningún plan:

  • Grabación y edición de pasos
  • El asistente de IA en el grabador, con tu propia clave de proveedor
  • Personas con TOTP y OTP, y sesiones calientes
  • Ejecución y programación
  • Monitors — disponibilidad, certificados e historial de cambios
  • Automatizaciones
  • Crawl distribuido sobre tu propia flota
  • Extracción documental y OCR
  • Publicación de endpoints REST
  • Herramientas MCP
  • Una superficie de chat compatible con OpenAI
  • Datasets, con exportación

No está en el build autoalojado

Son superficies que Writ opera en lugar de entregar. Están ausentes, no degradadas:

  • El marketplace
  • Facturación y aplicación de planes
  • Organizaciones multiinquilino
  • IA gestionada — el autoalojamiento funciona solo con tus propias claves
  • Salida residencial gestionada
  • Agentes cloud aprovisionados y autoescalado
  • SSO y SCIM
  • Scribe

actualizar ▸ licencia

Actualizaciones y licencia.

Para actualizar, haz pull del repositorio y reconstruye — los mismos tres comandos del principio, menos el clone.

Licenciado como AGPL-3.0-only, salvo el conector MCP (MIT) y las fuentes incluidas (SIL OFL 1.1). Al ser una licencia copyleft de red, tu instalación sirve su propia oferta de código en /api/about, enlazada desde la pantalla de login y desde ajustes.

faq

Preguntas de autoalojamiento, respondidas.

¿Qué necesito en el servidor?
Docker, y nada más. No hay base de datos, caché ni cola externa que instalar u operar — el coordinador lleva su propia base integrada, y el runtime de extracción documental va dentro de la imagen, así que la extracción funciona sin conexión.
¿Por qué no se ejecuta nada tras levantar la pila?
Porque el coordinador no lanza navegadores por sí mismo. Conecta un agente desde Fleet → Connect a new agent y ejecuta la línea de instalación en la máquina que hará el trabajo. Los códigos de emparejamiento son de un solo uso y caducan en 15 minutos.
¿Qué pasa si pierdo SECRET_ENCRYPTION_KEY?
Tus secretos guardados no se podrán recuperar. Es la clave con la que están cifrados, así que guárdala aparte del volumen de datos — una copia que contenga ambas cosas está a un fallo de no servir para nada.
¿Cómo lo pongo en un dominio real con HTTPS?
./scripts/deploy.sh writ.example.com [email protected]. Comprueba DNS y puertos, escribe el archivo de entorno, levanta el proxy inverso incluido con certificados Let’s Encrypt automáticos y verifica la URL en vivo. Se puede volver a ejecutar sin riesgo y nunca rota los secretos existentes.
¿Puedo añadir un segundo usuario?
En este build no — es de dueño único, y un segundo intento de registro se rechaza con 403. Las organizaciones multiinquilino, SSO y SCIM son superficies operadas por la nube y aquí están ausentes.
Olvidé la contraseña de admin y no hay email de reinicio.
Correcto — no hay restablecimiento por email en el build autoalojado. Recupera con el script de reinicio incluido, ejecutado en el propio servidor. Como ya tienes acceso al servidor, es la misma frontera de confianza.

fin ▸ desplegar

Clónalo y levántalo.

Tres comandos para un coordinador funcionando, y uno más para ponerlo en tu propio dominio.