Pineflight
Logo de Secret Desk

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.

Page d'aperçu de Secret Desk dans la démo, avec des données inventées
Aperçu dans la démo (données inventées)La page d'accueil répond à une seule question : qu'est-ce qui demande de l'attention aujourd'hui ? En haut, un bandeau (« 1 relecture vous attend, rien n'est écrit dans GitHub tant que vous n'avez pas confirmé »), puis quatre compteurs : expirés, bientôt échus, manquants et relectures ouvertes. Dessous, la liste « Demande de l'attention », filtrable par stade (dev, staging, production, shared). Dans la démo, on y voit un jeton Cloudflare à renouveler dans cinq jours et un jeton Supabase sans date d'expiration. La navigation est à gauche ; en bas, une note indique qu'un GitHub simulé tourne.Toutes les images proviennent de la démo intégrée avec des données fictives. Sous chaque image, une description de ce qu'elle montre.

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.

Nouveau

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.
.env.local
  • NEXT_PUBLIC_SITE_URL=http://localhost:3000# par défaut
  • NEXT_PUBLIC_SUPABASE_URL=http://127.0.0.1:54321# par défaut
  • STRIPE_SECRET_KEY=rk_test_••••••••# clé de test
  • RATE_LIMIT_SECRET=3f9a••••••••c41e# généré localement
Exemple de fichier généré avec des valeurs inventées

Comment ça marche

  1. 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.

  2. 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.

  3. 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.

  4. 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.

Secret Desk Entrées  dans la démo, données fictives

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 ».

Secret Desk Intégrations  dans la démo, données fictives

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).

Vue de relecture de Secret Desk dans la démo : rapport avec liste de contrôle à confirmer ou rejeter, données inventées

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.

Secret Desk Vue détaillée d'un secret avec historique et cibles dans la démo, données fictives

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 ».

Secret Desk Comparaison  dans la démo, données fictives

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.

Secret Desk Variables  dans la démo, données fictives

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.

Secret Desk Choix du fournisseur avec logos, par catégorie dans la démo, données fictives

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.

Secret Desk Paramètres  dans la démo, données fictives

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.

Secret Desk Dépôts  dans la démo, données fictives

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.

  • GitHub

    Écrit secrets, variables et secrets d'environnement, chiffrés. Lit quels noms existent.

  • Cloudflare

    Jetons d'API, jetons de service Access et identifiants R2.

  • Cloudflare Turnstile

    Clés de site et secrets pour la protection anti-bots.

  • Supabase

    Clés d'API, clé service role et mot de passe de la base de données.

  • Stripe

    Secrets de webhook, par compte et en mode test ou live.

  • Resend

    Clés d'API pour l'envoi d'e-mails.

  • Grafana Cloud

    Jetons de compte de service et jetons de politique d'accès.

  • OpenAI

    Clés de compte de service par projet, via une clé d'administration de l'organisation.

  • RevenueCat

    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.

  • GitHub

    Jetons d'accès personnels à granularité fine.

  • Supabase

    Jetons d'accès.

  • Stripe

    Clés restreintes pour un compte et un mode.

  • OpenAI

    Clés d'API et clé d'administration de l'organisation.

  • Anthropic

    Clés d'API par espace de travail et clé d'administration facultative.

  • Grafana Cloud

    Politiques d'accès avec jeton.

  • VesselAPI

    Clés d'API.

  • RevenueCat

    Clés d'API secrètes avec un niveau d'accès par section.

  • Peecho

    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