kanzo
Self-hosted, sharable kanban for humans and agents. One 4.5 MB binary, 4.5 MB of RAM, 10 to 60 tokens per agent reply, starts in 2 ms, zero setup.
翻譯準備中
Aloe Desktop is a personal AI workspace that combines chat, memory, proactive updates, scheduled tasks, and powerful integrations in one clean desktop app. Connect your tools, stay on top of what matters, and let Aloe help you think, plan, remember, and act.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Aloe Desktop is the native desktop agent for Aloe. It is Aloe with access to your computer: the same chat as the web app, plus the ability to safely work with granted folders, run local commands, manage terminal sessions, open local URLs, show notifications, and report recent activity back to the user.
The app is built with Tauri 2, Rust, React 19, Vite, and Bun.
X-Aloe-Agent..
|-- src/ # React desktop UI
|-- src-tauri/ # Tauri/Rust application shell and local agent runtime
|-- build_release.py # Interactive release build helper
|-- UPDATER.md # Auto-update release process
|-- package.json # Bun scripts and frontend dependencies
`-- vite.config.ts # Vite configuration
For Linux, install the native packages required by Tauri/WebKitGTK for your distribution before running or building the app.
Install dependencies:
bun install
Fetch Cua Driver, which desktop control uses and the app bundles (the build fails without it):
python scripts/fetch_cua_driver.py
Run the desktop app in development mode:
bun run tauri:dev
The Tauri dev server starts Vite on 127.0.0.1:1420 through the beforeDevCommand configured in src-tauri/tauri.conf.json.
Run a frontend typecheck and production Vite build:
bun run build
Build the native app:
bun run tauri:build
aloe:// deep link.In debug builds, the app defaults to http://127.0.0.1:8080 for the Aloe backend. In release builds, it defaults to https://api.247autoarmy.in/.
To compile against a different backend URL, set ALOE_BACKEND_URL at build time:
ALOE_BACKEND_URL=https://your-api.example.com bun run tauri:build
Aloe Desktop stores its local configuration in the operating system config directory under Aloe Desktop/config.json. The config includes the registered agent id, credential, user profile, granted folders, desktop preferences, recent actions, and terminal session metadata.
Use Log out in the app to reset the agent connection and remove stored credentials.
ask: every command request is queued for explicit approval. A denial tells Aloe it was denied, so it stops rather than retrying the same command through another tool.
auto: Aloe's own model judges each command against the conversation it came from (via the backend) before running it. This judgement is the only gate — there is no local blocklist in front of it, because the previous one rejected pipes, &&, and anything containing "curl" or "deploy", which is most real development work and left auto mode behaving exactly like ask. A command the check clears runs unattended. A command it declines does not reach the approval queue — it is refused on the spot and the judge's reason is returned to Aloe as the tool's error, so the model can explain what was blocked and propose something narrower in the same turn. Note the consequence: in auto there is no way to approve a command the judge rejected; switch to ask if you want the final say on every command.
The two not-safe outcomes are kept distinct. A verdict refuses. A failed check — network error, timeout, unparseable answer — has judged nothing, so it falls back to the approval queue rather than refusing a command on no evidence.
all: command approvals are disabled.
File operations are still limited to folders the user has explicitly granted.
Two kinds of grant, with the same enforcement:
The browser never names a path — it can only ask for the dialog, and is told the result. Aloe Desktop keeps its own copy of the chat grants and re-checks every job against them, so a job naming a conversation it was not granted still fails here.
Sensitive-path write rules (.git/, node_modules/, build output, .env, keys) apply identically to both kinds.
The Chat | Code switch in the title bar opens Aloe Code: Aloe as a coding agent working in a project folder on this computer, like Claude Code in the Claude desktop app.
Add project folder uses the same grant as Folder access and shows up there). Sessions are listed in Code mode's own sidebar, grouped by project, and kept out of the chat sidebar.workspace: "code", but it is not a chat mode. Requests carry workspace: "code" and the session's projectPath, and the backend answers them with its own fixed setup (lib/chat/code_workspace.ts): the Deep model chain, the full local toolset plus web, and a coding system prompt holding the project path and the project's own MEMORY.md/AGENTS.md. Chat's per-turn context (memories, personality, board, connectors, skills, clock) is left out, and so is tool discovery.<aloe-context> envelope the thread doesn't display), since it can change mid-session.workspace: "code"), which keeps it out of the chat list everywhere, including the web app. The project folder path for each session stays on this device, in localStorage. A session marked on the server that this device has no project for (from another computer, or after a reinstall) is listed under "No project on this computer", and you choose its project before continuing..git/HEAD rather than by running git, so opening a project never runs code from its repository config.When the user switches on "Let Aloe control this computer", the backend's desktop agent drives apps through Cua Driver, bundled under resources/cua-driver/ and pinned in scripts/fetch_cua_driver.py. Aloe runs one cua-driver mcp process (src-tauri/src/cua.rs) and forwards desktop_cua jobs to it: per-window accessibility trees, element-token clicks and typing, delivered in the background without taking the user's pointer or focus. Cua's telemetry is turned off (DO_NOT_TRACK=1).
Aloe filters every call before it reaches the driver: only an allowlist of tools, never Aloe's own process or windows, no file writes, and launch_app by app name only (never an executable path or arguments). Moving the pointer into a screen corner still stops control. Set ALOE_CUA_DRIVER to a driver binary to develop against a different build.
Hold Left Ctrl + Left Alt (Left Control + Left Option on macOS) anywhere, talk, and let go. A glow around the screen and a panel at the bottom show your words as they are heard; Aloe's answer streams into the same panel and is read aloud. It is on by default and can be switched off under Settings › Desktop app › Voice.
voiceConversationId in config.json), sent as a desktop chat with X-Aloe-Agent, so it has the same local tools, folder grants and command approvals as a chat typed in this app.src-tauri/src/voice/audio.rs) and streamed straight to OpenAI's realtime transcriber (gpt-live-transcribe), authenticated with a one-minute ephemeral key from POST /api/voice/live-session. The OpenAI key itself lives only on the backend (OPENAI_API_KEY); the backend never receives or stores the audio.POST /api/voice/speak (OpenAI TTS, 24 kHz PCM) and played in order.voice.html, src-tauri/src/voice/overlay.rs) never takes keyboard focus and is excluded from Aloe's own screenshots, like the desktop-control overlay.Aloe drives Chrome (or Chromium/Edge) through the DevTools Protocol on 127.0.0.1:9333. If something is already listening there, Aloe attaches to it; otherwise it launches the browser itself.
Two profiles are available:
default — the user's everyday Chrome profile, with their existing logins. Chrome must not already be running with that profile, because a second instance cannot open a debugging port on a locked profile. Aloe reports this explicitly if the port never comes up.aloe — a separate profile under Aloe Desktop/browser-profile, which can run alongside a normal Chrome window but starts signed out. Logins persist there between sessions.Browser actions are not gated by the command-approval modes above: navigation, clicks, and typing run as soon as they are requested. Page content is untrusted input — a page that instructs the assistant to do something is data about that page, not a request from the user.
Aloe never launches the browser headless. The window is visible so the user can watch and take over.
Auto-update behavior is configured in src-tauri/tauri.conf.json. Release builds create updater artifacts, and the app checks:
https://github.com/Trifles-Labs/aloe-desktop/releases/latest/download/latest.json
See UPDATER.md for signing key setup, versioning, tagging, publishing, and local update testing.
You can also use the release helper:
python build_release.py 1.2.3
On Linux, choose bundles with:
python build_release.py 1.2.3 --linux-bundles deb,rpm
If sign-in fails, verify the backend URL, the web app URL (ALOE_FRONTEND_URL), and that the backend is reachable from the desktop machine.
If the socket stays disconnected, log out and sign in again. The app also reconnects automatically with backoff when the backend is temporarily unavailable.
If folder operations fail, remove and re-add the folder so the stored path is refreshed and canonicalized.
If Linux rendering fails under Wayland, the app enables software rendering for Wayland sessions at startup.
bun install # install JavaScript dependencies
bun run tauri:dev # run the desktop app locally
bun run build # typecheck and build the web UI
bun run tauri:build # build native installers/artifacts
python build_release.py # guided release build