RMUX logo

RMUX

Le moteur universel de multiplexage.

Native on Windows, Linux, and macOS

English · Français · 简体中文 · 日本語

Unsafe policy CI OpenSSF Best Practices rmux 0.8.0

> [!NOTE] > RMUX dispose maintenant d'une fonctionnalité de multiplexage web E2E. [En savoir plus dans la documentation.](../web-share.md) > > RMUX fournit maintenant des SDK Python et TypeScript : [librmux](https://pypi.org/project/librmux/), [@rmux/sdk](https://www.npmjs.com/package/@rmux/sdk). > > Pour une demande de fonctionnalité ou un signalement, veuillez [ouvrir une issue](https://github.com/Helvesec/rmux/issues).

Partage web RMUX

## 🧭 Qu'est-ce que RMUX ? RMUX est un multiplexeur Rust moderne, asynchrone et typé, avec plus de 90 commandes tmux natives sur macOS, Linux et Windows, sans WSL. Il fournit un SDK Rust public et une intégration Ratatui native. Utilisez-le depuis la CLI, partagez des sessions dans un navigateur, ou pilotez-le depuis Rust. ## ✨ Fonctionnalités - Architecture daemon locale pour shells, panes, windows, sessions et scrollback. - Surface de commandes de style tmux avec tests de compatibilité ciblés. - Backends natifs Linux, macOS et Windows. - SDK Rust public pour automatisation typée et assertions d'état terminal. - Widget Ratatui pour afficher des panes RMUX dans des applications terminal Rust. - Web Share navigateur avec chiffrement de bout en bout hybride post-quantique. - Packaging de release pour GitHub Releases, APT, RPM, Homebrew, WinGet, Scoop, Chocolatey et crates.io. ## 🚀 Démarrage rapide CLI Consultez l'aide locale des commandes : ```sh rmux list-commands rmux new-session --help rmux split-window --help rmux web-share --help ``` Utilisez `rmux -V` pour connaître la version installée. ## 🎬 Démos Quelques exemples courts de ce que RMUX permet de faire.
Aperçu de la démo orchestration multi-agents
Orchestration multi-agents
≃ 514 lignes
Aperçu de la démo Agent Broadcast Arena
Agent Broadcast Arena
≃ 2,171 lignes
Aperçu de la démo Mini-Zellij
Mini-Zellij
≃ 944 lignes
Aperçu de la démo automatisation terminal
Automatisation terminal
≃ 1,495 lignes
## 📦 Installation | Plateforme / gestionnaire | Commande | | :--- | :--- | | macOS / Homebrew | `brew install rmux` | | Windows / installer | `irm https://rmux.io/install.ps1 \| iex` | | Windows / WinGet | `winget install rmux` | | Windows / Scoop | `scoop bucket add rmux https://github.com/Helvesec/scoop-rmux && scoop install rmux` | | Windows / Chocolatey | `choco install rmux` | | Linux / APT | Voir le [guide APT](https://rmux.io/docs/get-started/) | | Linux / DNF | Voir le [guide DNF](https://rmux.io/docs/get-started/) | | Linux macOS / Nix | `nix profile install github:Helvesec/rmux` | | Rust / Cargo | `cargo install rmux --locked` | Les téléchargements directs (`.tar.gz`, `.deb`, `.rpm`, `.zip`) sont disponibles dans la [GitHub Release v0.8.0](https://github.com/helvesec/rmux/releases/tag/v0.8.0). Les gestionnaires de paquets peuvent avoir du retard pendant la revue des registres ; les téléchargements directs et les installateurs rmux.io suivent la release GitHub courante. Pour les téléchargements Unix `.tar.gz`, lancez `./install.sh --prefix ~/.local` depuis l'archive extraite. L'installateur préserve le layout `bin/` et `libexec/` requis pour que la petite CLI publique puisse toujours atteindre son helper complet. Les paquets de release peuvent utiliser une petite CLI publique pour les commandes détachées rapides et un helper CLI complet privé pour les formes de commandes tmux compatibles plus complexes. Les paquets Windows livrent `rmux.exe` comme dispatcher léger et placent la CLI complète sous `libexec/rmux/rmux.exe`. Définissez `RMUX_DISABLE_TINY_CLI=1` pour forcer le helper complet pendant le diagnostic de compatibilité CLI. ## 🤝 Mode Claude Teammate Exécutez Claude Code dans un espace de travail RMUX local avec le [mode teammate tmux](https://code.claude.com/docs/en/agent-teams) activé.

Mode Claude Teammate dans RMUX

```bash rmux claude [args] # ex. rmux claude --dangerously-skip-permissions ``` RMUX ouvre une session attachée et passe automatiquement `--teammate-mode tmux` à Claude, avec vos `[args]`. Sous le capot : pour router correctement les commandes, RMUX ajoute un shim `tmux` privé au début du `PATH` de Claude. Ce périmètre est strictement limité au processus Claude et n'entre pas en conflit avec votre installation système de `tmux`. Installez la skill Claude Code utilisateur de RMUX pour que Claude conserve les repères RMUX hors de ce dépôt : CLI, SDK, web-share et patterns d'automatisation. ```bash rmux claude install-skill ``` La skill est installée dans le profil Claude (`~/.claude/skills/rmux` sous Linux/macOS, `%USERPROFILE%\.claude\skills\rmux` sous Windows). Le dépôt garde la copie source dans `resources/claude/skills/rmux/SKILL.md`, afin que le projet puisse la packager et l'installer sans dossier source caché `.claude` dans l'arborescence. Note : nécessite que `claude` soit installé sur votre machine. ## ⚙️ Configuration Sur Linux et macOS, RMUX lit `.rmux.conf` depuis les emplacements système et utilisateur standards : 1. `/etc/rmux.conf` 2. `~/.rmux.conf` 3. `$XDG_CONFIG_HOME/rmux/rmux.conf` 4. `~/.config/rmux/rmux.conf` Sur Windows, RMUX lit `.rmux.conf` depuis : 1. `%XDG_CONFIG_HOME%\rmux\rmux.conf` 2. `%USERPROFILE%\.rmux.conf` 3. `%APPDATA%\rmux\rmux.conf` 4. `%RMUX_CONFIG_FILE%` ### Compatibilité `tmux.conf` Quand RMUX démarre avec la recherche de configuration par défaut et qu'aucun fichier RMUX n'est chargé, il vérifie aussi les emplacements standards de `tmux.conf`. Les fichiers de configuration explicites passés avec `-f` ne déclenchent pas ce fallback. Les fichiers de fallback utilisent le parser de source compatible tmux et sont chargés au mieux. Les commandes supportées sont appliquées ; les lignes de plugins non supportées sont signalées sans interrompre le démarrage. Définissez `RMUX_DISABLE_TMUX_FALLBACK=1` pour désactiver l'autoload. Sur Unix, RMUX fournit aussi un shim `tmux` privé par socket dans les environnements de commande afin que les scripts de plugins courants reviennent vers RMUX. Définissez `RMUX_DISABLE_TMUX_SHIM=1` pour le désactiver. ## 🌐 Web Multiplex (Web Share) RMUX peut partager un pane ou une session dans un navigateur, créer des panes, redimensionner les splits et garder l'exécution terminale en local. ```sh # Démarrer un Web Share local sur loopback rmux web-share # Partager une session nommée rmux new-session -d -s work rmux web-share -t work # Partager au-delà de localhost rmux web-share --tunnel-provider localhost-run ``` Utilisez un tunnel provider, apportez votre propre ingress, ou hébergez le frontend statique sur votre propre domaine. Points d'entrée utiles : - [Vue d'ensemble Web Share du dépôt](../web-share.md) - [Documentation Web Share](https://rmux.io/docs/web-share/) - [Modèle de sécurité](https://rmux.io/docs/web-share/#/security) - [Tunnel providers](https://rmux.io/docs/web-share/#/tunnels) ## 🧰 Scripts & API Les SDK se connectent au daemon RMUX local et exposent sessions, panes, streams, waits et snapshots pour l'automatisation. ```sh cargo add rmux-sdk pip install librmux npm install @rmux/sdk ``` - SDK Rust : [`rmux-sdk`](https://crates.io/crates/rmux-sdk) - SDK Python : [`librmux`](https://pypi.org/project/librmux/) - SDK TypeScript : [`@rmux/sdk`](https://www.npmjs.com/package/@rmux/sdk) ## 📚 Documentation La documentation complète de RMUX est disponible sur [rmux.io/docs](https://rmux.io/docs/). Elle inclut : - [Guides d'installation](https://rmux.io/docs/get-started/) - [Référence CLI](https://rmux.io/docs/cli/) - [Exemples](https://rmux.io/docs/examples/) - [Référence API](https://rmux.io/docs/api/) - [Vue d'ensemble SDK du dépôt](../scripting-sdk.md) - [Web Share](https://rmux.io/docs/web-share/) Pour un profil ergonomique orienté humain qui conserve une sélection terminal native intuitive tout en ajoutant des raccourcis de splits et une intégration presse-papiers plus simples, voir [docs/human-friendly-config.md](../human-friendly-config.md). ## 🧩 Widget Ratatui ```rust use ratatui::{buffer::Buffer, layout::Rect, widgets::Widget}; use ratatui_rmux::{PaneState, PaneWidget}; use rmux_sdk::PaneSnapshot; fn render(snapshot: PaneSnapshot, area: Rect, buffer: &mut Buffer) { let state = PaneState::from_snapshot(snapshot); PaneWidget::new(&state).render(area, buffer); } ``` ## 🏗️ Architecture
Architecture runtime RMUX
`rmux` garde les shells, sessions, windows, panes et processus PTY dans le daemon local. Les clients locaux utilisent l'IPC. Web Share est un accès navigateur explicite : le daemon expose un pane ou une session sélectionnée via un WebSocket chiffré de bout en bout, pendant que l'exécution reste sur votre machine. ## 🧱 Workspace | Crate | Rôle | Publication | | :--- | :--- | :--- | | `rmux-types` | Types de valeurs partagés et neutres vis-à-vis des plateformes | publique | | `rmux-proto` | DTO IPC détachés, framing, erreurs sûres sur le fil | publique | | `rmux-os` | Petits helpers à la frontière OS | publique | | `rmux-ipc` | Endpoints et transports IPC locaux | publique | | `rmux-sdk` | SDK Rust adossé au daemon | publique | | `ratatui-rmux` | Widget d'intégration Ratatui | publique | | `rmux-web-crypto` | Coeur E2EE Web Share et frontière crypto WASM | publique | | `rmux-pty` | Allocation PTY, resize et contrôle de processus enfant | crate de support | | `rmux-core` | Sessions, panes, layouts, formats, hooks, buffers | crate de support | | `rmux-server` | Daemon Tokio et dispatch des requêtes | crate de support | | `rmux-client` | Client IPC local et plomberie du mode attach | crate de support | | `rmux` | CLI et point d'entrée daemon masqué | binaire public | | `rmux-render-core` | Coeur de rendu snapshot partagé | interne au workspace | ## 🖥️ Plateformes | Plateforme | Backend PTY | Backend IPC | Endpoint par défaut | | :--- | :--- | :--- | :--- | | Linux | PTY Unix | Socket Unix | `/tmp/rmux-{uid}/default` | | macOS | PTY Unix | Socket Unix | `/tmp/rmux-{uid}/default` | | Windows | ConPTY | Named pipe | named pipe par utilisateur | ## 🧾 Notes de compatibilité terminal RMUX fonctionne avec les shells qui interrogent les capacités du terminal, notamment fish. Il répond aux requêtes d'attributs de terminal et gère le timing de la touche Escape afin que les prompts fish et les séquences de touches se comportent normalement dans les panes RMUX. Le passthrough graphique est disponible pour les terminaux externes qui supportent Kitty graphics ou SIXEL. RMUX détecte Kitty graphics pour Kitty, Ghostty et WezTerm, et détecte SIXEL pour des terminaux comme foot, mintty, mlterm et WezTerm. Il est opt-in : ```tmux set -g allow-passthrough on ``` La valeur tmux `all` est acceptée pour la compatibilité de configuration. RMUX rend le pane attaché ; `all` se comporte donc actuellement comme `on` plutôt que d'ajouter le passthrough pour les panes non attachés. Si votre terminal supporte l'un de ces protocoles mais n'est pas détecté automatiquement, ajoutez une override de fonctionnalité terminal : ```tmux set -as terminal-features 'xterm-kitty:kitty-graphics' set -as terminal-features 'xterm*:sixel' ``` Le passthrough SIXEL est couvert par la suite de régression automatisée Unix PTY attach. Sur Windows, RMUX active le passthrough ConPTY moderne quand l'OS le supporte, mais l'affichage SIXEL dépend toujours du terminal externe. Définissez `RMUX_CONPTY_NO_PASSTHROUGH=1` pour désactiver ce mode backend lors d'un diagnostic. ## 🧪 Vérification Le workspace est conçu pour être vérifié depuis les sources avec des dépendances verrouillées : ```sh cargo fmt --all -- --check cargo clippy --workspace --all-targets --locked -- -D warnings cargo test --workspace --locked --no-fail-fast ``` Vérifications locales supplémentaires : ```sh scripts/cfg-check.sh scripts/unsafe-check.sh scripts/no-network-in-runtime.sh scripts/check-platform-neutrality.sh scripts/ratatui-rmux-budget.sh scripts/verify-package.sh ``` Les vérifications d'artefacts de release sont pilotées par : ```sh scripts/release-local.sh scripts/package-unix.sh scripts/package-debian.sh scripts/verify-debian-package.sh scripts/package-rpm.sh scripts/verify-rpm-package.sh scripts/smoke-snap-package.sh scripts/package-windows.ps1 scripts/verify-package-windows.ps1 scripts/generate-apt-repository.sh scripts/generate-rpm-repository.sh scripts/generate-homebrew-formula.sh scripts/generate-winget-manifest.sh scripts/generate-scoop-manifest.sh scripts/generate-chocolatey-package.sh ``` `#![forbid(unsafe_code)]` est utilisé dans les crates de haut niveau. Le code lié à l'OS et au terminal est isolé dans les crates runtime de plus bas niveau. ## ⚖️ Licence RMUX est distribué sous double licence, au choix : - [Licence MIT](../../LICENSE-MIT) - [Licence Apache 2.0](../../LICENSE-APACHE)