npx skills add ...
npx skills add automattic/wp-calypso --skill dashboard-create-screen
npx skills add automattic/wp-calypso --skill dashboard-create-screen
Create a new screen in the Multi-site Dashboard with automatic route registration
Creates new screens in client/dashboard with automatic route discovery and registration.
First, find all router files and extract available routes.
Use Glob to discover router files:
For each router file, use Grep to extract route information.
Find exported route constants:
Extract parent relationships:
Extract path segments:
Extract component import paths:
For each discovered route, record:
siteBackupsRoute)siteRoute)'backups')Menu discovery happens after the user selects a parent route. Find menus relative to the route's location.
Based on the selected parent route's import path, determine where to search for menus:
Extract the component directory from the parent route's lazy import
import('../../sites/backups') → search in client/dashboard/sites/import('../../me/profile') → search in client/dashboard/me/Use Glob to find menu files in that area:
Also check the app-level menu for top-level routes:
For each discovered menu file, use Grep to find:
Existing menu items pattern:
Route references in menu:
This helps understand the menu's structure and where to add new items.
Menu items use ResponsiveMenu.Item:
Conditional menu items check feature support:
Ask the user for the following using AskUserQuestion:
custom-settings)custom-settings)Custom settings)Based on the selected parent route's import path, determine where to create the component.
Pattern: If parent imports from ../../sites/backups, new screen goes in client/dashboard/sites/{screen-name}/
For sites area: client/dashboard/sites/{screen-name}/index.tsx
For me area: client/dashboard/me/{screen-name}/index.tsx
For other areas: Follow the same pattern from parent's import path
Generate a basic component with the standard layout.
Add the route definition to the same router file as the parent route.
Add after other route exports in the file:
Find where the parent route is used in the create*Routes() function and add the new route.
For standalone routes (direct child of main area route):
For nested routes (child of a feature route):
If the user requested a navigation menu entry, add it to the discovered menu file.
Use the menu discovered in Step 2 based on the route's area:
sites, me, plugins)client/dashboard/{area}/**/*-menu/index.tsxclient/dashboard/app/primary-menu/index.tsxRead the target menu file and find an appropriate location (typically before the closing </ResponsiveMenu> tag).
Build the route path from parent route's path + new screen path:
/sites/$siteSlug and screen path is analytics → /sites/${ siteSlug }/analytics/me and screen path is api-keys → /me/api-keysInsert menu item:
Analyze the existing menu items to match the pattern:
siteSlug, use the same patternIf the screen requires feature gating (check if similar items in the menu use conditions):
Follow the coding standards documented in client/dashboard/docs/.**
path:\s*['"]([^'"]+)['"]import\(\s*['"]([^'"]+)['"]\s*\)