Skip to main content

Spanish-first multi-provider AI CLI — 14 NVIDIA models free, Mesa Redonda, voice, TTS, RTK token reducer, MemPalace

Project description

▲ DULUS

Hunt. Patch. Ship. A Python autonomous agent that flies on any model — Claude, GPT, Gemini, DeepSeek, Qwen, Kimi, Zhipu, MiniMax, and local models via Ollama. ~12K lines of readable Python. No build step. No gatekeeping. Just talons.

SET /sticky_input ON since the first run for the best experience!

Dulus

Quick Start · Models · Features · Permissions · MCP · Plugins

pypi downloads python license version providers tools tests

pip install dulus

🌐 Visit the Dulus website →
The site covers features, demos, and details not documented in this README.

What is this

Talent cant be copied.

Dulus Reduce your IA costs by 60% parsing webchats and claude-code directly. Write poetry while Anthropic only see text. Use claude-code as an API without the new 'extra-usage' wall <3

Anthropic only sees text while you and Claude are writing poetry

image

Saves you Claude tokens? Throw a sat — BTC: 1JzatQDn9fMLnKTd3KYgztsLHC95bJEzSN

Another reminder of a Dulus magic spell: Wanna get stock prices, history , etc?

/plugin install yfinance@https://github.com/ranaroussi/yfinance

them: /plugin reload

dulus get the prices of NVDA, TSLA, SP500:

image

Be creative!!!

Dulus adapt any python repository <3

Dulus is a lightweight Python reimplementation of Claude Code that isn't locked to Claude. It ships the whole loop — REPL, tool dispatch, streaming, context compaction, checkpoints, sub-agents, voice, Telegram bridge, MCP, plugins — in roughly 12K lines you can actually read. Fork it. Bend it. Run it offline against Qwen on your M2.

v0.2.22 — May 9, 2026/bg start spawns one detached Dulus daemon that serves CLI (IPC), Web (browser at 127.0.0.1:5000), and Telegram simultaneously — all sharing the same session. WebChat now defaults to loopback-only (opt-in to LAN exposure with /webchat lan on). v0.2.21 — May 9, 2026 — Console-freeze fix: system prompt now tells the model SleepTimer is for user reminders only — pauses inside command pipelines must use sleep N inside the Bash command itself. v0.2.20 — May 9, 2026 — Windows IPC port-collision fix: switched to SO_EXCLUSIVEADDRUSE so a second Dulus instance correctly cedes the port and acts as client. End-to-end tested. v0.2.19 — May 9, 2026 — Shared sessions via tiny TCP socket on 127.0.0.1:5151. dulus "do X" from any shell forwards into the running REPL/daemon — same history, memory, plugins. 80 lines of plain socket code instead of a daemon manager + IPC framework. v0.2.18 — May 9, 2026beautifulsoup4 added as default dep for web scraping flows. v0.2.17 — May 9, 2026 — Mega-release: Composio plugin bundled (1000+ apps, no MCP), /skill list interactive picker (awesome / composio / local), awesome skills live from GitHub (no Claude Code needed), lite mode finally functional, system prompt rewritten in English, VERSION auto-syncs from pyproject. v0.2.16 — May 9, 2026 — MemPalace per-session dedup. No more re-injecting the same memory every turn — content-hash cache saves ~8K tokens in a 20-turn conversation. /mem_palace reset clears it on demand. v0.2.15 — May 9, 2026 — Banner image hosted locally so PyPI renders it correctly. v0.2.14 — May 9, 2026 — Multi-user Telegram bridge: telegram_chat_ids: "123,456,," supported. Replies route to the user who sent each message. v0.2.13 — May 8, 2026 — Internal robustness fixes for Ollama streaming. Type /news to see the full changelog.


Quick Start

Quick Start

image image image image image image

ROUND TABLE (DULUS UNIQUE FEATURE)

image

Dulus is the first one meeting multiple models at the same time working for the same objective and sharing their ideas.

One-liner

pip install dulus && dulus              # core CLI — fast, no compile, works on termux
pip install "dulus[memory]" && dulus    # +MemPalace per-turn memory (pulls chromadb)

