
Open source par Pineflight
Secret Desk
Un portail local pour tous les secrets et variables GitHub Actions de vos dépôts : il montre ce qui expire et quand, émet de nouveaux jetons chez les fournisseurs, fait relire et confirmer chaque nouvelle valeur par un humain, puis seulement l'écrit directement dans GitHub. Les valeurs ne sont jamais stockées.

En bref
- 01
Un seul endroit pour tous les secrets et variables
Tous les secrets et variables GitHub Actions de tous les dépôts dans une vue, avec étape, statut, date d'expiration et responsable.
- 02
Émettre et renouveler chez le fournisseur
Pour Stripe, Cloudflare, Supabase, Grafana et d'autres, le portail crée de nouveaux jetons chez le fournisseur, les vérifie automatiquement et les écrit dans GitHub après votre confirmation. Les valeurs ne sont jamais stockées.
- 03
Vérifications d'identité dans le portail
Si un fournisseur demande un code de confirmation ou un mot de passe pendant une exécution, vous répondez dans le portail au lieu de passer à la fenêtre du navigateur.
- 04
Comparer les étapes
Une matrice sur tous les dépôts montre ce qui manque, est en trop ou diffère entre dev, staging et production.
- 05
API d'intégration avec OpenAPI
Une description OpenAPI 3.1 pour des outils comme Jira, Confluence et Azure DevOps, reliés par une tâche dans votre propre réseau. Ils lisent les métadonnées et demandent des renouvellements, mais ne voient jamais une valeur.
- 06Nouveau
Environnement de développement prêt
Un .env.local par dépôt à partir d'un modèle, avec des adresses locales, des clés de test et des secrets locaux fraîchement générés.
Développement local
Un .env.local prêt pour chaque dépôt
Nouvelle machine, nouveau membre de l'équipe, nouveau dépôt : au lieu de rassembler des valeurs dans des discussions et de vieux fichiers, Secret Desk génère le fichier de développement à partir d'un modèle de l'équipe. Un clic dans le portail ou une commande, et l'environnement local démarre.
- Adresses locales
- Le modèle renseigne des adresses localhost, par exemple pour le site web et la pile Supabase locale.
- Clés de test, pas de clés live
- Les jetons de développement personnels, comme une clé du bac à sable Stripe, sont demandés lors de la génération.
- Secrets locaux fraîchement générés
- Les valeurs aléatoires sont créées à l'export et stockées nulle part.
- Staging et live restent où ils sont
- Les valeurs secrètes n'existent que pour les étapes de développement. Les secrets de staging ou de production n'arrivent jamais sur un ordinateur portable.
- Rangé en sécurité
- Le fichier est écrit avec le mode 600. Le portail n'affiche que les noms et avertit si Git n'ignore pas le fichier.
NEXT_PUBLIC_SITE_URL=http://localhost:3000# par défautNEXT_PUBLIC_SUPABASE_URL=http://127.0.0.1:54321# par défautSTRIPE_SECRET_KEY=rk_test_••••••••# clé de testRATE_LIMIT_SECRET=3f9a••••••••c41e# généré localement
Comment ça marche
- 01
Chaque projet accumule des jetons, des clés d'API et des secrets de webhook, et chacun finit par expirer. Secret Desk les liste avec responsable, étape et date d'expiration, pour que rien n'expire sans que personne s'en aperçoive un vendredi soir.
- 02
Quand un élément doit être renouvelé, le portail crée la nouvelle valeur chez le fournisseur : via son API ou, quand il n'y en a pas, en faisant parcourir le formulaire par un Chrome visible pendant que vous vous connectez vous-même. Il vérifie ensuite la nouvelle valeur : fonctionne-t-elle, les droits sont-ils corrects, quand expire-t-elle, les cibles sont-elles joignables. Un rapport de contrôle avec une image de preuve est remis à une personne, qui confirme ou rejette.
- 03
Ce n'est qu'après cette confirmation que la valeur est écrite, chiffrée, dans les secrets et variables GitHub, et que l'ancienne est révoquée. Un rejet supprime à nouveau la nouvelle valeur chez le fournisseur. Une valeur reste en mémoire 15 minutes au plus et n'est jamais stockée.
- 04
Autour de ce cœur : des étapes librement définies, une matrice de comparaison des secrets et variables entre étapes et dépôts, un export .env de développement en mode 600, un fichier d'équipe sans valeurs et un coffre chiffré facultatif pour les jetons d'intégration, dont la clé se trouve dans le trousseau du système. Au lieu de coller un jeton, on peut indiquer une variable d'environnement ou une référence 1Password.
Ce que fait Secret Desk
Voir ce qui expire et quand
Chaque secret et chaque variable apparaît par étape et par statut, avec responsable, description et liens. Un token n'expire plus inaperçu un vendredi soir.
La liste complète des entrées, dans la démo 8 secrets et 4 variables. En haut, des filtres par type, dépôt, stade, statut, fournisseur et paramètres manquants, ainsi que le regroupement et le tri. Chaque ligne du tableau montre le nom avec description et étiquettes, la valeur cible ou l'expiration, les cibles dans GitHub et le statut : « OK », « Expiré » (le jeton Cloudflare, depuis trois jours), « Expiration incertaine » ou « Non comparé ». Chaque ligne a des icônes d'action à droite. Un clic mène à la vue détaillée.

