Ballmac UI home

Permission Grid

New

A grid of everything an agent could do, each row set to Allow, Ask or Deny with native radios, risk written out, a warning when a high-risk action is allowed, grouped rows and one-click presets.

v1.0.0Updated Oct 24, 2026Ships with a test
What changed

What the agent may do

3 allowed, 3 ask first, 0 denied

What the agent may do
PermissionAllowAskDeny
Files
Read filesLow riskOpen any file in the project
Edit filesMedium riskChange or create files in the project
Delete filesHigh riskRemove files and folders
Commands
Run shell commandsHigh riskAnything you could type in a terminal
Run the test suiteLow riskOnly the commands in package.json
Network
Browse the webMedium riskFetch pages to read

Installation

$ pnpm dlx shadcn@latest add @ballmac/permission-grid

Usage

import { PermissionGrid } from "@/components/ballmac/permission-grid"

The full example is in the Code tab above.

Examples

With an Autonomy Dial

How much can the agent do on its own?

Ask first. Does the work after you approve each step.

Does on its own

  • Reads files and searches
  • Prepares edits and commands

Stops to ask about

  • Before each edit
  • Before each command
  • Before using the network

What the agent may do

0 allowed, 3 ask first, 0 denied

What the agent may do
PermissionAllowAskDeny
Edit filesMedium risk
Run shell commandsHigh risk
Browse the webMedium risk

API reference

PropTypeDefault
permissions*

The things the agent could do.

Permission[]—
value

The decision for each id. Controlled.

Record<string, Decision>—
defaultValue

The starting decisions for uncontrolled use. Ids it leaves out start on Ask.

Record<string, Decision>—
onValueChange

Called with the full set of decisions after any change.

(value: Record<string, Decision>) => void—
presets

One-click settings that fill the grid.

PermissionPreset[]—
title

Heading.

string—

Also accepts the standard attributes of its root element.

Accessibility

KeyAction
TabOne stop per row: the chosen answer, or the first if none is
ArrowRight / ArrowLeft / ArrowDown / ArrowUpMoves between Allow, Ask and Deny in the row (native radios)
Screen readersA real table; each radio is named 'Run shell commands: Allow'; the counts are a polite live region
Risk and decisionsWritten as words and icons; colour only reinforces them

Use with AI

permissions is [{ id, label, description?, risk?: low | medium | high, group? }]; value / defaultValue / onValueChange hold { [id]: 'allow' | 'ask' | 'deny' } (missing ids mean ask). presets is [{ id, label, values }] and fills the grid in one click. With the shadcn MCP server set up (guide), ask your agent:

Add the Ballmac UI Permission Grid (@ballmac/permission-grid) to this project with the shadcn MCP, then use it where it fits.

Use it for

  • Letting people decide which tools an agent may use without asking
  • A permissions page for an assistant or a bot

Not for

  • One overall level of freedom; use autonomy-dial
  • A single approval in the moment; use approval-card
  • User roles in a workspace; use the access review block

Registry JSON: https://ui.ballmac.com/r/permission-grid.json

Credits

Free to use in personal and commercial projects.

Ballmac UI Pro

Need the whole screen, not one piece?

150 premium blocks (dashboards, settings, calendars, mail, shops, onboarding), a private shadcn registry and Figma tokens. Blocks that show data come with loading, empty and error states built in.

Not ready? Try three Pro blocks free

Leave your email and the blocks appear right here, ready to copy. Yours to use in any project.