
Latchkey
- 121 repo stars
- Updated August 5, 2026
- imbue-ai/latchkey
Wraps curl to auto-inject credentials for third-party and self-hosted services, with optional browser login to extract API tokens.
About
Latchkey is a CLI that transparently injects stored or browser-captured credentials into curl calls to services like Slack, GitHub, Google, and Dropbox. A developer uses it to have an agent make authenticated HTTP API requests on the user's behalf.
- Transparent curl wrapper: no manual Authorization header
- Browser login pop-up extracts API credentials for supported services
Latchkey by the numbers
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/imbue-ai/latchkey --skill latchkeyAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| repo stars | ★ 121 |
|---|---|
| Last updated | August 5, 2026 |
| Repository | imbue-ai/latchkey ↗ |
What it does
Wraps curl to auto-inject credentials for third-party and self-hosted services, with optional browser login to extract API tokens.
Files
Latchkey
Instructions
Latchkey is a CLI tool that automatically injects credentials into curl commands. Credentials (mostly API tokens) can be either manually managed or, for some services, Latchkey can open a browser login pop-up window and extract API credentials from the session.
Use this skill when the user asks you to work on their behalf with services that have HTTP APIs, like AWS, GitLab, Google Drive, Discord or others.
Usage:
1. Use `latchkey curl` instead of regular curl for supported services. 2. Pass through all regular curl arguments - latchkey is a transparent wrapper. 3. Check for `latchkey services list` to get a list of supported services. Use --viable to only show the currently configured ones. 4. Use `latchkey services info <service_name>` to get information about a specific service (auth options, credentials status, API docs links, special requirements, etc.). 5. If necessary, ask the user to configure credentials first. Tell the user to run latchkey auth set on the machine where latchkey is installed (using the setCredentialsExample from the services info command). 6. Alternatively, let the user log in with the browser. If supported for the given service, run latchkey auth browser <service_name> to open a browser login pop-up window. 7. Look for the newest documentation of the desired public API online. If using the browser auth command, avoid bot-only endpoints. 8. Do not initiate a new login if the credentials status is `valid` or `unknown` - the user might just not have the necessary permissions for the action you're trying to do.
Examples
Make an authenticated curl request
latchkey curl [curl arguments]Creating a Slack channel
latchkey curl -X POST 'https://slack.com/api/conversations.create' \
-H 'Content-Type: application/json' \
-d '{"name":"my-channel"}'(Notice that -H 'Authorization: Bearer is not present in the invocation.)
Getting Discord user info
latchkey curl 'https://discord.com/api/v10/users/@me'Detect expired credentials and force a new login to Discord
latchkey services info discord # Check the "credentialStatus" field - shows "invalid"
latchkey auth browser discord
latchkey curl 'https://discord.com/api/v10/users/@me'Only do this when you notice that your previous call ended up not being authenticated (HTTP 401 or 403).
List usable services
latchkey services list --viableLists services that either have stored credentials or can be authenticated via a browser.
Get service-specific info
latchkey services info slackReturns auth options, credentials status, and developer notes about the service. If browser is not present in the authOptions field, the service requires the user to directly set API credentials via latchkey auth set or latchkey auth set-nocurl before making requests.
Storing credentials
Aside from the latchkey auth browser case, it is the user's responsibility to supply credentials. The user would typically do something like this:
latchkey auth set my-gitlab-instance -H "PRIVATE-TOKEN: <token>"When credentials cannot be expressed as static curl arguments, the user would use the set-nocurl subcommand. For example:
latchkey auth set-nocurl aws <access-key-id> <secret-access-key>If a service doesn't appear with the --viable flag, it may still be supported; the user just hasn't provided the credentials yet. latchkey service info <service_name> can be used to see how to provide credentials for a specific service.
Notes
- All curl arguments are passed through unchanged
- Return code, stdout and stderr are passed back from curl
- Credentials are always stored encrypted and are never transmitted anywhere beyond the endpoints specified by the actual curl calls.
Currently supported services
Latchkey currently offers varying levels of support for the following services: AWS, Calendly, Coolify, Discord, Dropbox, Figma, GitHub, GitLab, Gmail, Google Analytics, Google Calendar, Google Docs, Google Drive, Google Sheets, Linear, Mailchimp, Notion, Sentry, Slack, Stripe, Telegram, Umami, Yelp, Zoom, and more.
User-registered services
Note for humans: users can also add limited support for new services at runtime using the latchkey services register command.