S’exécute surAuto-hébergé
Sur cette page
Votre serveur, votre coordinateur.
Le coordinateur open-core tourne sur du matériel qui vous appartient. La seule exigence, c’est Docker — aucune base, aucun cache, aucune file à exploiter, et aucune restriction de fonctionnalité dans ce qui est livré.
install ▸ trois commandes
Mettez-le debout.
install.sh
git clone https://github.com/usewrit/writ.git && cd writ
./scripts/gen-env.sh
docker compose up -d --build Puis ouvrez http://localhost:8000 et créez votre compte. Le premier build est lent parce que le runtime d’extraction documentaire et d’OCR est intégré : l’extraction fonctionne hors ligne ensuite.
Le coordinateur ne lance aucun navigateur lui-même. Rien ne s’exécute tant que vous n’avez pas connecté d’agent — c’est le principe, pas une limite d’une version gratuite.
Connecter le premier agent
Dans l’app : Fleet → Connect a new agent, qui fabrique un code d’appairage. Puis, sur la machine qui fera le travail :
connect-agent.sh
curl -fsSL http://localhost:8000/agent.sh | sh -s -- WRIT-4K2P-9XQ Les codes d’appairage sont à usage unique et expirent en 15 minutes. L’agent appelle le coordinateur vers l’extérieur : aucun port entrant à ouvrir sur la machine.
domaine ▸ une commande
Domaine public et HTTPS.
Une commande fait passer une installation de localhost à un vrai nom d’hôte avec un vrai certificat :
deploy.sh
./scripts/deploy.sh writ.example.com [email protected] - Vérifie Docker, les ports, et que votre domaine pointe déjà sur ce serveur.
- Écrit tous les réglages dérivés du domaine dans le fichier d’environnement, de façon cohérente.
- Lève le reverse proxy fourni avec des certificats Let’s Encrypt automatiques.
- Attend le certificat et vérifie l’URL HTTPS en direct.
Elle est rejouable sans risque : servez-vous-en pour changer de domaine, réparer un déploiement à moitié fini, ou après un docker compose down. Les secrets existants ne sont jamais renouvelés.
Au quotidien
Du Docker Compose ordinaire, parce que ce n’est rien d’autre. Ajoutez --profile tls à ces commandes si vous avez déployé avec le reverse proxy :
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 secrets ▸ huit obligatoires
Les secrets sans lesquels la stack ne démarre pas.
./scripts/gen-env.sh les génère tous les huit pour vous. En production, la stack refuse de démarrer si l’un d’eux est absent, vide, ou plus court que 32 caractères :
WRIT_JWT_SECRET |
API_SECRET_KEY |
HMAC_SECRET_KEY |
RECORDER_AUTH_SECRET |
INTERNAL_API_SECRET |
GATEWAY_SECRET |
DOC_EXTRACT_SECRET |
SECRET_ENCRYPTION_KEY |
Sauvegardez SECRET_ENCRYPTION_KEY ailleurs que sur le volume de données. C’est la clé qui chiffre vos secrets stockés. Perdez-la et ces secrets sont irrécupérables — ni par vous, ni par qui que ce soit.
Réglages de production
Quatre réglages pèsent vraiment une fois passé localhost :
| Réglage | Pourquoi c’est important |
|---|---|
WRIT_PUBLIC_URL | Structurant : les agents l’appellent et le script d’installation l’embarque. La production refuse de démarrer sans lui. |
ENVIRONMENT=production | Gardez-le. C’est lui qui impose la force des secrets et les règles ci-dessous. |
CORS_ORIGINS | Indiquez des origines explicites. Un joker est refusé en production. |
FORWARDED_ALLOW_IPS | À définir derrière votre propre proxy, pour que les adresses clientes soient lues correctement. |
exécution ▸ deux conteneurs
Ce qui tourne réellement.
Deux conteneurs, plus un reverse proxy optionnel. Aucune base, aucun cache, aucune file externe à exploiter, sauvegarder ou mettre à jour.
| Conteneur | Port | Ce que c’est |
|---|---|---|
| Coordinateur | 8000 | L’API, l’application web, et sa propre base intégrée. |
| Extraction documentaire | 8092 | Extraction de documents et OCR, embarquée pour fonctionner hors ligne. |
| Reverse proxy | 80 · 443 | Optionnel, sous le profil compose tls. Certificats automatiques. |
Les deux services exposent un endpoint de santé, pour que votre supervision ait quelque chose à interroger.
compte ▸ propriétaire unique
Le premier compte.
Renseignez l’e-mail, le mot de passe et le nom de l’administrateur dans le fichier d’environnement avant le premier démarrage — ou laissez le mot de passe vide et terminez l’installation dans le navigateur, avec l’e-mail pré-rempli sur la page de configuration.
WRIT_ADMIN_EMAIL | L’e-mail du propriétaire, ou simplement l’adresse pré-remplie sur la page de configuration. |
WRIT_ADMIN_PASSWORD | Laissez vide pour terminer l’installation dans le navigateur. |
WRIT_ADMIN_NAME | Nom affiché du compte propriétaire. |
Ce build est à propriétaire unique : une fois un compte créé, une seconde inscription est refusée en 403. Il n’y a pas de réinitialisation de mot de passe par e-mail — récupérez avec le script de réinitialisation fourni, que vous lancez sur le serveur lui-même.
mcp ▸ writ-selfhost
Pointer un assistant vers votre coordinateur.
Votre coordinateur s’enregistre comme writ-selfhost, volontairement — pour cohabiter avec l’app Writ Desktop, qui s’enregistre comme writ, et avec Writ Cloud, qui s’enregistre comme 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 mcp config — any Streamable-HTTP client
{
"mcpServers": {
"writ-selfhost": {
"type": "http",
"url": "http://localhost:8000/mcp",
"headers": { "Authorization": "Bearer <YOUR_API_KEY>" }
}
}
} La clé API doit porter le scope mcp:execute, sinon chaque appel est refusé. Ajoutez à côté les scopes de ressources que vous voulez donner à l’assistant.
périmètre ▸ dedans et dehors
Ce qui est dans la boîte, et ce qui n’y est pas.
Inclus, sans restriction de fonctionnalité
Tout ceci est livré dans le build auto-hébergé et n’est bridé par aucun plan :
- Enregistrement et édition des étapes
- L’assistant IA dans l’enregistreur, avec votre propre clé de fournisseur
- Personas avec TOTP et OTP, et sessions chaudes
- Exécution et planification
- Moniteurs — disponibilité, certificats et historique des changements
- Automatisations
- Crawl distribué sur votre propre flotte
- Extraction documentaire et OCR
- Publication d’endpoints REST
- Outils MCP
- Une surface de chat compatible OpenAI
- Datasets, avec export
Absent du build auto-hébergé
Ce sont des surfaces que Writ exploite plutôt qu’il ne livre. Elles sont absentes, pas dégradées :
- La marketplace
- La facturation et l’application des plans
- Les organisations multi-tenants
- L’IA gérée — l’auto-hébergement fonctionne uniquement avec vos propres clés
- La sortie résidentielle gérée
- Les agents cloud provisionnés et l’autoscaling
- SSO et SCIM
- Scribe
mise à jour ▸ licence
Mises à jour et licence.
Pour mettre à jour, tirez le dépôt et reconstruisez — les trois mêmes commandes qu’au départ, sans le clone.
Sous licence AGPL-3.0-only, sauf le connecteur MCP (MIT) et les polices embarquées (SIL OFL 1.1). Comme il s’agit d’une licence copyleft réseau, votre installation sert sa propre offre de source sur /api/about, liée depuis l’écran de connexion et depuis les réglages.
référence ▸ suite
Continuer
Codes d’appairage, surface de flotte, et ce qui tourne où.
→ Où ça s’exécuteDesktop, vos propres machines, ou un serveur à vous.
→ MCPLes mêmes workflows comme outils pour tout client MCP.
→ Managed endpointsPublier un workflow comme endpoint REST.
→ Canaux de notificationCâbler les alertes vers l’e-mail, le chat ou un webhook.
→ Personas et secretsIdentifiants, TOTP et sessions chaudes.
→faq
Questions d’auto-hébergement, répondues.
De quoi ai-je besoin sur le serveur ?
Pourquoi rien ne s’exécute après avoir levé la stack ?
Que se passe-t-il si je perds SECRET_ENCRYPTION_KEY ?
Comment le mettre sur un vrai domaine en HTTPS ?
Puis-je ajouter un second utilisateur ?
J’ai oublié le mot de passe admin et il n’y a pas d’e-mail de réinitialisation.
fin ▸ déployer
Clonez-le et levez-le.
Trois commandes pour un coordinateur qui fonctionne, une de plus pour le mettre sur votre domaine.