claustre claustre

Desktop App

claustre includes a native macOS desktop application built with Tauri v2. It provides the same project and task management features as the TUI in a windowed GUI, sharing the same SQLite database and library code.

Launching

claustre app

This locates the claustre-app binary (installed alongside the main claustre binary) and launches the desktop window.

Features

The desktop app mirrors the TUI dashboard capabilities:

Keyboard Shortcuts

Dashboard — Navigation

KeyAction
j / Select next task
Select previous task
EnterGo to session terminal (if task has one)
Ctrl+J / Ctrl+KSwitch tabs
Ctrl+PCommand palette
/Filter tasks by title
?Help overlay
EscClose overlays / clear filter

Dashboard — Actions

KeyAction
nNew task
eEdit selected task (pending/draft)
lLaunch selected task
rMark done (working/in_review)
kKill session
dDelete task
vView task details
oOpen PR in browser
aAdd project
sShow stats
iSkills panel
cConfigure permissions

Session Tab

KeyAction
Ctrl+HFocus previous pane
Ctrl+LFocus next pane
Ctrl+RSplit right (new shell pane)
Ctrl+BSplit down (new shell pane)
Ctrl+WClose focused pane
Ctrl+DReturn to dashboard
Ctrl+J / Ctrl+KSwitch tabs

Architecture

The desktop app is a separate Cargo workspace member at app/src-tauri/. It depends on the claustre library crate, reusing all shared modules (store, config, session, skills, scanner, configure) rather than duplicating logic.

claustre (workspace root)
├── src/lib.rs          # Shared library
├── src/main.rs         # CLI + TUI binary
└── app/
    ├── src/            # Frontend (HTML, CSS, JS)
    │   ├── index.html
    │   ├── styles.css
    │   └── main.js
    └── src-tauri/      # Tauri backend (Rust)
        ├── Cargo.toml
        └── src/lib.rs  # IPC commands

IPC Commands

The Tauri backend exposes IPC commands that the frontend calls via window.__TAURI__.core.invoke(). Each command wraps a core function that operates on the shared Store (protected by a Mutex):

Command Purpose
list_projectsList all projects with session/task counts
create_projectRegister a new project
delete_projectRemove a project and its data
list_tasksList tasks for a project
create_taskCreate a new task
update_taskEdit an existing task
delete_taskDelete a task
reorder_tasksSwap sort order of two tasks
mark_task_doneTransition a task to done and tear down its session
list_subtasksList subtasks for a task
create_subtaskAdd a subtask
delete_subtaskRemove a subtask
launch_taskCreate a session and start Claude in embedded PTY
kill_sessionTear down a session and reset the task
pty_spawn_shellSpawn a shell PTY in the session worktree
pty_writeSend keystrokes to a PTY pane
pty_resizeResize a PTY pane
get_project_statsProject statistics
get_rate_limitCurrent API usage
list_sessionsActive sessions for a project
list_installed_skillsList installed skills (global or project)
find_skills_searchSearch skills registry
add_skill_packageInstall a skill by package name
remove_skillUninstall a skill
update_all_skillsUpdate all installed skills
read_skill_contentRead SKILL.md for detail view
check_permissionsCheck Claude Code permissions alignment
apply_permissionsApply recommended permissions
list_external_sessionsScan for non-claustre Claude sessions
get_versionGet claustre version string

Building

# Build the desktop app
cargo build -p claustre-app

# Run tests
cargo test -p claustre-app

# Build the entire workspace
cargo build --workspace

The Tauri app requires the same prerequisites as the TUI. On first build, Cargo downloads Tauri dependencies automatically. DevTools are only opened in debug builds (#[cfg(debug_assertions)]); release builds do not include them.