boothub is a renderer. Given a URL like boothub.dev/USERNAME[/PRESET], it fetches github.com/USERNAME/boothub-profile/MANIFEST.md, applies the preset filter, resolves from: references to GitHub raw URLs, and returns the result as text/markdown. It never executes shell commands, never writes files, never holds credentials.
An agent honoring boothub's trust model must:
files bundles → show paths to be written and either inline content or fetch-target URLs.mcp bundles → show the command, args, and any env vars or secrets.hooks bundles → show event, matcher, and the literal command (post-template substitution).~/.claude/.Two paths:
env_required:Lists env var names the bundle needs. The agent prompts the user to set them; nothing is fetched or written.
secrets:Map of env var name → age-encrypted blob. Agent looks for the user's age key at ~/.config/boothub/age.key; if found, decrypts and prompts before writing the resulting value anywhere. If not found, falls back to the env_required path.
Encrypted secrets in a public profile only make sense for the profile owner re-bootstrapping their own machines. Anyone else fetching the profile sees opaque blobs and gets the manual-env fallback.
Bundles can declare template_vars: [HOME, PROJECT_ROOT]. Only those vars are substituted in commands and paths. There is no general expression evaluation. The substitution table is the agent's local environment, not anything the manifest provides.
The /api/swarm/... endpoints are authenticated. Notes are stored in DynamoDB. Scopes are owned by their first writer. Notes can be redacted by their owner. boothub does not read note bodies for any purpose other than serving them back to authorized callers.
A profile you fetch can:
rm -rfs their home directory.command.from: that, when fetched, returns gigabytes.Mitigations: agents must always show the literal command before approval. URLs in from: are bounded to raw.githubusercontent.com/<owner>/boothub-profile/<ref>/ by boothub's renderer.
Found a profile that abuses the trust model? Open an issue at github.com/jhammant/boothub. We can flag profiles in our reverse proxy if needed.