Deploy Open Duet
Open Dots (OpenDots): private OpenDuet agents, routines, Claude and Codex.
Open Duet (Open Dots)
Just deployed
/data
Deploy and Host Open Duet on Railway
For an experimental personal AI workspace in a browser on Railway, use Open Duet, formerly Open Dots/OpenDots. It deploys a protected single-owner service with persistent agents, conversations, memory, routines and approval settings. Configure a working engine before the first chat: the OpenAI-compatible settings accept an endpoint and key, while installed Claude Code/Codex engines need their own authentication. Installation does not automatically sign you into those providers.
About Hosting Open Duet
The template deploys one protected, single-owner service with a persistent /data volume. The first owner is initialized automatically through the application's own authentication storage. After deployment, open the generated HTTPS domain and sign in using APP_PASSWORD from the Railway service variables. No model API key is required to deploy or sign in.
Open Chat after signing in. A first-run screen offers OpenAI, OpenRouter (including Claude models) and other OpenAI-compatible endpoints. Choose a provider, model and API key, then select Save and use this engine. The configured engine is selected for new plain chats; existing conversations keep their own engine. Keys use the native encrypted credential store. No terminal login is needed for API chat.
You can also supply OPENAI_API_KEY or OPENROUTER_API_KEY in Railway before or after deployment. Startup imports the key into encrypted storage. LLM_PROVIDER defaults to auto; LLM_MODEL optionally overrides the provider default. Custom providers use LLM_PROVIDER=custom, LLM_BASE_URL, LLM_MODEL and an optional LLM_API_KEY. Explicit Railway model settings take priority at startup. Removing the variables does not delete the saved encrypted key; use Settings → Engines → Forget settings to remove it.
The API engine supports chat and memory, not command execution or file edits. For those tools, authenticate the installed Claude Code or Codex CLI inside the Railway service, then choose that engine. Model billing is separate from Railway hosting.
The SQLite database, workspaces, attachments, decision log and engine sign-ins are stored under /data. A generated ENCRYPTION_SECRET supplies a stable credential-encryption key. Keep it unchanged and back it up separately. Restarting preserves an existing owner rather than resetting their password.
Common Use Cases
- A private personal AI workspace with named assistants and persistent context.
- Recurring routines and scheduled assistant tasks.
- Human approval prompts before enabled workspace tools run.
- Optional Telegram access using your own bot credentials.
- Chat with a configured OpenAI-compatible endpoint, Claude Code or Codex engine.
Dependencies for Open Duet Hosting
- One Railway app service built from the public
XavTo/Open-Duet-Railwayrepository. - One persistent volume at
/dataand one replica. - Generated
APP_PASSWORDand stableENCRYPTION_SECRETvariables. - A configured model engine to run AI requests; no model key is required for initial deployment.
Deployment Dependencies
Railway provides HTTPS routing, service variables and the persistent volume. This template uses SQLite in the upstream single-owner container layout, without an external database or Docker daemon.
Implementation Details
Caddy listens on 0.0.0.0:8000 and forwards to the backend on loopback, preserving secure HTTPS session cookies and streaming responses behind Railway's edge. /api/v1/health is the native readiness endpoint. Startup migrates the database, initializes a missing owner and runs the processes as the unprivileged application user. The image pins upstream commit 65b5f05e95377d247fbfb087dea52cc0bd4dc9bc, Claude Code 2.1.308 and Codex 0.163.0. Host and origin checks use the generated domain. When adding a custom domain, update OPEN_DOTS_PUBLIC_URL, FRONTEND_ORIGINS and TRUSTED_HOSTS together. Keep healthcheck.railway.app in the allowed hosts for Railway's readiness checks.
Frequently Asked Questions
Is Open Dots the same project? The linked upstream repository redirects from Open Dots to Open Duet. Both names refer to this project's history.
Can I add a model key inside the product? Yes, the native OpenAI-compatible engine configuration accepts an endpoint, model and optional API key. That engine is chat-only. Claude/Codex CLI engines have their own authentication flow.
Does this include an isolated Docker computer for every agent? No. Railway's standard container does not provide a Docker socket. The optional per-agent Docker-computer feature is unavailable here. Enabled engine tools run in this single-owner service and remain subject to upstream approval prompts.
Is this production-proven? Upstream labels server hosting experimental. Persistent storage and protected bootstrap make deployment easier, but do not remove that status or guarantee every third-party integration.
Why Deploy Open Duet on Railway?
Railway handles HTTPS, managed variables, persistent volumes, health checks and deployment logs. This template prepares the private owner account and engine binaries so users can configure a model after launch. It is a community deployment, not an official Railway or upstream integration.
Source: Open Duet. Railway recipe and bootstrap. Apache-2.0.
Other deployment choices from this publisher
Template Content
Open Duet (Open Dots)
XavTo/Open-Duet-Railway
