Aller au contenu

install

rigger install [--scope=<user|project>] [--assistant=<claude|opencode>]
rigger install <id...> [--yes] [--force] [--secret-env=<ref>=<VAR>]...
rigger install <url|path> [--yes] [--force]

install ajoute des artifacts au poste courant pour un assistant. Il fonctionne dans l’un de ses trois modes selon ses arguments : un sélecteur interactif quand aucun n’est fourni, une liste de qualified ids pour une install scriptée, ou une unique URL ou un chemin pour une install ad-hoc. Chaque mode affiche un plan et n’écrit rien avant votre confirmation.

Argument Mode
(aucun) Interactif : récupérer l’effective catalog, choisir dans une liste groupée.
<id...> Un ou plusieurs qualified ids, <catalog>/<nature>:<name>.
<url|path> Une unique URL git ou un chemin local, installé en ad-hoc.

Un id non qualifié, un préfixe non configuré, et l’absence totale de catalog sont chacun rejetés avant tout accès réseau, tous sortent en 2 :

[error] unqualified id "<id>" — use `<catalog>/<id>` (see `rigger ls`)
[error] catalog "<prefix>" not configured — see `rigger catalog ls`
[error] no catalog configured — run `rigger init`
Flag Effet
--scope Installer dans user (à l’échelle du poste) ou project (dépôt courant) ; user par défaut.
--assistant Cibler claude ou opencode ; sinon résolu comme décrit dans la vue d’ensemble.
--yes Sauter l’invite de confirmation. En mode interactif il n’est pas utilisé ; en modes id et ad-hoc il applique le plan sans demander.
--force Rétrograder un finding bloquant de scan de sécurité en avertissement et poursuivre.
--secret-env=<ref>=<VAR> Faire correspondre une référence de secret du catalog à une variable d’environnement de votre poste. Répétable ; la dernière valeur l’emporte par ref.

Interactif. Sans ids, install demande le scope (sauf si --scope a été fourni), classe chaque entrée de catalog face au manifest et à la version distante, et affiche un sélecteur regroupé en à installer, à mettre à jour et à jour. Quand rien n’est actionnable, il affiche ce qui suit et sort en 0 :

✓ Everything already up-to-date for scope "<scope>" (<n> artifact(s) installed). Use `rigger remove` to uninstall.

Ne rien sélectionner affiche No artifacts selected — nothing to install. et sort en 0.

Par qualified id. Les ids sont regroupés par préfixe de catalog et installés une source à la fois. Un pack se déploie en ses membres, et la chaîne requires de chaque artifact est entraînée.

Ad-hoc. Une unique URL ou un chemin installe du contenu extérieur aux catalogs configurés. Il est traité comme untrusted : chaque fichier récupéré est scanné avant toute écriture. Le manifest enregistre un préfixe de source dérivé pour conserver la provenance : github.com/... devient gh-<repo>, gitlab.com/... devient glab-<repo>, un autre hôte devient <host-without-TLD>-<repo> (le label de domaine de second niveau ; git.company.io/owner/repocompany-repo), et un chemin local devient local-<name>. Sous --yes, l’install ad-hoc sélectionne chaque entrée ; sans lui, un sélecteur est affiché.

Chaque install de source suit les mêmes étapes : résoudre la version distante, shallow-cloner le contenu, se prémunir contre les ids de path-traversal, scanner (catalog.json et chaque artifact récupéré), fusionner et résoudre la sélection, construire le plan, confirmer, puis appliquer : backup, écriture, enregistrement du manifest. Aucun fichier n’est écrit avant que le scan passe et que le plan soit confirmé.

Quand aucun outil de scan n’est installé, le scan se dégrade en warn-only et l’install se poursuit :

[warning] content not scanned — install gitleaks or trivy then re-run for a full scan; see `rigger doctor`

Quand exactement l’un de gitleaks/trivy est installé et ne trouve rien, le scan est partiel : l’install se poursuit et l’avertissement nomme l’outil manquant (symétrique pour l’un ou l’autre) :

[warning] content partially scanned — trivy not installed (gitleaks ran); install trivy then re-run for a full scan; see `rigger doctor`

Quand un scanner est présent et rapporte un finding bloquant, l’install s’arrête (ScanBlockedError) sauf si --force est positionné — ceci vaut même avec un seul scanner installé, si bien qu’un finding bloquant prime toujours sur l’avertissement de scan partiel.

--force outrepasse un finding de scan et rien d’autre. Il ne contourne pas une incohérence de provenance ref/sha (RefShaMismatchError), un id de path-traversal, ni un requires cross-catalog non satisfait. Chacun de ces cas refuse l’install et sort en 2, forcé ou non.

Le mode interactif (sans ids) a besoin d’un TTY : en session non-interactive son sélecteur ne peut pas s’ouvrir, l’exécution est donc rejetée immédiatement, avant tout accès réseau, même sous --yes :

[error] interactive picker requires a TTY — pass explicit ids to install non-interactively

Dans une session non-interactive, les installs par id et ad-hoc exigent --yes ; sans lui, l’exécution sort en 2 avant tout accès réseau ([error] non-interactive session — pass --yes to confirm non-interactively). Sous --yes, un secret MCP required sans correspondance --secret-env ni valeur ambiante est une erreur fail-closed (sort en 2), puisqu’aucune invite n’est possible.

Code Condition
0 Installé, ou rien à installer / sélection refusée.
2 Id erroné ou non qualifié, entrée inconnue, cycle de dépendances, require cross-catalog non satisfait, incohérence de provenance, aucun catalog configuré, aucun id en session non-TTY, non-TTY sans --yes, --secret-env malformé, secret required non résolu.
1 Échec de récupération ou de clone, scan bloqué (sans --force), une autre exécution détient le verrou, échec d’install de plugin ou de skill.
130 Une invite a été annulée par Ctrl+C.

Voir codes de sortie pour le contrat commun.

rigger install team/skill:spec-workflow --scope=project --yes