Capability
A capability is a marketing bullet point. It has no code semantics — it does not gate features, drive pricing, or imply any runtime contract. Pure UI.
Schema (agent_capabilities)
| Column | Type | Notes |
|---|---|---|
id | UUID | PK |
agentId | UUID | FK → agents |
icon | text | Lucide icon slug (e.g. shield-check) |
title | text | Short heading |
description | text | One-sentence body |
sortOrder | int | Render order, ascending |
The frontend renders capabilities in a grid on the detail page. The icon is looked up via the LucideDynamicIcon component — any Lucide icon name lowercased + kebab-cased works.
Endpoints
| Verb | Path | Guard |
|---|---|---|
| GET | /agents/:agentId/capabilities | public |
| POST | /agents/:agentId/capabilities | platform_admin |
| PATCH | /agents/:agentId/capabilities/:id | platform_admin |
| DELETE | /agents/:agentId/capabilities/:id | platform_admin |
DTO
type CapabilityDto = {
id: string;
icon: string;
title: string;
description: string;
sortOrder: number;
};
Bulk replace (via agent update)
POST /agents/:id with a capabilities[] array replaces the full set in one transaction. Useful for editing in the admin UI.
Not to be confused with
- Steps — the "how it works" section. Capabilities are what the agent does, steps are how the user uses it.
- Metric definitions — the meterable units. A capability like "Voice replies" might be backed by a metric
voice(boolean), but the capability bullet itself is pure copy.