[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
Dulus Channel
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β¦
Working perfectly! here i set lang to zh reset Dulus write a simple Hey in english and he answer in zh
π₯2
Remember!!!!!!! just use /harvest gemini thats gonna open a webbrowser with a gemini chat WITHOUT LOGIN just write there Dulus the browser will close and PUM start using Dulus without an IA api key , i know i know op β€οΈ
π₯1
v0.2.93 β IA WITHOUT AN API KEY, FIRST-RUN. π¦
The welcome wizard now offers, by default, to open Gemini in a browser and capture its guest session β no Google login, no API key, no credit card. From pip install to working IA in 30 seconds. Same flow works for Claude / Kimi / Qwen / DeepSeek if you have those accounts. This was Dulus's ace under the sleeve. Now it's the front door.
pip install dulus -U
pip install dulus -U
π₯2
