
Open source van Pineflight
Secret Desk
Een lokaal portaal voor alle GitHub Actions-secrets en -variabelen van je repositories: het toont wat wanneer verloopt, geeft nieuwe tokens uit bij de providers, laat elke nieuwe waarde door een mens controleren en bevestigen en schrijft die pas dan rechtstreeks naar GitHub. Waarden worden nooit opgeslagen.

In één oogopslag
- 01
Eén plek voor alle secrets en variabelen
Alle GitHub Actions-secrets en -variabelen van alle repositories in één overzicht, met fase, status, vervaldatum en eigenaar.
- 02
Uitgeven en vernieuwen bij de provider
Voor Stripe, Cloudflare, Supabase, Grafana en meer maakt het portaal nieuwe tokens aan bij de provider, controleert ze automatisch en schrijft ze na jouw bevestiging naar GitHub. Waarden worden nooit opgeslagen.
- 03
Identiteitscontroles in het portaal
Vraagt een provider tijdens een run om een bevestigingscode of wachtwoord, dan beantwoord je dat in het portaal in plaats van naar het browservenster te wisselen.
- 04
Fasen vergelijken
Eén matrix over alle repositories toont wat in dev, staging en production ontbreekt, te veel is of afwijkt.
- 05
Integratie-API met OpenAPI
Een OpenAPI 3.1-beschrijving voor tools als Jira, Confluence en Azure DevOps, gekoppeld via een job in je eigen netwerk. Ze lezen metadata en vragen vernieuwingen aan, maar zien nooit een waarde.
- 06Nieuw
Kant-en-klare ontwikkelomgeving
Per repository een .env.local uit een sjabloon, met lokale adressen, testsleutels en vers gegenereerde lokale secrets.
Lokale ontwikkeling
Een kant-en-klare .env.local voor elke repository
Nieuwe computer, nieuw teamlid, nieuwe repository: in plaats van waarden uit chats en oude bestanden bij elkaar te zoeken, maakt Secret Desk het ontwikkelbestand aan uit een sjabloon van het team. Eén klik in het portaal of één commando, en de lokale omgeving start.
- Lokale adressen
- Het sjabloon vult localhost-adressen in, bijvoorbeeld voor de website en de lokale Supabase-stack.
- Testsleutels, geen live-sleutels
- Persoonlijke ontwikkeltokens, zoals een sleutel uit de Stripe-sandbox, vraagt het portaal bij het aanmaken.
- Lokale secrets vers gegenereerd
- Willekeurige waarden ontstaan bij de export en worden nergens opgeslagen.
- Staging en live blijven waar ze zijn
- Secretwaarden bestaan alleen voor ontwikkelfasen. Secrets uit staging of productie komen nooit op een laptop.
- Veilig weggezet
- Het bestand wordt met modus 600 geschreven. Het portaal toont alleen namen en waarschuwt als Git het bestand niet negeert.
NEXT_PUBLIC_SITE_URL=http://localhost:3000# standaardNEXT_PUBLIC_SUPABASE_URL=http://127.0.0.1:54321# standaardSTRIPE_SECRET_KEY=rk_test_••••••••# testsleutelRATE_LIMIT_SECRET=3f9a••••••••c41e# lokaal gegenereerd
Hoe het werkt
- 01
Elk project verzamelt tokens, API-sleutels en webhook-secrets, en elk daarvan verloopt ooit. Secret Desk toont ze met eigenaar, fase en vervaldatum, zodat niets onopgemerkt verloopt op een vrijdagavond.
- 02
Moet er iets vernieuwd worden, dan maakt het portaal de nieuwe waarde bij de provider aan: via de API of, waar die ontbreekt, doordat een zichtbare Chrome het formulier doorloopt terwijl jij zelf inlogt. Daarna controleert het de nieuwe waarde: werkt ze, kloppen de rechten, wanneer verloopt ze, zijn de doelen bereikbaar. Een controlerapport met bewijsafbeelding gaat naar een mens, die bevestigt of afwijst.
- 03
Pas na die bevestiging wordt de waarde versleuteld in GitHub-secrets en -variabelen geschreven en de oude ingetrokken. Afwijzen verwijdert de nieuwe waarde bij de provider weer. Een waarde staat hooguit 15 minuten in het geheugen en wordt nooit opgeslagen.
- 04
Eromheen: vrij te definiëren fases, een vergelijkingsmatrix voor secrets en variabelen over fases en repositories, een dev-.env-export met modus 600, een teambestand zonder waarden en een optionele versleutelde kluis voor integratietokens waarvan de sleutel in de sleutelhanger van het besturingssysteem staat. In plaats van een token te plakken kun je naar een omgevingsvariabele of een 1Password-verwijzing verwijzen.
Wat Secret Desk doet
Zien wat wanneer verloopt
Elk secret en elke variabele staat per fase en status in een overzicht, met eigenaar, beschrijving en links. Een token verloopt niet meer ongemerkt op vrijdagavond.
De volledige lijst van items, in de demo 8 secrets en 4 variabelen. Bovenaan filters voor soort, repository, fase, status, aanbieder en ontbrekende parameters, plus groeperen en sorteren. Elke rij in de tabel toont de naam met beschrijving en tags, de doelwaarde of vervaldatum, de doelen in GitHub en de status: “OK”, “Verlopen” (het Cloudflare-token, al drie dagen), “Vervaldatum onduidelijk” of “Niet vergeleken”. Rechts heeft elke rij actiepictogrammen. Een klik opent de detailweergave.

