Repository navigation
Conversation
✅ Deploy Preview for fullstack-promptable-app-example ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
✅ Deploy Preview for fullstack-promptable-prompt-first ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
Co-authored-by: carlosvin <carlosvin@gmail.com>
cursor
Bot
force-pushed
the
cursor/agentic-ux-skill-fead
branch
from
October 3, 2026 09:14
f8424dc to
83edc11
Compare
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
Missing Waza coverage blocks CI, and the action contract conflates MCP Apps handlers with legacy callbacks.
Review effort: Balanced
Findings: 1
Open (2)
What changed in this PR
Adds a skill contract for a tool-only agentic shell, distinct from #46’s route-based prompt-first UI. No application shell or deployment changes are included.
Changes:
- Defines shell layout, MCP UI rendering, actions, and security rules.
- Registers the skill in companion documentation.
- Adds static contract checks and a Waza evaluation suite.
| File | Description |
|---|---|
| skills/README.md | Lists the new skill and installation command. |
| scripts/skills/runSkillEvals.mjs | Adds static contract checks. |
| evals/agentic-ux/tasks/agentic-ui-action-tool.yaml | Adds widget-action evaluation. |
| evals/agentic-ux/tasks/agentic-shell-layout.yaml | Adds shell-layout evaluation. |
| evals/agentic-ux/tasks/agentic-mcp-ui-render.yaml | Adds resource-rendering evaluation. |
| evals/agentic-ux/tasks/agentic-anti-route-components.yaml | Covers route-based UX exclusions. |
| evals/agentic-ux/tasks/agentic-anti-architecture.yaml | Covers architecture exclusions. |
| evals/agentic-ux/eval.yaml | Configures the mock evaluation suite. |
| .agents/skills/tanstack-promptable-fullstack-app-template/SKILL.md | Registers the agentic companion. |
| .agents/skills/reference-tech-stack/SKILL.md | Links future MCP UI package guidance. |
| .agents/skills/promptable-ux/SKILL.md | Distinguishes the tool-only companion. |
| .agents/skills/observability-and-env/SKILL.md | Registers the agentic companion. |
| .agents/skills/agentic-ux/SKILL.md | Defines the fully agentic UX contract. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
AppRenderer uses onCallTool, onMessage, and onOpenLink. The five onUIAction types stay on UIResourceRenderer only. Co-authored-by: carlosvin <carlosvin@gmail.com>
Contributor
carlosvin
added a commit
that referenced
this pull request
Oct 6, 2026
<!-- CURSOR_AGENT_PR_BODY_BEGIN --> Combines the `agentic-ux` skill from #47 with the deployable example. Merge this pull request only. ## Deploy previews (this PR) Each linked Netlify site builds a deploy preview for this pull request. Smoke-test the agentic shell on its own preview. Side and prompt-first stay on theirs. | Demo | Netlify project | Deploy preview | |------|-----------------|----------------| | Side drawer | `fullstack-promptable-app-example` | https://deploy-preview-48--fullstack-promptable-app-example.netlify.app | | Prompt-first | `fullstack-promptable-prompt-first` | https://deploy-preview-48--fullstack-promptable-prompt-first.netlify.app | | **Fully agentic** | `fullstack-promptable-agentic` | https://deploy-preview-48--fullstack-promptable-agentic.netlify.app | The agentic preview uses `PROMPT_CONCEPT=agentic` and `DISPLAY_NAME=TaskHub Agentic`. It shows the thin shell: identity, conversation stage, and bottom composer. It does not show the drawer, the prompt-first bar, or task pages. Production after merge: https://fullstack-promptable-agentic.netlify.app The empty stage is a centered hero with view starters (`Show my tasks`, `Show pending tasks`, `Show high priority tasks`). Provider failures render as a short alert. Task cards show status and priority, and a click opens that task's detail view directly. "My tasks" is not filtered to the demo visitor email. After a list, the model is asked for one sentence instead of repeating every row. Those rules are the `agentic-ux` skill contract (v0.2.7), not only the example. The skill covers the hero, sentence-case tool status, short error alerts, one-sentence answers, the demo-assignee filter, guest cards without raw ids, and opening a named item without another model turn. The skill eval checks the example still implements each one. The skill defines a tool-only shell: identity, a conversation stage, and a bottom-pinned composer. Views come from MCP Apps resources. The example follows the [recommended MCP Apps pattern](https://github.com/MCP-UI-Org/mcp-ui#mcp-apps-pattern-recommended) and TanStack AI MCP registration: - View tools and their `ui://` documents are registered with `@tanstack/ai-mcp` `createMCPServer` and `resourceDefinition`. Each tool sets `metadata._meta.ui.resourceUri` only. The handler returns task data and does not attach `readResource`. - Agentic chat calls `createMCPClient` and passes it to `chat({ mcp: { clients } })`. Discovery stamps `metadata.mcp.uiResourceUri`, and `MCPManager` binds `resources/read`. The same server is mounted at `/api/mcp`. Side and prompt-first chats do not connect this client. - The view document is a static file wrapped once with `@mcp-ui/server` `createUIResource` (`text/html;profile=mcp-app`). Task rows are not embedded in the HTML. - The tool result stays model-facing data only. The shell renders the `UIResourcePart` with `AppRenderer` from `@mcp-ui/client`, passing `toolInput` and `toolResult`. The guest handles `ontoolresult` and writes text with `textContent`. `sandbox.url` is `public/sandbox_proxy.html`, which keeps the guest in an inner iframe with no `allow-same-origin`. Prompts and links go through `useMcpAppBridge`. The guest uses `@modelcontextprotocol/ext-apps` `App` from `public/mcp-app.js` (`sendMessage`, `openLink`). - Links are limited to `http`, `https`, and `mailto`. Widget buttons send a follow-up prompt. `POST /api/mcp-apps/call` refuses a direct widget tool call, so writes stay on the chat tools and the auth ticket. - Server `execute` and client `.client()` handlers receive arguments already parsed by `inputSchema` and pass them through. They do not parse those arguments again. The architecture skill asks which UX to follow before building chrome. If the user does not choose, the default is **prompt-first**. Side and agentic stay explicit choices. This template's three Netlify sites keep their existing `PROMPT_CONCEPT` values. The example selects the agentic shell with `PROMPT_CONCEPT=agentic`. It does not mount the drawer, the prompt-first bar, the navbar, or domain pages. `showTasksView` and `showTaskView` produce the inline views. There is no `navigate` or `invalidateRouter` on this concept. The site `fullstack-promptable-agentic` is linked to this repo with `PROMPT_CONCEPT=agentic`, `DISPLAY_NAME=TaskHub Agentic`, and `REPOSITORY_TYPE=seed` on production and deploy-preview. Side and prompt-first previews stay on their own sites. <!-- CURSOR_AGENT_PR_BODY_END --> <div><a href="https://cursor.com/agents/bc-eff48804-49e4-42dc-9576-d89c4b54fead?cursor_ref=pr_footer&cursor_cta=open_in_web"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-web-light.png"><img alt="Open in Web" width="114" height="28" src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a> <a href="https://cursor.com/background-agent?bcId=bc-eff48804-49e4-42dc-9576-d89c4b54fead&cursor_ref=pr_footer&cursor_cta=open_in_cursor"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img alt="Open in Cursor" width="131" height="28" src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a> </div>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


Adds the
agentic-uxskill contract for the fully agentic mode: thin prompt shell with no domain screens, full tool surface, tool-linked MCP UI resources (_meta.ui.resourceUri,AppRenderer, sandboxed iframe), UI-action mapping, and security rules.Rebased onto
mainafter #46 (agentic-style prompt-first with bottom-pinned composer). The skill now shares that vocabulary — conversation stage plus bottom-pinned composer and hero empty state — while drawing the line: prompt-first keepsAppNavbar, drill-down routes, and loaders;agentic-uxhas none of those and renders every view as a tool resource.browserContextreuses thecaptureBrowserContext()shape minus location fields.Scope is skill-only: no
src/shell, noPROMPT_CONCEPT=agenticvalue, no third Netlify site yet. The shell implementation follows in a second PR with its own deploy preview.Validation:
pnpm skills:check,pnpm test:skill-evals(25/25),pnpm test(146/146),pnpm build.