bots-garden/mini-mepublic Fork
⑂ feature/mini-mes
Commits
⬇ Clone ▾
git clone https://git.rickub.com/bots-garden/mini-me.git
git clone ssh://git@rickub.com/bots-garden/mini-me.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

Download ZIP
🛟 Updated. 8734926Unverified · on feature/mini-mes · k33g · 17d ago
use-the-window-mode.md · 78 lines · 8.2 KBmarkdown
Blame HistoryOpen raw

Utiliser le mode fenêtre (mm -tui)

Ce guide montre comment lancer mini-me dans une fenêtre unique en plein écran — la conversation en haut, une zone de saisie en bas — au lieu du REPL ligne à ligne. Il suppose que vous lancez déjà mm depuis le répertoire d'un projet.

Étapes

  1. Lancez la fenêtre depuis le répertoire du projet :

    mm -tui agent.dmr.yaml
    

    Ou mettez tui: true dans le YAML et lancez mm comme d'habitude. La bannière que le mode ligne affiche apparaît comme première ligne de la conversation.

  2. Tapez votre question dans la zone du bas et appuyez sur Entrée. Une ligne longue passe à la ligne entre les mots dans la zone (un mot plus long qu'une rangée est coupé au bord) ; la zone garde ses trois rangées et les fait défiler pour que celle du curseur reste visible, et ↑/↓ déplacent le curseur de rangée en rangée. Pour un second paragraphe, appuyez sur Ctrl-J (ou Alt-Entrée quand votre terminal le transmet) au lieu d'Entrée. Un bloc collé est inséré en entier, jamais envoyé ; un bloc long est replié en un jeton [Pasted #1 · …] (voir plus bas).

  3. Regardez la réponse arriver dans la conversation. Chaque appel d'outil tient sur une ligne encadrée — ‣ bash ls -1 ✓ done 0.03s — suivie de sa sortie, repliée à previewLines lignes ; les lignes +/- d'une modification de fichier sont colorées.

  4. Appuyez sur Échap pour arrêter un tour en cours. Taper une nouvelle question et appuyer sur Entrée pendant un tour l'arrête aussi ; la nouvelle question part une fois l'ancien tour rangé.

  5. Tapez / en début de zone pour ouvrir le sélecteur de commandes : ↑/↓ choisissent, Tab complète, Entrée envoie une commande complète. /help (ou F1) liste les commandes et les touches dans la conversation.

  6. Quittez avec /quit, à n'importe quel moment — pendant un tour aussi. Ctrl-C annule un tour en cours et quitte quand rien ne tourne.

  7. Si un tour refuse de s'arrêter — le moteur ne répond plus, un outil est bloqué — appuyez une fois de plus sur Échap : la fenêtre affiche ⚠️ The turn is not answering the cancellation — press Ctrl-C (or /quit) to leave mm. Ensuite /quit, ou un second Ctrl-C, ferme la fenêtre sans l'attendre. Le fichier de session conserve tout jusqu'au dernier tour terminé.

Variantes

  • Demander avant chaque bash et chaque outil de fichier. Mettez yolo: false dans le YAML. La zone de saisie est remplacée par la question ? bash: rm -rf build et quatre touches y répondent : a autoriser une fois, s autoriser cet outil pour la session, r (ou Échap) refuser, n ne jamais autoriser cet outil dans cette session. Un outil refusé dit au modèle [command rejected by the user]. La valeur par défaut, yolo: true, exécute les outils sans demander. Voir Confirmer les appels d'outils.
  • Désigner un fichier au modèle. @chemin fonctionne exactement comme dans le mode ligne : les chemins existants sont attachés et repris en lignes 📎. Voir Désigner un fichier au modèle avec @chemin.
  • Conserver et reprendre des sessions. Avec sessions.enabled: true, l'en-tête affiche l'identifiant de la session enregistrée ; /sessions et /resume fonctionnent comme dans le mode ligne. Voir Conserver les sessions et les reprendre.
  • Faire défiler la conversation. PgUp/PgDn paginent ; Tab donne le focus à la conversation pour que ↑/↓, Début et Fin la fassent défiler ; Fin reprend le suivi de la fin. Ctrl-L efface la conversation affichée sans toucher à l'historique. La molette ne fait défiler qu'après F2 (voir plus bas).
  • Pas de terminal. mm -tui | tee log.txt, ou tout lancement où stdin ou stdout n'est pas un terminal, affiche [tui: stdin or stdout is not a terminal — running the line mode] et lance le mode ligne. Rien d'autre ne change.

Copier du texte depuis la fenêtre

La fenêtre laisse la souris au terminal : cliquer-glisser sélectionne du texte exactement comme dans n'importe quel terminal, et le raccourci de copie de votre terminal le copie. La barre d'état indique F2 mouse: off. Appuyez sur F2 pour donner la souris à la fenêtre : la molette fait alors défiler la conversation et la barre d'état indique mouse: on (Shift+drag selects) ; dans la plupart des terminaux, glisser en maintenant Maj sélectionne encore. F2 à nouveau rend la souris.

Pour copier une réponse sans la sélectionner :

Saisie Copie
/copy ou Ctrl-Y La dernière réponse, en texte brut : sans préfixe 🤖, sans retour à la ligne forcé, sans cadre d'outil.
/copy 2 La réponse précédant la dernière (3 celle d'avant, et ainsi de suite).
/copy all Toute la conversation en texte brut : questions préfixées par > , réponses brutes, appels d'outils en une ligne de titre suivie de leur sortie.

La confirmation nomme le chemin emprunté, 📋 copied 1 240 chars (pbcopy), parce qu'il en existe deux et qu'ils ne sont pas aussi fiables l'un que l'autre :

  1. Un outil natif trouvé dans le PATH : pbcopy sur macOS, wl-copy sous Wayland, xclip ou xsel sous X11. C'est le chemin fiable sur un Mac.
  2. Sinon OSC 52, la séquence d'échappement que certains terminaux honorent pour remplir le presse-papiers. Elle fonctionne à travers SSH et dans iTerm2 (à autoriser dans Preferences → General → Selection), Ghostty, kitty et WezTerm ; Terminal.app de macOS l'ignore silencieusement. Sans outil ni terminal, /copy répond ⚠️ no clipboard: ….

Le mode ligne a aussi /copy et /copy 2, par les mêmes chemins ; /copy all est réservé à la fenêtre, puisque l'historique du terminal y est déjà sélectionnable.

Coller un texte long

Un bloc collé n'est jamais envoyé de lui-même : ses sauts de ligne deviennent des lignes dans la zone. Quand le bloc est plus long que la zone — plus de 3 lignes, ou plus de 200 caractères — la zone affiche un seul jeton à la place du texte :

> explique cette trace [Pasted #1 · 42 lines · 1.2k chars] et le correctif dans [Pasted #2 · 5 lines · 310 chars]

Le jeton se comporte comme un seul caractère : ←/→ le franchissent d'un coup, Retour arrière ou Suppr le retirent en entier avec le texte collé, et vous continuez à taper autour. Plusieurs collages dans un même message sont numérotés dans l'ordre où vous les avez collés.

À Entrée, le modèle reçoit votre phrase où chaque jeton est remplacé par le texte collé complet, octet pour octet, sauts de ligne compris. Rien n'est raccourci ni résumé. La conversation, elle, continue d'afficher le jeton, si bien qu'un long collage ne chasse pas l'échange de l'écran ; la session persistée et /copy all portent la question complète.

Deux détails découlent de « un collage est une donnée que vous apportez, pas quelque chose que vous avez tapé » :

  • Les mentions @chemin à l'intérieur d'un bloc collé ne sont pas résolues ; seules celles que vous avez tapées vous-même attachent un fichier (voir @chemin).
  • Une /commande dans un collage est du texte pour le modèle, pas une commande.

Les collages plus courts que le seuil sont insérés comme du texte, exactement comme avant. Le terminal doit prendre en charge le collage encadré (bracketed paste) pour que tout cela fonctionne : Terminal.app, iTerm2, Ghostty et kitty le font ; dans tmux, un collage n'arrive encadré que si le terminal extérieur et tmux le prennent en charge tous deux (tmux le fait depuis la 1.8 ; aucune option set -g n'est nécessaire pour le passage, mais un paste-buffer sans -p envoie le texte comme des touches ordinaires, qui arrivent alors comme des caractères tapés et sont insérés un à un).

Voir aussi

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# Utiliser le mode fenêtre (`mm -tui`)

Ce guide montre comment lancer mini-me dans une fenêtre unique en plein écran — la conversation en haut, une zone de saisie en bas — au lieu du REPL ligne à ligne. Il suppose que vous lancez déjà `mm` depuis le répertoire d'un projet.

## Étapes

1. Lancez la fenêtre depuis le répertoire du projet :

   ```bash
   mm -tui agent.dmr.yaml
   ```

   Ou mettez `tui: true` dans le YAML et lancez `mm` comme d'habitude. La bannière que le mode ligne affiche apparaît comme première ligne de la conversation.

2. Tapez votre question dans la zone du bas et appuyez sur **Entrée**. Une ligne longue passe à la ligne entre les mots dans la zone (un mot plus long qu'une rangée est coupé au bord) ; la zone garde ses trois rangées et les fait défiler pour que celle du curseur reste visible, et ↑/↓ déplacent le curseur de rangée en rangée. Pour un second paragraphe, appuyez sur **Ctrl-J** (ou Alt-Entrée quand votre terminal le transmet) au lieu d'Entrée. Un bloc collé est inséré en entier, jamais envoyé ; un bloc long est replié en un jeton `[Pasted #1 · …]` (voir plus bas).

3. Regardez la réponse arriver dans la conversation. Chaque appel d'outil tient sur une ligne encadrée — `‣ bash  ls -1  ✓ done  0.03s` — suivie de sa sortie, repliée à `previewLines` lignes ; les lignes `+`/`-` d'une modification de fichier sont colorées.

4. Appuyez sur **Échap** pour arrêter un tour en cours. Taper une nouvelle question et appuyer sur Entrée pendant un tour l'arrête aussi ; la nouvelle question part une fois l'ancien tour rangé.

5. Tapez `/` en début de zone pour ouvrir le sélecteur de commandes : ↑/↓ choisissent, **Tab** complète, **Entrée** envoie une commande complète. `/help` (ou **F1**) liste les commandes et les touches dans la conversation.

6. Quittez avec `/quit`, à n'importe quel moment — pendant un tour aussi. **Ctrl-C** annule un tour en cours et quitte quand rien ne tourne.

7. Si un tour refuse de s'arrêter — le moteur ne répond plus, un outil est bloqué — appuyez une fois de plus sur **Échap** : la fenêtre affiche `⚠️ The turn is not answering the cancellation — press Ctrl-C (or /quit) to leave mm.` Ensuite `/quit`, ou un second **Ctrl-C**, ferme la fenêtre sans l'attendre. Le fichier de session conserve tout jusqu'au dernier tour terminé.

## Variantes

- **Demander avant chaque `bash` et chaque outil de fichier.** Mettez `yolo: false` dans le YAML. La zone de saisie est remplacée par la question `? bash: rm -rf build` et quatre touches y répondent : `a` autoriser une fois, `s` autoriser cet outil pour la session, `r` (ou Échap) refuser, `n` ne jamais autoriser cet outil dans cette session. Un outil refusé dit au modèle `[command rejected by the user]`. La valeur par défaut, `yolo: true`, exécute les outils sans demander. Voir [Confirmer les appels d'outils](confirm-tool-calls.md).
- **Désigner un fichier au modèle.** `@chemin` fonctionne exactement comme dans le mode ligne : les chemins existants sont attachés et repris en lignes `📎`. Voir [Désigner un fichier au modèle avec `@chemin`](attach-a-file.md).
- **Conserver et reprendre des sessions.** Avec `sessions.enabled: true`, l'en-tête affiche l'identifiant de la session enregistrée ; `/sessions` et `/resume` fonctionnent comme dans le mode ligne. Voir [Conserver les sessions et les reprendre](keep-sessions.md).
- **Faire défiler la conversation.** PgUp/PgDn paginent ; **Tab** donne le focus à la conversation pour que ↑/↓, Début et Fin la fassent défiler ; Fin reprend le suivi de la fin. **Ctrl-L** efface la conversation affichée sans toucher à l'historique. La molette ne fait défiler qu'après **F2** (voir plus bas).
- **Pas de terminal.** `mm -tui | tee log.txt`, ou tout lancement où stdin ou stdout n'est pas un terminal, affiche `[tui: stdin or stdout is not a terminal — running the line mode]` et lance le mode ligne. Rien d'autre ne change.

## Copier du texte depuis la fenêtre

La fenêtre laisse la souris au terminal : cliquer-glisser sélectionne du texte exactement comme dans n'importe quel terminal, et le raccourci de copie de votre terminal le copie. La barre d'état indique `F2 mouse: off`. Appuyez sur **F2** pour donner la souris à la fenêtre : la molette fait alors défiler la conversation et la barre d'état indique `mouse: on (Shift+drag selects)` ; dans la plupart des terminaux, glisser en maintenant Maj sélectionne encore. F2 à nouveau rend la souris.

Pour copier une réponse sans la sélectionner :

| Saisie | Copie |
|--------|-------|
| `/copy` ou **Ctrl-Y** | La dernière réponse, en texte brut : sans préfixe `🤖`, sans retour à la ligne forcé, sans cadre d'outil. |
| `/copy 2` | La réponse précédant la dernière (`3` celle d'avant, et ainsi de suite). |
| `/copy all` | Toute la conversation en texte brut : questions préfixées par `> `, réponses brutes, appels d'outils en une ligne de titre suivie de leur sortie. |

La confirmation nomme le chemin emprunté, `📋 copied 1 240 chars (pbcopy)`, parce qu'il en existe deux et qu'ils ne sont pas aussi fiables l'un que l'autre :

1. Un outil natif trouvé dans le `PATH` : `pbcopy` sur macOS, `wl-copy` sous Wayland, `xclip` ou `xsel` sous X11. C'est le chemin fiable sur un Mac.
2. Sinon **OSC 52**, la séquence d'échappement que certains terminaux honorent pour remplir le presse-papiers. Elle fonctionne à travers SSH et dans iTerm2 (à autoriser dans *Preferences → General → Selection*), Ghostty, kitty et WezTerm ; **Terminal.app de macOS l'ignore silencieusement**. Sans outil ni terminal, `/copy` répond `⚠️ no clipboard: …`.

Le mode ligne a aussi `/copy` et `/copy 2`, par les mêmes chemins ; `/copy all` est réservé à la fenêtre, puisque l'historique du terminal y est déjà sélectionnable.

## Coller un texte long

Un bloc collé n'est jamais envoyé de lui-même : ses sauts de ligne deviennent des lignes dans la zone. Quand le bloc est plus long que la zone — **plus de 3 lignes, ou plus de 200 caractères** — la zone affiche un seul jeton à la place du texte :

```
> explique cette trace [Pasted #1 · 42 lines · 1.2k chars] et le correctif dans [Pasted #2 · 5 lines · 310 chars]
```

Le jeton se comporte comme un seul caractère : ←/→ le franchissent d'un coup, **Retour arrière** ou **Suppr** le retirent en entier avec le texte collé, et vous continuez à taper autour. Plusieurs collages dans un même message sont numérotés dans l'ordre où vous les avez collés.

À **Entrée**, le modèle reçoit votre phrase où chaque jeton est remplacé par le texte collé complet, octet pour octet, sauts de ligne compris. Rien n'est raccourci ni résumé. La conversation, elle, continue d'afficher le jeton, si bien qu'un long collage ne chasse pas l'échange de l'écran ; la session persistée et `/copy all` portent la question complète.

Deux détails découlent de « un collage est une donnée que vous apportez, pas quelque chose que vous avez tapé » :

- Les mentions `@chemin` **à l'intérieur** d'un bloc collé ne sont pas résolues ; seules celles que vous avez tapées vous-même attachent un fichier (voir [`@chemin`](attach-a-file.md)).
- Une `/commande` dans un collage est du texte pour le modèle, pas une commande.

Les collages plus courts que le seuil sont insérés comme du texte, exactement comme avant. Le terminal doit prendre en charge le collage encadré (bracketed paste) pour que tout cela fonctionne : Terminal.app, iTerm2, Ghostty et kitty le font ; dans **tmux**, un collage n'arrive encadré que si le terminal extérieur et tmux le prennent en charge tous deux (tmux le fait depuis la 1.8 ; aucune option `set -g` n'est nécessaire pour le passage, mais un `paste-buffer` sans `-p` envoie le texte comme des touches ordinaires, qui arrivent alors comme des caractères tapés et sont insérés un à un).

## Voir aussi

- [Ligne de commande](../reference/cli.md) — l'option `-tui` et les spécificités du mode fenêtre
- [Commandes slash](../reference/slash-commands.md) — les touches de la fenêtre
- [Fichier de configuration](../reference/configuration.md) — `tui` et `permissions`
- [Architecture : une boucle, trois façades](../explanation/architecture.md) — pourquoi la fenêtre est une troisième façade sur le même puits