A modern desktop application for running Python optimization benchmarks on remote servers via SSH.
Built with Tauri 2 (Rust) + Svelte 5 + Tailwind CSS.
If you're a researcher running optimization benchmarks on remote servers, you know the pain:
SolverPilot solves this with a unified GUI that brings order to the chaos:
| Aspect | Manual SSH + tmux | SolverPilot |
|---|---|---|
| Multi-session management | Multiple terminal windows | Single unified interface |
| Job persistence | Manual tmux attach | Automatic reconnection |
| Progress tracking | grep logs manually | Real-time [x/y] parsing |
| History | Lost when session ends | SQLite database, permanent |
| Code sync | rsync by hand, easy to forget | Integrated rsync in GUI |
| Learning curve | Need tmux/SSH expertise | GUI for common workflows |
SolverPilot doesn't replace SSH - it makes it better for the specific use case of running and monitoring Python benchmarks remotely.
~/.ssh/config, passphrase via ssh-agent, persistent connections[x/y] format detection)uv integration for dependenciesPlatform Support: Linux and macOS. Windows is not currently supported due to dependencies on rsync and OpenSSH CLI tools (not natively available on Windows). May work via WSL2 but remains untested.
# Clone the repository
git clone https://github.com/yanissrairi/SolverPilot.git
cd SolverPilot
# Install frontend dependencies
bun install
# Run in development mode (hot-reload)
bun run tauri dev
# Build for production
bun run tauri build
The production binary will be in src-tauri/target/release/.
On first launch, a 4-step setup wizard guides you through configuration:
uv pathThe wizard creates ~/.config/solver-pilot/config.toml automatically.
You can also create or edit the configuration file at ~/.config/solver-pilot/config.toml:
[ssh]
host = "your-server" # SSH host (from ~/.ssh/config or IP)
user = "username" # SSH username
use_agent = true # Use ssh-agent for authentication
[paths]
local_code = "/path/to/your/project" # Local project root
local_benchmarks = "/path/to/benchmarks" # Directory containing benchmark_*.py files
local_results = "/path/to/results" # Where to store results
remote_base = "~/benchmarks" # Remote working directory
[polling]
interval_seconds = 2 # Log refresh interval
See config.example.toml for all available options.
benchmark_*.py)[x/y] progress patterns# Development with hot-reload
bun run tauri dev
# Frontend type-check
bun run check
# Lint & format
bun run lint # ESLint with auto-fix
bun run format # Prettier
bun run quality # Run all checks (lint + format + type-check)
# Rust checks
cd src-tauri
cargo clippy # Strict linting (see Cargo.toml)
cargo fmt # Format Rust code
cargo deny check # Check dependencies for security issues
unwrap, no expect, pedantic mode)any, no floating promises, strict type checkingResult<T, String> in Rust commands| Component | Technology |
|---|---|
| Backend | Rust, Tauri 2 |
| Frontend | Svelte 5, TypeScript |
| Styling | Tailwind CSS |
| Database | SQLite (via sqlx) |
| SSH | OpenSSH client |
| Sync | rsync |
| Parser | tree-sitter (Python AST) |
| Build | Bun, Vite, Cargo |
SolverPilot/
āāā src/ # Svelte 5 frontend
ā āāā App.svelte # Main application
ā āāā lib/
ā ā āāā features/ # Domain components (benchmarks, jobs, history, ssh)
ā ā āāā layout/ # MainLayout, Header, ResizablePanel
ā ā āāā stores/ # Svelte 5 runes stores (panels, shortcuts, toast)
ā ā āāā ui/ # Reusable components (Button, Modal, Badge, Toast)
ā ā āāā utils/ # Utilities (focus-trap, keyboard)
ā ā āāā api.ts # Tauri invoke wrappers
ā ā āāā types.ts # TypeScript interfaces
ā āāā main.ts
āāā src-tauri/ # Rust backend
ā āāā src/
ā ā āāā lib.rs # Tauri setup, 40+ commands registered
ā ā āāā commands.rs # All Tauri commands (config, ssh, sync, projects, jobs)
ā ā āāā state.rs # Thread-safe AppState with Arc<Mutex<T>>
ā ā āāā config.rs # Load config.toml, path helpers
ā ā āāā db.rs # SQLite via sqlx (projects, benchmarks, jobs tables)
ā ā āāā ssh.rs # SSH control socket, rsync, tmux job management
ā ā āāā project.rs # Python project management via uv
ā ā āāā python_deps.rs # Tree-sitter Python AST analysis for imports
ā ā āāā job.rs # Log parsing, progress extraction [x/y]
ā āāā Cargo.toml
ā āāā tauri.conf.json
āāā package.json
This project is in alpha and primarily for personal use. Here's what to expect:
Use at your own risk. Backup your data.
Issues welcome! If you find bugs or have feature suggestions, please open an issue.
Pull requests: Not accepting PRs at this time while the project is in alpha and the architecture is stabilizing. This may change in the future.
If you want to fork and experiment, feel free! The codebase is MIT licensed.
MIT License - see LICENSE file.
You are free to use, modify, and distribute this software. See the license file for full terms.
Yanis Srairi - GitHub
Built with excellent open-source tools:
Status: Alpha - Active development, personal use, breaking changes expected.