# Installer Maurice

Tu es l’agent de code de cette machine, avec un terminal. « Connecte-toi » veut dire que tu peux appeler Maurice depuis cette session. Un compte Console n’est pas requis pour ce premier usage local. N’utilise pas sudo. Ne colle aucun secret, jeton ou lien d’appairage dans ton rapport.

Maurice tient dans un seul binaire `maurice` : la CLI et le runtime local, gratuit, sans compte ni Docker. Le script prend la dernière version stable pour cette machine dans le manifest de https://get.agentmaurice.app (pas l’API GitHub), télécharge l’archive et son SHA-256 depuis ce même site et vérifie la somme lui-même. Sur macOS, il vérifie aussi la signature Apple du binaire.

## 1. Dire où tu es, avant tout téléchargement

Affiche le système (`uname -s`), l’architecture (`uname -m`), le dossier de données `$HOME/.maurice/one`, et si ce shell est un conteneur (`/.dockerenv` ou `/run/.containerenv`), une session distante (`SSH_CONNECTION`) ou le compte `id -un`.

Sous Windows, dans PowerShell, affiche `[System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture`, le dossier `$HOME\.maurice\one` et le compte (`whoami`).

Qualifié aujourd’hui : macOS Apple Silicon (`Darwin` et `arm64`), Linux `x86_64` (amd64), Linux `aarch64` (arm64), Windows x64. Mac Intel (`Darwin` et `x86_64`) : arrête-toi, il n’y a pas d’archive publique. Si ce n’est pas la machine demandée, arrête-toi avant de télécharger.

## 2. Installer le script depuis agentmaurice.ai

Télécharge dans un dossier temporaire, jamais dans le répertoire courant. URL d’install : https://agentmaurice.ai/install.sh. Source lisible (audit) : https://github.com/agentmaurice/maurice/blob/c33f41e7ecf6cef4f566b779772e2f4d13fb5f88/install.sh. N’utilise pas `raw.githubusercontent.com` ni `api.github.com`. N’ajoute pas `--version`.

Le script prend la dernière version stable qui existe pour ce système et cette architecture. Si la même version ou une plus récente est déjà installée, il la garde. Sinon, y compris pour une ancienne préversion de Maurice, il remplace le binaire, arrête l’ancien processus et relance Maurice sur le même dossier `$HOME/.maurice/one`. Il n’efface pas ce dossier et n’imprime pas un nouveau prompt d’appairage.

```sh
install_tmp="$(mktemp -d)"
curl -fsSL https://agentmaurice.ai/install.sh -o "$install_tmp/install.sh"
sh "$install_tmp/install.sh" --install-dir "$HOME/.local/bin" --no-autostart --data-dir "$HOME/.maurice/one"
```

Sous Windows, dans PowerShell, sans droits d’administrateur. URL d’install : https://agentmaurice.ai/install.ps1. Source lisible (audit) : https://github.com/agentmaurice/maurice/blob/c33f41e7ecf6cef4f566b779772e2f4d13fb5f88/install.ps1. Le binaire va dans `%LOCALAPPDATA%\AgentMaurice\bin\maurice.exe`. Le comptage n’existe pas encore sous Windows : n’ajoute aucun drapeau de comptage.

```powershell
$installTmp = Join-Path ([System.IO.Path]::GetTempPath()) ([System.Guid]::NewGuid().ToString('N'))
New-Item -ItemType Directory -Path $installTmp | Out-Null
Invoke-WebRequest -UseBasicParsing https://agentmaurice.ai/install.ps1 -OutFile "$installTmp\install.ps1"
powershell -NoProfile -ExecutionPolicy Bypass -File "$installTmp\install.ps1" -NoAutostart -DataDir "$HOME\.maurice\one"
```

Ajoute `--report-installation` seulement si le message de la personne contient « J'accepte le comptage de cette installation ». Ce drapeau envoie seulement un identifiant aléatoire, la version, le système et l’architecture à https://get.agentmaurice.app et les mêmes quatre champs à PostHog EU. Sans cette phrase, n’ajoute pas le drapeau.

