lowcarbcheck/openplate/form-persistence
Claude Code and agent skill by lowcarbcheck/openplate
Trust tier 3
- community
Source check pending
Checking that the SKILL.md file is still in the repository.
Persist form field values in sessionStorage so users don't lose work on page refresh. Use when creating new forms with user-editable content (create/entry forms, not edit forms).
Install
npx vskill@latest install lowcarbcheck/openplate/form-persistenceSKILL.md
Form State Persistence
This skill ensures create/entry forms persist user input in sessionStorage, protecting against accidental data loss on refresh or navigation.
When Claude Should Use This Skill
- Creating a new form that accepts user-generated content
- Adding fields to an existing create form
- Reviewing a form for missing persistence
When NOT to Use
- Edit forms — server provides authoritative data via loader; persisting stale edits would conflict
- Trivial operational forms — 1-2 field forms like workflow triggers, search filters
- Forms with only sensitive fields — if a form only has passwords/tokens, skip entirely
Core Utilities
useFormField Hook
- SSR-safe, API matches
useState - Key format in sessionStorage:
form:{formId}:{field}
useClearForm Hook
Form ID Conventions
| Form Type | Pattern | Example | |
|---|---|---|---|
| Global | Simple name | login, create-org, create-user | |
| Org-scoped | {action}:{orgSlug} | create-article:acme, invite-user:acme |
Org-scoped IDs prevent cross-org draft contamination.
Pattern A — Uncontrolled <Form> (most forms)
Used for standard React Router <Form> with useNavigation.
Pattern B — Conform Forms
Used for forms with useForm from @conform-to/react.
Conform + useFetcher Cleanup
Security Rules
NEVER persist:
- Passwords
- Tokens / API keys
- Session identifiers
Safe to persist:
- Names, emails, titles, slugs
- Content/body text
- Role selections, categories
- Any user-generated text content
Cleanup Timing
| Form Style | When to Clear | |
|---|---|---|
useNavigation | navigation.state === 'loading' && navigation.formAction | |
useFetcher | fetcher.state === 'loading' (after submitting) | |
| Login form | Don't clear — acts as "remember email" |
Validation Checklist
- [ ] Using
useFormFieldfor each user-editable, non-sensitive field - [ ] Form ID follows naming convention (simple or org-scoped)
- [ ] Passwords/tokens are NOT persisted
- [ ]
useClearFormcalled on successful submission - [ ] Radix Select uses
onValueChange(not form onChange delegation)
Reference Implementations
- Pattern A (uncontrolled):
app/routes/create-org.tsx,app/routes/org/articles/new.tsx - Pattern B (Conform):
app/routes/login.tsx,app/routes/users.new.tsx
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingapps/app/.claude/skills/form-persistence/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/lowcarbcheck/openplate/form-persistence)