# KevRojo/Dulus: a provider-independent agent runtime whose README points elsewhere

> A Python runtime that puts an agent in your terminal and can reach Anthropic, OpenAI, Gemini, Kimi, DeepSeek, Qwen, local models through Ollama, or your existing ChatGPT and Claude subscriptions. Two things to know before you install: the README says development happens in a different repository, and the package metadata carries an unusual setuptools pin that exists to keep older pip versions working.

**KevRojo/Dulus** — Dulus Ai — Agentic AI, Making Gemini web cappable of running bash commands in your terminal! [Gui, Web, Cli, Telegram, 2,000 MCP, 100K Skills . LiteLLM (100+ providers), local models via Ollama, /lang in 34 languages, Mesa Redonda, I create the first utility coin that can be used 100% as AI quota or Fuel, is called $Dulus

- Repository: https://github.com/KevRojo/Dulus
- Website: https://dulus.ai/
- Stars: 92 · Forks: 0
- Language: Python
- License: GPL-3.0
- Published: 2026-09-10 · Updated: 2026-09-10 · Language: en
- Canonical page: https://hysenlabs.com/projects/kevrojo-dulus

## The README says the code lives in another repository

The first line of the README is an alert rather than a description. It announces version 6.1.2 and tells you to use the binaries, then links to github.com/Dulus-Ai/dulus-updates and states in plain terms that this is where dulus is actively maintained and where new features launch first. The release list agrees: the most recent tag is called priv6.0.7 and is titled Dulus 6.0.7 binaries, with the word maintained repo in the name. So the repository you are reading is the PyPI-facing source tree rather than the place work happens. That has a practical consequence for anyone arriving with a bug or a question, because the natural place to file it is not necessarily the place it will be read.

## Four version numbers are visible at once

Reading versions across this project is a small exercise in reconciliation. The package metadata records the version as 3.14.12. The README body says Now on 6.0.5. The alert at the top says 6.1.2. The GitHub releases show v3.13.6 from 2026-09-01, v3.12.1 from 2026-08-29 and priv6.0.7 from 2026-09-07, while the alert points at binary releases rather than these tags. So the 3.x line and the 6.x line coexist, and the binaries are distributed under a private-looking tag name that does not track either. The last push to main here is dated 2026-09-22. If you need to reproduce a bug or pin a version for CI, quote a commit hash rather than any of these numbers.

## setuptools is pinned below 77 so old pip can still find it

The build configuration contains one of the more defensible pins you will meet in a small package. pyproject.toml requires setuptools of at least 61 and below 77, and the comment explains why. setuptools 77 and later implement PEP 639, emitting SPDX license strings and license files, which produces Metadata-Version 2.4. pip older than 24.1 cannot read Metadata 2.4, and pip 24.0 is what ships on Ubuntu 24.04 LTS and other current distributions. The result is not a clear error: pip silently skips the package and reports that it could not find a version satisfying the requirement, with no versions listed. Staying below 77 keeps the metadata at 2.1 or 2.2, and the license is declared in the legacy table form for the same reason.

## First run asks which of four connections you want

The setup wizard on first launch does not assume a provider. It offers four paths. A Dulus account signs in over OAuth with no provider key at all, with hosted models metered in Fuel on the Dulus control plane. Bring your own key accepts Anthropic, OpenAI, Gemini, Kimi, DeepSeek, Qwen, Zhipu, MiniMax, NVIDIA NIM, Azure and more. Your own subscription puts an existing plan behind the agent through commands like `/login claude`, `/login chatgpt`, `/login kimi` and `/login grok`. And the local option needs no key, no account and no network at all, working through Ollama, LM Studio, or an on-device runtime called `edge`. Getting started is otherwise two commands.

```bash
pip install dulus
dulus
```

## The router is OpenAI-compatible and metered in a token

The same project runs a hosted platform behind the runtime, and its billing model is the part to read carefully. The control plane exposes an OpenAI-compatible endpoint at https://control.dulus.ai/v1 serving twelve models, described as ranging from a 9B model to a 397B one and including a Qwen-based uncensored flagship that is self-hosted. Usage is paid in Fuel, bought with a $DULUS utility token described as on-chain, transferable, spent by the token, with no plan approvals and no frozen accounts. A key can be minted from the CLI rather than through the website, and it is shown only once.

```bash
pip install -U dulus
dulus
# inside the REPL:
/login dulus        # sign in (OAuth — browser opens)
/login dulus key    # mint a dulus_sk_* key (shown once)
```

## Fuel top-up happens through a terminal QR

The deposit flow is deliberately kept inside the terminal. After signing in, `/fuel` prints your unique Solana deposit address together with a scannable terminal QR generated with segno; `/fuel deposit` prints only the address and QR, and `/fuel balance` prints only the balance. The intended sequence is to scan the QR with Phantom or Solflare, send $DULUS, and let the control plane credit Fuel to your account, which is then spent on `dulus-*` models through the CLI or the same OpenAI-compatible endpoint. Anything already pointing at an OpenAI-compatible client can be redirected by setting the key and base URL in the environment.

```bash
export OPENAI_API_KEY='dulus_sk_...'
export OPENAI_BASE_URL='https://control.dulus.ai/v1'
```

## Docker shifts its ports to avoid a native install

The container stack is arranged around one specific collision. The image is ghcr.io/kevrojo/dulus:latest, the service runs `dulus --daemon` because compose wants a daemon while the REPL stays reachable through `docker compose exec`, and the host ports default to 5050 and 5152 mapped onto the container's internal 5000 and 5151. The reason is stated in the compose file: a native Dulus on the same host already uses 5000 and 5151, so the container is offset to stay out of the way, with DULUS_WEB_PORT and DULUS_IPC_PORT as overrides. The Dockerfile is two-stage on python:3.12-slim, resolving the published wheel in a throw-away builder so the final image carries no pip cache, with DULUS_SOURCE set to local to build from the tree instead and DULUS_EXTRAS accepting voice and memory.

## requirements.txt is mostly voice, and most of it is optional

The dependency file shows what the project considers core versus what it is suggesting. Hard requirements include anthropic, openai, httpx, requests, rich, prompt_toolkit, mempalace, Flask, tomli on Python below 3.11, typing-extensions, composio, beautifulsoup4, segno, GitPython, sounddevice and pyttsx3. Everything after that is commented guidance: choose one speech-to-text backend from nvidia-riva-client, faster-whisper or openai-whisper, and one text-to-speech backend from edge-tts, azure-cognitiveservices-speech, nvidia-riva-client, gTTS or pyttsx3, with python3-tk needed for the GUI on Linux and WSL. numpy is required by the local Whisper backends and the arecord level detector, the model size can be overridden with DULUS_WHISPER_MODEL, and the chat bubbles need a Nerd Font.

## Conclusion

Install Dulus if you want one terminal agent that can be pointed at a provider subscription, a raw API key, or a local model without rewriting your setup, and if you are comfortable with a project whose commercial layer is a token rather than a subscription. Three checks first. Read the top of the README, which states that active development happens in the Dulus-Ai/dulus-updates repository, so issues here may land in the wrong place. Expect the versioning to be inconsistent, with 3.x, 6.0.5, 6.0.7 and 6.1.2 all visible at once. And note that the router is metered in Fuel bought with a token, which is a different commitment from an API key.

## FAQ

### What is the Dulus agent runtime?

A provider-independent Python agent runtime for the terminal, described as covering cloud and local models, real tools, MCP, plugins, memory, sub-agents, and Dulus OS. It requires Python 3.10 or newer and is licensed GPL-3.0-only.

### Which model providers can Dulus connect to?

Bring-your-own-key covers Anthropic, OpenAI, Gemini, Kimi, DeepSeek, Qwen, Zhipu, MiniMax, NVIDIA NIM and Azure among others. Existing subscriptions can be attached with commands like /login claude, /login chatgpt, /login kimi and /login grok, and local models work through Ollama, LM Studio or the edge runtime with no key or network.

### How does Dulus pay for hosted models?

Through Fuel, bought with a $DULUS utility token described as on-chain and transferable. The /fuel command prints a Solana deposit address and a terminal QR to scan with Phantom or Solflare, and the credit is spent on dulus-* models through the CLI or the OpenAI-compatible endpoint at control.dulus.ai/v1.

### Where is Dulus actually maintained?

The README states that active development happens in the Dulus-Ai/dulus-updates repository, where new features launch first, and points to the binaries published there. The most recent release tag in this repository is named for those binaries rather than for a source version.

### Why does Dulus pin setuptools below version 77?

setuptools 77 implements PEP 639 and emits Metadata-Version 2.4, which pip older than 24.1 cannot read, so pip silently skips the package and reports no matching versions. Staying below 77 keeps metadata at 2.1 or 2.2, and the license uses the legacy table form for the same reason.

## Sources

- [KevRojo/Dulus on GitHub](https://github.com/KevRojo/Dulus)
- [License: GPL-3.0](https://github.com/KevRojo/Dulus/blob/main/LICENSE)
- [Project website](https://dulus.ai/)
- [README](https://github.com/KevRojo/Dulus/blob/main/README.md)
- [Releases](https://github.com/KevRojo/Dulus/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/kevrojo-dulus
