Cinatra — Application Design — Connectors

How connectors surface in the Cinatra app — the connector toolbar, the responsive card grid, and the connected / disconnected state language. Part of Cinatra Application Design; match it exactly.

Version 0.6.0

I. Connectors

Toolbar · card grid · connect state

Connect the services your agents reach. A toolbar sits below the page header — a two-state connection filter leading, then a white search field, a scope dropdown with + Connector beside it, and a sort / display button anchoring the right — over a responsive grid of connector tiles. Each tile carries only the brand logo (top-left), a status badge (top-right) and the connector name — no vendor line, no description. Badge and filter speak one status language — green when connected, red when disconnected.

Example — connectors
  • OpenAI

  • Anthropic

  • Gmail

  • GitHub

  • Twenty CRM

  • Tailscale

Example — control states
Access dropdown · open
Search…
Personal:Only me
Project:ACME Group brand refresh
Project:Cloud Platform v2 migration
Project:Cloud SOC2 readiness
Team:ACME Cloud Services - Platform Engineering
Team:ACME Robotics - Hardware Engineering
Organization:ACME Cloud Services
Organization:ACME Group
Organization:ACME Studios
Workspace:All
Workspace:Admins only
Flyout search · with text (✕ clears)
acme
Filter · Disconnected selected (red)

Cards keep the --surface ground of the current page and show each connector’s real brand logo on a white tile. The status badge is a solid chip — a white plug on --green / white unplug on --red — following the solid .pill.failed precedent. The connection filter leads the toolbar: a bordered segmented toggle whose selected segment takes the solid status colour (green Connected / red Disconnected, white icon + label) and whose idle segment shows a muted tint of its own colour — soft green / soft red — never grey. The scope dropdown is the app’s access combobox rendered exactly: a navy-bordered Search… field (an clears it once it holds text), Type: name rows grouped by kind with a hairline between groups — never between rows — and the selected scope carrying the same soft --surface-muted highlight it shows on hover, every other row white. When it is open, the toolbar trigger takes that same --surface-muted ground. The flyout is sized to its longest item, so it scrolls top-to-bottom, never sideways, and shows no scrollbar. + Connector sits right after the scope dropdown — a hairline between them — while the sort / display config button anchors the far right in the same borderless toolbar style; once the search field holds a query a small clears it. The grid scales md:2 · lg:3 · xl:4 · 2xl:5.

II. Connector setup page

Wide · single & multi-connection

One generated form per connector. A connector's setup page is rendered from its config schema — a single generic form, never per-connector layout. It sits in the Wide content width (the max-w-3xl · 768px column defined in the Application Design system, §VII Content widths) and splits into two columns: a wider left column holding the configuration fields, and a narrower right column holding the Connection status card. The page header carries the connector name and the Connector setup subtitle; the status badge that once sat top-right now lives in that card. Fields are stacked and single-column; each is optional unless the schema marks it required. Most connectors hold a single connection (below); a connector that holds many — like the A2A Server — adds a Setup · Connections tablist over the same column (see Multiple connections).

One connection

Example — connector setup page · Wide column
OpenAI
Connector setup
••••••••
Paste your OpenAI API key to connect. It is validated before it is saved. Leave blank to keep the current saved key; use Disconnect to remove it.
Scope API usage to a specific OpenAI project. Leave blank to keep the current saved value.
Scope to a specific OpenAI organization. Leave blank to keep the current saved value.
Standard
gpt-5.5
Mini and nano models are excluded. Cinatra's web scraping and data extraction requires full-size models — smaller models skip direct page visits and fall back to keyword searches, producing incomplete results.
Connection status
Connected
Example — Disconnect · enabled vs disabled
Connected
Not connected

There is nothing to disconnect until the connector is connected, so Disconnect stays disabled — greyed and non-interactive — until then. Connect is always available.

Example — connection status · Check flow
Connected
Connected
Disconnected
Disconnected
Checking (transient)
Checking…

Pressing Check replaces the current badge with the indigo Checking… badge — its icon spinning — until the probe resolves, then swaps to Connected or Disconnected. It speaks the same solid green / red status language as the connector cards and filter (§I).

Example — disconnect · confirmation
Disconnect connector?
Disconnect this connector and remove its saved configuration? It will stop working until you connect it again.

