Commit 3891e67
fix: WSL/Linux system-lib hints (PortAudio + tkinter) + lazy GUI imports
Two recurring install traps on fresh WSL / Ubuntu boxes that ate hours
for early users:
1. PortAudio missing on Linux. sounddevice imports but its CFFI binding
can't find libportaudio2 at runtime, so the recorder bails with
'PortAudio library not found' and users try 'pip install portaudio'
which never works because PortAudio is a C library, not a PyPI
package.
2. tkinter missing on Linux taking the webchat down with it. The
webchat-server module imports from gui.
- /doctor adds a tkinter row that explains python3-tk on Linux.
- Dockerfile gains --build-arg WITH_GUI=1 for python3-tk.
- README adds a 'Linux / WSL β tkinter' subsection.
Bump 0.2.75 -> 0.2.76.
fix: WSL/Linux system-lib hints (PortAudio + tkinter) + lazy GUI imports
Two recurring install traps on fresh WSL / Ubuntu boxes that ate hours
for early users:
1. PortAudio missing on Linux. sounddevice imports but its CFFI binding
can't find libportaudio2 at runtime, so the recorder bails with
'PortAudio library not found' and users try 'pip install portaudio'
which never works because PortAudio is a C library, not a PyPI
package.
2. tkinter missing on Linux taking the webchat down with it. The
webchat-server module imports from gui.
- /doctor adds a tkinter row that explains python3-tk on Linux.
- Dockerfile gains --build-arg WITH_GUI=1 for python3-tk.
- README adds a 'Linux / WSL β tkinter' subsection.
Bump 0.2.75 -> 0.2.76.
Commit ceca2b8
fix(bg+webchat): tmux-based bg + stop-stealing-session + leaked-semaphore noise
π
π‘
πͺ Cero ventanas cmd.exe flasheando en Windows
π¬ Webchat ya no auto-cambia de sesiΓ³n cuando otro entry point (Telegram/IPC) activa otra
β° Timestamps del sidebar solo bump si hay mensaje nuevo de verdad (F5 sin enviar = no cambia)
π Warning
π¦ π₯ dulus 0.2.79 live
fix(bg+webchat): tmux-based bg + stop-stealing-session + leaked-semaphore noise
π
/bg start clean β tmux new-session + send-keys (yadike3 style, 201 lΓneas vs 376 anteriores)π‘
/bg stop ya no mata la REPL (PID file source of truth, refuses own pid)πͺ Cero ventanas cmd.exe flasheando en Windows
π¬ Webchat ya no auto-cambia de sesiΓ³n cuando otro entry point (Telegram/IPC) activa otra
β° Timestamps del sidebar solo bump si hay mensaje nuevo de verdad (F5 sin enviar = no cambia)
π Warning
leaked semaphore objects π¦ π₯ dulus 0.2.79 live
Commit c6d2264
feat(installer): one-liner curl|bash + irm|iex with profile picker
Add install.sh (Linux/macOS/WSL/Termux/Git Bash) and install.ps1
(Windows native, PowerShell 5.1+) so installs become a single line
in the README the way Rust/Bun/Deno/Homebrew do it.
install.sh:
- Detects OS (WSL/Linux/macOS/Termux/Git Bash), distro, WSLg
PulseAudio bridge, package manager (apt/dnf/pacman/brew/pkg/
zypper) and Python >=3.11 up front.
- Interactive profile picker: full | standard | basic | custom.
- Computes only the apt packages that are MISSING for the chosen
profile via dpkg/rpm/pacman/brew/pkg queries (no redundant
sudo).
- Three install paths offered: auto with sudo, show-me-the-command,
or skip. Falls back to show-me-the-command when piped via
curl|bash (non-TTY) so we never run sudo without a real prompt.
- Writes ~/.asoundrc pointing at /mnt/wslg/PulseServer when the
profile includes voice + we're on WSL with WSLg present β this
is the Kali fix users were hitting.
- Picks uv > pipx > pip automatically, applies --break-system-
packages on Termux / PEP 668 boxes.
- Runs when webbridge is chosen.
- --dry-run, --no-deps, --pre, --profile=NAME, --uv/--pip/--pipx
flags for power users and CI.
install.ps1:
- Same flow on Windows. Detects OS / arch / elevation / package
manager (winget > scoop > choco), Python >=3.11, uv/pipx/pip.
- Tmux is the only system dep on Windows because the sounddevice
wheel bundles PortAudio and python.org ships tkinter built-in.
- -DryRun, -Profile, -Installer, -Pre, -NoDeps. Env-var fallbacks
(DULUS_PROFILE / DULUS_INSTALLER) for irm|iex preset usage.
README:
- New 'Option A - One-liner installer (recommended)' block at the
top of Quick Start. Docker moves to Option B, manual pip to C.
- Documents the four profiles, the power-user flags, and how to
preset via env var when running through iex.
Bump 0.2.79 -> 0.2.80.
feat(installer): one-liner curl|bash + irm|iex with profile picker
Add install.sh (Linux/macOS/WSL/Termux/Git Bash) and install.ps1
(Windows native, PowerShell 5.1+) so installs become a single line
in the README the way Rust/Bun/Deno/Homebrew do it.
install.sh:
- Detects OS (WSL/Linux/macOS/Termux/Git Bash), distro, WSLg
PulseAudio bridge, package manager (apt/dnf/pacman/brew/pkg/
zypper) and Python >=3.11 up front.
- Interactive profile picker: full | standard | basic | custom.
- Computes only the apt packages that are MISSING for the chosen
profile via dpkg/rpm/pacman/brew/pkg queries (no redundant
sudo).
- Three install paths offered: auto with sudo, show-me-the-command,
or skip. Falls back to show-me-the-command when piped via
curl|bash (non-TTY) so we never run sudo without a real prompt.
- Writes ~/.asoundrc pointing at /mnt/wslg/PulseServer when the
profile includes voice + we're on WSL with WSLg present β this
is the Kali fix users were hitting.
- Picks uv > pipx > pip automatically, applies --break-system-
packages on Termux / PEP 668 boxes.
- Runs when webbridge is chosen.
- --dry-run, --no-deps, --pre, --profile=NAME, --uv/--pip/--pipx
flags for power users and CI.
install.ps1:
- Same flow on Windows. Detects OS / arch / elevation / package
manager (winget > scoop > choco), Python >=3.11, uv/pipx/pip.
- Tmux is the only system dep on Windows because the sounddevice
wheel bundles PortAudio and python.org ships tkinter built-in.
- -DryRun, -Profile, -Installer, -Pre, -NoDeps. Env-var fallbacks
(DULUS_PROFILE / DULUS_INSTALLER) for irm|iex preset usage.
README:
- New 'Option A - One-liner installer (recommended)' block at the
top of Quick Start. Docker moves to Option B, manual pip to C.
- Documents the four profiles, the power-user flags, and how to
preset via env var when running through iex.
Bump 0.2.79 -> 0.2.80.
/doctor command fully functional now!
Running diagnostics...
[PASS] Python 3.13.12
[PASS] Git: git version 2.51.0
[WARN] Not inside a git repository
[PASS] API key for kimi-code: set (sk-k...QQZ3)
... testing kimi-code API connectivity...
[PASS] kimi-code API: reachable
[PASS] gemini key (GEMINI_API_KEY): set
[PASS] kimi key (MOONSHOT_API_KEY): set
[PASS] moonshot key (MOONSHOT_API_KEY): set
[PASS] deepseek key (DEEPSEEK_API_KEY): set
[PASS] nvidia-web key (NVIDIA_API_KEY): set
[PASS] Rich (live markdown rendering)
[PASS] Pillow (clipboard image /image)
[PASS] sounddevice (voice recording)
[PASS] faster-whisper (local STT)
[WARN] tkinter (GUI / webchat eager-load): missing system library.
Fix on Linux/WSL:
sudo apt install python3-tk
(tkinter is bundled on Windows/macOS; only Linux ships it as a separate apt package.)
[WARN] Audio player: NONE found β TTS playback will fail.
Fix on Linux/WSL: sudo apt install ffmpeg
Fix on macOS: brew install ffmpeg (afplay is bundled, but ffmpeg helps)
Fix on Windows: winget install Gyan.FFmpeg
[WARN] No project DULUS.md (run /init to create)
[PASS] Checkpoints: 0.0 MB (15 sessions)
[WARN] Permission mode: accept-all (all operations auto-approved)
14 passed, 5 warnings, 0 failures (19 checks)
Running diagnostics...
[PASS] Python 3.13.12
[PASS] Git: git version 2.51.0
[WARN] Not inside a git repository
[PASS] API key for kimi-code: set (sk-k...QQZ3)
... testing kimi-code API connectivity...
[PASS] kimi-code API: reachable
[PASS] gemini key (GEMINI_API_KEY): set
[PASS] kimi key (MOONSHOT_API_KEY): set
[PASS] moonshot key (MOONSHOT_API_KEY): set
[PASS] deepseek key (DEEPSEEK_API_KEY): set
[PASS] nvidia-web key (NVIDIA_API_KEY): set
[PASS] Rich (live markdown rendering)
[PASS] Pillow (clipboard image /image)
[PASS] sounddevice (voice recording)
[PASS] faster-whisper (local STT)
[WARN] tkinter (GUI / webchat eager-load): missing system library.
Fix on Linux/WSL:
sudo apt install python3-tk
(tkinter is bundled on Windows/macOS; only Linux ships it as a separate apt package.)
[WARN] Audio player: NONE found β TTS playback will fail.
Fix on Linux/WSL: sudo apt install ffmpeg
Fix on macOS: brew install ffmpeg (afplay is bundled, but ffmpeg helps)
Fix on Windows: winget install Gyan.FFmpeg
[WARN] No project DULUS.md (run /init to create)
[PASS] Checkpoints: 0.0 MB (15 sessions)
[WARN] Permission mode: accept-all (all operations auto-approved)
14 passed, 5 warnings, 0 failures (19 checks)
What should i do next?
Anonymous Poll
0%
1 Multi-user team workspaces (shared MemPalace)
0%
2 Cloud-hosted Dulus instances (no install)
25%
3 Finish Android Apk
0%
4 Docs siteVanity URL, navegaciΓ³n pro, search, auto-generated tools ref
0%
5 CI/CD GitHub Actions: tests en cada PR + auto-release a PyPI + multi-arch Docker
75%
6 Keep Cooking π₯
[Commit f421ac9]
feat: extract sandbox on first run + Linguist override (Python repo)
[Stop shipping the sandbox source tree as part of the wheel and stop letting it dominate the GitHub language stats.]
What ships now:
- _bundles/sandbox.tar.gz (~814 KB compressed, vs 2.4 MB raw):
-the pre-built Vite output, fixed-mtime tar for reproducibility.
- sandbox_bootstrap.py with ensure_sandbox(): extracts
the tarball to ~/.dulus/sandbox/ on first hit. Uses size+mtime signature to re-extract automatically when 'pip install --upgrade dulus' rotates the bundle.
Has a dev fallback to sandbox/dist/ when running from
source / editable install.
No prompt, no notification.
- tools/build_sandbox_bundle.py: maintainer-side script that packs
Bump 0.2.81 -> 0.2.82.
feat: extract sandbox on first run + Linguist override (Python repo)
[Stop shipping the sandbox source tree as part of the wheel and stop letting it dominate the GitHub language stats.]
What ships now:
- _bundles/sandbox.tar.gz (~814 KB compressed, vs 2.4 MB raw):
-the pre-built Vite output, fixed-mtime tar for reproducibility.
- sandbox_bootstrap.py with ensure_sandbox(): extracts
the tarball to ~/.dulus/sandbox/ on first hit. Uses size+mtime signature to re-extract automatically when 'pip install --upgrade dulus' rotates the bundle.
Has a dev fallback to sandbox/dist/ when running from
source / editable install.
No prompt, no notification.
- tools/build_sandbox_bundle.py: maintainer-side script that packs
Bump 0.2.81 -> 0.2.82.
[Commit c73213c]
Website (docs/):
- New main page (index.html) β full Dulus rebranding, removed all
'Falcon' references in particle-playground.html and preview.html.
- New dulus-bird.png logo (459x716, transparent PNG) β the orange
Cigua Palmera (Dulus dominicus).
Webchat favicon:
- /favicon.ico and /dulus-bird.png routes serve the bird logo.
- <link rel='icon'> injected into the 4 HTML headers (Chat + 3 RT pages).
Installer scripts (install.sh + install.ps1):
- DEFAULT changed from 'uv > pipx > pip' to 'pip > uv > pipx'. Dulus
loads plugins that import arbitrary packages at runtime; uv tool's
isolated venv made those plugins blind to user-installed deps
(pandas, tomli, etc.). pip --user (or pip in active venv) keeps
Dulus in the same env as anything else the user pip-installs.
- Interactive prompt when uv/pipx are present and we're on a TTY.
- curl|bash / irm|iex (non-TTY) silently defaults to pip.
- 'uv tool install dulus' is a no-op when already installed β switched
to 'uv tool upgrade dulus' on re-runs. This was the bug that kept
KevRojo's own install stuck on v0.2.16 for months.
- PATH detection: when no Python on PATH, probe well-known install and print the exact PATH= line to add.
- Heads-up when ~/.local/bin is missing from PATH after install.
Bump to π¦ Dulus 0.2.83
$Dulus $DULUS
#Dulus
Website (docs/):
- New main page (index.html) β full Dulus rebranding, removed all
'Falcon' references in particle-playground.html and preview.html.
- New dulus-bird.png logo (459x716, transparent PNG) β the orange
Cigua Palmera (Dulus dominicus).
Webchat favicon:
- /favicon.ico and /dulus-bird.png routes serve the bird logo.
- <link rel='icon'> injected into the 4 HTML headers (Chat + 3 RT pages).
Installer scripts (install.sh + install.ps1):
- DEFAULT changed from 'uv > pipx > pip' to 'pip > uv > pipx'. Dulus
loads plugins that import arbitrary packages at runtime; uv tool's
isolated venv made those plugins blind to user-installed deps
(pandas, tomli, etc.). pip --user (or pip in active venv) keeps
Dulus in the same env as anything else the user pip-installs.
- Interactive prompt when uv/pipx are present and we're on a TTY.
- curl|bash / irm|iex (non-TTY) silently defaults to pip.
- 'uv tool install dulus' is a no-op when already installed β switched
to 'uv tool upgrade dulus' on re-runs. This was the bug that kept
KevRojo's own install stuck on v0.2.16 for months.
- PATH detection: when no Python on PATH, probe well-known install and print the exact PATH= line to add.
- Heads-up when ~/.local/bin is missing from PATH after install.
Bump to π¦ Dulus 0.2.83
$Dulus $DULUS
#Dulus
Fixing some glitches with the install scripts , roll back here if needed
pip install dulus==0.2.82
pip install dulus==0.2.82
π¦
π 0.2.84 LIVE en PyPI: https://pypi.org/project/dulus/0.2.84/
Wheel subido (11.4 MB con sandbox/dist embebido)
Tag
Build artifacts limpiados
All fixed
Wheel subido (11.4 MB con sandbox/dist embebido)
Tag
v0.2.84 empujadoBuild artifacts limpiados
All fixed
v0.2.86 β Cigua Palmera lands across the UI π¦
The Dulus palmchat (Dulus dominicus, the Dominican national bird) is
now the face of every Dulus surface β sidebar, header, dashboard, OS
tab. Plus the agent learned to respect what you're already doing in
the browser.
β¨ Highlights
π¦ New cigua-palmera logo, everywhere
- Webchat + Mesa Redonda: bird in the sidebar and next to the title
- Task Dashboard (/dashboard): bird in the nav + proper favicon
- Sandbox OS (/sandbox/): browser tab favicon shows the bird
π€ WebBridge stops killing your vibe
- WebBridgeNavigate now explicitly warns the model not to repurpose a
tab that's playing music/video or hosting a logged-in session.
- For weather, news, prices, docs β it routes the agent to WebSearch
+ WebFetch (headless, no browser side effects).
- For a fresh tab β WebBridgeNewTab, not Navigate.
π¦ Slimmer wheel (stayed at 2.5 MB)
- Carried over from 0.2.85: dropped docs/uploads (9.9 MB of Claude
Design source images that had no runtime use) and the redundant
_bundles/sandbox.tar.gz. The sandbox/dist tree now ships directly
in the wheel β same layout that worked in 0.2.81.
π Installer cleanups (also from 0.2.85)
- install.ps1: plain
Falls back to
on PATH at all.
- install.sh: WSL/Linux flow continues to detect distro + pkg mgr +
Python + uv/pipx/pip.
Install
curl -fsSL https://raw.githubusercontent.com/KevRojo/Dulus/main/install.sh | bash
iwr -useb https://raw.githubusercontent.com/KevRojo/Dulus/main/install.ps1 | iex
pip install --upgrade dulus
Named after the bird, not the rocket. π©π΄
The Dulus palmchat (Dulus dominicus, the Dominican national bird) is
now the face of every Dulus surface β sidebar, header, dashboard, OS
tab. Plus the agent learned to respect what you're already doing in
the browser.
β¨ Highlights
π¦ New cigua-palmera logo, everywhere
- Webchat + Mesa Redonda: bird in the sidebar and next to the title
- Task Dashboard (/dashboard): bird in the nav + proper favicon
- Sandbox OS (/sandbox/): browser tab favicon shows the bird
π€ WebBridge stops killing your vibe
- WebBridgeNavigate now explicitly warns the model not to repurpose a
tab that's playing music/video or hosting a logged-in session.
- For weather, news, prices, docs β it routes the agent to WebSearch
+ WebFetch (headless, no browser side effects).
- For a fresh tab β WebBridgeNewTab, not Navigate.
π¦ Slimmer wheel (stayed at 2.5 MB)
- Carried over from 0.2.85: dropped docs/uploads (9.9 MB of Claude
Design source images that had no runtime use) and the redundant
_bundles/sandbox.tar.gz. The sandbox/dist tree now ships directly
in the wheel β same layout that worked in 0.2.81.
π Installer cleanups (also from 0.2.85)
- install.ps1: plain
pip install dulus when you pick pip β no more--user flag dumping scripts into a directory that's not on PATH.Falls back to
python -m pip / py -3 -m pip only if pip isn'ton PATH at all.
- install.sh: WSL/Linux flow continues to detect distro + pkg mgr +
Python + uv/pipx/pip.
Install
curl -fsSL https://raw.githubusercontent.com/KevRojo/Dulus/main/install.sh | bash
iwr -useb https://raw.githubusercontent.com/KevRojo/Dulus/main/install.ps1 | iex
pip install --upgrade dulus
Named after the bird, not the rocket. π©π΄
π¦
Dulus 0.2.88 β live en PyPI
π LiteLLM gateway β UN solo entry en el welcome wizard abre
la puerta a mΓ‘s de 100 backends: OpenRouter, Groq, Together,
Perplexity, Mistral, xAI, Cohere, Fireworks, Anyscale, Replicateβ¦
El wizard te lo instala automΓ‘tico en sitio y te pregunta la API
key del backend que escogiste β sin tener que salirte, hacer pip
install, y volver a entrar.
π©Ί /doctor primer arranque β apenas terminas el welcome,
Dulus te tira un health snapshot completo (quΓ© providers estΓ‘n
configurados, voice/TTS, deps opcionales, todo). Cero adivinanza
de quΓ© quedΓ³ funcionando.
π§ install.sh repara permisos de ~/.dulus β si alguna vez
corriste el installer con sudo y te quedΓ³ root-owned, ya no mΓ‘s
PermissionErrors. Auto-heal en Linux/WSL.
π₯ Toolbar fix en Windows Terminal β el "Listening..." del
wake-word ya no se desborda a una segunda fila.
π€ Web tool boundaries mΓ‘s claros β el modelo ya distingue
entre WebSearch/WebFetch (info text-only) y WebBridge (cuando
quieres VER/OΓR algo, como pedir que te ponga mΓΊsica en YouTube).
π Voice transcribed input flag β
el texto pa' que el modelo tolere typos de Whisper.
Stats de la ΓΊltima semana:
β’ 7,084 downloads
β’ 1,451 ayer solamente
β’ Wheel a 2.5 MB (slim AF)
π¦ Install:
π PyPI: pypi.org/project/dulus/0.2.88/
π GitHub: github.com/KevRojo/Dulus
π Web: kevrojo.github.io/Dulus/
π©π΄βοΈ Named after the bird, not the rocket.
π LiteLLM gateway β UN solo entry en el welcome wizard abre
la puerta a mΓ‘s de 100 backends: OpenRouter, Groq, Together,
Perplexity, Mistral, xAI, Cohere, Fireworks, Anyscale, Replicateβ¦
El wizard te lo instala automΓ‘tico en sitio y te pregunta la API
key del backend que escogiste β sin tener que salirte, hacer pip
install, y volver a entrar.
π©Ί /doctor primer arranque β apenas terminas el welcome,
Dulus te tira un health snapshot completo (quΓ© providers estΓ‘n
configurados, voice/TTS, deps opcionales, todo). Cero adivinanza
de quΓ© quedΓ³ funcionando.
π§ install.sh repara permisos de ~/.dulus β si alguna vez
corriste el installer con sudo y te quedΓ³ root-owned, ya no mΓ‘s
PermissionErrors. Auto-heal en Linux/WSL.
π₯ Toolbar fix en Windows Terminal β el "Listening..." del
wake-word ya no se desborda a una segunda fila.
π€ Web tool boundaries mΓ‘s claros β el modelo ya distingue
entre WebSearch/WebFetch (info text-only) y WebBridge (cuando
quieres VER/OΓR algo, como pedir que te ponga mΓΊsica en YouTube).
π Voice transcribed input flag β
/voice ahora etiqueta el texto pa' que el modelo tolere typos de Whisper.
Stats de la ΓΊltima semana:
β’ 7,084 downloads
β’ 1,451 ayer solamente
β’ Wheel a 2.5 MB (slim AF)
π¦ Install:
pip install -U dulusπ PyPI: pypi.org/project/dulus/0.2.88/
π GitHub: github.com/KevRojo/Dulus
π Web: kevrojo.github.io/Dulus/
π©π΄βοΈ Named after the bird, not the rocket.
GitHub
GitHub - KevRojo/Dulus: Dulus is an IA agent inspired by Open-Claw but better
Dulus is an IA agent inspired by Open-Claw but better - KevRojo/Dulus
π1
π¦
Dulus 0.2.89 β live on PyPI
β¨ Highlights:
π€ Local OCR everywhere
- New
text from images via pytesseract (with easyocr fallback).
Zero vision tokens, offline, instant.
- Use case: receipts, code screenshots, error stacks, dense
tables. Anything text-shaped inside an image.
πΈ WebBridgeScreenshot now auto-OCRs
- One tool call returns
has to chain Screenshot β ExtractText. No more "let me Read
this PNG" β 8KB of binary garbage in context.
πΌ /img + OCR fallback
- Vision models (Claude, GPT-4o, Gemini, etc.) now receive
image AND a verbatim text transcription side-by-side. Fewer
OCR-style misreads on receipts and code.
- Text-only models (or routes where the bridge drops the
image) now get the OCR text and can actually answer.
Graceful degrade > silent fail.
π¦ Sandbox embedded inside the desktop GUI
- Click "π¦ Sandbox" in the GUI Web tab β the Dulus OS renders
INSIDE the frame, not in a popup window. pywebview spawned
as a subprocess, reparented via Win32 SetParent into the
tkinter content frame. Production-grade Python desktop
integration.
- Drag inside the OS doesn't jitter the embed. Opens at GUI's
current size, frozen there.
- Smart URL: uses
(gives full API access), otherwise spins up a local
SandboxServer on a random port. Works offline either way.
π kepano/obsidian-skills bundled
- 5 skills shipped out of the box: defuddle, json-canvas,
obsidian-bases, obsidian-cli, obsidian-markdown.
- Dulus writes Obsidian Flavored Markdown by default β
wikilinks
embeds. Killer pairing: open ~/.dulus/memory as an Obsidian
vault and the graph view connects related memories
automatically.
π LiteLLM gateway polish
- One provider entry β 100+ backends (OpenRouter, Groq,
Together, xAI, Mistral, Cohere, Perplexity, β¦)
- Welcome wizard auto-installs LiteLLM in-place and asks for
the backend-specific API key (no more exit-wizard,
pip-install, re-run dance).
π¦ Install:
π PyPI: pypi.org/project/dulus/0.2.89/
π GitHub: github.com/KevRojo/Dulus
π Web: kevrojo.github.io/Dulus/
Named after the bird, not the rocket. π¦ π©π΄
β¨ Highlights:
π€ Local OCR everywhere
- New
/ocr command and ExtractTextFromImage tool β extract text from images via pytesseract (with easyocr fallback).
Zero vision tokens, offline, instant.
- Use case: receipts, code screenshots, error stacks, dense
tables. Anything text-shaped inside an image.
πΈ WebBridgeScreenshot now auto-OCRs
- One tool call returns
{ saved_to, text }. Model no longer has to chain Screenshot β ExtractText. No more "let me Read
this PNG" β 8KB of binary garbage in context.
πΌ /img + OCR fallback
- Vision models (Claude, GPT-4o, Gemini, etc.) now receive
image AND a verbatim text transcription side-by-side. Fewer
OCR-style misreads on receipts and code.
- Text-only models (or routes where the bridge drops the
image) now get the OCR text and can actually answer.
Graceful degrade > silent fail.
π¦ Sandbox embedded inside the desktop GUI
- Click "π¦ Sandbox" in the GUI Web tab β the Dulus OS renders
INSIDE the frame, not in a popup window. pywebview spawned
as a subprocess, reparented via Win32 SetParent into the
tkinter content frame. Production-grade Python desktop
integration.
- Drag inside the OS doesn't jitter the embed. Opens at GUI's
current size, frozen there.
- Smart URL: uses
:5000/sandbox/ if /webchat is running (gives full API access), otherwise spins up a local
SandboxServer on a random port. Works offline either way.
π kepano/obsidian-skills bundled
- 5 skills shipped out of the box: defuddle, json-canvas,
obsidian-bases, obsidian-cli, obsidian-markdown.
- Dulus writes Obsidian Flavored Markdown by default β
wikilinks
[[Note]], callouts > [!note], properties, embeds. Killer pairing: open ~/.dulus/memory as an Obsidian
vault and the graph view connects related memories
automatically.
π LiteLLM gateway polish
- One provider entry β 100+ backends (OpenRouter, Groq,
Together, xAI, Mistral, Cohere, Perplexity, β¦)
- Welcome wizard auto-installs LiteLLM in-place and asks for
the backend-specific API key (no more exit-wizard,
pip-install, re-run dance).
π¦ Install:
pip install -U dulusπ PyPI: pypi.org/project/dulus/0.2.89/
π GitHub: github.com/KevRojo/Dulus
π Web: kevrojo.github.io/Dulus/
Named after the bird, not the rocket. π¦ π©π΄
GitHub
GitHub - KevRojo/Dulus: Dulus is an IA agent inspired by Open-Claw but better
Dulus is an IA agent inspired by Open-Claw but better - KevRojo/Dulus
dulus-sandbox.apk
6.5 MB
If you got Android and want to test the Local Apk, here you go
Install:
1. Download dulus-sandbox.apk
2. Allow "Install from unknown sources"
3. Run /webchat on your laptop (pip install -U dulus then
4. Open the APK, enter your laptop's LAN IP, port 5000
5. Tap any sandbox app β should connect live
1. Download dulus-sandbox.apk
2. Allow "Install from unknown sources"
3. Run /webchat on your laptop (pip install -U dulus then
dulus)4. Open the APK, enter your laptop's LAN IP, port 5000
5. Tap any sandbox app β should connect live
Dulus 0.2.92 π¦
β /lang command. 34 ISO codes mapped
(zh, ja, pt-br, ar, hi, fr, de, β¦).
Free-form descriptors pass verbatim.
Default stays Dominican Spanish.
Try: /lang zh, /lang "very formal British English",
/lang "callejero dominicano"
pip install -U dulus
β /lang command. 34 ISO codes mapped
(zh, ja, pt-br, ar, hi, fr, de, β¦).
Free-form descriptors pass verbatim.
Default stays Dominican Spanish.
Try: /lang zh, /lang "very formal British English",
/lang "callejero dominicano"
pip install -U dulus
REMEMBER! ALWAYS BE CREATIVE WITH DULUS!
The /lang command in Dulus accepts ISO codes OR any free-form
descriptor.
/lang zh β Mandarin
/lang ja β Japanese
/lang pt-br β Brazilian Portuguese
/lang "tigre de calle dominicano" β ...you'll see π¦ π©π΄
/lang "pirate" β "Arr matey, this code be cursed"
/lang "Yoda" β "Buggy this function is, yes hmm"
pip install -U dulus
$DULUS $Dulus
The /lang command in Dulus accepts ISO codes OR any free-form
descriptor.
/lang zh β Mandarin
/lang ja β Japanese
/lang pt-br β Brazilian Portuguese
/lang "tigre de calle dominicano" β ...you'll see π¦ π©π΄
/lang "pirate" β "Arr matey, this code be cursed"
/lang "Yoda" β "Buggy this function is, yes hmm"
pip install -U dulus
$DULUS $Dulus
π₯2π1