That's it. Dulus prompts you for a key on first run. The [memory] extra pulls in mempalace and its chromadb chain — skip it on Android/termux or anywhere wheels for numpy/onnxruntime aren't available; the CLI still boots and chats fine without it.

From source (hacking on Dulus itself)

git clone https://github.com/KevRojo/Dulus && cd Dulus
pip install -e .          # editable install
dulus

Termux / Android

The default install pulls mempalace and sounddevice, both of which need a NumPy that has no prebuilt wheel for aarch64-android — pip will try to build NumPy from source and fail. Install around it:

pkg install python python-numpy python-pillow build-essential
pip install --no-deps dulus
pip install anthropic openai httpx requests rich prompt_toolkit Flask bubblewrap-cli mempalace

Skip sounddevice (no usable PortAudio on Android — voice features won't work anyway). Dulus's runtime is graceful: voice / MemPalace just degrade if their deps aren't there, the CLI still boots and chats fine.

Pick a model

export ANTHROPIC_API_KEY=sk-ant-...     # or OPENAI_API_KEY, GEMINI_API_KEY, ...
dulus

Zero API keys? Two free paths:

# 1. NVIDIA NIM — 14 models free, 40 RPM each, no card
dulus --model nvidia-web/deepseek-ai/deepseek-r1

# 2. Fully offline via Ollama
ollama pull qwen2.5-coder
dulus --model ollama/qwen2.5-coder

Or pipe it like a good unix citizen:

echo "explain this diff" | git diff | dulus -p --accept-all

Dulus booting into session

↑ session boot. soul loaded, gold memory warm, shell sniffed. the little circles are real buttons on your Mac.


Features

Features

Multi-provider Anthropic · OpenAI · Gemini · Kimi · Qwen · Zhipu · DeepSeek · MiniMax · Ollama · LM Studio · custom OpenAI-compat endpoints
27 built-in tools Read, Write, Edit, Bash, Glob, Grep, WebFetch, WebSearch, NotebookEdit, GetDiagnostics, Memory, Tasks, Agents, Skills, and more
MCP integration Any MCP server (stdio / SSE / HTTP). Tools auto-registered as mcp__<server>__<tool>
Plugin system Auto-Adapter onboards any Python repo — zero manifest required. Hot-reload in-session.
Sub-agents Typed agents (coder / reviewer / researcher / tester) in isolated git worktrees
Voice input Offline STT via Whisper. No API key. No cloud.
Brainstorm Multi-persona AI debate. Auto-generated expert roles.
SSJ Developer Mode Power menu: 10 workflow shortcuts behind one keystroke
Telegram bridge Run Dulus from your phone. Slash commands. Vision. Voice. Multi-user authorized list.
Checkpoints Auto-snapshot conversation + files. Rewind to any turn.
Plan mode Read-only analysis phase before touching anything
Context compression Auto-compact long sessions. Keep the signal, drop the slop.
tmux tools 11 tools for the agent to drive tmux sessions
Persistent memory Dual-scope (user + project). Ranked by confidence × recency.
Session management Autosave · daily archives · cloud sync via GitHub Gist

Models

Models

Cloud APIs

Provider Models Env
Anthropic claude-opus-4-6, claude-sonnet-4-6, claude-haiku-4-5-20251001 ANTHROPIC_API_KEY
OpenAI gpt-4o, gpt-4o-mini, o3-mini, o1 OPENAI_API_KEY
Google gemini-2.5-pro-preview-03-25, gemini-2.0-flash, gemini-1.5-pro GEMINI_API_KEY
DeepSeek deepseek-chat, deepseek-reasoner DEEPSEEK_API_KEY
Qwen qwen-max, qwen-plus, qwen-turbo, qwq-32b DASHSCOPE_API_KEY
Kimi moonshot-v1-8k/32k/128k, kimi-k2.5 MOONSHOT_API_KEY
Zhipu glm-4-plus, glm-4, glm-4-flash ZHIPU_API_KEY
MiniMax MiniMax-Text-01, MiniMax-VL-01, abab6.5s-chat MINIMAX_API_KEY

Local

# Ollama (recommended: qwen2.5-coder, llama3.3, mistral, phi4)
dulus --model ollama/qwen2.5-coder

# LM Studio
dulus --model lmstudio/<model>

# Any OpenAI-compat server
export CUSTOM_BASE_URL=http://localhost:8000/v1
dulus --model custom/<model>

Switching models mid-flight

/model                         # show current
/model gpt-4o                  # switch
/model kimi:moonshot-v1-32k    # colon syntax works too

Free Tier Providers

Free Tier Providers

No credit card. No waiting list. No "contact sales". Just frontier models, on tap.

Dulus ships a nvidia-web provider that talks to NVIDIA NIM — NVIDIA's hosted inference API. Sign up, grab a key, and you've got 14 top-tier models running at 40 requests per minute each, for free. When one model hits its ceiling, Dulus auto-falls to the next one in the chain. Zero downtime. Zero config.

export NVIDIA_API_KEY=nvapi-...
dulus --model nvidia-web/deepseek-r1

NVIDIA NIM free-tier models

Model Type ID
DeepSeek R1 Reasoning nvidia-web/deepseek-r1
DeepSeek V3 Instruct nvidia-web/deepseek-v3
Kimi K2.5 Long context nvidia-web/kimi-k2.5
GLM-4 Zhipu AI nvidia-web/glm-4
MiniMax Text-01 Text + Vision nvidia-web/minimax-text-01
Mistral Nemotron NVIDIA-tuned nvidia-web/mistral-nemotron
Mistral Large Instruct nvidia-web/mistral-large
Llama 3.3 70B Meta nvidia-web/llama-3.3-70b
Llama 3.1 405B Meta · flagship nvidia-web/llama-3.1-405b
Llama Nemotron NVIDIA reasoning nvidia-web/llama-nemotron
Qwen2.5 Coder Alibaba nvidia-web/qwen2.5-coder
Qwen3 235B A22B MoE · Alibaba nvidia-web/qwen3-235b-a22b
Phi-4 Microsoft nvidia-web/phi-4
Gemma 3 27B Google nvidia-web/gemma-3-27b

Automatic fallback. Configure the chain in ~/.dulus/config.json:

{
  "nvidia_fallback_chain": [
    "deepseek-r1",
    "kimi-k2.5",
    "llama-3.3-70b",
    "mistral-nemotron",
    "phi-4"
  ]
}

Dulus cycles through the chain automatically when rate limits hit. The flock keeps flying.

Get your key: build.nvidia.com → sign up → 1000 free credits. Takes 90 seconds.


Plugins & MCP

Plugins

Dulus's Auto-Adapter reads a random Python repo and figures out its tools on its own — no plugin.yaml required.

/plugin install my-plugin@https://github.com/user/my-plugin
/plugin install art@gh                      # shorthand for github
/plugin                                     # list
/plugin enable / disable / update / uninstall
/plugin recommend                           # auto-detect useful plugins

Adapt-and-install runs in under a second. New tools register live, no restart.

Example adapting Sherlock repo:

image
image
image
image

MCP

Drop a .mcp.json in your project root (or ~/.dulus/mcp.json for user-wide):

{
  "mcpServers": {
    "git":         { "type": "stdio", "command": "uvx", "args": ["mcp-server-git"] },
    "playwright":  { "type": "stdio", "command": "npx", "args": ["-y","@playwright/mcp"] }
  }
}

Manage in the REPL: /mcp, /mcp reload, /mcp add <name> <cmd> [args], /mcp remove <name>.


Sub-agents

Sub-agents — the flock

Dulus can spawn typed agents that work in isolated git worktrees so they don't trip over each other. Ship a feature while a reviewer nitpicks the previous one. Tester runs in parallel.

/agents                              # show active flock
Agent(type="coder",    task="refactor auth")
Agent(type="reviewer", task="review #042")
Agent(type="tester",   task="run e2e on auth")

Agents talk to each other via SendMessage and CheckAgentResult.

Split-pane brainstorm

↑ coder and reviewer working the same branch. The reviewer sent a list of nits. The coder is already fixing them.


Permissions

Permissions

Pick your leash length:

Mode Behavior
auto (default) Reads always allowed. Prompt before writes / shell.
accept-all No prompts. Everything auto-approved. YOLO.
manual Prompt for every operation. Paranoid setting.
plan Read-only. Only the plan file is writable.

Switch anytime: /permissions auto / /permissions plan.


Voice & Telegram

Voice

pip install sounddevice faster-whisper numpy

Then /voice in the REPL. Offline. Supports /voice lang zh and /voice device for mic selection.

Telegram bridge

/telegram <bot_token> <chat_id>                  # single user
/telegram <bot_token> <id1>,<id2>,<id3>          # multi-user — same Dulus, multiple authorized chats

Auto-starts next launch. Supports slash commands, vision, and voice from your phone. Multi-user mode (v0.2.14+): each authorized chat gets its own replies — Dulus tracks who sent each message and routes the response back. Trailing commas are ignored, so 717151713,787615162,, works fine. Useful when you want to poke a long-running agent from the bus, or share one Dulus instance with your team.


Memory & Checkpoints

Memory

Persistent memories stored as markdown in two scopes:

Scope Path
User ~/.dulus/memory/
Project .dulus/memory/

Types: user · feedback · project · reference. Search is ranked by confidence × recency. Mark a memory gold to pin it.

/memory search jwt         # fuzzy ranked
/memory load 1,2,3          # inject multiple into context
/memory consolidate         # distill the session into long-term insights
/memory purge               # nuclear (keeps Soul)

Checkpoints

Every agent turn can snapshot conversation + files into a checkpoint. Break something? /checkpoint and rewind.

/checkpoint                 # list
/checkpoint 042             # rewind to #042 (files + context restored)
/checkpoint clear           # reclaim disk

Brainstorm

Brainstorm

Spin up a council of ghosts. Dulus fabricates expert personas, has them argue, and hands you the distilled take.

/brainstorm "should we rewrite in rust"
> persona: Skeptical PM
> persona: Principal Engineer (2037 timeline)
> persona: Grumpy DBA
> persona: Hot-take Intern

Round 3 usually produces consensus. Round 5 produces a joint venture.


SSJ Mode

SSJ Developer Mode

Ten workflow shortcuts behind one keystroke. Refactor → review → test → commit → ship, chained and unattended.

/ssj
╭─ SSJ ───────────────╮
│ 1  /plan            │
│ 2  /worker          │
│ 3  /review          │
│ 4  /commit          │
│ 5  /ship            │
╰─────────────────────╯

Spinners

Because waiting should be fun.

Spinner messages

all 24 spinners
⚡ Rewriting light speed...
🏁 Winning a race against light...
🤔 Who is Barry Allen?...
🤔 Who is KevRojo?...
🦅 Dropping from the stratosphere...
💨 Leaving electrons behind...
🌍 Orbiting the codebase...
⏱️ Breaking the sound barrier...
🔥 Faster than a hot reload...
🚀 Terminal velocity reached...
🦅 Sharpening talons on the AST...
🏎️ Shifting to 6th gear...
⚡ Speed force activated...
🌪️ Blitzing through the bytecode...
💫 Bending spacetime...
🦅 Preying on bugs from above...
👁️ Dulus vision engaged...
🍗 Hunting for memory leaks...
🪶 Shedding legacy code...
🕹️ Try-catching mid-flight...
🥚 Hatching a master plan...
⚡ I-I-I'm... I-I'm... I'm fast...
🔮 Looking at your code from the future...
☕ If I'm taking so long, don't worry, I'm just talking to your mom...

Drop your own in dulus/spinners.py and PR them. Bonus points for a reference we'll understand in 2046.


Slash commands

/ + Tab in the REPL shows everything. The highlights:

/model [name] show or switch model
/config [k=v] read / write config
/save /load /resume session management
/memory [query] persistent memory
/skills /agents list skills / active flock
/voice voice input (offline Whisper)
/image /img clipboard image → vision model
/brainstorm [topic] council of ghosts
/ssj power menu
/worker [tasks] auto-implement a TODO list
/telegram [token] [id] Telegram bridge
/checkpoint [id] list / rewind checkpoints
/plan [desc] enter / exit plan mode
/compact [focus] manual context compression
/mcp /plugin server + extension management
/cost tokens and USD burned
/cloudsave cloud sync via GitHub Gist
/status /doctor version + install health
/init drop a CLAUDE.md template
/export /copy transcript tools
/news what's new
/help all of the above, nicely printed

Built-in tools

Core · Read · Write · Edit · Bash · Glob · Grep · WebFetch · WebSearch Notebook / diagnostics · NotebookEdit · GetDiagnostics Memory · MemorySave · MemoryDelete · MemorySearch · MemoryList Agents · Agent · SendMessage · CheckAgentResult · ListAgentTasks · ListAgentTypes Tasks · TaskCreate · TaskUpdate · TaskGet · TaskList Skills · Skill · SkillList Other · AskUserQuestion · SleepTimer · EnterPlanMode · ExitPlanMode

MCP tools auto-registered as mcp__<server>__<tool>.


CLAUDE.md

Drop a CLAUDE.md at your project root. It gets auto-injected into the system prompt so Dulus remembers your stack, your conventions, and that one thing you hate.


Project structure

dulus/
├── dulus.py             # entry · REPL · slash commands · SSJ · Telegram
├── agent.py              # agent loop · streaming · tool dispatch · compaction
├── providers.py          # multi-provider streaming
├── tools.py              # core tools + registry wiring
├── tool_registry.py      # tool plugin registry
├── compaction.py         # context compression
├── context.py            # system prompt builder
├── config.py             # config management
├── cloudsave.py          # GitHub Gist sync
├── multi_agent/          # sub-agent system
├── memory/               # persistent memory
├── skill/                # skill system
├── mcp/                  # MCP client
├── voice/                # voice input
├── checkpoint/           # checkpoint / rewind
├── plugin/               # plugin system
├── task/                 # task management
└── tests/                # 263+ unit tests

FAQ

Tool calls fail on my local model. Use one that supports function calling: qwen2.5-coder, llama3.3, mistral, phi4. Avoid base models without tool-use training.

How do I connect to a remote GPU box?

/config custom_base_url=http://your-server:8000/v1
/model custom/your-model-name

How do I check API cost? /cost.

Voice transcribes "kubectl" as "cubicle". Add domain terms to .dulus/voice_keyterms.txt, one per line. Whisper respects the hint.

Can I pipe input?

echo "explain this" | dulus -p --accept-all
git diff | dulus -p "write a commit message"

Is this safe to point at prod? --accept-all isn't. plan mode is. Use your head.


License

GPLv3. Fork it, modify it, redistribute it — but keep it open. Derivative works must stay under GPLv3. Just don't ship --accept-all as the default.


Donations

If Dulus saved you tokens, time, or sanity — throw some sats:

BTC: 1JzatQDn9fMLnKTd3KYgztsLHC95bJEzSN

▲ Built by KevRojo · Named after the bird, not the reusable rocket · 2026

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dulus-0.2.32.tar.gz (1.1 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dulus-0.2.32-py3-none-any.whl (1.2 MB view details)

Uploaded Python 3

File details

Details for the file dulus-0.2.32.tar.gz.

File metadata

  • Download URL: dulus-0.2.32.tar.gz
  • Upload date:
  • Size: 1.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for dulus-0.2.32.tar.gz
Algorithm Hash digest
SHA256 1a111c22a0f5929af30a09f9bb4acdc02eb8d67ce33c81caca233c18589467a0
MD5 09ccbeec6eb85d1d6f6ed09aa4198140
BLAKE2b-256 6141362e9b680c980fbaf5fecb796b7d7d4cd2eae6548d379c8fecf43b5abd57

See more details on using hashes here.

File details

Details for the file dulus-0.2.32-py3-none-any.whl.

File metadata

  • Download URL: dulus-0.2.32-py3-none-any.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for dulus-0.2.32-py3-none-any.whl
Algorithm Hash digest
SHA256 1fba7d0e67493cc9a0d3091ff38f1e94e2bcfa90004e08422d90920de62d4a75
MD5 d96d7d863e354cfaf3724ff3e82b64f8
BLAKE2b-256 895790b938bcc4eeec8e8f1baa4e7b21e7bf345cd1fa3fdeeb380b7fbf60c928

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page