Exécutez Crew sur des hôtes de développement distants, des instances EC2, des serveurs personnels ou des tâches Fargate jetables et accédez-y depuis un seul tableau de bord local. Les instances longue durée exposent une passerelle loopback via un transfert de port SSH ou AWS SSM. Fargate expose une API de tour limitée à la tâche via AWS SSM, sans règle réseau entrante.
Activation volontaire. Désactivé par défaut.
Définissez instances.enabled à true, puis activez Settings → Developer → Feature Previews → Chat on a crew. Ouvrez le menu de nouvelle conversation, choisissez New chat on crew et sélectionnez une instance Crew connectée.
La transcription reste locale tandis que chaque tour s'exécute sur l'instance Crew distante sélectionnée. La barre latérale affiche le nom Crew et l'insigne du serveur. Le comportement de connexion automatique se configure dans Settings → Remote crews → Auto-connect crews.
kirocrew config set instances.enabled true
Ce paramètre s'applique en direct dans la version 0.7. Le Gateway crée le registre des instances et commence à gérer les connexions admissibles sans redémarrage manuel.
Utilisez un nom d'hôte, user@host ou un alias de configuration SSH. L'authentification doit fonctionner sans invite interactive, normalement via ssh-agent ou un fichier d'identité configuré.
Utilisez un ID d'instance EC2 ou un ID d'instance gérée SSM avec un profil AWS et une région. La machine locale nécessite l'AWS CLI et le plugin Session Manager, et l'instance distante nécessite l'agent SSM ainsi que les permissions IAM requises. La connexion utilise le transfert de port et ne nécessite pas de règle SSH entrante.
Fargate est conçu pour les travailleurs distants jetables. Crew s'exécute en tant que tâche ECS et est accessible via un transfert SSM vers son API de tour, sans écouteur public ni tableau de bord distant intégré. Configurez le placement Fargate, l'image épinglée par condensé et les références aux secrets dans le bloc facultatif fargate de cloud.json; la surface Cloud affiche l'état de la connexion et de la tâche.
Une tâche dure six heures par défaut. Définissez fargate.task_ttl_seconds pour choisir une durée de vie positive différente. Le moteur d'exécution admet au plus dix tâches Crew Fargate à la fois; ce plafond de sécurité est fixe plutôt qu'un paramètre de cloud.json.
L'ordinateur portable qui se connecte nécessite l'AWS CLI et le plugin Session Manager. Fargate utilise les mêmes contrôles de gestion de crew à distance réservés au propriétaire que les autres méthodes de connexion.
┌── Hub gateway (this host) ──┐ │ /instances page (React) │ │ ├─ tab strip: Home · A · B │ │ ├─ warm <iframe>s per tab │ http://127.0.0.1:<local_port>/?token=… │ └─ Manage panel │ add / connect / diagnose / restart / remove │ │ │ instances/ package │ │ ├─ registry │ ~/.kiro/crew/instances.json │ ├─ port_allocator │ loopback ports from base 7778 │ ├─ token_mint │ ssh <host> kirocrew token → JWT (never logged) │ ├─ ssh_tunnel_manager │ supervised ssh -N -L, probe, self-heal, refresh │ └─ diagnostics │ ssh → remote-dashboard → local-forward ladder └──────────────────────────────┘ │ ssh -N -L 127.0.0.1:<local>:127.0.0.1:<remote> ▼ ┌── Remote gateway ────────────┐ │ kirocrew gateway bound to │ │ 127.0.0.1:<remote_port> │ └──────────────────────────────┘
Chaque instance que vous ajoutez produit un processus enfant supervisé ssh -N -L. Le tunnel transfère 127.0.0.1:<local> → distant 127.0.0.1:<remote>. Le hub émet un jeton de tableau de bord sur l'instance distante via SSH et intègre le tableau de bord distant dans un iframe à l'URL loopback.
POST /api/instances/{id}/connect alloue un port loopback, émet un jeton sur l'instance distante via SSH, démarre ssh -N -L, attend que le transfert local accepte une connexion, puis renvoie l'état en directinstances.warm_set_cap sur une valeur positive pour fixer une limite. Les instances actives conservent un tunnel + WebSocket en direct. Se connecter au-delà du plafond évince paresseusement la moins récemment utilisée?diagnose=1 exécute une série de sondes de défaillance à la demande; POST .../restart redémarre la passerelle distante via SSHOuvrez Settings → Remote crews, sélectionnez Add et choisissez la méthode de connexion.
| Méthode | Champs cibles |
|---|---|
| SSH | Nom d'hôte, user@host ou alias de configuration SSH, plus le port de la passerelle distante |
| AWS SSM | ID d'instance EC2 (i-*) ou ID d'instance gérée (mi-*), profil AWS, région et utilisateur d'exécution facultatif |
| Fargate | La cible de tâche ECS enregistrée créée par le flux de lancement Cloud, plus le profil AWS et la région |
Toutes les méthodes prennent un nom d'affichage. Les passerelles SSH et SSM longue durée utilisent également une durée de vie du jeton de tableau de bord. Une valeur commençant par - ou une cible qui ne correspond pas à sa méthode est refusée avant le démarrage d'un processus enfant.
Utilisez votre alias de configuration SSH ou user@hostname. L'authentification doit réussir de façon non interactive via ssh-agent ou des clés configurées.
Configurez un alias SSH sur le hub, puis utilisez cet alias comme cible SSH :
Host my-ec2 HostName ec2-1-2-3-4.compute-1.amazonaws.com User ec2-user IdentityFile ~/.ssh/my-key.pem ProxyJump bastion-host
Pour une instance EC2 sans port SSH entrant, choisissez AWS SSM directement ou utilisez une ProxyCommand SSM dans l'alias SSH.
Prérequis sur le hub :
ssh-agent la détenant (BatchMode ne demandera pas d'invite)kirocrew installé et une passerelle en cours d'exécution sur le port loopback de l'instance EC2| Besoin | État | Comment |
|---|---|---|
| Utilisateur de connexion personnalisé | ✅ | user@host ou User dans la configuration ssh |
| FQDN / IP | ✅ | valeur directe de ssh_host |
Fichier d'identité (-i) | ⚠️ via la configuration ssh seulement | IdentityFile dans un bloc Host |
| Port SSH autre que 22 | ⚠️ via la configuration ssh seulement | Port dans un bloc Host |
| Bastion / ProxyJump | ⚠️ via la configuration ssh seulement | ProxyJump / ProxyCommand |
| Instances SSM uniquement | ⚠️ via la configuration ssh seulement | ProxyCommand avec aws ssm start-session |
Le panneau Manage vous offre les actions suivantes par instance :
Chaque route de /api/instances/* est protégée par _guard() :
request["user"] (session de tableau de bord authentifiée)instances.enabled: trueAu-delà de la protection :
ssh -N -L 127.0.0.1:<local>:127.0.0.1:<remote>ssh est toujours invoqué avec une liste argv; ssh_host ne peut pas injecter de syntaxe shell localessh_host et remote_bin sont rejetés s'ils contiennent des métacaractères shell ou commencent par -event.origin de trame intégrée par rapport à l'exact http://127.0.0.1:<port> d'un tunnel actuellement actif avant de faire confiance à un message de compte de non-lusPour instances.enabled et les autres paramètres des instances multiples, consultez Configuration.
| Symptôme | Solution |
|---|---|
/instances affiche « multi-instance management is off » | instances.enabled est à false — activez-le et redémarrez |
| L'iframe est vide | L'assouplissement de la CSP frame-src ne s'applique qu'aux ports de tunnel actifs; assurez-vous que l'instance est connectée |
| La connexion échoue avec une erreur d'authentification SSH | Actualisez vos identifiants SSH (rajoutez la clé à ssh-agent); les tunnels s'autoréparent une fois SSH rétabli |
| La connexion échoue | Utilisez Diagnose — la série de sondes signale le premier lien rompu (ssh_unreachable, remote_down ou tunnel_down) |
| L'instance se déconnecte constamment | Sonde de santé + nouvelle tentative d'autoréparation à 2 niveaux sur environ 2 min; si elle abandonne, le diagnostic s'exécute automatiquement. Vérifiez la passerelle distante et la stabilité SSH |
| Une instance a disparu silencieusement de l'ensemble actif | Évincée par LRU (ensemble actif plein). Augmentez instances.warm_set_cap ou reconnectez-vous à la demande |
Multi-instance