SSH into your dev server. Let Claude ship code. From anywhere.
Quick Start · Demo · Features · Build · Contributing
You're on the bus. A deploy is broken. Your laptop is at home.
Claude Carry gives you a full Claude Code terminal over SSH — on your phone, your Linux desktop, or your Windows machine. Connect to your dev server, tell Claude what to fix, and watch it refactor files, write tests, and push commits. No browser, no VPN portal, no forwarded ports. Open the app, pick a server, and you're in.
Pick a server. Talk to Claude. Manage files. Three screens on mobile, one window on desktop.
1. Download the latest build from Releases — APK for Android, tar.gz for Linux, zip for Windows
2. Add your server (hostname, port, username, auth method)
3. Connect — Claude launches automatically in your configured mode (standard shell, skip permissions, or custom prompt)
You: "refactor the auth module to use JWT instead of sessions"
Claude: ✓ Updated lib/auth/service.dart
✓ Updated lib/auth/middleware.dart
✓ Created lib/auth/jwt_provider.dart
Done. 3 files changed in 12.4s
That's it. You just shipped code from your phone.
Full xterm-compatible terminal with a toolbar built for thumbs, not mice.
| 🎹 Smart Toolbar | Arrow keys, Tab, Esc, Ctrl modifier — everything you need, nothing you don't |
| 📋 Clipboard Paste | One-tap paste from your clipboard straight into the terminal |
| ⚡ Command Palette | Quick-access Claude commands: /compact, /clear, /review, /cost |
| 🎨 Catppuccin Themes | Mocha (dark), AMOLED black, and Latte (light) — terminal colors follow your app theme |
| 🔤 JetBrains Mono | The best monospace font, configurable from 8pt to 24pt |
Work across projects without disconnecting.
| 📑 Session Tabs | Multiple concurrent SSH sessions with a swipeable tab bar |
| 🔄 Auto-Reconnect | Drops happen. Claude Carry reconnects with exponential backoff (1s → 16s) |
| 💤 Wake Lock | Screen stays on while you're in a session — no accidental disconnects |
| ⚙️ Claude Modes | Standard Shell, Skip Permissions, or Custom Prompt per server |
No need to scp from a separate app.
| 📂 Dual-Pane Browser | Local files on the left, the server on the right |
| ⬆️ Upload & Download | Transfer files between devices with progress tracking |
| 📎 Attach to Terminal | Upload a file and paste its remote path in one tap |
| 🗂️ Full CRUD | Create directories, rename, delete — all from the app |
| 🔑 SSH Key Auth | Ed25519 keys, auto-generated and stored securely on-device |
| 🔒 Password Auth | Encrypted on-device via flutter_secure_storage |
| 🛡️ TOFU Host Keys | Trust-on-first-use verification — warns you if a server fingerprint changes |
| ✅ Connection Test | Verify server connectivity before committing to a session |
| 📝 Server Profiles | Save, edit, and manage multiple servers |
| 🏠 Home Widget | Quick-prompt widget — fire off a Claude query without even opening the app |
On screens wider than 800px, Claude Carry switches to a three-panel layout: server sidebar on the left, terminal in the center, file browser on the right.
| 🖥️ Three-Panel Layout | Sidebar, terminal, and file panel side by side |
| 📐 Adaptive Layout | Automatically switches between mobile and desktop at 800px width |
| 💾 Window Persistence | Window size and position are saved between sessions |
| ⌨️ Keyboard Shortcuts | Full shortcut set for session and panel management (see below) |
⌨️ Keyboard Shortcuts
| Shortcut | Action |
|---|---|
Ctrl+Shift+T |
New session |
Ctrl+Shift+W |
Close session |
Ctrl+Tab |
Next session |
Ctrl+Shift+Tab |
Previous session |
Ctrl+Shift+B |
Toggle file panel |
Ctrl+Shift+K |
Command palette |
Ctrl+Shift+/ |
Show keyboard shortcuts |
Three layers. No magic.
┌─────────────────────────────────────────────────────────┐
│ UI Layer Flutter widgets + Riverpod │
│ ┌─────────┐ ┌──────────┐ ┌────────┐ ┌───────────────┐ │
│ │Terminal │ │Connection│ │ Files │ │ Settings │ │
│ │ Screen │ │ Screen │ │ Panel │ │ Screen │ │
│ └────┬────┘ └────┬─────┘ └───┬────┘ └───────────────┘ │
├───────┼──────────┼─────────────┼────────────────────────┤
│ Service Layer Providers + Business Logic │
│ ┌────┴────┐ ┌───┴────┐ ┌────┴─────┐ ┌──────────────┐ │
│ │ SSH │ │ Connec-│ │ SFTP │ │ Profile │ │
│ │ Service │ │ Manager│ │ Service │ │ Repository │ │
│ └────┬────┘ └────┬───┘ └────┬─────┘ └──────────────┘ │
├───────┼───────────┼──────────┼──────────────────────────┤
│ Transport Layer dartssh2 │
│ SSH + SFTP over TCP │
└─────────────────────────────────────────────────────────┘
State management: Riverpod — AsyncNotifier for profiles, StreamProvider for connection state and transfers.
📁 Project structure
lib/
├── main.dart # Entry point, edge-to-edge
├── app.dart # Root widget, routing
├── core/
│ ├── models/ # ServerProfile, Session, TransferItem
│ ├── providers.dart # Riverpod wiring
│ ├── ssh/
│ │ ├── ssh_service.dart # PTY, auto-reconnect, keepalive
│ │ ├── connection_manager.dart # Multi-session orchestration
│ │ ├── connection_tester.dart # Pre-connect verification
│ │ └── sftp_service.dart # Uploads, downloads, progress
│ └── storage/
│ ├── key_manager.dart # Ed25519 generation & Keystore
│ ├── host_key_store.dart # TOFU host key verification
│ └── profile_repository.dart # Encrypted profile CRUD
├── features/
│ ├── connection/ # Server list, add/edit, key display
│ ├── terminal/ # Terminal, toolbar, command palette
│ ├── files/ # Dual-pane local + remote browser
│ ├── settings/ # Preferences (theme, font, toggles)
│ ├── desktop/ # Three-panel shell, sidebar, shortcuts
│ └── widget/ # Home screen quick-prompt
└── theme/
├── app_theme.dart # Material 3 definitions
└── terminal_theme.dart # Catppuccin dark, amoled, light
git clone https://github.com/Samuele95/claude-carry.git
cd claude-carry
flutter pub get
# Android
flutter build apk --release
# Linux
sudo apt-get install -y ninja-build libgtk-3-dev
flutter build linux --release
# Windows (run in PowerShell)
flutter build windows --releaseRequirements: Flutter 3.41+ · Dart 3.11+ · Java 21 (for Android builds)
We'd love your help. Whether it's a bug fix, new feature, screenshots, or just better docs — every contribution matters.
- Read the Contributing Guide
- Check the open issues
- Fork, branch, code, PR
Ideas for contributions
- 📸 Screenshots & screen recordings for the README
- 🌍 Internationalization — translations welcome
- ♿ Accessibility — screen reader support, contrast
- 🍎 iOS port — Flutter makes this straightforward
- 🧪 More tests — always room for better coverage
| Package | What it does |
|---|---|
dartssh2 |
SSH/SFTP client |
xterm |
Terminal emulator |
flutter_riverpod |
State management |
flutter_secure_storage |
Encrypted credentials |
wakelock_plus |
Screen wake lock |
pinenacl |
Ed25519 keys |
home_widget |
Home screen widget |
file_picker |
File selection |
If Claude Carry saved you a trip to your desk, consider leaving a ⭐
MIT License · Made with 🤖 + ☕