imbue-ai/latchkey
Interact with third-party or self-hosted services (Slack, Google Workspace, Dropbox, GitHub, Linear, Coolify...) using their HTTP APIs on the user's behalf.
npx skills add https://github.com/imbue-ai/latchkey --skill latchkey
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:
latchkey curl instead of regular curl for supported services.latchkey services list to get a list of supported services. Use --viable to only show the currently configured ones.latchkey services info <service_name> to get information about a specific service (auth options, credentials status, API docs links, special requirements, etc.).latchkey auth set on the machine where latchkey is installed (using the setCredentialsExample from the services info command).latchkey auth browser <service_name> to open a browser login pop-up window.browser auth command, avoid bot-only endpoints.valid or unknown - the user might just not have the necessary permissions for the action you're trying to do.latchkey curl [curl arguments]
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.)
latchkey curl 'https://discord.com/api/v10/users/@me'
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).
latchkey services list --viable
Lists services that either have stored credentials or can be authenticated via a browser.
latchkey services info slack
Returns 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.
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.
It is possible to associate credentials with a specific account:
latchkey --account [email protected] auth set ...
And then reference it in curl calls:
latchkey --account [email protected] curl ...
The --account option must go right after latchkey.
You can see the existing accounts as keys in the credential
dictionary produced by latchkey services info. An empty string
in the key means "unknown account".
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, Ramp, Sentry, Slack, Stripe, Telegram, Todoist, Umami, Yelp, Zoom, and more.
Note for humans: users can also add limited support for new services
at runtime using the latchkey services register command.
Take imbue-ai/latchkey from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.
The instructions reference npm.
Without those the skill loads but fails at the first command.