Skip to content

Existing App

Use this path when you already have a Hono or Nitro app and want Junior to own the Slack runtime routes inside it.

The safest integration is still the scaffolded shape: a dedicated server entrypoint that exports the Hono app returned by createApp(), plus juniorNitro() in Nitro config.

Create a Junior server module:

server.ts
import { initSentry } from "@sentry/junior/instrumentation";
initSentry();
import { createApp } from "@sentry/junior";
const app = await createApp();
export default app;

createApp() mounts the supported Junior routes listed in Route & Handler Surface.

Register juniorNitro() so app files and declared plugin packages are copied into the deployment bundle:

nitro.config.ts
import { defineConfig } from "nitro";
import { juniorNitro } from "@sentry/junior/nitro";
export default defineConfig({
modules: [
juniorNitro({
plugins: {
packages: ["@sentry/junior-github"],
},
}),
],
routes: {
"/**": { handler: "./server.ts" },
},
});

If your existing app already owns routes, make sure the Junior Hono app still receives the paths under /api/webhooks, /api/oauth/callback, /api/internal/turn-resume, /api/info, and /health. Do not split those routes across independent runtime instances.

Junior expects app context and local extension files under app/:

app/
├── SOUL.md
├── WORLD.md
├── DESCRIPTION.md
├── skills/
└── plugins/

Keep provider setup in plugin manifests and env vars, not in skill prose.

Run the same checks as a scaffolded app:

Terminal window
pnpm exec junior check
pnpm dev
curl http://localhost:3000/health

Then complete Slack App Setup and verify one real Slack mention.

Review Config & Environment before deploying, then follow Deploy to Vercel.