Une fois votre application fonctionnelle en local, publiez-la dans le registre de l'App Store pour que les autres utilisateurs de Crew puissent l'installer en un clic. Cette page couvre le flux de travail de bout en bout.
Créez un répertoire d'application avec un app.json à la racine. Consultez :
app.jsonVérifiez que le manifeste est valide :
kirocrew doctor # or: curl http://localhost:5476/api/apps/my-app/manifest | python3 -m json.tool
# Build UI if you have one cd my-app/ui && npm install && npm run build && cd .. # Install via REST API curl -X POST http://localhost:5476/api/apps/install \ -H 'Content-Type: application/json' \ -d '{"source": "./my-app"}' # Enable it curl -X POST http://localhost:5476/api/apps/my-app/enable
Ou utilisez l'interface de l'App Store dans le tableau de bord pour installer depuis un chemin local.
kirocrew token → ouvrez l'URL)# Check the app is registered curl http://localhost:5476/api/apps | python3 -m json.tool # Check the manifest is valid curl http://localhost:5476/api/apps/my-app/manifest | python3 -m json.tool # Tail gateway logs kirocrew logs -f
# Edit code vim ui/src/App.tsx # Rebuild UI cd ui && npm run build && cd .. # Update the installed app curl -X POST http://localhost:5476/api/apps/my-app/update
Pour une itération plus rapide, utilisez kirocrew app dev my-app — la passerelle recharge l'application à chaud à chaque changement de fichier.
Avant de soumettre au registre :
app.json passe la validationname est en kebab-case, unique globalement, descriptifversion suit le semver (1.0.0)displayName et description sont clairs et concisauthor est définitags facilitent la découvertepermissions sont minimales — ne déclarez que ce que vous utilisez réellementui/dist/index.mjs)SKILL.md des Skills ont un frontmatter appropriéREADME.md explique ce que fait l'application et comment l'utilisersetup.onInstall, testez-le sur une machine propreLorsque Crew installe ou met à jour votre application, il copie l'arborescence source dans ~/.kiro/crew/apps/{name}/ avec deux mesures de protection :
node_modules, .git, __pycache__, .venv (à toute profondeur) sont retirés de la copie installée.Servez votre interface utilisateur depuis le paquet committé ui/dist/. Rien dont votre application a besoin à l'exécution ne doit se trouver sous ces noms exclus.
Votre application devrait vivre dans son propre dépôt git (ou un sous-répertoire d'un dépôt existant) :
MyAppRepo/ ├── app.json ├── agents/ ├── skills/ ├── ui/ │ ├── src/ │ └── dist/index.mjs ← committed build artifact ├── scripts/ │ └── install.sh ← optional; invoked by setup.onInstall in app.json └── README.md
Icône de l'application :
assets/icon/logo.png)Captures d'écran :
Images héros (16:9 recommandé, 1200×675) :
heroImage — thème clairheroImageDark — thème sombreheroImageDetail / heroImageDetailDark — bannière de la page de détail (25:6, 1200×288)L'App Store diffuse les icônes et les images via un proxy de blob git — aucun CDN ni hébergement externe n'est nécessaire.
Le registre de l'App Store est src/kiro_crew/apps/app-registry.json dans le dépôt Crew. Ajouter votre application signifie ouvrir une pull request.
[ { "name": "my-app", "gitUrl": "https://github.com/yourname/my-app", "branch": "main" } ]
Si votre application se trouve dans un sous-répertoire d'un dépôt plus grand :
{ "name": "my-app", "gitUrl": "https://github.com/yourname/monorepo", "branch": "main", "subdirectory": "apps/my-app" }
| Champ | Requis | Description |
|---|---|---|
name | Oui | Doit correspondre au name dans votre app.json |
gitUrl | Oui | Toute URL clonable par git (https://…, git@…) |
branch | Oui | Branche à cloner (habituellement main) |
subdirectory | Non | Chemin dans le dépôt si app.json n'est pas à la racine |
resources | Non | "gateway" (par défaut) ou "app" — voir ci-dessous |
lifecycle | Non | "gateway" (par défaut), "app", ou "locked" |
detectInstalled | Non | Commande shell qui se termine avec le code 0 si l'application est déjà installée (pour les applications autogérées) |
Le champ repo est le raccourci historique pour gitUrl et est toujours accepté.
L'entrée du registre est intentionnellement minimale — votre app.json est la source unique de vérité. Toutes les informations d'affichage (description, captures d'écran, points forts, tags, version) sont récupérées depuis votre dépôt. Vous n'avez pas à synchroniser les métadonnées entre votre dépôt et le registre.
cd /path/to/Crew git checkout -b add-my-app # Edit src/kiro_crew/apps/app-registry.json git add src/kiro_crew/apps/app-registry.json git commit -m "feat(apps): add my-app to registry" git push origin add-my-app # Open a PR titled "Add my-app to App Store registry"
app.json est valide et completLes équipes peuvent héberger leurs propres registres d'applications sans nécessiter de révision par l'équipe Crew. Les utilisateurs y adhèrent en ajoutant des registres externes à leur configuration :
{ "registries": [ {"name": "team-a", "repo": "TeamAKirocrewAppRegistry", "branch": "main"} ] }
Le fichier d'entrée de registre à la racine du dépôt de registre reflète le format ci-dessus (un tableau d'entrées d'applications).
Modèle de confiance : l'utilisateur y adhère explicitement en ajoutant le registre à sa configuration. Le dépôt doit être accessible via git.
API de gestion (/api/apps/registries) :
| Méthode | Objectif |
|---|---|
GET /api/apps/registries | Retourne la liste actuelle des registres depuis la configuration |
PUT /api/apps/registries | Valide et remplace le tableau des registres |
Validation des entrées : les noms de dépôt et de branche sont validés par rapport à des motifs regex stricts pour rejeter la traversée de chemin. Le dépôt Crew lui-même est bloqué.
Après la fusion de votre PR :
setup.onInstall si défini~/.kiro/crew/apps/my-app/Pousser une mise à jour :
version dans app.jsonLes utilisateurs peuvent mettre à jour via l'interface de l'App Store (bouton de rafraîchissement) ou l'API REST :
curl -X POST http://localhost:5476/api/apps/my-app/update
Ceci re-clone, ré-exécute onUpdate, et ré-enregistre les ressources.
Certaines applications gèrent leur propre installation et l'enregistrement de leurs ressources. Elles s'enregistrent auprès de Crew pour la visibilité dans l'App Store, mais gèrent leur propre cycle de vie.
{ "name": "my-desktop-app", "repo": "MyDesktopApp", "branch": "mainline", "resources": "app", "lifecycle": "app", "detectInstalled": "test -d ~/Applications/MyDesktopApp.app" }
Applications autogérées :
POST /api/apps/register à l'exécutionLes applications déclarent minCrewVersion dans app.json. L'installation et la mise à jour vérifient cette valeur — si la version actuelle est trop ancienne, l'opération est rejetée avec un message d'erreur clair indiquant à l'utilisateur de mettre à jour Crew d'abord.
Les applications peuvent utiliser npm (pour TypeScript/React) ou pip (pour Python) comme système de build. L'App Store clone le dépôt et exécute la commande de build appropriée.
~/.kiro/crew/app-sources/{name}/npm install && npm run build (JS/TS) ou pip install . (Python)setup.onInstall s'exécute après le build (pour des étapes post-build comme electron-builder)Puisque l'étape de build standard gère la résolution des dépendances et la compilation, votre script onInstall ne devrait faire que de l'empaquetage post-build :
#!/usr/bin/env bash set -euo pipefail [ -d "node_modules" ] || exit 1 # sanity check — build should have run npx electron-builder --mac --dir cp -R release/mac-arm64/MyApp.app ~/Applications/MyApp.app
major.minor.patchpatch pour les corrections de boguesminor pour les nouvelles fonctionnalitésmajor pour les changements avec rupture de compatibilité (schéma de configuration d'agent, interface d'outil MCP)L'entrée du registre n'a pas de champ de version — incrémentez simplement app.json et poussez. L'App Store récupère le dernier app.json depuis votre dépôt (mis en cache 24 h, ou immédiatement lors d'un rafraîchissement par l'utilisateur).
| Étape | Commande / action |
|---|---|
| Créer | Créer un répertoire d'application avec app.json |
| Construire l'UI | cd ui && npm run build |
| Installer localement | POST /api/apps/install ou l'interface de l'App Store |
| Activer | POST /api/apps/{name}/enable |
| Tester | Ouvrir le tableau de bord, vérifier l'UI + les agents + les tâches cron |
| Soumettre | Ajouter à app-registry.json, ouvrir une PR |
| Installation utilisateur | App Store → Browse → Install |
| Mettre à jour | Incrémenter la version, pousser, les utilisateurs réinstallent |
app-store
Publication et lignes directrices