Skip to main content
skill CX Codex

inertia-rails-setup — Claude Code skill: what it does, how to install

Detects your frontend framework and backend gems in an Inertia Rails project, offers missing dependencies, and writes instructions into CLAUDE.md.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add inertia-rails/skills --skill inertia-rails-setup -a claude-code
Open on GitHub

What inertia-rails-setup does

The skill reads Gemfile and package.json to identify whether the project runs React, Vue 3, or Svelte. It inspects gems used for pagination, serialization, and auth. Once detected, it prompts you to install recommended tools like alba-inertia, js-routes, pagy, or framework-specific shadcn packages.

During scaffolding, the skill configures initializers and path helpers. It sets up ApplicationResource for alba-inertia and points Typelizer to the generated types folder. Path aliases @/ go into tsconfig.json, leaving vite.config.ts untouched because vite-plugin-ruby handles Vite resolution.

The setup halts immediately if inertia_rails is missing. It finishes by updating CLAUDE.md with a ## Inertia Rails Stack block, telling the agent which guidelines apply.

What it helps with

  • detect frontend framework and helper gems in an Inertia Rails repository
  • scaffold alba-inertia with Typelizer configuration
  • initialize shadcn components suited for React, Vue, or Svelte
  • write an accurate ## Inertia Rails Stack section into CLAUDE.md

Example prompts for the agent

  • Initialize the Inertia Rails setup for this project
  • Detect our Inertia stack and update CLAUDE.md
  • Check missing Inertia Rails dependencies and configure shadcn

How to install inertia-rails-setup

1Skills CLI (Vercel)

npx skills add inertia-rails/skills --skill inertia-rails-setup -a claude-code

2Manually: put the files in place

~/.claude/skills/inertia-rails-setup/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/inertia-rails-setup/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about inertia-rails-setup

How do I install inertia-rails-setup in Claude Code?

Run npx skills add inertia-rails/skills --skill inertia-rails-setup -a claude-code. You can also place the file directly at ~/.claude/skills/inertia-rails-setup/SKILL.md.

What does inertia-rails-setup do?

It inspects your repository, detects your frontend and backend dependencies, prompts to install missing helpers, and documents the stack inside CLAUDE.md.

Can I run this without inertia_rails in Gemfile?

No, the skill stops immediately if inertia_rails is absent from Gemfile. You must add the gem first before running setup.

Source text

SKILL.md · MIT
---
name: inertia-rails-setup
description: >-
  One-time project initializer for Inertia Rails skills. Detects stack and frontend framework
  (React/Vue/Svelte) from Gemfile and package.json, offers to install recommended deps
  (alba-inertia, js-routes, pagy, shadcn), and generates a CLAUDE.md section that configures
  which skill patterns apply. Use when first installing these skills, bootstrapping a new
  Inertia Rails project, or when the stack changes.
---

# Inertia Rails Project Setup

Detect stack, offer recommended deps, generate CLAUDE.md configuration.

**Run once per project.** Re-run when the stack changes.

**NEVER:**
- Run setup without `inertia_rails` gem in Gemfile — all skills assume it exists. If missing, tell the user to install it first.
- Overwrite existing `## Inertia Rails Stack` in CLAUDE.md without reading it — the user may have manual customizations. Replace only the auto-generated block.
- Add `@/` resolve aliases to `vite.config.ts` — `vite-plugin-ruby` already provides them. Only add to `tsconfig.json`.
- Recommend `alba-inertia` if the project uses `jbuilder` AND the user hasn't expressed interest in switching — suggest it, but don't push. You CAN still suggest it if the project has `blueprinter` (alba is a direct upgrade path).
- Generate CLAUDE.md blocks for skills the user doesn't have installed — saying "alba-inertia skill does NOT apply" is correct; saying "use alba-inertia" when the gem is absent is wrong.

## Step 1: Detect Current Stack

Read `Gemfile` (NOT `Gemfile.lock`) and `package.json` and check for:

| Look for | Means |
|----------|-------|
| `inertia_rails` gem | Inertia Rails installed (required) |
| `@inertiajs/react` in package.json | React frontend |
| `@inertiajs/vue3` in package.json | Vue 3 frontend |
| `@inertiajs/svelte` in package.json | Svelte frontend |
| `alba-inertia` gem | Convention-based rendering active |
| `alba` + `typelizer` gems (no `alba-inertia`) | Alba serialization without convention rendering |
| `pagy` gem | Pagy pagination |
| `kaminari` gem | Kaminari pagination |
| `rspec-rails` gem | RSpec testing |
| `js-routes` gem | Typed frontend path helpers |
| `devise` gem | Devise authentication |
| `pundit` gem | Pundit authorization |
| `action_policy` gem | Action Policy authorization |
| `components.json` in root exists | shadcn installed (React: shadcn/ui, Vue: shadcn-vue, Svelte: shadcn-svelte) |