Si un drapeau est refusé, arrête-toi et montre le texte d’usage exact. N’invente pas un autre installeur.

## 3. Prouver que tu peux t’en servir

La version et doctor ne suffisent pas. Maurice doit répondre, tu dois avoir un accès qui fonctionne, et un appel sans effet métier doit réussir.

```sh
"$HOME/.local/bin/maurice" version --json
"$HOME/.local/bin/maurice" doctor --data-dir "$HOME/.maurice/one" --json
"$HOME/.local/bin/maurice" ping
```

Sous Windows :

```powershell
$maurice = Join-Path $env:LOCALAPPDATA 'AgentMaurice\bin\maurice.exe'
& $maurice version --json
& $maurice doctor --data-dir "$HOME\.maurice\one" --json
& $maurice ping
```

Attendu : `version` vaut v2.2.1 ou plus récent, doctor indique running, health_ok et storage_ok, et ping répond 200 OK. `--data-dir` est temporaire : le contexte ne garde pas encore le dossier.

Si tu ne peux pas encore appeler Maurice, suis le bloc d’appairage déjà imprimé. S’il n’y en a pas, lance une seule fois `"$HOME/.local/bin/maurice" setup --pairing-prompt`. Ne le relance pas si tu peux déjà appeler Maurice. Ne colle pas le lien.

Si ce bloc contient une commande d’appel, exécute-la une fois. Un `workflow call` a encore besoin de `--runtime-url http://127.0.0.1:5011` tant que le contexte ne garde pas cette URL. Ce drapeau est temporaire. N’invente pas de workflow.

Compte-rendu d’une ligne : « Maurice est installé et connecté », plus la version, l’état doctor et le résultat de l’appel. Sans lien d’appairage.

Ne lance pas `maurice update install` : cette commande installe la CLI seule, sans le runtime local. Pour mettre Maurice à jour, rejoue cette procédure.

Le dossier de données est lisible par les programmes de cet utilisateur. Arrête-toi au premier échec. Une commande en échec se rejoue au plus une fois.

## 4. Démarrage automatique, seulement si la personne le demande

L’installation ci-dessus ne relance pas Maurice après un redémarrage de la machine. N’utilise jamais `--home-profile vm`, `vm-managed` ni `home-bootstrap` : ces profils servent aux VM ouvertes par tunnel SSH ou gérées par la Console, et changent la façon d’accéder à Maurice.

Sous Linux, vérifie d’abord que cette machine a une session systemd utilisateur :

```sh
systemctl --user show-environment >/dev/null
```

En échec (par exemple « Failed to connect to user scope bus »), n’enregistre rien. Maurice continue de tourner. Rapporte : « Démarrage automatique indisponible sur cette machine ; après un redémarrage, rejouer cette procédure relance Maurice. » Arrête-toi là.

Sous macOS, rien à vérifier. Sous Linux, une fois la vérification passée, et sous macOS, lance une seule fois :

```sh
"$HOME/.local/bin/maurice" stop --data-dir "$HOME/.maurice/one"
"$HOME/.local/bin/maurice" service install --data-dir "$HOME/.maurice/one"
"$HOME/.local/bin/maurice" service status
"$HOME/.local/bin/maurice" ping
```

Sous Windows, sans droits d’administrateur :

```powershell
& $maurice stop --data-dir "$HOME\.maurice\one"
& $maurice service install --data-dir "$HOME\.maurice\one"
& $maurice service status
& $maurice ping
```

Maurice repart alors à chaque ouverture de session de cet utilisateur. Si l’une de ces quatre commandes échoue, retire le service avec `"$HOME/.local/bin/maurice" service uninstall` (sous Windows : `& $maurice service uninstall`), relance Maurice à la main avec `"$HOME/.local/bin/maurice" start --wait 120s --data-dir "$HOME/.maurice/one"` (sous Windows : `& $maurice start --wait 120s --data-dir "$HOME\.maurice\one"`), vérifie `ping`, puis rapporte l’échec avec son message exact.
