# đïž Document d'architecture â agent-manager (`am`)
> Ce document décrit la conception, le fonctionnement et les fonctionnalités de **agent-manager** (binaire `am`), un CLI Rust multiplateforme pour gérer des agents IA de coding locaux.
>
> đŠ Version : `0.6.0` · đŠ Rust 2021 · â
Windows · â
Linux · â
macOS
---
## đŻ Vue d'ensemble
`am` est un gestionnaire d'agents IA de coding qui permet de :
- đ DĂ©couvrir et lister plus de **72 agents** via un catalogue YAML embarquĂ©
- đŠ Les installer avec **9 mĂ©thodes** diffĂ©rentes (npm, pip, uv, cargo, go, bun, curl, binaire, git)
- đ Les dĂ©marrer, arrĂȘter, redĂ©marrer en avant-plan ou en arriĂšre-plan
- đ Observer leur Ă©tat, leurs logs, leurs statistiques d'utilisation
- đ ïž GĂ©rer dĂ©pendances, alias, groupes, profils, secrets, favoris et annotations
- ⥠Exécuter des actions shell via langage naturel avec un agent léger (`am ai`)
Le tout sans toucher au systÚme : chaque agent est installé dans un répertoire utilisateur isolé.
---
## đ§© Architecture globale
```mermaid
flowchart TB
subgraph UI["đ„ïž Interfaces utilisateur"]
CLI["Ligne de commande
clap v4"]
REPL["Shell interactif
rustyline"]
TUI["Dashboard TUI
ratatui + crossterm"]
WEB["Dashboard web
tiny_http (127.0.0.1)"]
end
subgraph CORE["âïž Noyau applicatif"]
APP["App
contexte partagé"]
CLI_DEF["cli.rs
définition des commandes"]
CMD["commands/
dispatch"]
SHELL_AI["shell_ai.rs
agent shell léger"]
end
subgraph DATA["đŸ DonnĂ©es persistantes"]
CONFIG["Configuration YAML
embarquée + utilisateur"]
CATALOG["Catalog
index agents/alias/groupes"]
STATE["StateStore
state.json"]
EVENTS["Journal JSONL
events-YYYYMM.jsonl"]
CACHE["Probe cache
probe-cache.json"]
end
subgraph EXEC["đ§ ExĂ©cution"]
RUNNER["Runner trait
systĂšme / mock"]
INSTALLERS["installers/
9 méthodes"]
DEPS["deps.rs
vérification dépendances"]
PROCESS["process.rs
PID / signaux"]
end
subgraph OBS["đïž Observation"]
PROBE["probe.rs
détection agents externes"]
DASH["dashboard.rs
agrégation"]
STATS["stats.rs
statistiques"]
SESSIONS["sessions.rs
registre sessions"]
end
CLI --> APP
REPL --> APP
TUI --> APP
WEB --> APP
APP --> CLI_DEF
APP --> SHELL_AI
APP --> CONFIG
APP --> CATALOG
APP --> STATE
APP --> EVENTS
APP --> CACHE
CMD --> RUNNER
CMD --> INSTALLERS
CMD --> DEPS
CMD --> PROCESS
CMD --> PROBE
CMD --> DASH
CMD --> STATS
CMD --> SESSIONS
SHELL_AI --> CMD
```
---
## đ Flux d'exĂ©cution d'une commande
```mermaid
sequenceDiagram
autonumber
participant User
participant main as main.rs
participant lib as lib.rs
participant help as help.rs
participant cli as cli.rs
participant app as app.rs
participant cfg as config.rs
participant state as state.rs
participant cmd as commands/mod.rs
participant impl as commands/xxx_cmd.rs
User->>main: am install jcode
main->>lib: main_entry()
lib->>lib: spawn thread 8 Mo
lib->>help: intercept(-h/--help) ?
help-->>lib: None
lib->>cli: Cli::parse()
cli-->>lib: Cli { command: Install {...} }
lib->>app: App::from_cli(cli)
app->>cfg: load() config embarquée + user
cfg-->>app: Config
app->>state: StateStore::new()
state-->>app: state.json chargé
app-->>lib: App
lib->>cmd: commands::execute(&app)
cmd->>impl: install_cmd::run(...)
impl->>impl: vérifier dépendances, installer
impl->>state: persister
impl->>app: emit(event install)
impl-->>cmd: Ok(0)
cmd-->>lib: 0
lib-->>main: code sortie
```
---
## đ Structure du code source
```
src/
âââ main.rs đȘ Point d'entrĂ©e
âââ lib.rs đ§ main_entry(), doc du crate
âââ cli.rs đ DĂ©finition clap de toutes les commandes
âââ app.rs đ§° Contexte App (config, state, paths, logger, theme)
âââ config.rs âïž SchĂ©ma YAML, chargement, fusion, validation
âââ catalog.rs đ Index agents + recherche fuzzy + suggestions
âââ catalog_remote.rs đ Catalogues distants (fetch, cache, includes)
âââ state.rs đŸ Base JSON des installations et annotations
âââ events.rs đ Journal d'Ă©vĂ©nements JSONL
âââ runner.rs đ Trait d'exĂ©cution systĂšme / mock
âââ process.rs âïž Lancement, arrĂȘt, signaux des processus
âââ deps.rs â
Vérification et auto-installation des dépendances
âââ toolchain.rs đ„ïž DĂ©tection OS / gestionnaire de paquets
âââ download.rs âŹïž TĂ©lĂ©chargement, checksums, extraction
âââ probe.rs đ DĂ©tection des agents externes sur le PATH
âââ dashboard.rs đ DonnĂ©es agrĂ©gĂ©es du dashboard
âââ ps.rs đ§ź Table des processus
âââ context.rs đ Contexte du projet courant
âââ repl.rs đŹ Shell interactif
âââ shell.rs đ Gestion des shells supportĂ©s
âââ help.rs â Aide Nushell-style
âââ output.rs đšïž Logger et rendu
âââ tables.rs đ Rendu tabulaire
âââ theme.rs đš ThĂšmes de couleur (REPL et tableaux)
âââ web.rs đ Serveur HTTP local (127.0.0.1) + API JSON + frontend embarquĂ©
âââ serve.rs đ API HTTP + WebSocket authentifiĂ©e (pilotage Ă distance, issue #80)
âââ frontend/ đ index.html â dashboard web (HTML5 + CSS + JS vanilla, include_str!)
âââ history.rs âȘ Historique des commandes
âââ sessions.rs đ
Registre des sessions
âââ projects.rs đïžïž AgrĂ©gation par projet
âââ hooks.rs đȘ Hooks de cycle de vie
âââ secrets.rs đ Gestion des secrets (keyring OS)
âââ providers.rs đ·ïž Registre de providers LLM (base_url, modĂšles, dĂ©faut, @secret)
âââ registry.rs đŠ Registre communautaire de catalogues (manifeste + sha256)
âââ ask.rs đŹ Langage naturel â commandes am (rĂšgles locales + LLM optionnel)
âââ sandbox.rs đĄïž Profils sandbox par agent (allowlist, pĂ©rimĂštre, rĂ©seau)
âââ telemetry.rs đ TĂ©lĂ©mĂ©trie anonyme opt-in (compteurs agrĂ©gĂ©s)
âââ lab.rs đ§Ș Benchmark d'agents (tĂąches YAML versionnables)
âââ playbook.rs â¶ïž Rejeu pas Ă pas d'une sĂ©quence d'historique
âââ plugins.rs đ Scripts d'extension sur les Ă©vĂ©nements (contrat JSON)
âââ models.rs đ€ Inventaire des modĂšles locaux (ollama, llama.cpp, LM Studio)
âââ shell_ai.rs ⥠Agent shell lĂ©ger : langage naturel â action shell
âââ sync.rs đ Push git de l'Ă©tat (journal, sessions, config)
âââ agent_config.rs âïž Adaptateurs de configuration post-install (TOML/YAML/JSON/key=value)
âââ costs.rs đ° CoĂ»ts estimĂ©s par agent (tokens in/out, modĂšles de prix)
âââ automation.rs âïž Services systĂšme + tĂąches planifiĂ©es (systemd/launchd/schtasks)
âââ backup.rs đŸ Sauvegardes (update --rollback, migrate)
âââ doctor.rs đ©ș Diagnostics environnement + --fix
âââ nav.rs đ§ Tables de navigation (ls/dir)
âââ i18n.rs đ Catalogue de traductions FR/EN (--lang, AM_LANG, LANG)
âââ version.rs đ·ïž Informations de version
âââ commands/ đŠ 51 modules, un par commande
âââ installers/ đŠ 8 installateurs spĂ©cialisĂ©s
```
---
## âïž Configuration : catalogue YAML extensible
### Hiérarchie de chargement
```mermaid
flowchart LR
EMB["đŠ config.yaml
embarquĂ© dans le binaire"] --> MERGE["đ Fusion"]
USER["đ€ ~/.config/agent-manager/config.yaml"] --> MERGE
LOCAL["đ ./agent-manager.yaml"] --> MERGE
FLAG["⥠--config "] --> MERGE
MERGE --> EFFECTIVE["â
Configuration effective"]
```
Priorité (la plus prioritaire en dernier) :
1. `config.yaml` embarqué (catalogue par défaut, ~72 agents)
2. `~/.config/agent-manager/config.yaml`
3. `./agent-manager.yaml` (configuration locale par projet)
4. `--config `
### Schéma de configuration
```yaml
version: "1.0"
settings:
install_dir: null # ~/.local/share/agent-manager/agents
log_dir: null # ~/.local/state/agent-manager/logs
default_shell: null # shell utilisateur par défaut
auto_install_deps: true # proposer d'installer les dépendances manquantes
confirm_before_run: true # confirmer avant les scripts d'installation
stop_timeout_secs: 5 # dĂ©lai SIGTERM â SIGKILL
self_update_repo: Projets/agent-manager
self_update_base_url: https://git.dracodev.net/api/v1
theme: null
hooks:
on_install: []
on_start: []
on_stop: []
on_update: []
aliases:
cc: claude-code
gemini: antigravity-cli
groups:
dev: [claude-code, aider, codex]
include:
- ./extra-agents.yaml
agents:
- name: claude-code
display_name: "Claude Code"
description: "..."
category: coding-agent
website: https://github.com/anthropics/claude-code
install:
type: npm
package: "@anthropic-ai/claude-code"
dependencies:
- { name: node, min_version: "18.0.0" }
run: claude
tags: [anthropic, assistant]
profiles:
dev:
agent: claude-code
env: { API_ENV: dev }
args: [--verbose]
projects:
mon-projet:
root: ~/projets/mon-projet
default_agent: claude-code
env: { KEY: value }
```
### Définition d'un agent (`AgentDef`)
| Champ | Description |
|-------|-------------|
| `name` | Identifiant unique (slug) |
| `display_name` | Nom lisible |
| `description` | Description longue |
| `category` | Catégorie (coding-agent, assistant, local-first...) |
| `website` | URL du projet |
| `install` | Spécification d'installation |
| `dependencies` | Outils requis (node, python, go...) avec version min |
| `run` | Commande de lancement |
| `args` | Arguments par défaut |
| `env` | Variables d'environnement par défaut |
| `tags` | Tags pour recherche/filtrage |
| `installable` | `false` pour les agents SaaS/Desktop |
| `platforms` | Restriction `linux`/`macos`/`windows` |
### Méthodes d'installation supportées
| Type | Fichier | Principe |
|------|---------|----------|
| `npm` | `installers/npm.rs` | `npm install -g --prefix ` |
| `bun` | `installers/npm.rs` | `bun install -g` |
| `pip` / `uv` | `installers/pipuv.rs` | virtualenv privé dans `install_dir` |
| `cargo` | `installers/cargo.rs` | `cargo install --root` |
| `go` | `installers/golang.rs` | `go install` avec `GOBIN` local |
| `curl` | `installers/script.rs` | Télécharge et exécute un script |
| `binary` | `installers/binary.rs` | Release GitHub/Gitea â extraction archive |
| `git` | `installers/git.rs` | Clone + build + `binary_path` |
---
## đŸ Gestion des Ă©tats
### `state.json` â base d'installation locale
Format JSON version 3, atomique (écriture `.tmp` + `rename`).
```json
{
"version": 3,
"installed": {
"jcode": {
"name": "jcode",
"version": "0.76.0",
"method": "binary",
"directory": ".../agents/jcode",
"binaries": ["jcode"],
"pid": null,
"installed_at": "...",
"updated_at": "..."
}
},
"annotations": {
"jcode": {
"favorite": true,
"note": "mon agent préféré",
"tags": ["perso"]
}
}
}
```
### Journal d'événements JSONL
- Un fichier par mois : `events-YYYYMM.jsonl`
- Append-only, horodaté
- Types d'événements : `start`, `stop`, `run`, `install`, `update`, `uninstall`, `doctor`, `config`, `repl`, `shell`, `annotate`
- Les secrets ne sont jamais journalisés
- Source de vérité pour les statistiques, sessions, projets et timeline
### Cache de sondes
`probe-cache.json` évite de re-scanner le PATH à chaque commande pour détecter les agents externes et leurs versions.
---
## đĄïž Gestion des dĂ©pendances
```mermaid
flowchart LR
INSTALL["am install jcode"] --> CHECK["deps::check_dep"]
CHECK --> MISSING{Manquant ?}
MISSING -->|Oui| DETECT["toolchain::detect OS"]
DETECT --> COMMANDS["toolchain::install_commands"]
COMMANDS --> PROMPT["Proposer la commande"]
PROMPT --> AUTO["Exécuter si --yes"]
AUTO --> INSTALL2["installers::run_install"]
MISSING -->|Non| INSTALL2
```
- `deps.rs` vérifie chaque dépendance via ` --version`
- `toolchain.rs` détecte l'OS et le gestionnaire de paquets :
- Windows : `scoop` â `winget`
- Linux : `apt` / `dnf` / `pacman` / `apk`
- macOS : `brew`
- Si `auto_install_deps: true`, `am` propose et peut exécuter la commande d'installation
- Les dépendances de l'agent (modules npm/pip) restent isolées dans le répertoire `install_dir`
---
## ⥠Gestion des processus
```mermaid
flowchart TB
START["am start "] --> MODE{Mode ?}
MODE -->|Foreground| FG["Attache au terminal
Ctrl-C pour quitter"]
MODE -->|Background| BG["spawn_background()"]
BG --> LOG["Redirection stdout/stderr
vers log agent"]
LOG --> PID["Enregistrement PID
dans state.json"]
PID --> EVENT["Ămission Ă©vĂ©nement start"]
STOP["am stop "] --> SIGTERM["SIGTERM"]
SIGTERM --> WAIT{"Processus terminé ?"}
WAIT -->|Non| SIGKILL["SIGKILL aprĂšs timeout"]
WAIT -->|Oui| CLEAN["PID effacé"]
```
- Démarrage avant-plan (`-f`) ou arriÚre-plan (`-b`, `--background`)
- Variables d'environnement injectées via `--env KEY=VALUE`
- Secrets via `--env KEY=@secret` (résolu depuis le trousseau OS)
- ArrĂȘt gracieux avec timeout configurable (dĂ©faut 5 s)
- Notifications desktop optionnelles (`--notify`)
---
## đ Commandes dĂ©taillĂ©es
### đ DĂ©couvrir
| Commande | Description |
|----------|-------------|
| `am list` | Agents installés + détectés sur le PATH |
| `am list --all` | Tout le catalogue avec état |
| `am search ` | Recherche fuzzy avec suggestions |
| `am info ` | Fiche détaillée |
| `am status [agent]` | Ătat, version, PID, logs |
### đŠ Cycle de vie
| Commande | Description |
|----------|-------------|
| `am install ` | Installe un agent et ses dépendances |
| `am install --method pip` | Choisit la méthode |
| `am uninstall [--purge]` | Désinstalle et nettoie |
| `am update ` / `--all` | Met Ă jour |
| `am start [agent]` | Lance en avant-plan |
| `am start -b` | Lance en arriĂšre-plan |
| `am stop ` | ArrĂȘt gracieux |
| `am restart ` | Redémarrage |
| `am run [args...]` | Exécution directe sans gestion de PID |
### đïž Observer
| Commande | Description |
|----------|-------------|
| `am logs ` | Tail du log agent |
| `am log [agent]` | Journal des événements `am` |
| `am timeline` | Vue chronologique unifiée |
| `am sessions [agent]` | Registre des sessions |
| `am stats [agent] --period 7d` | Statistiques d'utilisation |
| `am top --period 30d` | Top 10 agents |
| `am report --last-week` | Rapport markdown |
| `am projects [nom]` | Agents par projet |
| `am dashboard` | Dashboard TUI temps réel |
| `am watch --restart` | Supervision et relance automatique |
### đŻ Personnaliser
| Commande | Description |
|----------|-------------|
| `am favorite ` | Marquer comme favori |
| `am note ` | Ajouter une note |
| `am tag ` | Taguer |
| `am tags [agent]` | Lister les tags |
| `am profile list/show ` | Profils d'environnement |
| `am alias add ` | Créer un alias |
| `am secret set --agent --value ` | Secret dans le trousseau |
### đ ïž SystĂšme
| Commande | Description |
|----------|-------------|
| `am doctor [--fix]` | Diagnostic environnement |
| `am config show/path/edit/validate/set` | Gestion config |
| `am completion ` | Script de complétion |
| `am man [commande]` | Page de manuel |
| `am open ` | Ouvrir le répertoire d'installation |
| `am export/import` | Sauvegarde/restauration |
| `am self-update [--check]` | Mise Ă jour de `am` |
| `am self-uninstall` | Désinstallation complÚte |
| `am version` | Version et build |
| `am` (sans commande) | REPL interactif |
### đ€ Copilote & plateforme (v0.7.0 / v1.0)
| Commande | Description |
|----------|-------------|
| `am ask ""` | Langage naturel â commande(s) am : rĂšgles locales FR/EN hors-ligne, raffinement LLM optionnel (`settings.ask`), confirmation avant exĂ©cution |
| `am providers list/add/remove/set-token` | Registre LLM centralisé (base_url, modÚles, clé par provider au keyring, résolution `@secret`) |
| `am registry publish/search/install` | Registre communautaire de catalogues (Gitea, manifeste + checksum sha256 vérifié) |
| `am serve --token [--port]` | API HTTP + WebSocket authentifiĂ©e : stats, run, start, stop, ask â rate limiting par IP, TLS derriĂšre reverse proxy |
| `am web [--port]` | Dashboard web local en lecture seule (127.0.0.1), contrats `--json` réutilisés |
| `am ai "" [--exec] [--files ]` | **Shell AI** : langage naturel â commande/action shell via agent lĂ©ger (AIChat) ; `--dry-run` par dĂ©faut, confirmation avant exĂ©cution |
| `am lab --agents a,b --task ` | Benchmark comparatif (durée, exit, coût) sur tùches YAML versionnables |
| `am sync [--message]` | Sauvegarde git de l'Ă©tat (journal, sessions, config â secrets exclus) |
| `am migrate export/import` | Bundle de transfert machine A â B (config + Ă©tat + historique) |
| `am schedule add/list/remove/run` | Planification de commandes am (cron / Task Scheduler, issue #56) |
| `am service install ` | Service systĂšme (systemd / launchd / tĂąche Windows, autostart) |
| `am monitor [--json]` | TUI temps réel des processus gérés (CPU/RSS/uptime) + alertes de seuils |
| `am models [--prune]` | Inventaire des modĂšles locaux (ollama, llama.cpp, LM Studio) |
| `am audit` | Qui a modifié quoi, quand (checksums config + journal) |
| `am plugins [--test ]` | Scripts d'extension sur les événements (contrat JSON stdin/stdout) |
---
## đ Options globales
Disponibles avant ou aprĂšs la sous-commande.
| Option | Effet |
|--------|-------|
| `-c, --config ` | Fichier de configuration alternatif |
| `-v, --verbose` | Affiche chaque commande exécutée |
| `-q, --quiet` | Seules les erreurs sont affichées |
| `-y, --yes` | Oui Ă toutes les confirmations |
| `--dry-run` | Simulation sans modification |
| `--json` | Sortie JSON structurée |
| `--no-color` | Désactive les couleurs |
| `--theme ` | ThĂšme de couleur |
---
## đš FonctionnalitĂ©s avancĂ©es
### Alias
```yaml
aliases:
cc: claude-code
gemini: antigravity-cli
```
`am start cc` démarre `claude-code`.
### Groupes
```yaml
groups:
dev: [claude-code, aider, codex]
```
`am start group:dev` démarre tous les agents du groupe en arriÚre-plan.
### Profils d'environnement
```yaml
profiles:
dev:
agent: claude-code
env: { API_ENV: dev }
args: [--verbose]
```
`am start --profile dev` lance `claude-code` avec les variables et arguments du profil.
### Projets
```yaml
projects:
mon-projet:
root: ~/projets/mon-projet
default_agent: claude-code
```
Dans le répertoire du projet, `am start` sans argument lance l'agent par défaut du projet.
### Secrets
Les secrets sont stockés dans le trousseau du systÚme d'exploitation (via `keyring`), jamais en clair dans la config.
```bash
am secret set OPENAI_API_KEY --agent claude-code --value sk-...
am start claude-code --env OPENAI_API_KEY=@secret
```
### Hooks
Commandes exécutées automatiquement aux étapes clés du cycle de vie :
- `on_install`
- `on_start`
- `on_stop`
- `on_update`
Définissables globalement dans `settings.hooks` ou par projet.
### Shell interactif (REPL)
Lancé par `am` sans sous-commande :
- Complétion Tab personnalisée (commandes, agents, alias, groupes, flags, shells, thÚmes)
- Historique des commandes
- Passerelle systÚme : commandes inconnues exécutées dans le shell actif
- Commandes internes : `ls`, `dir`, `cd`, `ps`, `where`, `get`, `shell`, `theme`, `exit`, `/help`
- BanniĂšre ASCII art
---
## đ Dashboard TUI
```mermaid
flowchart LR
DASH["am dashboard"] --> OVER["Overview"]
DASH --> ACT["Activité"]
DASH --> STATS["Statistiques"]
DASH --> SESS["Sessions"]
DASH --> PROJ["Projets"]
```
- Navigation : `Tab` / `â` / `â` pour les onglets
- Défilement : `j` / `k` ou flÚches
- Quitter : `q`
- Données agrégées depuis `state.json`, le journal d'événements, les sessions et les projets
---
## đ§Ș Tests
### Organisation
- **Tests unitaires** : dans chaque module `src/*.rs` sous `#[cfg(test)]`
- **Tests d'intégration** : dans `tests/`
### Fichiers de tests notables
| Fichier | Couverture |
|---------|------------|
| `annotations_test.rs` | Favoris, notes, tags |
| `config_test.rs` | Chargement/validation/fusion |
| `dashboard_test.rs` | Dashboard |
| `doctor_test.rs` | `am doctor` |
| `dry_run_test.rs` | Mode `--dry-run` |
| `events_test.rs` | Journal d'événements |
| `history_test.rs` | Historique |
| `process_test.rs` | Processus |
| `profiles_test.rs` | Profils |
| `projects_test.rs` | Projets |
| `sessions_test.rs` | Sessions |
| `stats_test.rs` | Statistiques |
Lancer les tests :
```bash
cargo test
```
---
## đŠ Packaging et distribution
```
dist/ Binaires précompilés
âââ am-linux-x86_64
âââ am-linux-aarch64
âââ am-windows-x86_64.zip
âââ am_0.4.3_amd64.deb
âââ ...
packaging/ Scripts de packaging
âââ deb/
âââ rpm/
âââ homebrew/
âââ scoop/
âââ winget/
completions/ Scripts de complétion
âââ _am zsh
âââ _am.ps1 PowerShell
âââ am.bash bash
âââ am.elv elvish
âââ am.fish fish
man/ Pages de manuel générées
```
- `build.rs` enregistre le commit et la branche git pour `am version`
- `scripts/build-release.ps1` construit les releases multiplateformes
- `scripts/render-manifests.ps1` génÚre les manifests de packaging
---
## đïžïž Arborescence des donnĂ©es utilisateur
### Windows
```
%LOCALAPPDATA%\agent-manager\
âââ agents\ installations
âââ logs\ logs agents
âââ state\ state.json, events-*.jsonl, probe-cache.json
```
### Linux
```
~/.local/share/agent-manager/ données
~/.local/state/agent-manager/ logs, state, events, cache
~/.config/agent-manager/ config.yaml
```
### macOS
```
~/Library/Application Support/agent-manager/ données
~/.local/state/agent-manager/ logs, state, events, cache
~/.config/agent-manager/ config.yaml
```
Variables d'environnement de débogage/test :
- `AGENT_MANAGER_DATA` : remplace le répertoire de données
- `AGENT_MANAGER_STATE` : remplace le répertoire d'état
---
## đ SĂ©curitĂ©
- Mode `--dry-run` universel pour simuler sans modifier
- Checksums `sha256` pour les binaires téléchargés
- Confirmation avant exécution des scripts d'installation
- Secrets dans le trousseau OS, jamais dans les logs ni le journal
- Installation isolée : aucune modification systÚme
---
## đ RĂ©sumĂ© du flux de donnĂ©es
```mermaid
flowchart LR
CONFIG["đ YAML config"] --> CATALOG["đ Catalog"]
CATALOG --> INSTALL["đŠ Installateurs"]
INSTALL --> STATE["đŸ state.json"]
STATE --> PROCESS["âïž Processus"]
PROCESS --> EVENTS["đ Journal JSONL"]
EVENTS --> STATS["đ Stats / Dashboard"]
EVENTS --> SESSIONS["đ
Sessions"]
EVENTS --> PROJECTS["đïžïž Projets"]
```
---
## ⥠Shell AI
`am ai` (alias `am shell`) est une commande dédiée aux **actions shell via langage naturel**. Elle repose sur un agent léger (par défaut **AIChat**, installé comme n'importe quel autre agent via le catalogue) et réutilise le registre de providers LLM (`providers.rs`) pour choisir le modÚle le plus rapide/cheap.
### Flux d'exécution
```mermaid
sequenceDiagram
autonumber
participant User
participant cli as cli.rs
participant shell_ai as shell_ai.rs
participant catalog as catalog.rs
participant providers as providers.rs
participant runner as runner.rs
participant aichat as aichat (agent)
User->>cli: am ai "traite les JSON"
cli->>shell_ai: parse args (--exec, --files)
shell_ai->>catalog: agent "aichat" installé ?
catalog-->>shell_ai: Ok / install
shell_ai->>providers: provider & modÚle par défaut
providers-->>shell_ai: config (ollama / cheap cloud)
shell_ai->>shell_ai: injecte cwd + fichiers (--files)
shell_ai->>runner: exec aichat -f . -e "..."
runner->>aichat: lancement processus
aichat-->>runner: commande générée / exécutée
runner-->>shell_ai: output + exit code
shell_ai->>shell_ai: journalise événement shell_ai
shell_ai-->>User: résultat ou confirmation
```
### Sécurité
| RÚgle | Détail |
|---|---|
| `--dry-run` par défaut | Aucune commande modifiante n'est exécutée sans confirmation |
| Classification risk/certainty | Inspiré d'AI CLI : chaque commande est classée `safe` ou `risky` |
| Confirmation utilisateur | Les commandes `risky` demandent une validation explicite |
| Mode local possible | Support d'Ollama via `providers.rs` pour ne pas sortir les données |
### Dépendances
- `src/shell_ai.rs` : parsing du prompt, gestion des flags, appel Ă l'agent
- `src/providers.rs` : résolution du provider/modÚle
- `src/runner.rs` : exécution du binaire `aichat`
- `src/events.rs` : journalisation `shell_ai` dans le journal JSONL
- `config.yaml` : définition de l'agent `aichat` + alias `ai`
---
## đ RĂ©fĂ©rences
- `src/lib.rs:4` : documentation d'architecture du crate
- `src/cli.rs:24` : options globales
- `src/cli.rs:61` : énumération des commandes
- `src/app.rs:16` : struct `App`
- `src/config.rs:25` : struct `Config`
- `src/config.rs:148` : struct `AgentDef`
- `src/config.rs:241` : enum `InstallType`
- `src/state.rs:12` : struct `StateFile`
- `src/events.rs:57` : struct `Event`
- `README.md` : documentation utilisateur complĂšte
---
*Document gĂ©nĂ©rĂ© pour agent-manager v0.4.3* đ