Hi DEV! I'm Francisco (Chico), a developer from Lisbon, and this is my first post here.
For the last few months I've been building Somnus, a desktop AI agent for Windows and Linux that lets you work with Claude, GPT, Gemini, DeepSeek, Grok, Qwen, Kimi, GLM and more from one workspace and one prepaid balance.
Why I built it
I kept juggling API keys, dashboards and billing pages for every model provider. I wanted one place to:
- switch models mid-task without changing tools
- pay as I go instead of stacking subscriptions
- use the same account from a desktop app and from my terminal
How it works
The desktop app is based on Hermes Agent by Nous Research (MIT license), with its own identity and a model gateway behind it.
The gateway is OpenAI-compatible, so existing code only needs a different base URL and key:
from openai import OpenAI
import os
client = OpenAI(
api_key=os.environ["SOMNUS_API_KEY"],
base_url="https://somnus.world/api/public/gateway/v1",
)
resp = client.chat.completions.create(
model="claude-sonnet-5",
messages=[{"role": "user", "content": "Hello DEV!"}],
)
print(resp.choices[0].message.content)
Change the model field and the same code talks to GPT, Gemini or DeepSeek.
Where it's at
- ✅ Windows and Linux (AppImage and .deb)
- 🛠️ Mac is in progress
- 💳 Prepaid top-ups from $5, and credit doesn't expire
What I'll write about here
I'm planning to share the build as it goes:
- building a desktop agent on top of an open-source project
- running a multi-provider model gateway (routing, usage tracking, billing)
- the not-so-glamorous side: launching on a brand-new domain and learning SEO the hard way
If you're building with LLM APIs, I'd love to hear what annoys you most about juggling providers.
Feedback, questions and criticism are all welcome in the comments.
Thanks for reading! 🌙
Top comments (0)