Nieuwe tokens via API's
Heeft een aanbieder een API, dan geeft het portaal de nieuwe waarde zelf uit. Geen handmatig kopiëren en plakken meer.
De pagina “Integraties” toont waarmee het portaal mag werken. Onder de kop staat dat inloggegevens in het geheugen blijven of, als je dat wilt, versleuteld in de lokale kluis. De aanbieders zijn per categorie gegroepeerd: code en CI (GitHub), hosting en edge (Cloudflare), database (Supabase), betalingen (Stripe), e-mail (Resend). Elke kaart toont de status “Verbonden”, een korte beschrijving en, waar van toepassing, hoe lang het opgeslagen secret geldig is. Rechtsboven staat “Integratie toevoegen”, naast “Alles uitklappen”.

Controleren, bevestigen, dan schrijven
De nieuwe waarde wordt gecontroleerd en samengevat in een controlerapport. Een mens bevestigt elk punt. Pas daarna wordt ze naar GitHub geschreven.
Het controlescherm voor een net gegenereerde waarde. Links het bewijsblad: secret, fase, aanbieder, doelrepository en een vingerafdruk waarmee je de waarde later kunt vergelijken zonder hem te onthullen. Daaronder de automatische controles, elk met “OK”, zoals een plausibele lengte en “doel bereikbaar met schrijfrechten”. Rechts een checklist die een mens zelf afvinkt (dezelfde waarde in alle doelen, alle gebruikers na het schrijven opnieuw uitgerold), een notitieveld en twee knoppen: “Bevestigen en naar GitHub schrijven” wordt pas actief als alles is afgevinkt, “Afwijzen en nieuwe waarde verwijderen” ruimt bij de aanbieder op. Een teller rechtsboven toont hoe lang de waarde nog in het geheugen blijft (hier 14:52).

Waarden worden nooit opgeslagen
Een waarde blijft hooguit 15 minuten in het geheugen en wordt op precies twee plaatsen doorgegeven: de API van de aanbieder en, versleuteld, GitHub.
Meer weergaven
Detailweergave van één secret met geschiedenis en doelen
De pagina van één secret, hier het verlopen Cloudflare-token. Bovenaan de status en drie vervolgstappen: “Nieuwe waarde genereren” (automatisch via de API van de aanbieder), “Waarde plakken” en “Alleen plan tonen”. Daaronder kaarten met de beschrijving, de verantwoordelijke en een link naar het dashboard van de aanbieder, de parameters, de feiten (dienst, aanbieder, vervaldatum, laatst vernieuwd, laatst bevestigd) en de doelen in GitHub. Helemaal onderaan de geschiedenis van alle controles.

Vergelijken: live matrix van namen tegen fases
De vergelijkingsmatrix. Bovenaan kies je de fasen die worden vergeleken (hier production en staging) en kun je faseteksten zoals STAGING of PRODUCTION uit namen halen, zodat bijbehorende rijen samenvallen. Daaronder een kaart per fase met de tellers verwacht, aanwezig, ontbreekt, onverwacht en fouten (staging: 7 verwacht, 5 aanwezig, 1 ontbreekt). De knop “Alles naar GitHub schrijven” vult hiaten aan. Verderop een tabel per repository: rijen zijn namen, kolommen zijn fasen, elke cel toont “OK” of “Fout”.

Variabelen: verwachte waarde tegenover GitHub
Dezelfde lijst, gefilterd op variabelen. Anders dan secrets hebben variabelen een doelwaarde die het portaal bewaart en met GitHub vergelijkt. De demo toont vier items, bijvoorbeeld een project-ID met de waarde proj_demo_123 en twee stagingadressen van websites. De kolom “Status” laat zien of de waarde al met GitHub is vergeleken; elke rij heeft actiepictogrammen om te vergelijken, te uploaden, te downloaden en te verwijderen.

