Integrations
A provider supplies the model. An integration is something Podcode does on your behalf with a service you already use — post, file, send. Different problem, so it gets its own section: Settings → Integrations.
Today the list is Bluesky and Mastodon. It's built as a registry rather than a screen per service, so adding one is a definition rather than a feature.
How one works
Everything about an integration is declared server-side — its fields, which of them are secret, where to get the credentials, what it can do, and which agents depend on it. The settings form is generated from that declaration.
To connect one: pick it from the list, fill in the fields, save. Verify does a live round trip so you find out now rather than at the moment something tries to use it.
Credentials
Two kinds of field, treated differently.
- Text fields round-trip. Your handle, your instance URL — these come back when you reopen the form.
- Secret fields are write-only. They are saved and never returned. Reopening a configured integration shows a blank secret input, and submitting it blank means "leave it alone", not "clear it". Re-enter a secret only when you're replacing it.
That asymmetry is deliberate: a secret that can be read back is a secret that leaks through any screenshot, any log line, any bug in the UI.
The credential also never leaves the server process. Actions run server-side and return their result — a script that posts on your behalf calls the action and gets back a URL, and never holds an app password at all. Nothing that can read that script's environment, arguments, or output can learn your credential.
Agents that depend on an integration
An integration can declare that agents require it. Those agents stay hidden from the picker until it is configured — both Bluesky and Mastodon are declared this way by the social agent.
That's a deliberate discovery path. An agent that isn't offered is a question you answer at setup time; an agent that is offered and then fails on a missing credential is a scheduled run that dies at 9am.