Plugins Overview
Junior’s extension model is simple: keep runtime wiring stable, and add behavior through plugin manifests plus skills. You can do this locally in your app or ship plugins as npm packages.
What plugins provide
Section titled “What plugins provide”A plugin bundles two things:
- A manifest (
plugin.yaml) that declares optional capabilities, optional config keys, and optional credential behavior. - Skills (
SKILL.md) that consume those capabilities at runtime.
This keeps provider-specific behavior out of core runtime files.
Local plugins in app/plugins
Section titled “Local plugins in app/plugins”For app-specific workflows, define plugins directly in your app:
app/plugins/<plugin-name>/├── plugin.yaml└── skills/ └── <skill-name>/ └── SKILL.mdUse this path when you want fast iteration inside a single app without publishing packages.
npm-distributed plugins
Section titled “npm-distributed plugins”For reuse across apps or teams, package plugin manifests + skills as npm packages and install them next to @sentry/junior.
pnpm add @sentry/junior @sentry/junior-github @sentry/junior-sentryThen register those package names in withJunior(...) so build-time tracing and runtime discovery use the same explicit package list:
import { withJunior } from "@sentry/junior/config";
export default withJunior({ pluginPackages: ["@sentry/junior-github", "@sentry/junior-sentry"]});If you publish your own package, include plugin.yaml and skills in package files so runtime discovery works.
Local skills and plugin skills
Section titled “Local skills and plugin skills”Junior discovers both:
- App-local skills in
app/skills/<skill-name>/SKILL.md - Plugin-provided skills under each plugin’s
skills/root
Both follow the same SKILL.md contract, capability checks, and validation behavior.
Validate extensions
Section titled “Validate extensions”pnpm skills:check