From rjsf-agent
**Trigger:** `/rjsf-form "description"` or `/rjsf-form --from requirements.md` or `/rjsf-form` (resume)
How this skill is triggered — by the user, by Claude, or both
Slash command
/rjsf-agent:rjsf-formThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
**Trigger:** `/rjsf-form "description"` or `/rjsf-form --from requirements.md` or `/rjsf-form` (resume)
Trigger: /rjsf-form "description" or /rjsf-form --from requirements.md or /rjsf-form (resume)
The single command for building RJSF forms. Creates a session, runs all 7 phases in sequence, and pauses between each for your approval. If you stop midway, run /rjsf-form again to resume from where you left off.
Session Resolution (do NOT read session-pattern.md — algorithm is inline):
.rjsf/active-session → get formName → sessionDir = .rjsf/sessions/{formName}/{sessionDir}/session.json.rjsf/active-session does not exist but .rjsf/session.json does → perform legacy migration per Section 8, then re-read.Derive form name from input. Read the description text (or file content if --from was used). Extract the form's subject/purpose and convert to PascalCase:
PatientIntakeFormLoanApplicationFormEmployeeOnboardingQuestionnaireUserRegistrationForm)"Create the session automatically (same logic as /rjsf-new):
.rjsf/sessions/<FormName>/ already exists. If so, ask: "A session for already exists. Switch to it, or choose a different name?".rjsf/sessions/<FormName>/ directory..rjsf/sessions/<FormName>/session.json with the initial schema (all phases pending, version "2.0.0")..rjsf/active-session.Proceed to Step 4 (run pipeline from Phase 1) with the original input as the requirements.
Check for existing sessions under .rjsf/sessions/:
Sessions exist but none active:
"No active session. Found these forms:
FormName1 (Phase N, status)
FormName2 (Phase N, status)
Switch to one:
/rjsf-switch <FormName>Start a new form:
/rjsf-newthen/rjsf-form "describe your form""
No sessions at all:
"Welcome to rjsf-agent! To build a form:
/rjsf-form "describe your form here"Or create a session first with
/rjsf-new, then run/rjsf-form "description"."
Stop here.
Read session.json and determine the current state.
If phases["3"].status is "awaiting_client_approval" AND the developer's message contains any of these phrases (case-insensitive): "client approved", "approved", "yes", "proceed", "continue", "looks good", "go ahead":
phases["3"].status = "completed", phases["3"].completedAt = <ISO timestamp>.currentPhase = 4.If phases["3"].status is "awaiting_client_approval" and NO approval signal:
"Phase 3 prototype is awaiting client approval.
Share
{sessionDir}/prototype.htmlwith your client. Once they approve, run/rjsf-formand say 'client approved' to continue."
Stop here.
" is complete! All phases done.
- Make changes:
/rjsf-iterate "describe change"- New form:
/rjsf-newthen/rjsf-form "description"- Run tests:
npx vitest <outputPath>- Check status:
/rjsf-status"
Stop here.
Show brief status:
"Resuming from Phase — ."
Proceed to Step 4, starting from the first incomplete phase.
Run each phase in order, starting from currentPhase. Skip any phase whose status is already "completed". After each phase, check session.json to confirm the phase status before proceeding.
Phase 1 → invoke rjsf-requirements skill
(pass description text or --from file path if this is a new session)
IMPORTANT: Ask clarifying questions ONE AT A TIME. Do NOT dump
all 23 questions at once. Skip questions already answered by
the input. For key decisions (RJSF UI framework, form type,
styling approach), always ask individually — never auto-default
these. Question 1 (UI framework) MUST be presented as A/B/C/D/
E/F/G options — user picks exactly one letter. No "default",
no "all", no multi-select.
After completion → PAUSE (Step 5)
Phase 1.5 → invoke rjsf-suggest skill
Present enhancement suggestions ONE CATEGORY AT A TIME
(field enhancements first, then form layout, then visual polish).
Wait for developer response per category before showing the next.
After completion → PAUSE (Step 5)
Phase 2 → invoke rjsf-plan skill
After completion → PAUSE (Step 5)
Phase 2.5 → invoke rjsf-technical skill
Present technical decision GROUPS one at a time
(Schema & Validation first, then Form Behavior, etc.).
Wait for developer response per group before showing the next.
After completion → PAUSE (Step 5)
Phase 3 → invoke rjsf-prototype skill
After prototype is generated → HARD PAUSE for client approval.
Tell developer: "Share the prototype with your client.
Run /rjsf-form and say 'client approved' when they confirm."
STOP — do NOT auto-continue past Phase 3.
Phase 4 → invoke rjsf-execute skill
After completion → PAUSE (Step 5)
Phase 5 → invoke rjsf-test skill
Done → go to Step 6 (Completion)
Never dump all questions/options at once. This is the key UX principle:
After each phase completes (except Phase 3 and Phase 5), display:
"✅ Phase () complete.
Next: Phase <N+1> —
Continue? (y / skip / stop)
- y — proceed to next phase
- skip — skip next phase, move to the one after
- stop — save progress and exit"
Wait for the developer's response:
"completed" with completedAt = <ISO timestamp>, advance currentPhase, then show the pause prompt again for the phase after that. If skipping Phase 1.5 or 2.5 (optional enhancement phases), proceed cleanly. If skipping a core phase (1, 2, 3, 4), warn: "Skipping Phase may cause issues in later phases. Are you sure?""Paused at Phase . Run
/rjsf-formto resume, or/rjsf-statusto check progress." Stop here.
Phase 3 always pauses for client approval. After the prototype is generated, the rjsf-prototype skill sets status to awaiting_client_approval. Output:
"Prototype written to
{sessionDir}/prototype.html. Open it in any browser.Share this with your client. Once they approve, run
/rjsf-formand say 'client approved' to continue to code generation."
Stop here. Do NOT show y/skip/stop. Do NOT auto-continue to Phase 4.
After Phase 5 completes, output:
" is complete! All 7 phases done.
Generated files:
<outputPath>/
- Make changes:
/rjsf-iterate "describe change"- New form:
/rjsf-newthen/rjsf-form "description"- Run tests:
npx vitest <outputPath>ornpx jest <outputPath>- Check status:
/rjsf-status"
If the developer's message doesn't match the standard trigger but matches these patterns, route accordingly:
| If the developer says… | Route to |
|---|---|
| "build a form", "create a form", "I need a form", "new form" + description | Step 2 → create session → run pipeline |
| "continue", "resume", "where was I", "pick up where" | Step 3 → resume |
| "client approved", "approved", "yes client approved" | Step 3 → client approval flow |
| "change", "update", "modify", "add a field", "remove a field", "fix" | /rjsf-iterate |
| "tests", "generate tests", "write tests" | /rjsf-test (internal phase skill) |
| "status", "progress", "what phase" | /rjsf-status |
| "help", "what can you do", "commands" | /rjsf-help |
| "switch", "switch to", "work on" | /rjsf-switch |
| "list sessions", "show sessions", "my forms" | /rjsf-list |
| "delete session", "remove session" | /rjsf-delete |
If .rjsf/session.json exists and .rjsf/active-session does not exist, this is a legacy flat-directory layout. Perform migration:
.rjsf/session.json and extract the formName..rjsf/sessions/{formName}/..rjsf/session.json to .rjsf/sessions/{formName}/session.json.requirements-brief.md, enhanced-brief.md, form-plan.md, technical-choices.md from .rjsf/ to .rjsf/sessions/{formName}/.prototype/prototype.html exists, move it to .rjsf/sessions/{formName}/prototype.html.artifactPath values in the migrated session.json to filenames only.version to "2.0.0".formName to .rjsf/active-session."Migrated existing session for <formName> to multi-session layout."Provides a checklist for code reviews covering functionality, security, performance, maintainability, tests, and quality. Use for pull requests, audits, team standards, and developer training.
npx claudepluginhub rujal408/rjsf-agent --plugin rjsf-agent