Providerkeuze met logo's, per categorie
Het dialoogvenster “Integratie toevoegen”, verder naar beneden gescrold. Elke aanbieder heeft een eigen kaart met logo, korte beschrijving en status (“Verbonden” of “Niet ingesteld”). De categorieën zijn observability (Grafana Cloud), AI (Anthropic, OpenAI), data-API's (VesselAPI), print en fulfilment (Peecho) en overig (een met de hand toegevoegde voorbeeldaanbieder). Helemaal onderaan opent “Eigen aanbieder toevoegen” een formulier voor diensten die nog ontbreken.

Instellingen: vrij te configureren fases
De instellingen, hier het tabblad “Fasen” (ernaast “Beleid & agents”, “Opslag & automatisering”, “Taal” en “Ontwikkelaar”). Fasen kun je vrij benoemen; hun gedrag hangt af van de soort: lokaal (dev), test (sandbox), live (productie) of gedeeld. De tabel toont per fase de gekoppelde GitHub-omgeving, hoeveel secrets en variabelen erop staan, en pijlen om te herordenen, een potlood en een prullenbak. Nieuwe fasen maak je met “Fase toevoegen”.

Repositories: mappen op deze computer koppelen
Alle repositories uit de inventaris en uit GitHub in één tabel, met het aantal secrets en variabelen per repository. De kolom “Gekoppelde map” toont welke map op deze computer erbij hoort (in de demo nog geen, dus “Niet gekoppeld”); “Koppelen” legt de koppeling vast en “.env exporteren” maakt het ontwikkelbestand van die repository. Bovenaan vindt “Lokaal zoeken” mappen automatisch en leest “Vergelijken met GitHub” de repositories opnieuw in.

Gekoppelde integraties
Waarmee Secret Desk nu communiceert. Sommige eindpunten zijn tegen de echte diensten gecontroleerd, andere tot nu toe alleen tegen mocks: de documentatie noemt de stand per provider.
Via API
Het portaal maakt deze waarden zelf aan, controleert en trekt ze in, met een token dat je eenmalig koppelt.
Schrijft secrets, variabelen en environment-secrets versleuteld. Leest welke namen bestaan.
API-tokens, Access-servicetokens en R2-inloggegevens.
Site keys en secrets voor botbescherming.
API-sleutels, de service-role-sleutel en het databasewachtwoord.
Webhook-secrets, per account en in test- of livemodus.
API-sleutels voor het versturen van e-mail.
Serviceaccounttokens en access-policytokens.
Serviceaccountsleutels per project, via een beheerderssleutel van de organisatie.
Leest project- en app-ID's voor variabelebronnen.
Lokaal gegenereerd
Willekeurige waarden (hex, base64, UUID) en VAPID-sleutelparen voor webpush.
Via browser
Voor providers zonder sleutel-API doorloopt een zichtbare Chrome het formulier volgens een YAML-recept. Inloggen, 2FA en CAPTCHA blijven bij jou.
Fine-grained personal access tokens.
Access tokens.
Beperkte sleutels voor één account en modus.
API-sleutels en de beheerderssleutel van de organisatie.
API-sleutels per workspace en de optionele beheerderssleutel.
Access policies met token.
API-sleutels.
Geheime API-sleutels met één toegangsniveau per onderdeel.
Leest merchantsleutel en secret, maakt niets aan.
Voor AI-agents
Een MCP-server met 24 tools, een skill en een HTTP-agent-API met OpenAPI-beschrijving. Agents onderhouden metadata, vragen de status op en vragen vernieuwingen aan. Ze zien nooit een waarde en bevestigen nooit.
Volledige lijst en stand
De kerngegevens
- Licentie
- MIT, vrij te gebruiken en aan te passen
- Werking
- Lokaal op de eigen computer, niets draait in de cloud van een ander
- Systemen
- macOS, Linux en Windows
- Interface
- Duits en Engels
- Lokale omgeving
- Het portaal maakt de .env.local per repository aan uit een sjabloon: lokale adressen, testsleutels en lokaal gegenereerde secrets, modus 600. Secrets uit staging of productie worden nooit geëxporteerd.
- Team
- De configuratie staat in een teambestand zonder waarden. Deel het, zodat iedereen in het team dezelfde inrichting gebruikt.
- AI-agents
- Een MCP-server, een skill en een HTTP-API koppelen AI-agents sneller. Ze zien nooit een waarde.
Eerlijke stand
Secret Desk is een vroege versie (0.1.0). Meerdere aanbiederskoppelingen zijn tot nu toe alleen tegen nabootsingen getest, en de praktijktests vonden plaats op macOS. De projectpagina op GitHub noemt de beperkingen precies.
Zelf proberen
De broncode, de documentatie en een demo zonder accounts staan op GitHub.
Secret Desk op GitHub