An intelligent development companion — Markdown viewer, AI workspace, and plan review tool. Powered by Tauri, React, and GitHub Copilot.
- GitHub Flavored Markdown rendering (tables, task lists, strikethrough, autolinks)
- Syntax highlighting for 190+ languages
- Sidebar outline navigation with smooth scrolling
- Live reload on file save
- Dark / light / system theme cycling
- GitHub Copilot integration via ACP (Agent Communication Protocol)
- Multiple interaction modes:
ask,plan,code,edit,agent,autopilot - Session management with SQLite persistence — sessions tied to workspace directories
- Plan workflow: write a plan → review → execute, with phase tracking
- Full streaming responses with cancel support
- Inline block comments on any Markdown document
- Comments persisted in a central SQLite database
- Unresolved comment counters per file
- Generate consolidated review prompts for AI tools
- Built-in offline speech transcription powered by OpenAI Whisper
- Runs locally — no API keys, no internet required
- 4 model sizes (tiny 75 MB to medium 1.5 GB)
- Configurable recording shortcut and audio input device
arandu README.md— open files from terminal- Dual IPC transport: Unix socket (
~/.arandu/arandu.sock) + TCP (127.0.0.1:7474) - Instant file opening if app is already running; automatic launch fallback
- Installable via Homebrew (macOS) or manual download
- Persistent tray icon with custom "A" glyph
- Localized menu labels (follows app language setting)
- Closing window hides to tray instead of quitting (macOS/Linux)
brew install --cask devitools/arandu/aranduDownload the latest release for your platform from the GitHub Releases page:
| Platform | Format |
|---|---|
| macOS (Apple Silicon) | .dmg |
| macOS (Intel) | .dmg |
| Linux | .AppImage, .deb |
| Windows | .exe |
On first launch (macOS), the app offers to install the
aranduCLI automatically. It can also be installed later via Arandu → Install Command Line Tool…
arandu README.md # open a single file
arandu doc1.md doc2.md # open multiple files
arandu *.md # open all .md files in the current directory
arandu # open the file pickerarandu /path/to/project # open a directory as a workspaceA workspace session gives you access to the GitHub Copilot chat panel, session history, and plan workflow, all scoped to that directory.
Arandu connects to the GitHub Copilot CLI via the ACP (Agent Communication Protocol) — a JSON-RPC 2.0 protocol over stdin/stdout.
- Open a directory as a workspace (
arandu /path/to/project) - Click New Session, give it a name and an initial prompt
- The app spawns
gh copilot --acp --stdioand establishes the connection - Use the Chat tab to send messages, switch modes, or cancel generation
| Mode | Description |
|---|---|
ask |
General questions and explanations |
plan |
High-level planning and architecture |
code |
Code generation and editing suggestions |
edit |
Direct file edits within the workspace |
agent |
Autonomous multi-step task execution |
autopilot |
Fully autonomous mode |
- Use
planmode to generate a plan in the Plan tab - Review and annotate the plan with inline comments
- Switch to
codeoragentmode to execute it - Track execution progress in the session view
Add inline comments to any Markdown block, track unresolved feedback, and generate AI review prompts.
How to use:
Cmd/Ctrl+Clickany block to select it and add a comment- The comment panel shows all comments with block-type indicators (
H2,P3,C4, …) - Resolve comments individually or generate a consolidated prompt for AI tools
- All comments are stored in a local SQLite database (
~/.local/share/arandu/comments.dbon Linux,~/Library/Application Support/arandu/comments.dbon macOS)
Record audio and transcribe to text using OpenAI Whisper (runs entirely offline).
How to use:
- Press
Alt+Spaceto start/stop recording (shortcut configurable in settings) - Choose a model size in Settings:
tiny(fastest) tomedium(most accurate) - Transcription is automatically copied to the clipboard
- Select your audio input device from the settings panel
cd apps/tauri
npm install # install frontend dependencies
make dev # run in development mode (Vite + Tauri hot reload)cd apps/tauri
npm test # run Vitest tests
npm run test:coverage # tests with coverage reportUsing Makefile (recommended):
cd apps/tauri
make dev # development mode (hot reload)
make build # production build
make build-dev # local dev build with git hash (e.g. Arandu_0.0.0-abc1234.dmg)
make install # install app to ~/Applications + CLI to /usr/local/bin
make clean # remove build artifacts
make help # list all targetsUsing npm/npx directly:
cd apps/tauri
npm run dev # Vite dev server only (port 5173)
npx tauri dev # full Tauri dev mode (Vite + Rust)
npx tauri build # production buildscripts/set-version.sh 0.8.0 # update version across all config filesStack: React 18 + TypeScript + Vite + TailwindCSS + shadcn/ui (Radix UI)
The app uses a multi-window architecture — three independent React applications sharing code:
| Window | Entry | Purpose |
|---|---|---|
| Main | main.tsx → App.tsx |
Markdown viewer, workspaces, ACP chat, plan workflow |
| Settings | settings-main.tsx → SettingsApp.tsx |
Theme, language, Whisper config |
| Whisper | whisper-main.tsx → WhisperApp.tsx |
Floating voice recording UI |
Key libraries:
- UI: shadcn/ui components,
cn()fromlib/utils.tsfor class merging - State: React Context (
AppContext) + custom hooks per subsystem - i18n: i18next + react-i18next, languages
pt-BRanden, cross-window sync vialocalStorage - Forms: react-hook-form + zod validation
- Data: @tanstack/react-query
- Tests: Vitest + React Testing Library
Stack: Rust + Tauri 2
| Module | Purpose |
|---|---|
lib.rs |
Core commands: render markdown, file I/O, window management, tray labels |
acp/ |
GitHub Copilot ACP integration (JSON-RPC over stdin/stdout) |
sessions.rs |
Session CRUD with SQLite persistence |
comments.rs |
Block comment system with SQLite persistence |
plan_file.rs |
Plan file read/write (plans/{session_id}.md) |
history.rs |
File open history (JSON) |
ipc.rs |
Unix domain socket IPC (~/.arandu/arandu.sock) |
tcp_ipc.rs |
TCP IPC server (127.0.0.1:7474, all platforms) |
ipc_common.rs |
Shared IPC command dispatch (open, ping, show) |
tray.rs |
System tray icon and i18n-aware menu |
cli_installer.rs |
macOS CLI installation helper |
whisper/ |
Offline voice transcription (model management, recording, transcription) |
Persistence:
- SQLite (
comments.db): comments, file hashes, sessions — WAL mode for concurrent access - JSON (
history.json): file open history - Markdown files (
plans/{session_id}.md): plan documents
For full architecture documentation, command reference, and codebase conventions, see CLAUDE.md.
Key points:
- The macOS native app (
apps/macos/) is deprecated — use the Tauri version only - Frontend is React + TypeScript — no vanilla JS, Vite handles the build
- New Tauri commands: define in Rust → register in
invoke_handler→ add permissions tocapabilities/default.json - UI components are from shadcn/ui — add new ones with
npx shadcn@latest add <component> - All user-facing strings go through
useTranslation()and must have entries in bothlocales/pt-BR.jsonandlocales/en.json