Skip to main content

Enterprise: CRUD Dashboard

Problem Statement​

Enterprise CRUD dashboards are the backbone of internal tools — managing users, products, configurations, and records. Agents need to perform create, read, update, and delete operations across diverse entity types with role-based access.

Why Human-Only Semantics Fail​

  • CRUD tables use DataGrid components with inline editing
  • Column sorting, filtering, and pagination are interactive but undeclared
  • "Edit" and "Delete" buttons on each row don't declare the entity or record ID
  • Bulk operations (select all + delete) have no declared safety boundaries

Why Scraping Fails Here​

  • DataGrid components virtualize rows (only visible rows are in the DOM)
  • Inline edit mode changes the DOM structure dynamically
  • Pagination may use cursor-based pagination with no page count
  • Role-based visibility hides columns/buttons that aren't in the DOM at all

How AXAG Eliminates Scraping​

Each CRUD operation is annotated with entity type, parameters, risk level, and role requirements. Agents use the generated tools without parsing table DOM.

Annotated UI Examples​

<!-- List / Read -->
<button
axag-intent="entity.list"
axag-entity="user"
axag-action-type="read"
axag-required-parameters='[]'
axag-optional-parameters='["page","page_size","sort_by","sort_order","filters"]'
axag-scope="tenant"
axag-risk-level="none"
axag-idempotent="true"
axag-description="List users with optional filtering and pagination"
>View Users</button>

<!-- Create -->
<button
axag-intent="entity.create"
axag-entity="user"
axag-action-type="write"
axag-required-parameters='["email","role"]'
axag-optional-parameters='["first_name","last_name","department","phone"]'
axag-preconditions='["caller must have user_admin role"]'
axag-postconditions='["user created","welcome email sent"]'
axag-risk-level="medium"
axag-idempotent="false"
axag-scope="tenant"
axag-description="Create a new user in the system"
>Add User</button>

<!-- Update -->
<button
axag-intent="entity.update"
axag-entity="user"
axag-action-type="write"
axag-required-parameters='["user_id"]'
axag-optional-parameters='["email","role","first_name","last_name","department","status"]'
axag-preconditions='["caller must have user_admin role","user must exist"]'
axag-risk-level="medium"
axag-idempotent="true"
axag-scope="tenant"
axag-description="Update an existing user record"
>Edit User</button>

<!-- Delete -->
<button
axag-intent="entity.delete"
axag-entity="user"
axag-action-type="delete"
axag-required-parameters='["user_id"]'
axag-preconditions='["caller must have user_admin role","user must not have active sessions"]'
axag-postconditions='["user deactivated","sessions invalidated"]'
axag-risk-level="high"
axag-confirmation-required="true"
axag-idempotent="true"
axag-scope="tenant"
axag-description="Delete (deactivate) a user from the system"
>Delete User</button>

Generated Tool Examples​

[
{
"name": "user_list",
"description": "List users with optional filtering and pagination",
"input_schema": {
"type": "object",
"properties": {
"page": { "type": "integer", "minimum": 1 },
"page_size": { "type": "integer", "minimum": 1, "maximum": 100 },
"sort_by": { "type": "string" },
"sort_order": { "type": "string", "enum": ["asc", "desc"] },
"filters": { "type": "object" }
},
"required": []
},
"metadata": {
"action_type": "read",
"risk_level": "none",
"idempotent": true,
"confirmation_required": false,
"approval_required": false,
"source_intent": "user.list",
"source_entity": "user"
}
},
{
"name": "user_create",
"description": "Create a new user in the system",
"input_schema": {
"type": "object",
"properties": {
"email": { "type": "string", "format": "email" },
"role": { "type": "string", "enum": ["viewer", "editor", "admin"] },
"first_name": { "type": "string" },
"last_name": { "type": "string" }
},
"required": ["email", "role"]
},
"metadata": {
"action_type": "read",
"risk_level": "medium",
"idempotent": false,
"confirmation_required": false,
"approval_required": false,
"source_intent": "user.create",
"source_entity": "user"
}
},
{
"name": "user_delete",
"description": "Delete (deactivate) a user from the system",
"input_schema": {
"type": "object",
"properties": { "user_id": { "type": "string" } },
"required": ["user_id"]
},
"metadata": {
"action_type": "read",
"risk_level": "high",
"idempotent": true,
"confirmation_required": true,
"approval_required": false,
"source_intent": "user.delete",
"source_entity": "user"
}
}
]

Constraints & Safety Notes​

  • All operations scoped to tenant — no cross-tenant access
  • Delete is "soft delete" (deactivation), hence idempotent
  • Create requires user_admin role
  • Delete requires confirmation and invalidates active sessions
  • List supports flexible filtering via a generic filters object