{"slug": "show-hn-opendots-model-agnostic-alternative-to-openai-s-dots", "title": "Show HN: OpenDots – model agnostic alternative to OpenAI's Dots", "summary": "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.", "body_md": "**An always-on personal agent you own, on the model you choose.**\n\nA 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.\n\nLonger jobs get a **topic**: its own conversation, notes you can read and\nedit, and a cloud computer when needed. Work continues when you close the\nbrowser.\n\nA TanStack Start web app and two agents defined with React-style TypeScript\nhooks. [OpenComputer Serverless Agents](https://docs.opencomputer.dev/agents/overview)\nruns the agents, provisions their computers and stores their conversations\nand [notes](https://docs.opencomputer.dev/agents/memory) in your own\nOpenComputer project. No separate agent infrastructure to operate.\n\nSetup includes a **Workshop demo** topic linked to a\n[sample application's quickstart](https://github.com/diggerhq/opencomputer-example-quickstart-check).\nAsk in the main conversation:\n\nIn Workshop demo, run the quickstart from a clean checkout. Fix anything that fails, rerun it, and save the verified commands in the topic notes.\n\nOpen 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:\n\nThe workshop attendees use Node 20. Check that too.\n\nThe 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.\n\nYou need **Node.js 22**, an OpenComputer account and an HTTPS tunnel to your\nmachine. The app runs locally; the agents run on OpenComputer.\n\n```\ngit clone https://github.com/diggerhq/opendots.git\ncd opendots\nnpm ci\nnpx opencomputer login\n```\n\nStart a tunnel to port 3100 and leave it running. For example:\n\n```\nngrok http 3100\n```\n\nIn another terminal in the repository, replace `https://YOUR-TUNNEL-HOST`\nwith the HTTPS URL the tunnel printed:\n\n```\nnpm run setup -- --origin https://YOUR-TUNNEL-HOST\nnpm run dev\n```\n\nSetup links or creates the OpenComputer project, generates the login and\napplication secrets in `.env.local`, deploys both agents to Development,\nand seeds the example notes. The public URL lets the coordinator call the\napp's delegation tool.\n\nOpen that HTTPS URL and sign in with `OPENDOTS_OWNER_SECRET` from\n`.env.local`. Keep both terminals running. If the tunnel URL changes, rerun\nsetup with the new origin, restart the app, sign in again and replace the\ncoordinator from the owner menu so its callback uses the new origin.\n\nFollow the host guide for secrets and agent setup:\n[Cloudflare Workers](https://github.com/diggerhq/opendots/blob/main/docs/deploy/cloudflare.md) ·\n[Render](https://github.com/diggerhq/opendots/blob/main/docs/deploy/render.md) ·\n[Docker](https://github.com/diggerhq/opendots/blob/main/docs/deploy/docker.md) ·\n[Fly.io](https://github.com/diggerhq/opendots/blob/main/docs/deploy/fly.md).\nThe guides record which paths have been tested; the Cloudflare button\nrequires a public repository.\n\nAccess to your app is protected by an owner login.\nSee [configuration and owner access](https://github.com/diggerhq/opendots/blob/main/docs/configuration.md) for storage,\norigins and secret rotation; [.env.example](https://github.com/diggerhq/opendots/blob/main/.env.example) lists the settings.\n\nOpenDots is not tied to one model provider. Each agent names its model in\none line, and [OpenComputer](https://docs.opencomputer.dev/agents/models)\nhandles provider credentials, so no API key goes into the code:\n\n```\nuseModel(\"anthropic/claude-sonnet-4.6\");      // default\nuseModel(\"openai/<model>\");                   // through your connected Codex account\nuseModel(\"openrouter/<provider>/<model>\");    // any managed OpenRouter model\n```\n\nChange the literal in\n[`coordinator/agent.ts`](https://github.com/diggerhq/opendots/blob/main/opencomputer/agents/coordinator/agent.ts) (and the\n`MODEL` constant beside it, which the coordinator reports when asked) and in\n[`topic-worker/agent.ts`](https://github.com/diggerhq/opendots/blob/main/opencomputer/agents/topic-worker/agent.ts), then\nrun `npm run deploy:agents`. The coordinator and the workers can use\ndifferent models. OpenAI models through your own account need\n[BYOK](https://docs.opencomputer.dev/agents/byok) on a Pro or Max plan.\n\nAn agent is a TypeScript function that declares what it needs and returns\nits instructions. The [coordinator](https://github.com/diggerhq/opendots/blob/main/opencomputer/agents/coordinator/agent.ts)\nstarts with:\n\n``` js\nuseModel(\"anthropic/claude-sonnet-4.6\");\nconst input = useInput();\nconst owner = useMemory(profile);\nconst overview = useMemory(topics);\nuseTool(startTopic);\n```\n\nIt answers directly or calls\n[start_topic](https://github.com/diggerhq/opendots/blob/main/opencomputer/agents/coordinator/tools/start-topic.ts)\nto create or reuse a worker session. The\n[worker](https://github.com/diggerhq/opendots/blob/main/opencomputer/agents/topic-worker/agent.ts) uses a computer for its\ntask and saves useful knowledge with `memory_save`.\n\nBoth agents read [project memory](https://github.com/diggerhq/opendots/blob/main/scripts/templates/memory.ts) through\n`useMemory`: the coordinator sees the owner profile and topic summaries;\neach worker sees the profile and its own topic's notes. Conversation history\nbelongs to the session; saved notes remain available to later sessions.\n\nThe app owns login, the session index and delegation. The browser attaches\nto sessions through authenticated routes using\n[`useAgent`](https://docs.opencomputer.dev/agents/react); the OpenComputer key\nstays on the server. Worker outcomes return through platform event\nsubscriptions, with an [app-side fallback](https://github.com/diggerhq/opendots/blob/main/docs/development.md#outcome-delivery)\nwhile those routes are unavailable.\n\nRun `npm run check` for typechecking, lint, unit tests and agent validation.\n[Development notes](https://github.com/diggerhq/opendots/blob/main/docs/development.md) cover the live Playwright suite,\nlocal transcripts and redeploying the agents.\n\nEarly preview: the interface, agents and platform APIs are still changing.", "url": "https://wpnews.pro/news/show-hn-opendots-model-agnostic-alternative-to-openai-s-dots", "canonical_source": "https://github.com/diggerhq/opendots", "published_at": "2026-09-29 17:58:22+00:00", "updated_at": "2026-09-29 18:18:06.184336+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "developer-tools", "ai-products"], "entities": ["OpenDots", "DiggerHQ", "OpenAI Dots", "OpenComputer", "TanStack Start", "Anthropic", "Claude Sonnet 4.6", "OpenRouter"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/show-hn-opendots-model-agnostic-alternative-to-openai-s-dots", "markdown": "https://wpnews.pro/news/show-hn-opendots-model-agnostic-alternative-to-openai-s-dots.md", "text": "https://wpnews.pro/news/show-hn-opendots-model-agnostic-alternative-to-openai-s-dots.txt", "jsonld": "https://wpnews.pro/news/show-hn-opendots-model-agnostic-alternative-to-openai-s-dots.jsonld"}}