Getting it into your agent
It runs from inside its repository, so the clone comes first — what it calls does not travel with the file alone.
git clone --depth 1 https://github.com/FouadMagdy01/RNCopilotnpx agentmods add skills/fouadmagdy01/rncopilot/create-formWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/fouadmagdy01/rncopilot/create-form)<a href="https://agentmods.dev/skills/fouadmagdy01/rncopilot/create-form"><img src="https://agentmods.dev/badge/skills/fouadmagdy01/rncopilot/create-form/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/fouadmagdy01/rncopilot/create-form"><img src="https://agentmods.dev/badge/skills/fouadmagdy01/rncopilot/create-form.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00020 | $0.01904 |
| Opus 5.5 | $0.00008 | $0.00762 |
| Sonnet 5.5 | $0.00004 | $0.00381 |
| Haiku 4.5 | $0.00002 | $0.00190 |
Grade A, and why
create-form scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 1mo ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 246 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Create Validated Form
Generate a complete form with Zod v4 schema, react-hook-form integration, and i18n support.
Gather Information
Ask the user for:
- Form name (e.g., "CreateProduct", "EditProfile", "ContactUs")
- Fields with types: name (string), email (email), age (number), role (enum), etc.
- Which fields are required vs optional
- Feature location:
src/features/<feature>/(which feature module) - Submit action: mutation hook name or API endpoint (optional)
Steps
1. Generate Zod Schema
// src/features/<feature>/schemas/<name>Schema.ts
import { z } from 'zod/v4';
export const <name>Schema = z.object({
// String fields
name: z.string().min(1, 'validation.required').max(100, 'validation.nameTooLong'),
// Email fields
email: z.email('validation.emailInvalid'),
// Number fields
price: z.number({ message: 'validation.required' }).min(0, 'validation.priceMin'),
// Enum fields
role: z.enum(['admin', 'user', 'viewer']),
// Optional fields
bio: z.string().max(500, 'validation.bioMax').optional(),
// Array fields
tags: z.array(z.string()).min(1, 'validation.tagsRequired').optional(),
// Boolean fields
acceptTerms: z.literal(true, { message: 'validation.mustAcceptTerms' }),
});
export type <Name>FormData = z.infer<typeof <name>Schema>;
Schema rules:
- Import
zfromzod/v4, NOTzod - ALL validation messages are i18n keys:
'validation.required','validation.emailInvalid' - Use
z.email()for email validation (Zod v4 syntax) - Use
z.number({ message: ... })for required number with custom message - Export the inferred type alongside the schema
2. Generate Form Component
// src/features/<feature>/components/<Name>Form.tsx
import { View } from 'react-native';
import { useForm } from 'react-hook-form';
import { zodResolver } from '@hookform/resolvers/zod';
import { useTranslation } from 'react-i18next';
import { StyleSheet } from 'react-native-unistyles';
import { Button } from '@/common/components/Button';
import { FormField } from '@/common/components/FormField';
import { Input } from '@/common/components/Input';
import { Select } from '@/common/components/Select';
import { Checkbox } from '@/common/components/Checkbox';
import { TextArea } from '@/common/components/TextArea';
import { <name>Schema, type <Name>FormData } from '../schemas/<name>Schema';
interface <Name>FormProps {
onSuccess?: () => void;
defaultValues?: Partial<<Name>FormData>;
}
export function <Name>Form({ onSuccess, defaultValues }: <Name>FormProps) {
const { t } = useTranslation();
const {
control,
handleSubmit,
formState: { isSubmitting },
} = useForm<<Name>FormData>({
resolver: zodResolver(<name>Schema),
defaultValues: {
// Provide sensible defaults for every field
...defaultValues,
},
});
const onSubmit = async (data: <Name>FormData) => {
// If wired to a mutation hook:
// await mutation.mutateAsync(data);
onSuccess?.();
};
return (
<View style={styles.form}>
{/* String field */}
<FormField name="name" control={control} label={t('fields.name')} required>
<Input autoCapitalize="words" />
</FormField>
{/* Email field */}
<FormField name="email" control={control} label={t('fields.email')} required>
<Input keyboardType="email-address" autoCapitalize="none" autoComplete="email" />
</FormField>
{/* Number field */}
<FormField name="price" control={control} label={t('fields.price')} required>
<Input keyboardType="numeric" />
</FormField>
{/* Select/enum field */}
<FormField name="role" control={control} label={t('fields.role')} required>
<Select
options={[
{ label: t('roles.admin'), value: 'admin' },
{ label: t('roles.user'), value: 'user' },
{ label: t('roles.viewer'), value: 'viewer' },
]}
/>
</FormField>
{/* TextArea field */}
<FormField name="bio" control={control} label={t('fields.bio')}>
<TextArea maxLength={500} />
</FormField>
{/* Checkbox field */}
<FormField name="acceptTerms" control={control}>
<Checkbox label={t('fields.acceptTerms')} />
</FormField>
<Button
title={t('common.submit')}
onPress={handleSubmit(onSubmit)}
loading={isSubmitting}
fullWidth
/>
</View>
);
}
const styles = StyleSheet.create((theme) => ({
form: {
gap: theme.metrics.spacingV.p16,
},
}));
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 1mo ago First seen · 246 lines · 20 tokens per session scan A a71e76aee0e7
create-form is a skill published in the GitHub repository FouadMagdy01/RNCopilot (43 stars, last pushed 7mo ago), licensed MIT. It adds 20 tokens to every session and 1,904 once invoked, about $0.0001 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
add-localization
Adds or extends multilingual localization in a Power Pages code-site SPA. Use whenever the user asks to translate, localize, internationalize, support multiple languages, add a language selector, add locale routes, repair an i18n setup, or add languages to an existing React, Vue, Angular, or Astro Power Pages site.
extract-source-sample
Given the path to a finished content-goose ad-run folder, extract everything that defines that ad — recipe shot list, VO script, characters, voices, world, atom-skills, master mp4 — and emit a source-sample.json in the exact shape the upload-ad-sample skill writes to the Goose Ads library. Also links every character…
json-ui
CRITICAL: Use for json-ui component rendering and development. Triggers on: json-ui, json render, component catalog, report render, HTML report, I18nString, i18n, bilingual, language switch, dual language, PaperHeader, AuthorList, Abstract, MetricsGrid, Section, Highlight, Zod schema, catalog.ts, cli.ts…
experience-ui-bundle-localize
MUST activate to localize / internationalize a uiBundles//src/ project (React or Angular): extract hardcoded user-facing strings into Custom Labels, wire a runtime i18n library over the Platform SDK backend, add labels for another language, or troubleshoot label rendering across locales. Triggers: user-facing string…
i18n
Add full internationalization (i18n) to a Next.js project using next-intl. Supports 14+ languages, SEO-friendly locale routing, hreflang sitemaps, and bulk translation. Use when the user asks to "internationalize", "add i18n", "add translations", "multi-language", "localize", "add language support", or "translate my…
i18n-date-patterns
Implements internationalization (i18n) in React applications. Covers user-facing strings, date/time handling, locale-aware formatting, ICU MessageFormat, and RTL support. Use when building multilingual UIs or formatting dates/currency.