Show HN: OpenDots – model agnostic alternative to OpenAI's Dots DiggerHQ released OpenDots, an open-source, model-agnostic personal agent framework positioned as an alternative to OpenAI's Dots, running on OpenComputer Serverless Agents. OpenDots is a TanStack Start web app with two agents defined in React-style TypeScript hooks; each agent names its model in one line, defaulting to "anthropic/claude-sonnet-4.6" and supporting openai/ and openrouter/ providers through OpenComputer-managed credentials. Setup requires Node.js 22, an OpenComputer account and an HTTPS tunnel to port 3100, with deployment guides for Cloudflare Workers, Render, Docker and Fly.io. An always-on personal agent you own, on the model you choose. A personal assistant you deploy for yourself, and a model-agnostic alternative to OpenAI's Dots. Hand it work, keep talking, and get the results back in the same conversation. Longer jobs get a topic : its own conversation, notes you can read and edit, and a cloud computer when needed. Work continues when you close the browser. A TanStack Start web app and two agents defined with React-style TypeScript hooks. OpenComputer Serverless Agents https://docs.opencomputer.dev/agents/overview runs the agents, provisions their computers and stores their conversations and notes https://docs.opencomputer.dev/agents/memory in your own OpenComputer project. No separate agent infrastructure to operate. Setup includes a Workshop demo topic linked to a sample application's quickstart https://github.com/diggerhq/opencomputer-example-quickstart-check . Ask in the main conversation: In Workshop demo, run the quickstart from a clean checkout. Fix anything that fails, rerun it, and save the verified commands in the topic notes. Open the topic to watch the commands and inspect its notes. You can ask for something else while it runs; the worker's result comes back to the main conversation. Then follow up: The workshop attendees use Node 20. Check that too. The worker continues the same topic. You can also correct its notes directly before the next task. Those notes survive replacing the topic's computer and are readable through the OpenComputer API and CLI independently of this app. You need Node.js 22 , an OpenComputer account and an HTTPS tunnel to your machine. The app runs locally; the agents run on OpenComputer. git clone https://github.com/diggerhq/opendots.git cd opendots npm ci npx opencomputer login Start a tunnel to port 3100 and leave it running. For example: ngrok http 3100 In another terminal in the repository, replace https://YOUR-TUNNEL-HOST with the HTTPS URL the tunnel printed: npm run setup -- --origin https://YOUR-TUNNEL-HOST npm run dev Setup links or creates the OpenComputer project, generates the login and application secrets in .env.local , deploys both agents to Development, and seeds the example notes. The public URL lets the coordinator call the app's delegation tool. Open that HTTPS URL and sign in with OPENDOTS OWNER SECRET from .env.local . Keep both terminals running. If the tunnel URL changes, rerun setup with the new origin, restart the app, sign in again and replace the coordinator from the owner menu so its callback uses the new origin. Follow the host guide for secrets and agent setup: Cloudflare Workers https://github.com/diggerhq/opendots/blob/main/docs/deploy/cloudflare.md · Render https://github.com/diggerhq/opendots/blob/main/docs/deploy/render.md · Docker https://github.com/diggerhq/opendots/blob/main/docs/deploy/docker.md · Fly.io https://github.com/diggerhq/opendots/blob/main/docs/deploy/fly.md . The guides record which paths have been tested; the Cloudflare button requires a public repository. Access to your app is protected by an owner login. See configuration and owner access https://github.com/diggerhq/opendots/blob/main/docs/configuration.md for storage, origins and secret rotation; .env.example https://github.com/diggerhq/opendots/blob/main/.env.example lists the settings. OpenDots is not tied to one model provider. Each agent names its model in one line, and OpenComputer https://docs.opencomputer.dev/agents/models handles provider credentials, so no API key goes into the code: useModel "anthropic/claude-sonnet-4.6" ; // default useModel "openai/