## Step 2: Recommend Missing Deps

Present detected stack, then offer deps that unlock skill features but aren't
installed yet. Use AskUserQuestion with multiSelect for the recommendations.

**Only recommend what's missing.** Skip anything already detected in Step 1.

| Dep | Type | Install command | What it unlocks |
|-----|------|-----------------|-----------------|
| `alba` + `typelizer` + `alba-inertia` | gems | `bundle add alba typelizer alba-inertia` | Convention-based rendering, auto-generated TypeScript types from Ruby. Eliminates `render inertia: { ... }` boilerplate and manual TS interfaces. Unlocks `alba-inertia` skill. |
| `js-routes` | gem | `bundle add js-routes` | Typed path helpers (`usersPath()`, `userPath(id)`) in React — no more hardcoded URL strings. |
| `pagy` | gem | `bundle add pagy` | Lightweight pagination with Inertia-friendly metadata. |
| shadcn/ui (React) | npx | `npx shadcn@latest init` | Pre-built React components adapted for Inertia. Unlocks `shadcn-inertia` skill. |
| shadcn-vue (Vue) | npx | `npx shadcn-vue@latest init` | Pre-built Vue components adapted for Inertia. Unlocks `shadcn-vue-inertia` skill. |
| shadcn-svelte (Svelte) | npx | `npx shadcn-svelte@latest init` | Pre-built Svelte components (bits-ui) adapted for Inertia. Unlocks `shadcn-svelte-inertia` skill. |

**Do NOT recommend** gems the user clearly chose alternatives for (e.g., don't suggest Pagy if Kaminari is present, you can still suggest alba if the project has `jbuilder` or `blueprinter`).

## Step 3: Install Opted-In Deps

Post-install scaffolding per dep:

1. **alba-inertia** — also scaffold `ApplicationResource`:
   ```ruby
   # app/resources/application_resource.rb
   class ApplicationResource
     include Alba::Resource
     helper Typelizer::DSL
     helper Alba::Inertia::Resource
     include Rails.application.routes.url_helpers
   end
   ```
   And add Typelizer initializer:
   ```ruby
   # config/initializers/typelizer.rb
   Typelizer.configure do |config|
     config.output_dir = Rails.root.join("app/frontend/types/generated")
   end
   ```
2. **js-routes** — run `rails generate js_routes` if the generator exists
3. **shadcn** — framework-specific init:
   - React: `npx shadcn@latest init`
   - Vue: `npx shadcn-vue@latest init`
   - Svelte: `npx shadcn-svelte@latest init`
   After init, add `@/` resolve aliases to `tsconfig.json` if not present

## Step 4: Generate CLAUDE.md

Find or create `CLAUDE.md` in the project root. If `## Inertia Rails Stack`
exists, replace it (up to next `##` or EOF). Otherwise, append.

**MANDATORY — READ ENTIRE FILE** before assembling the CLAUDE.md block:
[`references/claude-md-templates.md`](references/claude-md-templates.md) (~90 lines) — all
template blocks for each stack variant (serialization, UI, pagination, testing, routing,
authorization). Pick one block per category based on the detected stack.

**Do NOT load** the templates file until Step 4 — Steps 1-3 determine which blocks to use.

## Troubleshooting

| Symptom | Cause | Fix |
|---------|-------|-----|
| `npx shadcn@latest init` fails with "No framework detected" | Missing or misconfigured `vite.config.ts` | Ensure `vite-plugin-ruby` is configured and `tailwindcss` is in `package.json` before running init |
| Typelizer generates types in wrong directory | Missing or wrong `output_dir` in initializer | Add `config/initializers/typelizer.rb` with `config.output_dir = Rails.root.join("app/frontend/types/generated")` |
| `@/` imports not resolving | Aliases added to `vite.config.ts` instead of `tsconfig.json` | `vite-plugin-ruby` handles Vite aliases — only `tsconfig.json` needs `@/` paths for TypeScript |
| CLAUDE.md has conflicting instructions | Multiple `## Inertia Rails Stack` sections | Delete duplicates — only one auto-generated block should exist |
| Skills reference `alba-inertia` but it's not installed | Setup wasn't run, or alba wasn't selected | Re-run setup; CLAUDE.md should say "alba-inertia skill does NOT apply" if gem is absent |
| `js_routes:generate` fails | `js-routes` gem installed but generator not yet run | Run `rails generate js_routes` first to create the config file, then `rails js_routes:generate` |

## Step 5: Summary

Tell the user:
1. What was installed
2. Which skills are relevant to their stack (and which to ignore)
3. Review `## Inertia Rails Stack` in CLAUDE.md — it takes precedence over
   generic examples in individual skills

© inertia-rails · MIT · inertia-rails/skills

Similar skills

All skills for Agent setup: memory, context, orchestration →

From the same set8

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor