Rênes
README.md
# Rênes ♞
**Serveur MCP de contrôle du PC (Windows)** — compatible avec **tout agent IA supportant MCP** : Claude Code, Claude Desktop, Cursor, Windsurf, Cline, Codex CLI, Gemini CLI, etc.
Prends les rênes de ton PC : l'agent peut
- **Lancer des applications** (exe, chemins, URIs `ms-settings:`, documents)
- **Gérer les fenêtres** : lister (avec z-order + premier plan), focus, fermer (gracieux), min/max, déplacer/redimensionner, ancre (snap), bureaux virtuels, attendre une fenêtre
- **Piloter clavier & souris** : frapper du texte (accents français inclus), raccourcis, clics, scroll, glisser-déposer
- **Voir l'écran** : captures d'écran renvoyées en image MCP (moniteur entier ou fenêtre ciblée) **et OCR intégré** (`read_screen` renvoie le texte de chaque ligne avec ses coordonnées écran)
- **Observer** : `get_system_state` (batterie, CPU, RAM, disque, volume, app au premier plan), `screen_diff` (vérifie qu'une action a eu un effet visuel)
- **Agir proprement** : presse-papiers, volume, recettes rejouables, déclencheurs sur événement de fenêtre, verrou de contrôle multi-agents, STOP d'urgence
- **Naviguer** : ouvrir des URLs et lancer des recherches dans le navigateur par défaut

> Windows 11 / 10 uniquement. Les actions sont **réelles** sur votre poste.
## Installation
Prérequis : Python 3.10+ sur le PATH, Windows 10/11.
```powershell
git clone https://github.com/daoma/renes.git
cd renes
./install.ps1
```
`install.ps1` crée le venv, installe les dépendances, copie la config et vérifie que les 43 outils se chargent.
### Claude Code (plugin)
```powershell
claude plugin marketplace add C:\chemin\vers\renes
claude plugin install renes@renes-marketplace
```
### Tout autre client MCP (Claude Desktop, Cursor, ...)
```json
{
"mcpServers": {
"renes": {
"command": "C:/chemin/vers/renes/.venv/Scripts/python.exe",
"args": ["C:/chemin/vers/renes/server.py"]
}
}
}
```
(Le fichier `.mcp.json` du dépôt utilise `${CLAUDE_PLUGIN_ROOT}` pour l'installation en plugin Claude Code.)
### Dashboard local (pont HTTP)
Une interface web de pilotage, avec le même flux de confirmation que côté agent :
```powershell
.venv\Scripts\python.exe bridge.py
# → http://127.0.0.1:8747
```
Inclus dans le dashboard : fenêtres en temps réel (focus / réduire / agrandir / capture / fermer par fenêtre), console des 43 outils, scénarios prêts, journal persistant, recettes et déclencheurs éditables, vision en direct (rafraîchi 1,5 s), verrou multi-agents, bouton STOP, mode sombre.
## Outils exposés (43)
| Catégorie | Outil | Description |
|---|---|---|
| Apps | `launch_app` | Lancer exe / chemin / URI / document |
| Fenêtres | `list_windows` | Titre, processus, position, taille, état, z-order |
| | `focus_window` | Premier plan (recherche titre/processus) |
| | `close_window` | Fermeture gracieuse (WM_CLOSE) |
| | `minimize_window` / `maximize_window` / `restore_window` | États |
| | `move_resize_window` | Position + taille |
| | `wait_for_window` | Attend l'apparition d'une fenêtre (après launch) |
| | `snap_window` | Ancre la fenêtre (left/right/coins, comme Win+flèches) |
| Bureaux | `switch_desktop` / `move_window_to_desktop` | Bureaux virtuels |
| Clavier | `type_text` | Frappe Unicode (accents) |
| | `press_hotkey` | `ctrl+s`, `win+d`, `ctrl+shift+t`... |
| | `press_key` | `enter`, `esc`, `f5`... |
| Souris | `mouse_move` / `mouse_click` / `mouse_scroll` | Coordonnées absolues |
| | `mouse_drag` | Glisser-déposer (de (x1,y1) à (x2,y2)) |
| Presse-papiers | `get_clipboard` / `set_clipboard` | Lire / écrire du texte |
| Vision | `take_screenshot` | Capture → image MCP (+ fichier) |
| | `read_screen` | OCR Windows : texte + coordonnées de chaque ligne |
| | `screen_diff` | % de pixels changés depuis la capture précédente |
| | `list_monitors` | Écrans |
| Système | `get_system_state` | Premier plan, volume, batterie, CPU, RAM, disque, uptime |
| | `get_volume` / `set_volume` | Volume maître + mute |
| Web | `open_url`, `web_search` | Navigateur par défaut |
| Contrôle | `request_control` / `release_control` | Verrou multi-agents (qui pilote ?) |
| | `control_status` / `pause_control` | État du verrou · STOP (pause globale) |
| Recettes | `save_recipe` / `list_recipes` / `run_recipe` / `delete_recipe` | Séquences rejouables |
| Déclencheurs | `set_trigger` / `list_triggers` / `toggle_trigger` / `delete_trigger` | Actions sur apparition/disparition de fenêtre (risque faible uniquement) |
| Journal | `get_action_log` | Relecture du journal persistant |
## Sécurité
- **Confirmations côté hôte** : dans Claude Code, les outils restent soumis aux permissions (aucun auto-allow) ; dans le dashboard, les actions à risque ≥ moyen exigent une confirmation explicite — un jeton one-time délivré par le pont, valable 3 min, impossible de court-circuiter l'interface.
- **Blacklist processus** : `explorer`, `csrss`, `lsass`, `services`, `dwm`... sont refusés pour toute action (configurable).
- **Lancements bloqués** : `regedit`, `gpedit`... refusés par défaut (configurable).
- **Fermetures gracieuses** uniquement (WM_CLOSE) — jamais de kill forcé.
- **Failsafe pyautogui** : coin haut-gauche de l'écran = interrupteur d'arrêt.
- **STOP d'urgence** : raccourci global (`ctrl+alt+f12` par défaut) ou bouton du dashboard → tout pilotage en pause.
- **Verrou multi-agents** : un agent demande `request_control` avant une séquence clavier/souris — deux agents ne se piétinent pas.
- **Déclencheurs bridés** : seuls les outils de risque faible peuvent y être attachés (aucune action destructive sans humain dans la boucle).
- **Rate-limit** : 60 appels / 10 s sur le pont (configurable).
- **Pont local protégé** : le dashboard écoute uniquement sur 127.0.0.1 et exige un jeton de session (généré au démarrage, injecté dans la page servie).
Configuration optionnelle : copiez `renes.example.json` vers `~/.renes.json` et adaptez.
```json
{
"blacklist_processes": ["csrss.exe", "lsass.exe"],
"blocked_launch": ["regedit.exe"],
"search_engine": "duckduckgo",
"screenshot_dir": "C:/Users/moi/Screenshots",
"max_text_length": 20000,
"panic_hotkey": "ctrl+alt+f12",
"rate_limit_max": 60,
"rate_limit_seconds": 10
}
```
## Limites connues
- Coordonnées souris en pixels absolus : faites une capture d'écran (ou `read_screen`) d'abord pour viser.
- L'OCR lit du texte rendu à l'écran — pas la structure UI (piste : UIA).
- Le contenu des pages web se lit via les outils de l'agent (fetch/websearch) — Rênes pilote le navigateur, pas l'extraction.
## Licence
MITThis server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues