Use this guide to create a plugin for your own Junior repository.
A plugin adds:
- Optional capabilities (for
requires-capabilities) - Optional config keys (for
uses-config) - Optional credential broker configuration
- Optional OAuth provider configuration
- Skills under the plugin's
skills/directory
Create this directory in your app:
app/plugins/<plugin-name>/
plugin.yaml
skills/
<skill-name>/
SKILL.md
Example:
app/plugins/linear/
plugin.yaml
skills/
linear/
SKILL.md
name: linear
description: Linear helper workflowsname: linear
description: Linear issue workflows
capabilities:
- issues.read
- issues.write
config-keys:
- org
- team
credentials:
type: oauth-bearer
api-domains:
- api.linear.app
auth-token-env: LINEAR_API_TOKEN
auth-token-placeholder: host_managed_credential
oauth:
client-id-env: LINEAR_CLIENT_ID
client-secret-env: LINEAR_CLIENT_SECRET
authorize-endpoint: https://linear.app/oauth/authorize
token-endpoint: https://api.linear.app/oauth/token
scope: read,write
runtime-dependencies:
- type: npm
package: sentry
# version omitted => latest
- type: system
package: gh
- type: system
url: https://example.com/tool.rpm
sha256: 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
runtime-postinstall:
- cmd: example-cli
args: [install]namemust match^[a-z][a-z0-9-]*$capabilitiesandconfig-keysare optional; when present they use short names in YAML- Junior qualifies them automatically:
issues.readbecomes<name>.issues.readorgbecomes<name>.org
credentialsis optional; when present,credentials.typemust beoauth-bearerorgithub-appoauthrequirescredentials.type: oauth-bearer- Plugins can declare capabilities without credentials, but
jr-rpc issue-credentialwill fail with a clear no-credentials error. runtime-dependenciesis optional and supportsnpmandsysteminstallersruntime-dependencies[].versionis optional fornpm(latestwhen omitted) and must be omitted forsystemruntime-dependenciessystem entries support eitherpackage(repo package name) orurl+sha256(direct RPM install with checksum verification)runtime-postinstallis optional and runs declarative post-install commands after dependency installation and before snapshot captureplugin.yamlis required
- Sandbox OS is Amazon Linux 2023.
- System dependencies are installed with
dnf. - System package installs require root privileges; sandbox commands must set
sudo: truefor those install steps.
You can publish plugin content as an npm package and Junior will auto-detect it.
@your-scope/junior-plugin-linear/
package.json
plugin.yaml
skills/
linear/
SKILL.md
plugin.yaml must be at the package root.
- Install your plugin package:
pnpm add @your-scope/junior-plugin-linear- Deploy as normal. Junior auto-detects installed dependencies that contain:
plugin.yamlat package rootplugins/directoryskills/directory
Install multiple packages with pnpm add and Junior will discover each one automatically.
- If the plugin does not load, verify:
- The package is installed in dependencies
plugin.yamlis present at package rootnameand manifest fields pass validation- Skills are under
<package>/skills/ - Plugin folders are under
<package>/plugins/<name>/plugin.yaml