Nouveaux tokens via API
Quand un fournisseur propose une API, le portail émet lui-même la nouvelle valeur. Plus de copier-coller manuel.
La page « Intégrations » montre avec quoi le portail a le droit de travailler. Une note sous le titre précise que les identifiants restent en mémoire ou, si vous le souhaitez, chiffrés dans le coffre local. Les fournisseurs sont regroupés par catégorie : code et CI (GitHub), hébergement et edge (Cloudflare), base de données (Supabase), paiements (Stripe), e-mail (Resend). Chaque carte indique le statut « Connecté », une courte description et, le cas échéant, la durée de validité du secret enregistré. « Ajouter une intégration » se trouve en haut à droite, à côté de « Tout déplier ».

Relire, confirmer, puis écrire
La nouvelle valeur est vérifiée et résumée dans un rapport de relecture. Un humain confirme chaque point. Ensuite seulement, elle est écrite dans GitHub.
L'écran de relecture d'une valeur qui vient d'être générée. À gauche, la fiche de preuve : secret, stade, fournisseur, dépôt cible et une empreinte qui permet de comparer plus tard sans révéler la valeur. Dessous, les contrôles automatiques, chacun marqué « OK », par exemple une longueur plausible et « cible joignable avec droit d'écriture ». À droite, une liste de contrôle qu'une personne coche elle-même (même valeur dans toutes les cibles, tous les consommateurs redéployés après l'écriture), un champ de note et deux boutons : « Confirmer et écrire dans GitHub » ne s'active qu'une fois tout coché, « Refuser et supprimer la nouvelle valeur » nettoie chez le fournisseur. Un compte à rebours en haut à droite indique combien de temps la valeur reste en mémoire (14:52 ici).

