Plugins
Plugins add provider manifests, credentials, tools, runtime hooks, background work, and optional skills. A manifest is a file that describes a plugin. A runtime hook lets the plugin run code in the Junior app. Use a packaged plugin when one exists. Build a custom plugin only when the app needs a new provider or fixed behavior that code must control.
Choose a plugin
Section titled “Choose a plugin”| Plugin | Use it for |
|---|---|
| Agent Browser | Browser automation |
| Amplitude | Product analytics queries |
| Cloudflare | Cloudflare resources and APIs |
| Datadog | Logs, metrics, and incidents |
| Figma | Figma frames and design details (read-only) |
| TTS | Gemini narration through Vercel AI Gateway |
| GitHub | Repository, issue, and pull-request workflows |
| Hex | Hex projects and runs |
| Linear | Issues, projects, and issue webhooks |
| Maintenance | Repository maintenance workflows |
| Memory | Long-term scoped memory |
| Notion | Notion content |
| PagerDuty | On-call, schedules, and incidents (read-only) |
| Restream | Live stream events, chat, and recordings |
| Sentry | Sentry issues, telemetry, and issue webhooks |
| Vercel | Vercel projects and deployments |
| X | Public X posts and accounts (read-only) |
Install packaged plugins
Section titled “Install packaged plugins”Install only the packages the app needs:
pnpm add @sentry/junior @sentry/junior-github @sentry/junior-sentryCreate one plugin set for local development and production builds:
import { defineJuniorPlugins } from "@sentry/junior";import { githubPlugin } from "@sentry/junior-github";import { sentryPlugin } from "@sentry/junior-sentry";
export const plugins = defineJuniorPlugins([ githubPlugin({ botNameEnv: "GITHUB_APP_BOT_NAME", botEmailEnv: "GITHUB_APP_BOT_EMAIL", }), sentryPlugin(),]);Point Nitro at the plugin module:
import { defineConfig } from "nitro";import { juniorNitro } from "@sentry/junior/nitro";
export default defineConfig({ preset: "vercel", modules: [juniorNitro({ plugins: "./plugins" })], routes: { "/**": { handler: "./server.ts" }, },});Pass the same set to the app:
import { createApp } from "@sentry/junior";import { plugins } from "./plugins.ts";
export default await createApp({ plugins });You can register a manifest-only plugin by package name. Plugins with runtime hooks export a JavaScript function. Each provider page lists the required setup and environment variables.
Add an app-local plugin
Section titled “Add an app-local plugin”App-local declarative plugins live under the app content root:
app/plugins/<plugin-name>/├── plugin.yaml└── skills/ └── <skill-name>/ └── SKILL.mdUse this layout for app-specific provider settings or work that does not need server hooks. Runtime hooks and host tools require a code plugin. Follow Build a Plugin.
Validate
Section titled “Validate”Run validation before deploy:
pnpm exec junior checkThe deploy build prepares sandbox dependencies with junior snapshot create. Its build log lists the dependencies of each plugin.
Next step
Section titled “Next step”Open the provider page for credential setup, or follow Build a Plugin for a custom integration.