formio-react skill
신규 React 애플리케이션을 구축하거나, 기존 앱에 Form.io CRUD 기능을 추가하거나, @formio/react를 사용하여 단일 Form.io 폼을 임베드할 수 있습니다.
- GitHub 스타
- 9
- 파일
- 21
- 마지막 커밋
- 2026년 11월 6일
- 라이선스
- MIT
- 허용된 도구
- —
formio-react skill은 무엇을 하나요?
formio-react은(는) agent skill입니다. 신규 React 애플리케이션을 구축하거나, 기존 앱에 Form.io CRUD 기능을 추가하거나, @formio/react를 사용하여 단일 Form.io 폼을 임베드할 수 있습니다.
skill의 SKILL.md에서 생성된 요약입니다.
formio-react skill 정보
Form.io 프로젝트를 위한 React 기반 인터페이스를 구축하는 개발자는 이 SKILL을 사용하여 새로운 애플리케이션을 스캐폴딩하거나, 기존 코드베이스에 CRUD 기능을 통합하거나, @formio/react 라이브러리를 사용하여 특정 폼을 임베드할 수 있습니다. 이 SKILL은 이미 데이터 모델 설계를 마치고 Vite, React Router data routers, TypeScript 스택을 사용하여 프론트엔드 구현을 시작할 준비가 된 사용자를 위해 설계되었습니다.
이 SKILL은 신규 애플리케이션 설정, 기존 애플리케이션 통합, 단일 폼 임베드라는 세 가지 별도 브랜치를 통해 작동합니다. 신규 프로젝트의 경우 워크스페이스 설정, 부트스트래핑, 구성, 인증, 리소스 생성을 포함하는 5단계 프로세스를 따릅니다. Form.io MCP server를 활용하여 프로젝트 URL과 베이스 URL을 확인하므로 모든 개발 작업이 올바른 배포 환경을 대상으로 수행되도록 보장합니다. 이 SKILL은 라우터 역할을 수행하며, 애플리케이션 구축과 데이터 모델링 사이의 엄격한 경계를 유지하면서 특정 구현 작업을 전문화된 하위 문서로 전달합니다.
agent가 수행할 수 있는 작업
- 1신규 React 애플리케이션 스캐폴딩특정 Form.io 프로젝트를 중심으로 Vite 및 TypeScript 워크스페이스를 생성합니다.
- 2기존 앱에 CRUD 통합이미 사용 중인 React 코드베이스에 Form.io 리소스 관리 기능을 추가합니다.
- 3단일 폼 임베드React 애플리케이션의 특정 페이지 내에 개별 Form.io 폼을 렌더링합니다.
skill의 SKILL.md를 기반으로 작성되었습니다. 모든 사용 사례는 해당 문서의 인용구와 대조 확인되었습니다.
formio-react skill 설치 방법
각 명령은 skill 폴더를 클라이언트의 skills 디렉터리에 복사합니다. 클라이언트를 재시작하거나 새 세션을 시작하여 로드하세요.플러그인에 formio-react skill 설치
/plugin marketplace add formio/ai /plugin install formio-ai@formio
Claude Code에 formio-react skill 설치
~/.claude/skills/formio-react/SKILL.md
$ npx degit formio/ai/plugin/skills/formio-react ~/.claude/skills/formio-reactClaude Code (project)에 formio-react skill 설치
.claude/skills/formio-react/SKILL.md
$ npx degit formio/ai/plugin/skills/formio-react .claude/skills/formio-reactCodex에 formio-react skill 설치
~/.agents/skills/formio-react/SKILL.md
$ npx degit formio/ai/plugin/skills/formio-react ~/.agents/skills/formio-reactGemini CLI에 formio-react skill 설치
~/.gemini/skills/formio-react/SKILL.md
$ npx degit formio/ai/plugin/skills/formio-react ~/.gemini/skills/formio-reactClaude.ai에 formio-react skill 설치
npx degit formio/ai/plugin/skills/formio-react formio-react && zip -r formio-react.zip formio-react # claude.ai → Customize → Skills → + → Create skill → Upload a skill → formio-react.zip
SKILL.md
GitHub에서 보기Form.io + React — Framework Implementor
React is where this library's work lands three different ways, so this skill routes before it builds. One request wants a new application stood up around a Form.io project; another wants Form.io CRUD added to a React codebase that already exists and has its own conventions; a third wants a single form on a page. They share a preflight and very little else.
This file is a router. It holds the dispatch table, the shared preflight, and the handoff contracts. Every branch's own steps live in a sibling document, so a reader arriving for one branch never has to read another branch's steps to find their own.
What this skill does not do: choose the framework, design the data model, or import a template. Those belong upstream, to formio-application and formio-resource-planner, and they run before you.
Dispatch — pick the branch first
Determine which branch the request belongs to BEFORE loading any branch document.
| Branch | Request shape | Chain |
|---|---|---|
| Greenfield application | Build a new React application around a Form.io project | SETUP.md → BOOTSTRAP.md → CONFIG.md → AUTH.md → formio-react-resources/SKILL.md |
| Existing application | Add Form.io resource CRUD to a React application that already exists | SETUP.md → EXISTING.md → backfill CONFIG.md / AUTH.md as needed → formio-react-resources/SKILL.md |
| Embed a form | Render one Form.io form inside a React page | SETUP.md (project URLs only, when needed) → formio-react-form/SKILL.md |
The branches are mutually exclusive. When the request does not make the branch obvious, ask which one applies in ONE question round, using the client's structured question mechanism (in Claude Code, AskUserQuestion), before loading anything.
When the workspace contradicts the stated branch, say so and confirm. A greenfield request in a directory that already holds a React application, or an existing-application request in an empty directory, is a mismatch to surface rather than proceed through. Scaffolding over someone's app because they said "new" is not a recoverable mistake.
The embed branch is not an application build: it needs the project URLs and a provider, not a workspace, an auth surface, or a resource hierarchy. It runs none of BOOTSTRAP.md, EXISTING.md, CONFIG.md, or AUTH.md, and does not load formio-react-resources.
When an embed request turns out to want list, create, and edit screens over a resource, re-dispatch to the appropriate CRUD branch and say why the branch changed. Conversely the CRUD branches document no standalone embedding — that guidance lives in the embed branch alone.
Preflight — the Form.io MCP server
Check this when you reach your first Form.io tool call, not when this skill activates. The check is whether form_list is callable by you, under whatever name this client exposes it. If it is, proceed. If it is not, load the formio-mcp-setup skill and use it to help the user connect the server; that skill is the only remedy you offer, and this skill writes no MCP configuration itself.
A missing server blocks that call, not the turn. Reading this skill, answering a question from it, planning, and writing files to the working directory all need no server. Do everything that needs no server first and in full, then raise the gap when you actually reach the call that needs it. Opening with a blocked-on-setup message — or asking for a Project URL before there is anything to write to it — spends the user's turn on a step that was not due.
Never work around missing tools
Do not work around missing tools by making direct HTTP requests against a Form.io deployment, and do not write a throwaway script that makes them for you. This library documents the whole Form.io REST surface, which makes hand-rolling requests tempting and wrong — it bypasses the guardrails the tools enforce and can write to a live deployment unreviewed. Stop and report what is blocking instead.
That ban is on build-time work — the configuring you do in this session. It says nothing about the application you are building: an app is expected to call the Form.io REST API at runtime, to log its users in and to read and write their submissions, and formio-api's runtime-scope references document those endpoints for exactly that code.
Which project the tools target
Available tools are not a configured project. Every Form.io tool resolves which project it targets per working directory, and with no cwd argument the server takes that directory from the client's workspace root. Before the first call that reads from or writes to a deployment, ask the server what this directory resolves to by calling the project_get tool without cwd, and read the cwdSource it reports. When cwdSource is server or claude-project-dir, the directory is a guess — the MCP server's own, fixed at spawn, or a launch default — and may be mapped to a different project, so pass cwd — the user's current working directory — on a second project_get call and on the Form.io tool calls after it. Otherwise pass cwd only to target another directory, such as one application in a monorepo; and if project_get refuses because the client reports several workspace roots, pass cwd set to the one the user is working in. Do not shell out for this: the connected server answers it directly, with the same resolver every other tool uses, so what it reports is what the next call targets. If project_get is not callable, the connected server predates it — load the formio-mcp-setup skill, which moves the pinned version forward.
What project_get returns IS the configuration. There is one value to think about — the Project URL, the full URL of the Form.io project this work reads and writes. The Base URL (the deployment hosting it) is normally DERIVED from that project URL rather than supplied, so it is not a second thing to ask for. The values may come from a committed formio.json tracked with the application's own source, from this directory's mapping, or from the environment — the report says which. Do not ask the user to confirm or re-supply either one.
Branch on the status it returns. On ok, proceed. On not-configured — nothing is recorded for this directory — relay that message's own instruction to the user, ask for the single value it names, record it with project_set, and call project_get again. On base-url-unresolved the project IS recorded and one named value is still missing — the Base URL, for a project URL that names no deployment of its own: relay that message the same way, ask the user for that one value, and do exactly what that message names — which record the deployment goes in decides what the fix IS, and the report names it rather than leaving you to compose one. For a project this directory's own mapping holds, that is a project_set call, and the report also carries it as a structured remedy. For a project a committed formio.json holds, it is an EDIT to that file — the report names the path and the key, there is no remedy field to act on, and this server never writes a committed file, so composing a project_set call there is refused. Then call project_get again. Do not re-ask the user for the Project URL there; the report already reported it, and the call it names carries it for you. If the call fails outright instead of returning a status, it could not answer at all (an unreadable ~/.formio/projects.json, a formio.json that will not parse, a malformed URL): do NOT interview, because a project_set would fail for the same unreported reason and the loop would repeat with the cause never named — relay the error and stop until it is fixed. Before the first call that WRITES (form_create, form_update, form_publish, form_revert, role_create, role_update, action_create, action_update, action_delete, project_import, project_tag_create), state the resolved Project URL and Base URL in one line, so a wrong target is caught before anything is written to it.
Never invent a Base URL, never reuse one from another project or an earlier session, and never edit ~/.formio/projects.json by any means — its shape, its 0600 mode, and its merge rules belong to the server, and project_set is how you reach it. The server's own messages carry the URL shapes and the remedy for each; this skill does not restate them.
Greenfield branch — five gated phases
Run these in strict order, each loading its document by path, with a user-approval gate between each. A declined gate stops the flow without writing partial state.
- SETUP —
SETUP.md. Establish the workspace root and resolve the project configuration. - BOOTSTRAP —
BOOTSTRAP.md. Create the Vite + React + TypeScript workspace, install dependencies, capture versions, stash the design brief. - CONFIG —
CONFIG.md. Generatesrc/config.tsand mountFormioProvider. - AUTH —
AUTH.md. Generate the login, register, and logout routes, the root-loader user, andrequireUser. - Resources — load
formio-react-resources/SKILL.mdby path and hand off.
Without the gates a single "build it in React" scaffolds a workspace, writes configuration, and generates an entire authentication surface with no stopping point.
No phase is skipped silently. When a re-run finds a phase already satisfied, say so and move on.
Reset to an earlier phase when the workspace changes underneath you: the project URL is re-pointed (reset to SETUP), dependencies are reinstalled or the router is swapped (reset to BOOTSTRAP), or src/config.ts is edited by hand (reset to CONFIG). State which phase you are resetting to and why.
Existing-application branch
Load EXISTING.md. It inspects the application and reports before changing anything, then backfills ONLY the missing prerequisites. BOOTSTRAP.md never runs on this branch.
Planning and import are not yours
This skill never runs the planner and never imports. formio-resource-planner and template import into a Form.io project both belong to formio-application.
When you are invoked directly by a React-explicit trigger, expect an already-approved template.json and a project the template has been imported into. When neither exists, hand the request to formio-application, carrying React as the chosen framework — say so in one line, then load it — rather than planning yourself or asking the user to re-invoke anything. That skill runs the planner, imports, and hands back to you without asking the framework question again. The chain cannot usefully proceed without the plan in any case: BOOTSTRAP sizes the workspace against it, AUTH renders the planner's login and registration forms, and Resources generates from it.
Target stack
Vite + React Router data routers + TypeScript, client-rendered.
React Router's data-router API (createBrowserRouter with RouteObject arrays) is what this skill generates against: loaders, actions, errorElement, and post-action revalidation are what let the generated code drop the service, registry, alert bus, and refresh emitter that @formio/angular needs. React Router is not the only router in React, and the kernel's domain logic is router-agnostic by design — see formio-react-resources/references/app-integration.md for what another router would have to supply. What cannot host the generated resources is a router with no data phase: <BrowserRouter> with <Routes> alone has nowhere to put a loader.
Out of scope: Next.js App Router, and server-rendered React Router framework mode. Both server-render, and @formio/js is DOM-only — a loader that runs on the server cannot feed a server-rendered form screen. Say this plainly rather than generating output that will not run.
Handoff contract with the resources sub-skill
Load ./formio-react-resources/SKILL.md by path as the last step of BOTH CRUD branches. Do not invoke it by frontmatter name.
Payload — the fields formio-application sends are defined in formio-application/FRAMEWORK.md → "Handoff context reference", the same for every framework so the orchestrator needs no per-framework adaptation; this skill adds two for its own two CRUD branches (formio-application sends neither; the sub-skill defaults a missing branch to 'existing' and runs EXISTING.md's inspection itself):
workspacePathtemplateMdPathandtemplateJsonPathuserRequest(extend path)newResourceNames(extend path)frontendDesignStatusbranch—'greenfield'or'existing'- On the existing branch: the inspection findings — design conventions, authentication arrangement, current-user source
URLs are deliberately absent, as they are for Angular: the sub-skill resolves them with project_get and reconciles against the workspace's own src/config.ts.
Links
SETUP.md·BOOTSTRAP.md·EXISTING.md·CONFIG.md·AUTH.mdformio-react-resources/SKILL.md·formio-react-form/SKILL.mdproject-urls.md— the canonical URL guidance
이 스킬의 파일
21formio-react skill 질문
Claude Code에 formio-react skill을 어떻게 설치하나요?
npx degit formio/ai/plugin/skills/formio-react ~/.claude/skills/formio-react를 실행합니다. Claude Code는 ~/.claude/skills(모든 프로젝트) 또는 .claude/skills(한 프로젝트)에서 skills를 로드하며, 설명이 작업과 일치할 때 skill을 사용합니다.
formio-react skill을 사용할 수 있는 클라이언트는 무엇인가요?
Agent Skills 형식을 읽는 모든 클라이언트(Claude Code, Codex, Gemini CLI, claude.ai(ZIP으로 업로드))가 사용할 수 있습니다. skill 내 스크립트는 클라이언트가 코드 실행을 허용하는 경우에만 실행됩니다.
이 SKILL로 데이터 모델을 설계할 수 있나요?
아니요, 데이터 모델 설계는 formio-resource-planner SKILL에서 담당합니다.
Form.io MCP server가 보이지 않으면 어떻게 해야 하나요?
formio-mcp-setup SKILL을 로드하여 서버 연결을 진행해야 합니다.