Les valeurs ne sont jamais stockées
Une valeur reste en mémoire 15 minutes au plus et n'est transmise qu'à deux endroits : l'API du fournisseur et, chiffrée, GitHub.
Autres vues
Vue détaillée d'un secret avec historique et cibles
La page d'un secret, ici le jeton Cloudflare expiré. En haut, le statut et trois suites possibles : « Générer une nouvelle valeur » (automatiquement via l'API du fournisseur), « Coller une valeur » et « Afficher le plan seulement ». Dessous, des cartes avec la description, le responsable et un lien vers le tableau de bord du fournisseur, les paramètres, les faits (service, fournisseur, date d'expiration, dernier renouvellement, dernière confirmation) et les cibles dans GitHub. Tout en bas, l'historique de toutes les relectures.

Comparaison : matrice en direct des noms par étape
La matrice de comparaison. En haut, on choisit les stades à comparer (ici production et staging) et on peut retirer des noms les mots de stade comme STAGING ou PRODUCTION pour fusionner les lignes qui vont ensemble. Dessous, une carte par stade avec les compteurs attendu, présent, manquant, inattendu et erreurs (staging : 7 attendus, 5 présents, 1 manquant). Le bouton « Tout écrire dans GitHub » comble les lacunes. Plus bas, un tableau par dépôt : les lignes sont des noms, les colonnes des stades, chaque cellule affiche « OK » ou « Erreur ».

Variables : valeur attendue face à GitHub
La même liste, filtrée sur les variables. Contrairement aux secrets, les variables ont une valeur cible que le portail conserve et compare à GitHub. La démo montre quatre entrées, par exemple un identifiant de projet de valeur proj_demo_123 et deux adresses de site de staging. La colonne « Statut » indique si la valeur a déjà été comparée à GitHub ; chaque ligne a des icônes pour comparer, envoyer, télécharger et supprimer.

Choix du fournisseur avec logos, par catégorie
La fenêtre « Ajouter une intégration », défilée plus bas. Chaque fournisseur a sa carte avec logo, courte description et statut (« Connecté » ou « Non configuré »). Les catégories visibles sont observabilité (Grafana Cloud), IA (Anthropic, OpenAI), API de données (VesselAPI), impression et expédition (Peecho) et autres (un fournisseur d'exemple ajouté à la main). Tout en bas, « Ajouter votre propre fournisseur » ouvre un formulaire pour les services qui manquent encore.

Paramètres : étapes librement configurables
Les réglages, ici l'onglet « Stades » (à côté : « Politique et agents », « Stockage et automatisation », « Langue » et « Développeur »). Les stades se nomment librement ; leur comportement dépend de leur type : local (dev), test (sandbox), réel (production) ou partagé. Le tableau indique pour chaque stade l'environnement GitHub associé, le nombre de secrets et de variables, ainsi que des flèches pour réordonner, un crayon et une corbeille. « Ajouter un stade » en crée un nouveau.

Dépôts : relier des dossiers de cet ordinateur
Tous les dépôts de l'inventaire et de GitHub dans un tableau, avec le nombre de secrets et de variables par dépôt. La colonne « Dossier lié » indique quel dossier de cet ordinateur correspond (aucun dans la démo, d'où « Non lié ») ; « Lier » crée l'association et « Exporter .env » génère le fichier de développement du dépôt. En haut, « Chercher en local » trouve les dossiers automatiquement et « Comparer avec GitHub » relit les dépôts.

Intégrations connectées
Ce avec quoi Secret Desk dialogue aujourd'hui. Certains points d'accès sont vérifiés sur les services réels, d'autres jusqu'ici seulement face à des simulations : la documentation indique l'état par fournisseur.
Par API
Le portail crée, vérifie et révoque lui-même ces valeurs, avec un jeton que vous connectez une fois.
Écrit secrets, variables et secrets d'environnement, chiffrés. Lit quels noms existent.
Jetons d'API, jetons de service Access et identifiants R2.
Clés de site et secrets pour la protection anti-bots.
Clés d'API, clé service role et mot de passe de la base de données.
Secrets de webhook, par compte et en mode test ou live.
Clés d'API pour l'envoi d'e-mails.
Jetons de compte de service et jetons de politique d'accès.
Clés de compte de service par projet, via une clé d'administration de l'organisation.
Lit les identifiants de projet et d'application pour les sources de variables.
Générés localement
Valeurs aléatoires (hex, base64, UUID) et paires de clés VAPID pour le push web.
Par navigateur
Pour les fournisseurs sans API de clés, un Chrome visible parcourt le formulaire d'après une recette YAML. Connexion, 2FA et CAPTCHA restent à votre charge.
Jetons d'accès personnels à granularité fine.
Jetons d'accès.
Clés restreintes pour un compte et un mode.
Clés d'API et clé d'administration de l'organisation.
Clés d'API par espace de travail et clé d'administration facultative.
Politiques d'accès avec jeton.
Clés d'API.
Clés d'API secrètes avec un niveau d'accès par section.
Lit la clé marchand et le secret, ne crée rien.
Pour les agents IA
Un serveur MCP de 24 outils, une skill et une API HTTP pour agents avec description OpenAPI. Les agents tiennent à jour les métadonnées, consultent l'état et demandent des renouvellements. Ils ne voient jamais une valeur et ne confirment jamais.
Liste complète et état
L'essentiel
- Licence
- MIT, libre d'utilisation et de modification
- Exécution
- En local sur votre machine, rien ne tourne dans le cloud d'un tiers
- Systèmes
- macOS, Linux et Windows
- Interface
- Allemand et anglais
- Environnement local
- Le portail génère le .env.local par dépôt à partir d'un modèle : adresses locales, clés de test et secrets générés localement, mode 600. Les secrets de staging ou de production ne sont jamais exportés.
- Équipe
- La configuration tient dans un fichier d'équipe sans valeurs. Il se partage pour que toute l'équipe ait la même configuration.
- Agents IA
- Un serveur MCP, un skill et une API HTTP connectent plus vite les agents IA. Ils ne voient jamais une valeur.
État réel
Secret Desk est une version précoce (0.1.0). Plusieurs points d'accès de fournisseurs n'ont été testés que face à des simulations, et les essais en conditions réelles ont eu lieu sur macOS. La page du projet sur GitHub détaille les limites.
À essayer soi-même
Le code source, la documentation et une démo sans compte sont sur GitHub.
Secret Desk sur GitHub