Lists executions and opens one to show its event log and steps side by side, or its session and subagent tree. Creates a new execution against any registered agent, or cancels a running one.
Agents
Lists registered agents, registers a new one, deletes one, and edits its policy bundle.
Approvals
Lists approvals still pending, soonest timeout first, and grants or denies each one.
Metrics
Kernel counters and latency quantiles: executions, steps, dispatch outcomes, policy decisions, replay hits, and queue depth.
View tree on an execution shows the session it
belongs to: each turn in order, the subagents it
started beneath it, and any session that branched from it.
The browser never calls the kernel. Every request goes to the dashboard’s own
/api/v0/* route, which forwards it to REBUNO_URL. Without
sign-in, it attaches Authorization: Bearer $REBUNO_API_KEY. No
token ever reaches the browser.
Without sign-in, anyone who can reach the dashboard gets the access of
REBUNO_API_KEY. Turn on sign-in or put the dashboard behind your own
authentication before exposing it.
Set OIDC_ISSUER and the dashboard signs users in with your identity provider
and calls the kernel as each of them. Register the dashboard as a web
application with the redirect URI <DASHBOARD_URL>/auth/callback and the
post-logout redirect URI <DASHBOARD_URL>/:
The dashboard forwards the user’s ID token, so set the kernel’s
REBUNO_OIDC_AUDIENCE to the dashboard’s client ID. See
OIDC. Executions the user creates record them in
created_by, their approvals record them in decided_by, and
access roles limit what they see. REBUNO_API_KEY is
not sent with their requests. With OIDC_FORWARD_TOKEN=access, the dashboard
forwards the access token instead, for providers that issue JWT access tokens
with an audience the kernel accepts.Tokens are kept in an encrypted, httpOnly cookie and refreshed before they
expire when the provider issues a refresh token. Without one, the user signs in
again when the token expires. Every replica needs the same SESSION_SECRET.
The kernel reads the user’s groups from the token, so add the scope your
provider needs to include them, such as groups for Okta.
Set PROMETHEUS_URL and the metrics page queries Prometheus over a time range
you pick on the page.With it unset the page scrapes the kernel’s /metrics endpoint instead. Those
are one process’s in-memory counters. They are cumulative since that replica
started, so no time range applies. Across replicas you see whichever one
answered. The page labels which source it used. With sign-in, every signed-in
user sees metrics for the whole deployment. Point a real Prometheus at the
kernel for anything beyond local development.
The image is built from
deploy/Dockerfile
and published to ghcr.io/rebuno/dashboard on tagged releases. It serves a
standalone Next.js build on port 3000:
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Rebuno Docs","description":"Durable execution and guardrails for AI agents.","colors":{"primary":"#0697F3","light":"#0697F3","dark":"#0478C3"},"logo":{"light":"https://mintcdn.com/rebuno/Z8GWgKsJvy2PvAQ0/assets/brand/rebuno.svg?fit=max\u0026auto=format\u0026n=Z8GWgKsJvy2PvAQ0\u0026q=85\u0026s=7c800c4672a9a7178851ccd6bdbc0213","dark":"https://mintcdn.com/rebuno/Z8GWgKsJvy2PvAQ0/assets/brand/rebuno.svg?fit=max\u0026auto=format\u0026n=Z8GWgKsJvy2PvAQ0\u0026q=85\u0026s=7c800c4672a9a7178851ccd6bdbc0213","href":"/"},"favicon":"https://mintcdn.com/rebuno/M_Ix11nP8vJu1bGW/assets/brand/icon.svg?fit=max\u0026auto=format\u0026n=M_Ix11nP8vJu1bGW\u0026q=85\u0026s=948870c01fb05ee24f7133f45d909e36","appearance":{"default":"dark"},"background":{"color":{"light":"#FFFFFF","dark":"#080B12"}},"navbar":{"primary":{"type":"github","href":"https://github.com/rebuno/rebuno"}},"footer":{"socials":{"github":"https://github.com/rebuno/rebuno","x":"https://x.com/rebunoio"}},"search":{"prompt":"Search the Rebuno docs"},"fonts":{"family":"Geist"},"styling":{"codeblocks":{"theme":{"light":"min-light","dark":"material-theme-ocean"}},"latex":false},"contextual":{"options":["copy","view","claude","chatgpt"],"display":"header"},"thumbnails":{"appearance":"dark"},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"rebuno","hasAudioNarration":false,"actualSubdomain":"rebuno","customDomains":["docs.rebuno.io"],"gitSource":{"type":"github","owner":"rebuno","repo":"rebuno","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6adba99791ee35f095fb51e1","collectionId":"5b0170a8-a661-4987-a8a5-9434afe57c94","liveDeploymentHistoryId":"6adba99791ee35f095fb51e1","schemaVersion":"v3"},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"DISABLED"}},"buildId":"6adba99791ee35f095fb51e1","clientVersion":"0.0.3965","searchFilterCounts":[{"language":"default","tag":"Documentation","count":19},{"language":"default","tag":"Python SDK","count":15},{"language":"default","tag":"TypeScript SDK","count":15},{"language":"default","tag":"Get started","count":10},{"language":"default","tag":"Nu","count":10},{"language":"default","tag":"Writing agents","count":10},{"language":"default","tag":"Frameworks","count":10},{"language":"default","tag":"Concepts","count":8},{"language":"default","tag":"Uber","count":8},{"language":"default","tag":"Configure","count":7}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":"/* cyrillic-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrodmgPn.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrMdmgPn.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* symbols2 */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFg08vz7ehw.woff2) format('woff2');\n unicode-range: U+2000-2001, U+2004-2008, U+200A, U+23B8-23BD, U+2500-259F;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrgdmgPn.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrkdmgPn.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrcdmg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrodmgPn.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrMdmgPn.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* symbols2 */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFg08vz7ehw.woff2) format('woff2');\n unicode-range: U+2000-2001, U+2004-2008, U+200A, U+23B8-23BD, U+2500-259F;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrgdmgPn.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrkdmgPn.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrcdmg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\ncode,kbd,pre{font-family:\"Geist Mono\",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}img[src$=\"/assets/brand/nu.svg\"]{object-position:-9999px 0;background-color:currentColor!important;mask:url(/assets/brand/nu.svg) center/contain no-repeat}"}],"page":{"pagePath":"dashboard","slug":"/dashboard","pageMetadata":{"title":"Dashboard","description":"Web UI for executions, steps, events, and agent activity","href":"/dashboard"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Web UI for executions, steps, events, and agent activity\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{CodeBlock,Heading,OptimizedImage,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`The dashboard is a Next.js app that reads and drives a running kernel over the\n`,_jsx(_components.a,{href:`/api`,children:`HTTP API`}),`. It lives in its own repository,\n`,_jsx(_components.a,{href:`https://github.com/rebuno/dashboard`,children:`rebuno/dashboard`}),`.`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/rebuno/6tj2Zw5O85esU7Cl/assets/execution.gif?s=3c8e497857cc78477fe6dac31b902c98`,\"data-og-width\":`1600`,width:`1600`,\"data-og-height\":`1000`,height:`1000`,\"data-path\":`assets/execution.gif`,\"data-optimize\":`true`,\"data-opv\":`3`}),`\n`,_jsx(Heading,{level:`2`,id:`pages`,children:`Pages`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Page`}),_jsx(_components.th,{children:`What it does`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Executions`}),_jsx(_components.td,{children:`Lists executions and opens one to show its event log and steps side by side, or its session and subagent tree. Creates a new execution against any registered agent, or cancels a running one.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Agents`}),_jsx(_components.td,{children:`Lists registered agents, registers a new one, deletes one, and edits its policy bundle.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Approvals`}),_jsx(_components.td,{children:`Lists approvals still pending, soonest timeout first, and grants or denies each one.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Metrics`}),_jsx(_components.td,{children:`Kernel counters and latency quantiles: executions, steps, dispatch outcomes, policy decisions, replay hits, and queue depth.`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`sessions-and-subagent-trees`,children:`Sessions and subagent trees`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`View tree`}),` on an execution shows the `,_jsx(_components.a,{href:`/architecture#sessions`,children:`session`}),` it\nbelongs to: each turn in order, the `,_jsx(_components.a,{href:`/architecture#subagents`,children:`subagents`}),` it\nstarted beneath it, and any session that branched from it.`]}),`\n`,_jsx(Heading,{level:`2`,id:`reaching-the-kernel`,children:`Reaching the kernel`}),`\n`,_jsxs(_components.p,{children:[`The browser never calls the kernel. Every request goes to the dashboard’s own\n`,_jsx(_components.code,{children:`/api/v0/*`}),` route, which forwards it to `,_jsx(_components.code,{children:`REBUNO_URL`}),`. Without\n`,_jsx(_components.a,{href:`#sign-in`,children:`sign-in`}),`, it attaches `,_jsx(_components.code,{children:`Authorization: Bearer $REBUNO_API_KEY`}),`. No\ntoken ever reaches the browser.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Without sign-in, anyone who can reach the dashboard gets the access of\n`,_jsx(_components.code,{children:`REBUNO_API_KEY`}),`. Turn on sign-in or put the dashboard behind your own\nauthentication before exposing it.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`sign-in`,children:`Sign-in`}),`\n`,_jsxs(_components.p,{children:[`Set `,_jsx(_components.code,{children:`OIDC_ISSUER`}),` and the dashboard signs users in with your identity provider\nand calls the kernel as each of them. Register the dashboard as a web\napplication with the redirect URI `,_jsx(_components.code,{children:`\u003cDASHBOARD_URL>/auth/callback`}),` and the\npost-logout redirect URI `,_jsx(_components.code,{children:`\u003cDASHBOARD_URL>/`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes min-light material-theme-ocean`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0F111A`,color:`#24292eff`,\"--shiki-dark\":`#babed8`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292EFF`,\"--shiki-dark\":`#BABED8`},children:`OIDC_ISSUER`}),_jsx(_components.span,{style:{color:`#D32F2F`,\"--shiki-dark\":`#89DDFF`},children:`=`}),_jsx(_components.span,{style:{color:`#2B5581`,\"--shiki-dark\":`#C3E88D`},children:`https://corp.okta.com/oauth2/default`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292EFF`,\"--shiki-dark\":`#BABED8`},children:`OIDC_CLIENT_ID`}),_jsx(_components.span,{style:{color:`#D32F2F`,\"--shiki-dark\":`#89DDFF`},children:`=`}),_jsx(_components.span,{style:{color:`#2B5581`,\"--shiki-dark\":`#C3E88D`},children:`0oa1rebunodashboard`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292EFF`,\"--shiki-dark\":`#BABED8`},children:`OIDC_CLIENT_SECRET`}),_jsx(_components.span,{style:{color:`#D32F2F`,\"--shiki-dark\":`#89DDFF`},children:`=`}),_jsx(_components.span,{style:{color:`#2B5581`,\"--shiki-dark\":`#C3E88D`},children:`…`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292EFF`,\"--shiki-dark\":`#BABED8`},children:`DASHBOARD_URL`}),_jsx(_components.span,{style:{color:`#D32F2F`,\"--shiki-dark\":`#89DDFF`},children:`=`}),_jsx(_components.span,{style:{color:`#2B5581`,\"--shiki-dark\":`#C3E88D`},children:`https://rebuno.corp.com`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292EFF`,\"--shiki-dark\":`#BABED8`},children:`SESSION_SECRET`}),_jsx(_components.span,{style:{color:`#D32F2F`,\"--shiki-dark\":`#89DDFF`},children:`=`}),_jsx(_components.span,{style:{color:`#24292EFF`,\"--shiki-dark\":`#89DDFF`},children:`$(`}),_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#FFCB6B`},children:`openssl`}),_jsx(_components.span,{style:{color:`#2B5581`,\"--shiki-dark\":`#C3E88D`},children:` rand`}),_jsx(_components.span,{style:{color:`#2B5581`,\"--shiki-dark\":`#C3E88D`},children:` -base64`}),_jsx(_components.span,{style:{color:`#1976D2`,\"--shiki-dark\":`#F78C6C`},children:` 32`}),_jsx(_components.span,{style:{color:`#24292EFF`,\"--shiki-dark\":`#89DDFF`},children:`)`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`The dashboard forwards the user’s ID token, so set the kernel’s\n`,_jsx(_components.code,{children:`REBUNO_OIDC_AUDIENCE`}),` to the dashboard’s client ID. See\n`,_jsx(_components.a,{href:`/deployment#oidc`,children:`OIDC`}),`. Executions the user creates record them in\n`,_jsx(_components.code,{children:`created_by`}),`, their approvals record them in `,_jsx(_components.code,{children:`decided_by`}),`, and\n`,_jsx(_components.a,{href:`/deployment#access`,children:`access roles`}),` limit what they see. `,_jsx(_components.code,{children:`REBUNO_API_KEY`}),` is\nnot sent with their requests. With `,_jsx(_components.code,{children:`OIDC_FORWARD_TOKEN=access`}),`, the dashboard\nforwards the access token instead, for providers that issue JWT access tokens\nwith an audience the kernel accepts.`]}),`\n`,_jsxs(_components.p,{children:[`Tokens are kept in an encrypted, httpOnly cookie and refreshed before they\nexpire when the provider issues a refresh token. Without one, the user signs in\nagain when the token expires. Every replica needs the same `,_jsx(_components.code,{children:`SESSION_SECRET`}),`.\nThe kernel reads the user’s groups from the token, so add the scope your\nprovider needs to include them, such as `,_jsx(_components.code,{children:`groups`}),` for Okta.`]}),`\n`,_jsx(Heading,{level:`2`,id:`metrics`,children:`Metrics`}),`\n`,_jsxs(_components.p,{children:[`Set `,_jsx(_components.code,{children:`PROMETHEUS_URL`}),` and the metrics page queries Prometheus over a time range\nyou pick on the page.`]}),`\n`,_jsxs(_components.p,{children:[`With it unset the page scrapes the kernel’s `,_jsx(_components.code,{children:`/metrics`}),` endpoint instead. Those\nare one process’s in-memory counters. They are cumulative since that replica\nstarted, so no time range applies. Across replicas you see whichever one\nanswered. The page labels which source it used. With sign-in, every signed-in\nuser sees metrics for the whole deployment. Point a real Prometheus at the\nkernel for anything beyond local development.`]}),`\n`,_jsx(Heading,{level:`2`,id:`configuration`,children:`Configuration`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Variable`}),_jsx(_components.th,{children:`Default`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`REBUNO_URL`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`http://localhost:8080`})}),_jsx(_components.td,{children:`Kernel base URL.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`REBUNO_API_KEY`})}),_jsx(_components.td,{children:`none`}),_jsxs(_components.td,{children:[`Bearer token for the kernel’s client and admin routes without sign-in. Required against a kernel started with `,_jsx(_components.code,{children:`rebuno server`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`OIDC_ISSUER`})}),_jsx(_components.td,{children:`none`}),_jsxs(_components.td,{children:[`Identity provider issuer URL. Turns on `,_jsx(_components.a,{href:`#sign-in`,children:`sign-in`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`OIDC_CLIENT_ID`})}),_jsx(_components.td,{children:`none`}),_jsxs(_components.td,{children:[`The dashboard’s client ID. `,_jsx(_components.strong,{children:`Required`}),` with `,_jsx(_components.code,{children:`OIDC_ISSUER`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`OIDC_CLIENT_SECRET`})}),_jsx(_components.td,{children:`none`}),_jsx(_components.td,{children:`Client secret. Omit for a public client.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`OIDC_SCOPES`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`openid email profile offline_access`})}),_jsx(_components.td,{children:`Scopes requested at sign-in.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`OIDC_FORWARD_TOKEN`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`id`})}),_jsxs(_components.td,{children:[`Token forwarded to the kernel: `,_jsx(_components.code,{children:`id`}),` or `,_jsx(_components.code,{children:`access`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`DASHBOARD_URL`})}),_jsx(_components.td,{children:`none`}),_jsxs(_components.td,{children:[`The dashboard’s external URL, used for redirects. `,_jsx(_components.strong,{children:`Required`}),` with `,_jsx(_components.code,{children:`OIDC_ISSUER`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`SESSION_SECRET`})}),_jsx(_components.td,{children:`none`}),_jsxs(_components.td,{children:[`At least 32 characters; encrypts the session cookie. `,_jsx(_components.strong,{children:`Required`}),` with `,_jsx(_components.code,{children:`OIDC_ISSUER`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`PROMETHEUS_URL`})}),_jsx(_components.td,{children:`none`}),_jsx(_components.td,{children:`Prometheus base URL for the metrics page.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`PORT`})}),_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`3000`})}),_jsx(_components.td,{children:`Listen port.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`HOSTNAME`})}),_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`0.0.0.0`})}),_jsx(_components.td,{children:`Listen address.`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`running-it`,children:`Running it`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes min-light material-theme-ocean`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0F111A`,color:`#24292eff`,\"--shiki-dark\":`#babed8`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#FFCB6B`},children:`pnpm`}),_jsx(_components.span,{style:{color:`#2B5581`,\"--shiki-dark\":`#C3E88D`},children:` install`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#FFCB6B`},children:`pnpm`}),_jsx(_components.span,{style:{color:`#2B5581`,\"--shiki-dark\":`#C3E88D`},children:` dev`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Needs Node 20.9 or later and a kernel to talk to. `,_jsx(_components.code,{children:`rebuno dev`}),` is enough for\nlocal work. It runs with auth disabled, so it needs no `,_jsx(_components.code,{children:`REBUNO_API_KEY`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`docker`,children:`Docker`}),`\n`,_jsxs(_components.p,{children:[`The image is built from\n`,_jsx(_components.a,{href:`https://github.com/rebuno/dashboard/blob/main/deploy/Dockerfile`,children:_jsx(_components.code,{children:`deploy/Dockerfile`})}),`\nand published to `,_jsx(_components.code,{children:`ghcr.io/rebuno/dashboard`}),` on tagged releases. It serves a\nstandalone Next.js build on port 3000:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes min-light material-theme-ocean`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0F111A`,color:`#24292eff`,\"--shiki-dark\":`#babed8`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#FFCB6B`},children:`docker`}),_jsx(_components.span,{style:{color:`#2B5581`,\"--shiki-dark\":`#C3E88D`},children:` run`}),_jsx(_components.span,{style:{color:`#2B5581`,\"--shiki-dark\":`#C3E88D`},children:` -p`}),_jsx(_components.span,{style:{color:`#2B5581`,\"--shiki-dark\":`#C3E88D`},children:` 3000:3000`}),_jsx(_components.span,{style:{color:`#24292EFF`,\"--shiki-dark\":`#BABED8`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#2B5581`,\"--shiki-dark\":`#C3E88D`},children:` -e`}),_jsx(_components.span,{style:{color:`#2B5581`,\"--shiki-dark\":`#C3E88D`},children:` REBUNO_URL=`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#89DDFF`},children:`\"`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#C3E88D`},children:`http://kernel:8080`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#89DDFF`},children:`\"`}),_jsx(_components.span,{style:{color:`#24292EFF`,\"--shiki-dark\":`#BABED8`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#2B5581`,\"--shiki-dark\":`#C3E88D`},children:` -e`}),_jsx(_components.span,{style:{color:`#2B5581`,\"--shiki-dark\":`#C3E88D`},children:` REBUNO_API_KEY=`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#89DDFF`},children:`\"`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#BABED8`},children:`$REBUNO_BEARER_TOKEN`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#89DDFF`},children:`\"`}),_jsx(_components.span,{style:{color:`#24292EFF`,\"--shiki-dark\":`#BABED8`},children:` \\\\`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#2B5581`,\"--shiki-dark\":`#C3E88D`},children:` ghcr.io/rebuno/dashboard:latest`})}),`\n`]})})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":{"theme":{"light":"min-light","dark":"material-theme-ocean"}},"config":{},"pageMetadata":{"title":"Dashboard","description":"Web UI for executions, steps, events, and agent activity","href":"/dashboard"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Pages","slug":"pages","depth":2,"children":[]},{"title":"Sessions and subagent trees","slug":"sessions-and-subagent-trees","depth":2,"children":[]},{"title":"Reaching the kernel","slug":"reaching-the-kernel","depth":2,"children":[]},{"title":"Sign-in","slug":"sign-in","depth":2,"children":[]},{"title":"Metrics","slug":"metrics","depth":2,"children":[]},{"title":"Configuration","slug":"configuration","depth":2,"children":[]},{"title":"Running it","slug":"running-it","depth":2,"children":[]},{"title":"Docker","slug":"docker","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"rebuno","siteName":"Rebuno Docs","title":"Dashboard - Rebuno Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-15T21:37:02.724Z","originalFileLocation":"dashboard.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Web UI for executions, steps, events, and agent activity\">\u003cmeta data-mint-head name=\"application-name\" content=\"Rebuno Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/rebuno/L_j9iHhp4qWRefFX/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/rebuno/L_j9iHhp4qWRefFX/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/rebuno/L_j9iHhp4qWRefFX/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/rebuno/L_j9iHhp4qWRefFX/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/rebuno/L_j9iHhp4qWRefFX/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/rebuno/L_j9iHhp4qWRefFX/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/rebuno/L_j9iHhp4qWRefFX/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/rebuno/L_j9iHhp4qWRefFX/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/rebuno/L_j9iHhp4qWRefFX/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Dashboard - Rebuno Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Web UI for executions, steps, events, and agent activity\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Rebuno Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.rebuno.io/dashboard\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://rebuno.mintlify.app/_mintlify/api/og/v2?division=Operations\u0026amp;title=Dashboard\u0026amp;description=Web+UI+for+executions%2C+steps%2C+events%2C+and+agent+activity\u0026amp;theme=672beed185f290590c0b685e\u0026amp;signature=5ad45b6aa3eb1a58a87c6bb14ae413e2d335eaa4e037ba1b2055f5ea4e37e069\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Dashboard - Rebuno Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Web UI for executions, steps, events, and agent activity\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://rebuno.mintlify.app/_mintlify/api/og/v2?division=Operations\u0026amp;title=Dashboard\u0026amp;description=Web+UI+for+executions%2C+steps%2C+events%2C+and+agent+activity\u0026amp;theme=672beed185f290590c0b685e\u0026amp;signature=5ad45b6aa3eb1a58a87c6bb14ae413e2d335eaa4e037ba1b2055f5ea4e37e069\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/rebuno/L_j9iHhp4qWRefFX/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Rebuno Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0697F3\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.rebuno.io/dashboard\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/dashboard.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.rebuno.io/#organization\",\"name\":\"Rebuno Docs\",\"url\":\"https://docs.rebuno.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/rebuno/Z8GWgKsJvy2PvAQ0/assets/brand/rebuno.svg?fit=max\u0026auto=format\u0026n=Z8GWgKsJvy2PvAQ0\u0026q=85\u0026s=7c800c4672a9a7178851ccd6bdbc0213\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.rebuno.io#website\",\"name\":\"Rebuno Docs\",\"url\":\"https://docs.rebuno.io\",\"publisher\":{\"@id\":\"https://docs.rebuno.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.rebuno.io/dashboard#webpage\",\"url\":\"https://docs.rebuno.io/dashboard\",\"name\":\"Dashboard\",\"description\":\"Web UI for executions, steps, events, and agent activity\",\"dateModified\":\"2026-10-15T21:37:02.724Z\",\"isPartOf\":{\"@id\":\"https://docs.rebuno.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.rebuno.io/dashboard#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.rebuno.io/dashboard#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Operations\",\"item\":\"https://docs.rebuno.io/api\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dashboard\",\"item\":\"https://docs.rebuno.io/dashboard\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.rebuno.io/dashboard#article\",\"headline\":\"Dashboard\",\"name\":\"Dashboard\",\"description\":\"Web UI for executions, steps, events, and agent activity\",\"url\":\"https://docs.rebuno.io/dashboard\",\"mainEntityOfPage\":{\"@id\":\"https://docs.rebuno.io/dashboard#webpage\"},\"dateModified\":\"2026-10-15T21:37:02.724Z\",\"publisher\":{\"@id\":\"https://docs.rebuno.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.rebuno.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Rebuno Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Rebuno Docs","nav":{"global":null,"tabs":[{"tab":"Documentation","icon":"book","groups":[{"group":"Get started","icon":"rocket","expanded":true,"pages":[{"title":"Overview","sidebarTitle":"Overview","mode":"wide","href":""},{"title":"Quickstart","href":"/getting-started"}]},{"group":"Concepts","icon":"cube","pages":[{"title":"Architecture","href":"/architecture"},{"title":"Agents","href":"/agents"},{"title":"Clients","href":"/clients"},{"title":"Tools and effects","href":"/tools"},{"title":"LLM calls","href":"/llm-calls"},{"title":"Policy","href":"/policy"},{"title":"Events","href":"/events"},{"title":"Live streaming","href":"/streaming"}]},{"group":"Integrations","icon":"plug","pages":[{"group":"Sandbox","pages":[{"title":"E2B","href":"/integrations/sandbox/e2b"},{"title":"Daytona","href":"/integrations/sandbox/daytona"},{"title":"Modal","href":"/integrations/sandbox/modal"},{"title":"Vercel","href":"/integrations/sandbox/vercel"}]},{"title":"Executor","href":"/integrations/executor"}]},{"group":"Operations","icon":"server","pages":[{"title":"HTTP API","href":"/api"},{"title":"CLI","description":"The rebuno binary and its commands","href":"/cli"},{"title":"Dashboard","href":"/dashboard"},{"title":"Deployment","description":"Running the production kernel, its config, and Docker","href":"/deployment"}]}]},{"tab":"Python SDK","icon":"python","pages":[{"title":"Python SDK","href":"/sdk/python/overview"}]},{"tab":"TypeScript SDK","icon":"js","pages":[{"title":"TypeScript SDK","href":"/sdk/typescript/overview"}]},{"tab":"Uber","icon":"code","pages":[{"title":"Uber","href":"/uber/overview"}]},{"tab":"Nu","icon":"https://mintlify.s3.us-west-1.amazonaws.com/rebuno/assets/brand/nu.svg","pages":[{"title":"Nu","href":"/nu/overview"}]}]},"title":"Dashboard - Rebuno Docs","buildId":"dpl_849ArpqvBiCczQiT1Y1stNGpbqHT","deploymentId":"dpl_849ArpqvBiCczQiT1Y1stNGpbqHT","dynamics":["a74be98ba7"],"chunks":["zoom-image-lightbox-CaUwvYH3.js","lightbox-handle-r17bVUz3.js"]}