agentic-ux
Skill3 starsChanged 7 days agoMITView on GitHub
**WORKFLOW SKILL** - Fully agentic UX. A thin prompt shell renders Mantine views as declarative A2UI surfaces from tool data.
- Reads credentials
1 other project uses a version of this.
Adopted by
Most recently taken up by
- Gaurav890/everything-agentic-engineeringtheir own version, first seen Sep 13, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- Gaurav890/everything-agentic-engineering★ 1same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository6 other files it gives its agents.
- AGENTS.mdAGENTS.md
- observability-and-envSkill
- promptable-uxSkill
- reference-tech-stackSkill
- repository-architectureSkill
- tanstack-promptable-fullstack-app-templateSkill
The file
We split this skill into the rules it gives an agent
10 rules. About 0 are common, 4 are distinctive, and 6 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈4
Distinctive · estimate
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 75
Run the UX checklist before a shell change.
- Distinctive: line 76
Keep schemas, tools, and server boundaries on the architecture skill.
- Very specific: line 81
When empty, the stage is a centered hero: icon, welcome text, and starter controls that ask for inline views (Show my tasks, a status …
- Distinctive: line 95
After a view tool, write one short sentence.
- Distinctive: line 96
Do not write markdown links.
- Very specific: line 101
Do not register navigate or invalidateRouter in agentic mode.
- Very specific: line 103
Every chat() call still sets agentLoopStrategy: maxIterations(N) explicitly (default N=10).
- Very specific: line 131
View tools (
src/services/ai/<entity>Views.server.ts): Add data-only show<Entities>ViewTool and show<Entity>ViewTool calling the shared … - Very specific: line 152
No reused route-based components in AgenticShell.
- Very specific: line 174
After UX-contract changes: update this SKILL.md, run pnpm skills:check and pnpm skills:waza, and follow AGENTS.md §15 when the reference …
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Companion skills (install if missing)
This template publishes multiple skills. If only this skill is installed, add companions before related work:
tanstack-promptable-fullstack-app-template(parent) — Architecture contract: schema layers, loader-first routes, AI tools, and server boundaries. Install for every TanStack app; this skill only places the prompt and renders tool UI.npx skills add carlosvin/tanstack-fullstack-ai-template --skill tanstack-promptable-fullstack-app-templatepromptable-ux(companion) — Shared UX for the route-based concepts (hidden side or bottom panel, and prompt-first). Install when the app has domain screens instead of this tool-only shell.npx skills add carlosvin/tanstack-fullstack-ai-template --skill promptable-uxreference-tech-stack(companion) — Opinionated packages for this template, including the A2UI packages and UI kit. Install when implementing the host against demo stack defaults.npx skills add carlosvin/tanstack-fullstack-ai-template --skill reference-tech-stackobservability-and-env(companion) — Env parse, logger factories, and error-tracking bootstrap. Install when shell work also touchesshellSession, logging, orprocess.env.npx skills add carlosvin/tanstack-fullstack-ai-template --skill observability-and-env
Discover all skills: npx skills add carlosvin/tanstack-fullstack-ai-template --list
Agentic UX
Purpose: One UX contract for fully agentic apps and the dynamic chat core shared across all three UX modes. The product is a thin shell — a prompt and a response surface. The agent receives the full tool set. Mantine task views are A2UI messages rendered by a host Surface and a narrowed Mantine catalog. A tool call returns data. A prompt that already names one item id opens that detail view directly. No hand-built domain screens, and no iframe guest documents.
Parent skill:
tanstack-promptable-fullstack-app-template— schemas, tools, loaders, URL-as-state,getAIAvailability(), boundedchat(). Do not restate that contract here.Other UX skill:
promptable-ux— side panel and prompt-first concepts that extend this dynamic chat surface with domain routes. When the app has domain screens, load that skill alongside this one.
Skill routing
| Task | Load |
| Fully agentic mode, A2UI surface, Mantine catalog, dynamic tool UI, agent shell | This skill |
| Side panel chat, prompt-first layout, domain screens | promptable-ux |
| Schemas, routes, AI tools, server boundaries, availability gate | tanstack-promptable-fullstack-app-template |
| Which UI library or A2UI package this template uses | reference-tech-stack |
| Env, logging, error tracking | observability-and-env |
How to use this skill
- Declare the mode. One mode per deployment. Use this skill when the app already sets
PROMPT_CONCEPT=agenticor the developer chose agentic. When it is not clear which user experience to implement, ask which of the three (side or prompt-first inpromptable-ux, or agentic here) and wait. Do not build this shell as a fallback. This shell never mounts beside a drawer, a prompt-first bar, an overview, or drill-down routes. This template's example ships as a third Netlify site withPROMPT_CONCEPT=agentic(see README). - Reuse none of the route-based components in the standalone agentic shell. No
ChatDrawer,PromptBar,AppNavbar, task pages, or navigation manifest. The shell is identity plus prompt plus thread. Everything visual beyond text comes from a tool result rendered as a declarative A2UI surface from the declared catalog. - Implement the Shell, Tool surface, View strategy, UI actions, and Security sections below.
- Run the UX checklist before a shell change.
- Keep schemas, tools, and server boundaries on the architecture skill. This skill changes composition and rendering, not the data model.
Shell
- One root layout per deployment. Conversation state lives there so scrolling never wipes the thread. Layout: app bar with identity only (name in the bar; version in a tooltip), a centered conversation column, and a bottom-pinned composer that stays reachable regardless of thread length. The column and the composer share one width: the space under the header, capped so a line stays readable on an ultra-wide monitor. A tool view fills that column.
- When empty, the stage is a centered hero: icon, welcome text, and starter controls that ask for inline views (
Show my tasks, a status filter, a priority filter). Do not reusedocs/help.mdbullets that point at dashboards or routes. - As the conversation progresses, the stage is the scrollable thread. Order inside one reply: one short markdown sentence, a sentence-case tool status (
showing tasks, not the raw tool name), then the A2UI surface. Text-only replies stay markdown with GFM tables, code, and links. - Prompt behavior: Enter sends, Shift+Enter inserts a newline, stop while generating, clear once messages exist. Clearing the thread also clears a detail view opened from a card.
- Errors render in an alert with a short sentence a person can act on. Never show a provider payload, a JSON blob, or an HTTP status dump. A busy model says to wait and try again.
- This matches the prompt-first bottom-composer shape from
promptable-ux(seeAppShell.Footer,ChatThread,ChatComposer) but without its route surfaces: noAppNavbar, no drill-down routes, no stacked dashboard, no navigation manifest. The composer and thread patterns transfer; the route surfaces do not. - Mobile first (default): usable at the narrowest width with the composer pinned and responses scrolling, then richer spacing as the viewport grows. Both color schemes work with theme tokens. Keep one icon library.
- Unconfigured AI:
getAIAvailability()gates the prompt and there is no domain UI behind it, so render an empty configuration state explaining that AI is not configured. No disabled prompt.
Answers
The system prompt for this shell must say these rules. The view tool enforces the assignee rule even when the model ignores the prompt.
- Greetings and "what can you do" stay text. Do not open a view for them.
- "My tasks" means every task. Set
assigneeonly when the user names a person. A demo visitor email (the auto-generated test identity) is not an assignee. The list tool drops that email before it queries, so the view is not an empty list with a "you have no tasks" sentence. - After a view tool, write one short sentence. Do not repeat titles, statuses, priorities, or emails. The inline view shows them. Trust the tool result: if it contains rows, do not say the list is empty.
- Do not write markdown links. This shell has no pages. A route link in assistant markdown becomes a follow-up prompt. If that link has no label, the prompt text is the label, so the thread never shows a bare colon.
Tool surface
- Expose every repository method as a server AI tool via
createSafeServerTool, including distinct-values tools and data-only view tools (showTasksView,showTaskView). The agent receives that full set on every turn. - Do not register
navigateorinvalidateRouterinagenticmode. There are no in-app routes to open or refresh. After a write, the host re-renders from the new tool result. browserContextcarries timezone, locale, and current time plus a marker that this surface is the agent shell. It does not carry a current path or search. There is one route, so nothing resolves "this item" from a URL. Reuse thecaptureBrowserContext()shape and drop the location fields.- Every
chat()call still setsagentLoopStrategy: maxIterations(N)explicitly (defaultN=10).
View strategy
The declared UI kit chooses how a tool result becomes a declarative A2UI view. Read the kit from reference-tech-stack. Ask once when a new app has no kit, then wait. Strategy is deployment configuration. The model returns data. It does not emit markup, JSON blueprints, or renderer instructions.
| Composition | Examples | Renderer |
| Closed catalog | Mantine (this template), MUI, Ant Design, Chakra, PrimeReact | Host Surface from @a2ui-bridge/react plus that kit's allowlisted adapters |
| Persist source | "Add this component to the repo" | Outside this shell. Review the diff. Do not install files as a chat side effect |
Mantine catalog
This template's kit is Mantine 9 and lucide-react. Render task views with useA2uiProcessor and Surface. createComponentMapping registers every A2UI component type that has a Mantine adapter: layout, typography, inputs, feedback, overlays, navigation, data display, and disclosure, plus the aliases in that map (Column, Row, Card, Text, Title, Badge, Button, Timeline, TimelineItem, Table, TableHead, TableBody, TableRow, TableHeaderCell, TableCell, and the rest of the catalog). Unknown component types render nothing. Each type is one A2UI node the host maps onto one component. The model returns task data and does not pick components.
@a2ui-bridge/react-mantine@0.1.0 peers @mantine/core ^8 and @tabler/icons-react. Do not add that package, and do not add a second icon library. Keep @a2ui-bridge/core and @a2ui-bridge/react. The host ports that catalog onto Mantine 9 and lucide-react so the existing MantineProvider supplies theme and color scheme.
showTasksView and showTaskView return task data only. showTasksView also returns presentation. "table" draws one row per task. "cards" or omitting it draws the card list. "kanban" draws one lane per status. "timeline" draws one item per due date, with tasks that have no date last. That choice is not part of the repository filter. buildTaskViewMessages turns the payload into A2UI messages. acceptA2uiMessages drops any component type outside the catalog before processMessages. People-facing text uses literalString. No raw ids. A list row is one control for the whole card, not a separate "Open" button. A table uses those table nodes. The title cell is the open button. Header cells name the columns. When more than 20 tasks match, the heading keeps the full count and a note says how many rows are shown. An empty result says no rows match and suggests dropping the filter.
onAction follows UI actions. open-task with one id opens that detail view without another model turn. When the thread already returned that task, the detail is that task. A missing id is loaded from the repository. The seed repository replays tasks from earlier tool results at the start of the next chat turn, because a new serverless instance does not keep the in-memory write. back-to-list is an ordinary prompt. Any other action name is ignored.
How prompt-first and side extend this agentic chat core
The three UX patterns form a layered hierarchy where fully agentic defines the core dynamic AI chat component (AgenticMessageItems + useInlineDetailViews, rendering assistant markdown and declarative A2UI surfaces via AgenticA2uiSurface), and prompt-first and side extend that exact chat component with router-driven domain screens:
- Isolated at runtime in
agentic:AppLayoutreturnsAgenticChatProvider+AgenticShellbefore building route chrome, soChatDrawer,PromptBar,Header, andAppNavbarnever mount. Insrc/routes/index.tsx,loadHomeTasks.agenticreturns[]without querying andAgenticHomereturnsnull. - Reused across all 3 chat panels (
agentic,prompt-first, andside):ChatThreadreusesAgenticMessageItemsfromAgenticThread.tsx;PromptChatProviderownsuseInlineDetailViewsso opened details survive route remounts. Insrc/routes/api/chat.ts,dataToolsincludesshowTasksViewToolandshowTaskViewToolfor all three modes, whilesideandprompt-firstaddnavigateToolDef,invalidateRouterToolDef, and routeMarkdownLinknavigation on top. - Repeatable 3-step recipe for adding a new domain entity's dynamic UI across all 3 chat panels:
- View tools (
src/services/ai/<entity>Views.server.ts): Add data-onlyshow<Entities>ViewToolandshow<Entity>ViewToolcalling the sharedserverFns.tsqueries, stripping demo visitor emails on list filters, and separatingpresentation(cards | table | kanban | timeline) from the repository filter. Register both tools indataToolsinsrc/routes/api/chat.tsso every UX mode receives them. - A2UI message builder (
src/services/a2ui/<entity>ViewMessages.ts): Turn the tool payload into allowlisted A2UI messages validated withacceptA2uiMessagesand sealed component ids, emittingopen-<entity>,back-to-list,toggle-select, andmark-selectedactions. - Shared thread surface (
src/components/AgenticShell/AgenticThread.tsx): Match the new view tools inAgenticMessageItems(which automatically powersAgenticThread,PromptFirstLanding, andChatDrawer), add sentence-case status labels intoolLabels.ts, and resolve single-idopen-<entity>actions from remembered thread payloads (orget<Entity>) without sending another model turn.
- View tools (
UI actions
Catalog actions map to host state or a follow-up prompt. Never to an in-app route in agentic mode.
- open-task — When the action names one item id, open that detail view directly in the host without sending another model turn. When the thread already returned that task, render it immediately; otherwise fetch it with
getTask. The user line shows the item title, not the id. - back-to-list — Sends an ordinary follow-up prompt (
Show my tasks). - toggle-select / mark-selected — Host tracks selected ids on the card/table surface and turns
mark-selectedinto a single bulk-status prompt (Set the status of these tasks to ...).
Security
- The host document never injects raw HTML from a tool or the model (
dangerouslySetInnerHTMLis forbidden). Views render exclusively as allowlisted A2UI nodes throughSurface, and unknown component types render nothing. - Validate A2UI message payloads with a strict schema (
acceptA2uiMessages), strip dangling child references, and seal component ids with a private-use prefix soliteralStringtext can never be misinterpreted as a child component id. - UI-action prompts and tool calls pass the same input schemas and server guards as chat tool calls. Hiding a widget is not a guard. Writes still use the auth ticket and
TraceabilityContext.
UX checklist
- Mode declared. No drawer, prompt-first bar, overview, drill-down, navbar, or domain route in
agenticdeployment. - No reused route-based components in
AgenticShell. Mantine task views are A2UI surfaces built from tool data. getAIAvailability()gates the prompt. Unconfigured AI shows the empty configuration state.- Chat state lives on the layout and survives scrolling. Prompt stays pinned on narrow viewports.
- Surfaces render through the allowlisted Mantine catalog with error and retry states.
- Empty hero uses view starters, not route help bullets. Tool status is sentence case. Errors are short alerts, never a provider payload.
- A list answer is one sentence plus the view. A demo visitor email is not an assignee filter. A card that names one id opens that detail view without another model turn.
- UI actions map to host selection or prompts only. No in-app navigation in
agenticmode. Route links in markdown become prompts, and an empty link label uses that prompt text. - Narrow layout and both color schemes checked.
- Writes stay server-guarded with the auth ticket and
TraceabilityContext.
What stays on other skills
| Concern | Where it lives |
getAIAvailability() gate, tool coverage, agent loop | Architecture Core Contract #11–#13 |
| Schemas, server functions, trust boundaries | Architecture Core Contract #3–#6 and Schema Boundaries |
| Mantine A2UI packages | reference-tech-stack |
| Side panel and prompt-first concepts | promptable-ux |
| Env, logging, error tracking | observability-and-env |
Verification
After UX-contract changes: update this SKILL.md, run pnpm skills:check and pnpm skills:waza, and follow AGENTS.md §15 when the reference shell changes.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

