@crossplatformai/skills
Version:
Reusable Agent Skills for CrossPlatform.ai projects.
153 lines (149 loc) • 9.02 kB
text/typescript
export type SkillMetadata = {
readonly name: string;
readonly description: string;
readonly path: `skills/${string}`;
};
export const skills = [
{
name: 'post-build-ship',
description:
'Dispatch explicit Post., Build., Ship., Post.Build., Build.Ship., and Post.Build.Ship. workflow requests.',
path: 'skills/post-build-ship',
},
{
name: 'post-build-ship/post',
description:
'Investigate and produce Authorizing User-approvable outcome packets for Build.',
path: 'skills/post-build-ship/post',
},
{
name: 'post-build-ship/build',
description:
'Implement Authorizing User-approved outcomes adaptively and prove them with proportionate QA.',
path: 'skills/post-build-ship/build',
},
{
name: 'post-build-ship/ship',
description:
'Validate final ownership, QA, drift, and commit coherence, then ship authorized work.',
path: 'skills/post-build-ship/ship',
},
{
name: 'temporary-pnpm-package-links',
description:
'Guidance for temporary pnpm package links across repositories, including consumer-local links, linked-source validation, committed development state, AI publication and unlink prohibitions, and registry verification before consumer production release.',
path: 'skills/temporary-pnpm-package-links',
},
{
name: 'no-local-exemptions',
description:
'Review environment branches for hidden local exemptions when required values, guards, service contracts, or failure paths differ across environments. Require explicit, purpose-limited variance and fail-fast handling. Not for setup drift, test-layer or harness concerns, visual verification, host-OS portability, or Post.Build.Ship workflow gates.',
path: 'skills/no-local-exemptions',
},
{
name: 'react-native-web-styling',
description:
'Decide whether web, Electron, shared, or mobile UI should use DOM or React Native, and guide existing React Native Web and Uniwind styling, className precedence, spacing, reset, and compatibility fixes.',
path: 'skills/react-native-web-styling',
},
{
name: 'web-first-components',
description:
'Author shared UI web-first - the default `.tsx` file is plain DOM with Tailwind, and `.native.tsx`, `.ios.tsx`, or `.android.tsx` files are the React Native overrides - with reference implementations to emulate and a characterization-test-first migration workflow. Use when creating a new shared component, forking a component per platform, choosing platform file extensions, or converting a React Native Web component the task already touches. Not for styling or spacing repairs to existing RNW surfaces, resolver and seam enforcement inside an active Post.Build.Ship, or release and deployment policy.',
path: 'skills/web-first-components',
},
{
name: 'playwright-visual-verification',
description:
'Verify local browser-visible layout and styling with accessibility snapshots, screenshots, and computed-style checks using Playwright.',
path: 'skills/playwright-visual-verification',
},
{
name: 'test-layer-fit',
description:
'Choose the lowest meaningful test layer and design deterministic test harness ownership. Use for unit, component, adapter-contract, integration, or E2E placement; suite-load or CI-only failures; timeout, retry, sleep, serialization, warmup, timing-workaround, or suite/config-splitting proposals; and browser, Electron, mobile, subprocess, server, port, process, isolation, readiness, diagnostic, or cleanup ownership. Covers cross-platform proof boundaries and integration-suite reachability. Not for test-framework selection, coverage thresholds, general mocking or assertion style, visual verification, host-OS path or quoting mechanics, or Post.Build.Ship gate and receipt policy.',
path: 'skills/test-layer-fit',
},
{
name: 'desktop-electron-dev-attach',
description:
'Interactively attach to an already-running Electron app through stable DESKTOP_CDP_PORT for local development or requested desktop happy-path verification with Playwright or OpenCode MCP.',
path: 'skills/desktop-electron-dev-attach',
},
{
name: 'multi-agent-hunk-ownership',
description:
'Multi-agent hunk-ownership guidance for preserving user and other-agent changes while editing, formatting, staging, and committing.',
path: 'skills/multi-agent-hunk-ownership',
},
{
name: 'documentation-writing',
description:
'Durable evergreen documentation guidance with change-oriented framing when change history is needed.',
path: 'skills/documentation-writing',
},
{
name: 'reconcile-setup',
description:
'Idempotent run-once setup should be reconciled with an event-triggered, fail-loud QA drift-check.',
path: 'skills/reconcile-setup',
},
{
name: 'rule-of-three',
description:
'Structure complexity into about three memorable chunks with a rhythm - the phone-number principle.',
path: 'skills/rule-of-three',
},
{
name: 'see-something-say-something',
description:
'See or smell something off, even outside your scope, and surface it - do not silently fix it or silently ignore it.',
path: 'skills/see-something-say-something',
},
{
name: 'thinking-is-not-knowing',
description:
'Before asserting a claim or recommendation, check whether you can say "I know" and name the failure mode it prevents - if not, it is a guess; verify before presenting it. When research has already grounded the options and user judgment remains, use research-before-asking.',
path: 'skills/thinking-is-not-knowing',
},
{
name: 'i-dont-know-is-the-answer',
description:
'When you lack a grounded answer, say "I do not know" instead of hedging - and make it pull its weight with "I do not know yet, here is how I will find out, by when." When research has already grounded the options and user judgment remains, use research-before-asking.',
path: 'skills/i-dont-know-is-the-answer',
},
{
name: 'research-before-asking',
description:
'Research and carry decisions before asking the user. Use for ambiguous requirements, missing specifications, ‘which approach’ or ‘should I use X or Y’ choices, or taste, priority, private facts, credentials, or authorization that remain after proportionate research. Present viable options, tradeoffs, a strong recommendation, and its flip condition. Not for verifying claims, responding to an ungrounded unknown, or Post.Build.Ship approval and gate policy; use thinking-is-not-knowing or i-dont-know-is-the-answer.',
path: 'skills/research-before-asking',
},
{
name: 'collective-intelligence',
description:
'Use when a consequential, uncertain, complex, or creative decision benefits from task-relevant independent perspectives and explicit synthesis. Guide perspective selection, anti-anchoring, and transparent integration without defaulting to consensus or vote-counting. Not for routine well-supported work, factual verification (use thinking-is-not-knowing), evidence-backed research or decision-carrying (use research-before-asking), Post.Build.Ship workflow authority, or claiming that unperformed collaboration occurred.',
path: 'skills/collective-intelligence',
},
{
name: 'move-them-lose-them',
description:
'Keep users in their current task context when they need to satisfy a prerequisite or create missing data instead of sending them to Settings or another area. Use when designing, implementing, or reviewing application flows, empty states, selectors, signup, onboarding, forms, task completion, contextual creation, or any recommendation that moves users away from what they are trying to finish.',
path: 'skills/move-them-lose-them',
},
{
name: 'revalidate-without-reset',
description:
'Refresh an already-rendered stateful application view in place instead of rebuilding it from empty. Use when a view the user is already looking at is re-fetched because of app or window activation, focus or visibility change, reconnect, polling, a manual refresh control, mutation success, or a change in which resource the view shows, and when deciding what to keep, what to replace, and what to ask about. Not for first load, form save semantics, data-fetching library choice, or server-side cache revalidation.',
path: 'skills/revalidate-without-reset',
},
{
name: 'do-not-abbreviate',
description:
'Require complete words in newly authored human-facing copy, names, labels, documentation, messages, and explanatory comments, with authorization before a shortened form; do not rewrite existing exact text, machine-facing tokens, or user-provided strings.',
path: 'skills/do-not-abbreviate',
},
] as const satisfies readonly SkillMetadata[];
export type SkillName = (typeof skills)[number]['name'];
export const skillNames = skills.map(
(skill) => skill.name,
) as readonly SkillName[];