Toolbar

One bar. Every product.

A floating web component that embeds in every Cuitty app. See live status from all products, toggle feature flags, and trace user interactions — without switching tabs.

Click the icons below to explore panels. Toggle flags. It's all interactive.

your-app.example.com/dashboard
Requests
12.4k
P99 latency
142ms
Error rate
0.02%
Feature Flags
OnboardingEnabled
new-onboarding
Redesigned first-run experience
Disabled10%
PlatformEnabled
dark-mode
Enable dark mode across all products
Enabled80%
beta-persist-v2
Persist v2 sync engine
Enabled100%
pilot-ai-heal
AI selector healing in Pilot runs
Enabled25%
Product integrations

One bar across eight products.

The toolbar surfaces live data from every Cuitty product. Each registers a badge, panel, and event stream — so you never leave your app to check status.

Code
Badge

Open PR count · CI health status

Panel

Recent PRs, active CI runs, latest push

Persist
Badge

Sync status · connected peers

Panel

Store list, sync progress, conflict queue

Architect
Badge

Active environments · pending promotions

Panel

Env list, promote button, Terraform plan status

Observe
Badge

Events/sec throughput · error count

Panel

Live event stream, module health, dashboard links

Video
Badge

Render queue depth · active jobs

Panel

Recent renders, preview links, progress bars

Pilot
Badge

Active runs · health (passing/failing)

Panel

Active/recent runs, playbook list, review mode

Tests
Badge

Suite status (passing/failing/running)

Panel

Recent results, failing tests, Test Studio link

Toolbar
Badge

The launcher itself — always present

Panel

Home panel — actor info, project, portal links

Cross-product features

Feature flags

Toggle without deploying.

Grouped flags with rollout %, status chips, toggle/kill switches, and self-overrides. All actions gated by SpiceDB permissions.

Inspect mode

See what every element emits.

Highlight DOM elements bound to Observe events. See event type, module target, and payload shape. Click to jump to the trace.

Activity stream

Real-time events from every product.

Live event feed filtered to your project. Audit, deploy, trace, and error events from all 8 products. Each links to its full Observe trace.

Get started

Embed in 60 seconds.

One script tag, one Astro integration, one React component, or one Vite plugin. Pick your stack.

<!-- Drop this into any HTML page -->
<script
  src="https://cdn.cuitty.com/toolbar.js"
  data-cuitty-toolbar
  data-portal-url="https://your-cuitty.example.com"
  data-project-id="my-project"
></script>
Reference

Configuration.

Attribute Type Default Description
portal-url * string Required. Base URL of your Cuitty portal.
project-id * string Required. Project identifier.
position "bottom-center" | "bottom-left" | "bottom-right" "bottom-center" Where the launcher pill appears.
tenant-id string Tenant/org identifier for multi-tenant setups.
environment string Environment label (production, staging, dev).
actor-token string Bearer token for authenticated sessions.
enabled boolean true Set to false to render the element but not mount.
host-app string Name of the host application (shown in Home panel).
Extend

Build your own toolbar app.

Every icon in the launcher is a toolbar app registered via a typed manifest. Define an app, serve a badge endpoint, render a panel, and gate it with SpiceDB permissions.

1. Define the manifest
import { defineToolbarApp } from "@cuitty/toolbar-module-sdk";

export const myApp = defineToolbarApp({
  id: "my-module",
  name: "My Module",
  category: "custom",
  icon: { type: "lucide", name: "Box" },
  surfaces: { launcher: true, panel: true },
  entrypoint: {
    type: "iframe",
    url: "/api/my-module/toolbar-panel",
  },
  badge: {
    endpoint: "/api/my-module/toolbar-badge",
    refreshIntervalMs: 30_000,
  },
});
2. Serve a badge
// GET /api/my-module/toolbar-badge
export function handler(req: Request) {
  const count = getActiveItemCount();
  return Response.json({
    severity: count > 0 ? "info" : undefined,
    count: count > 0 ? count : undefined,
    tooltip: `${count} active items`,
  });
}
3. Render a panel
import { ToolbarPanelBridge }
  from "@cuitty/toolbar-module-sdk";

const bridge = new ToolbarPanelBridge();

// Resize the panel
bridge.resize({ height: 400 });

// Navigate the host app
bridge.navigate("/dashboard/my-module");

// Proxy API through the toolbar transport
const data = await bridge.request(
  "GET", "/api/my-module/items"
);
4. Gate with permissions
import { requireToolbarPermission }
  from "@cuitty/toolbar-module-sdk";

// In your panel's request handler:
export function panelHandler(req: Request) {
  const envelope = getToolbarEnvelope(req);

  // Throws 403 if actor lacks permission
  requireToolbarPermission(
    envelope,
    "my-module:read"
  );

  return renderPanel(envelope);
}

Permissions are enforced by SpiceDB. The toolbar disables buttons and shows a tooltip when the actor lacks access.

Capabilities

What's in the box.

Product badges

Live status from Code, Persist, Observe, Video, Pilot, and Tests. Active runs, build health, sync status, and test results at a glance.

Feature flag panel

Toggle flags, view rollout percentages, and kill-switch experiments without leaving the app you're working in.

Event analytics

Every toolbar interaction emits structured events. Correlate toolbar usage with product events for full traceability.

Custom panels

Modules register toolbar apps via a manifest. Badge endpoint for the icon, panel URL for the flyout. Build your own.

Start embedding the toolbar.

One script tag. Live product status, feature flags, inspect mode, and a real-time event stream — without leaving your app.