with one click
wire
UI layer — page (mirror pattern), content, form, table columns, i18n
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
UI layer — page (mirror pattern), content, form, table columns, i18n
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
Multi-slide bilingual brand carousels — Claude writes the deck, kun renders Anthropic-styled slides at exact platform sizes, a human approves, channels receive
Draft, stage, and publish brand social posts — Claude drafts, /higgs renders, a human approves, Hermes relays
Convert a file or URL to Markdown via MarkItDown (PDF, Office, images, audio, web)
Full pipeline — idea to production (chains every stage)
Autonomous block QA — detect, adversarially verify, fix safe tiers, hand the residual to a human
Technical spec — data model, file plan, refined acceptance criteria
| name | wire |
| description | UI layer — page (mirror pattern), content, form, table columns, i18n |
| when_to_use | Use when a feature's UI layer needs to be built after schema and code stages — creating the route page (thin wrapper, mirror pattern), the server content component, the client form, table columns, dictionary keys for both en + ar, and optional navigation entries, all verified by pnpm build. Triggers on: wire the UI, build the page/form/table for the feature, i18n wiring, pipeline UI stage. Distinct from /code (server actions/logic) and /check (quality gate) — this is specifically the visible pages/components/i18n layer of the pipeline. |
| argument-hint | <feature> [product] |
Wire everything together: pages, content components, forms, tables, and i18n. The layer users actually see.
/wire #42 — from issue spec/wire billing — from feature name/wire — from most recent feature issueRead the spec, schema output, and code output from the issue:
gh issue view <number> --repo <repo> --comments
Also read:
src/components/{scope}/{name}/actions.tssrc/components/{scope}/{name}/validation.tsCreate src/app/[lang]/{route-group}/{name}/page.tsx:
import { Content } from "@/components/{scope}/{name}/content";
export default function {Name}Page() {
return <Content />;
}
The page is a thin wrapper — all logic lives in the content component (mirror pattern).
Match the product's existing page patterns:
(school-dashboard), (saas-marketing))Create src/components/{scope}/{name}/content.tsx:
import { get{Name}List } from "./actions";
import { columns } from "./columns";
import { DataTable } from "@/components/atom/data-table";
import { {Name}Form } from "./form";
export async function Content() {
const data = await get{Name}List();
return (
<div>
<div className="flex items-center justify-between">
<h1>{/* Use dictionary key */}</h1>
<{Name}Form />
</div>
<DataTable columns={columns} data={data} />
</div>
);
}
Adapt to what the spec requires:
Create src/components/{scope}/{name}/form.tsx:
"use client";
import { useForm } from "react-hook-form";
import { zodResolver } from "@hookform/resolvers/zod";
import { create{Name}Schema, type Create{Name}Input } from "./validation";
import { create{Name} } from "./actions";
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import {
Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger
} from "@/components/ui/dialog";
import {
Form, FormControl, FormField, FormItem, FormLabel, FormMessage
} from "@/components/ui/form";
export function {Name}Form() {
const form = useForm<Create{Name}Input>({
resolver: zodResolver(create{Name}Schema),
});
async function onSubmit(data: Create{Name}Input) {
const formData = new FormData();
Object.entries(data).forEach(([key, value]) => {
formData.append(key, String(value));
});
await create{Name}(formData);
form.reset();
}
return (
<Dialog>
<DialogTrigger asChild>
<Button>{/* Use dictionary key */}</Button>
</DialogTrigger>
<DialogContent>
<DialogHeader>
<DialogTitle>{/* Use dictionary key */}</DialogTitle>
</DialogHeader>
<Form {...form}>
<form onSubmit={form.handleSubmit(onSubmit)} className="space-y-4">
{/* FormField for each field in the schema */}
<Button type="submit">{/* Use dictionary key */}</Button>
</form>
</Form>
</DialogContent>
</Dialog>
);
}
Use shadcn/ui form components. Match the product's existing form patterns.
Create src/components/{scope}/{name}/columns.tsx:
"use client";
import { type ColumnDef } from "@tanstack/react-table";
import { type {Name} } from "@prisma/client";
export const columns: ColumnDef<{Name}>[] = [
// Column for each visible field
// Actions column (edit, delete) at the end
];
Only create if the feature has a list view.
Add keys to both dictionaries:
src/dictionaries/en.json (or wherever the product keeps dictionaries):
{
"{name}": {
"title": "{Name}",
"create": "Create {Name}",
"edit": "Edit {Name}",
"delete": "Delete {Name}",
"empty": "No {name} found"
}
}
src/dictionaries/ar.json:
{
"{name}": {
"title": "{Arabic translation}",
"create": "{Arabic}",
"edit": "{Arabic}",
"delete": "{Arabic}",
"empty": "{Arabic}"
}
}
If the feature needs a navigation entry (sidebar, menu), find the product's navigation config and add an entry. Only if the spec calls for it.
pnpm build
Error recovery loop (max 5 attempts):
pnpm buildgh issue comment <number> --repo <repo> --body "## Wire Stage Complete
**Page**: \`src/app/[lang]/{route}/{name}/page.tsx\`
**Content**: \`src/components/{scope}/{name}/content.tsx\`
**Form**: \`src/components/{scope}/{name}/form.tsx\`
**Columns**: \`src/components/{scope}/{name}/columns.tsx\` (if created)
**I18n**: Dictionary keys added (en + ar)
**Build**: Passing"
| Error | Fix | Max Retries |
|---|---|---|
| Build failure | Parse error, apply targeted fix | 5 |
| Missing component | Check import path, verify component exists | 3 |
| Type mismatch in props | Align with action return types | 3 |
| i18n key not found | Add missing dictionary key | 2 |
| Server/client boundary | Move "use client" or restructure component | 3 |
pnpm build passes