원클릭으로
agent-pages
// Create or update rich task/session artifacts in the local Agent Pages app. Use when the user asks for a visual proposal, options, prototype, diagram, report, review surface, or anything easier to judge/annotate than chat.
// Create or update rich task/session artifacts in the local Agent Pages app. Use when the user asks for a visual proposal, options, prototype, diagram, report, review surface, or anything easier to judge/annotate than chat.
| name | agent-pages |
| description | Create or update rich task/session artifacts in the local Agent Pages app. Use when the user asks for a visual proposal, options, prototype, diagram, report, review surface, or anything easier to judge/annotate than chat. |
Agent Pages is a local hot-reloaded canvas for richer agent output. The user asks an agent to use this skill, the agent creates one TSX artifact, then the user reviews it in the app and uses React Grab to annotate/copy feedback back to the agent.
Do not assume the repository path. First query the running app:
curl -s http://127.0.0.1:47983/api/agent-pages
Use the returned JSON:
pagesDir: write artifacts here.rootDir: app root for bun run index if needed.url: local browser URL.port: fixed app port, 47983.If the server is not running, tell the user to start it from the cloned repo:
bun run dev
pagesDir unless the user explicitly asks to change Agent Pages itself.<group-slug>__<page-name>.tsx so the sidebar groups them with the matching session/project.<style> tag. Do not edit src/style.css or other Agent Pages app files for artifact styling. The app CSS is only for the shell/sidebar/landing page.minmax(0, 1fr), wrapping grids, max-width: 100%, and avoid horizontal page scrolling unless necessary. If wide content is necessary, put overflow-x: auto on that element only.url so they can review it immediately. If your environment cannot open a browser, say so and give the url.lucide-react: icons and small visual affordances.react-markdown + remark-gfm: render markdown briefs, reports, tables, and task lists.recharts: charts, dashboards, comparisons, and simple data views.three: self-contained 3D/WebGL sketches or spatial scenes.clsx: conditional class names without noisy string concatenation.zod: validate structured JSON/config before rendering it.Use this transformation for the current working directory:
~.-.node -e "const os=require('os');const cwd=process.cwd();console.log(cwd.replace(os.homedir(),'~').replace(/[^a-zA-Z0-9._~-]+/g,'-').replace(/^-|-$/g,''))"
The shell has a light/dark toggle. For ordinary artifacts, use the app theme variables instead of hardcoded global palettes:
var(--paper): page backgroundvar(--panel), var(--panel-deep): cards and raised panelsvar(--ink): primary textvar(--muted), var(--dim): secondary textvar(--line), var(--line-soft): bordersvar(--accent), var(--link): highlights and linksvar(--success), var(--warning), var(--error): status colorsIf the artifact is about UI, visual design, branding, or theming, override the app theme freely to show the proposed UI accurately.
/api/agent-pages and read pagesDir.proposal, options, review, plan.<pagesDir>/<group-slug>__<page-slug>.tsx.bun run index from rootDir.url in the user's browser so they can review the artifact immediately. If browser opening is unavailable, give the url and tell the user to select the artifact, annotate with React Grab, and paste feedback back.An artifact is just a React file. Do not reuse this structure by default. It is only here to show the minimum shape: export one React component from one TSX file.
Pick the layout, styling, components, and interactions that fit the user's task. A comparison page, chart dashboard, 3D sketch, markdown report, review checklist, tiny editor, and UI mockup should not all look like the example below.
export default function Proposal() {
return (
<main className="sheet">
<p style={{ textTransform: 'uppercase', letterSpacing: '.14em', color: '#8abeb7' }}>current session</p>
<h1 style={{ fontSize: 64, lineHeight: .95, letterSpacing: '-.07em', margin: '0 0 24px' }}>Clear proposal title</h1>
<section style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(220px, 1fr))', gap: 16 }}>
<article style={{ background: '#1e1e24', border: '1px solid #505050', borderRadius: 24, padding: 24 }}>
<h2>Option A</h2>
<p>Specific enough to decide.</p>
</article>
</section>
</main>
);
}
If the dashboard is not visible or the discovery endpoint fails:
curl -s http://127.0.0.1:47983/api/agent-pages
bun run dev, a shortcut, or a system service configured during installation.url and pagesDir; do not guess paths.If the artifact was created but does not appear in the sidebar:
pagesDir.<group-slug>__<page-name>.tsx.rootDir:bun run index
If sessions/projects are missing, stale, or from the wrong machine, remember that public/session-index.json is generated local state. It is regenerated by bun run dev and can be refreshed manually with bun run index. It should not be treated as portable data.
pagesDir and the app hot reloads.