EngineCard
A selectable Card for choosing the engine that runs a task: Upmo’s built-in engine, Claude Code, Codex, OpenCode, Cursor or Pi. It also shows where the sandbox lives, what the engine may use and what it must ask for first.
When to use
Section titled “When to use”- Use it in agent settings (default engine) and on the Settings page that shows what each engine may do. An engine is the program that does the work of a task with its tools.
- On the task detail page it is read-only. There it sums up the permissions that applied.
What the consumer provides
Section titled “What the consumer provides”name(h4sizebody) and one line ofmetathat says what the engine is in plain words. Use the display names: Upmo, Claude Code, Codex, OpenCode, Cursor, Pi.runtimeas aBadge:Docker,Kubernetes,Upmo Cloud. Caps (resource limits) in tabular figures,body-smink-muted: vCPU, memory and time limit, separated by middle dots.permissions: four group rows of{ label, state }: “Change files”, “Run commands”, “Use the internet” and “Use connectors”.stateisallow|ask|block. The connectors row hasstateconnector, shown as “Per connector”, because each connector keeps its own setting. Per-tool rules exist only under “Advanced”, the same as on connectors. The full matrix lives in Settings.selected,disabled(with a reason inmeta: “Not enabled on this instance”),onSelect.
Behaviour
Section titled “Behaviour”- It extends the selectable
Card. At rest it hasborder-strong. When selected it gets anemerald-deepedge, asurface-selectedground and the caret. It usespress-scaleon press and shows the focus ring. Cards in a grid share one height. - Each permission row has a word and an icon, never colour alone. “Per connector” uses the plug icon in
ink. Allow is the caret inemerald-deep. Ask first is the clock inwarning. Block is the X inink-muted, with the label inink-mutedtoo. A legend under the grid names the three states once. - The permissions come from the allowlists and ceilings in the Go server. The card shows them and never edits them. Changing a permission is a Settings action with its own confirmation.
- A group of cards is a
radiogroup. Arrow keys move the selection and Space selects. On phones the grid is one column. The permission list stays visible there, with no accordion, because the permissions are the reason to pick one engine over another.
Tokens
Section titled “Tokens”surface-100, surface-selected, border, border-strong, emerald-deep, warning, ink, ink-muted, ink-secondary, radius-lg, press-scale, body, body-sm, caption.
Mantine
Section titled “Mantine”Radio.Group with Radio.Card (Mantine 9), styled as the selectable Card. The caret check replaces Radio.Indicator. Rows are a List spacing={4} with one ThemeIcon variant="transparent" per state. Caps use Text size="sm" c="dimmed" with style={{ fontVariantNumeric: 'tabular-nums' }}.