The page holds to the Wide column and never spans full width. Inputs are pure-white with the navy hairline border (design-system Rules of the road #8); selects mirror that chrome with a trailing chevron. The two actions sit side by side, never stacked — an icon-led Connect (indigo primary, the plug from the Connected badge) and Disconnect (destructive, red-on-tint, the unplug from the Disconnected badge); the actions speak the same connect / disconnect language as the status badge. Disconnect is disabled until the connector is connected — there is nothing to disconnect otherwise. Disconnecting is destructive, so it opens an AlertDialog on the --paper ground with a strong hairline header rule — a Cancel outline beside the red Disconnect confirm (same unplug icon) — never a bare browser prompt; its copy stays connector-neutral. The right Connection status card reuses the extension detail info-card chrome (--surface, hairline, its heading over a divider) and carries the status badge with both icon and label plus the Check action beneath it. Each field keeps its own helper text from the connector's schema; the form drops the connector blurb, the per-action section labels, and the connection-check helper line.

Multiple connections

A few connectors hold many connections in one extension — the A2A Server connector, for instance, holds one server per connection. These add a Setup · Connections tablist beneath the page header — underline tabs per the design system (VII of the Application Design system, Components · Tabs) — over the same Wide column. Setup adds a connection and rolls up their status; Connections lists them.

Example — multi-connection · Setup tab
A2A Server
Connect external Agent-to-Agent servers. Each server exposes one agent reachable at its well-known card URL.
http://localhost:10001
The root URL of the A2A server — no path. The agent card is fetched from /.well-known/agent.json.
Leave blank for unauthenticated servers
Connections status
2 Connected 1 Disconnected
Example — multi-connection · Connections tab
A2A Server
Connect external Agent-to-Agent servers. Each server exposes one agent reachable at its well-known card URL.
a2a-dev-localhost-10010
http://localhost:10010
Connected
a2a-dev-localhost-10002
http://localhost:10002
Connected
a2a-dev-localhost-10005
http://localhost:10005
Disconnected
Example — disconnect connection · confirmation
Disconnect connection?
Disconnect this connection? It will stop working until you connect it again.

On a multi-connection connector the Setup tab keeps the same two-column form, with four differences: the right card is Connections status (plural) carrying one count badge per status — a green 2 Connected, a red 1 Disconnected, only the statuses in play; there is no Check and, in its place, a link-style All connections that opens the Connections tab; the left form has no Disconnect (Connect adds one, and the form is never wrapped in its own card); and the form adds a connection rather than editing the one. The Connections tab stacks every connection as its own card — name, URL, the same solid status badge, and a per-row action that follows the status: Disconnect (destructive) on a connected row, Connect (primary) on a disconnected one — never a bare Remove. Disconnecting a single connection opens the same AlertDialog with connection-level copy (Disconnect connection?), generic to any connector.

Additional configuration tabs

Either shape may also carry extra configuration tabs — a connector's own settings beyond connecting. The OpenAI connector, for instance, adds a Local shell tab for its sandboxed-shell policy. Each custom tab takes the connector's own label and sits after Setup (and Connections), in the order the connector declares them. A connector with no extra tabs and one connection shows no tablist at all; the first custom tab is what introduces one. The page header and tablist stay at the Wide column, but a custom tab's content narrows to the Narrow width (max-w-xl · 576px, §VII) — a long single-column settings form reads better tighter — left-aligned beneath the tabs.

One tab label is reserved. A connector may add a Help tab carrying its own setup how-to — the prose, prerequisites and links a user needs to connect it, read-only (no form, no Save). It obeys every custom-tab frame rule — its own tab in the Wide strip, content at the Narrow width — but its position is fixed: Help always sits last, after Setup, after Connections, and after every other custom tab. A connector that only needs to explain itself may carry Help and no other tab; then Help is what introduces the tablist. Reserving the final slot keeps “how do I set this up?” in the same place on every connector.

Example — additional config tab · Narrow content under Wide chrome
OpenAI
Connector setup
When enabled, the package can prepare shell tool payloads plus the sandbox policy your production executor should apply.
30
Signals that shell_call and shell_call_output events must be preserved for auditing.
/workspace
ls

A non-Help custom tab is the one place the setup page leaves the Wide column: the header and tab strip stay Wide so the tabs sit in the same place across tabs, while the settings themselves drop to Narrow (576px), flush-left under the tablist. The tab carries the connector's own fields in a single column — switches for immediate-effect toggles (indigo when on), inputs, and add / remove list editors for path, host and prefix lists — ending in its own Save.