mcpField
I
inertia-rails-setup

inertia-rails-setup

github.com/inertia-railsDevelopment70421 installsUpdated 37w ago
Repository

About inertia-rails-setup

A setup skill for Inertia Rails projects that detects the current stack, suggests missing dependencies, and generates a CLAUDE.md stack section. It is intended for project initialization and should be rerun when the stack changes.

Key features

  1. 01Detects gems and frontend framework from project files
  2. 02Recommends missing dependencies based on detected stack
  3. 03Installs selected dependencies and scaffolding
  4. 04Generates or updates the Inertia Rails section in CLAUDE.md

Use cases

  1. 01Setting up Inertia Rails instructions in a new project
  2. 02Checking which stack-specific dependencies are missing
  3. 03Refreshing project guidance after a stack change

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/inertia-rails/skills --skill inertia-rails-setup

After installing, type/inertia-rails-setupin Claude Code to confirm it loaded.

Bundled filesreferences/claude-md-templates.md

Details

From the project README

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 forMeans
inertia_rails gemInertia Rails installed (required)
@inertiajs/react in package.jsonReact frontend
@inertiajs/vue3 in package.jsonVue 3 frontend
@inertiajs/svelte in package.jsonSvelte frontend
alba-inertia gemConvention-based rendering active
alba + typelizer gems (no alba-inertia)Alba serialization without convention rendering
pagy gemPagy pagination
kaminari gemKaminari pagination
rspec-rails gemRSpec testing
js-routes gemTyped frontend path helpers
devise gemDevise authentication
pundit gemPundit authorization
action_policy gemAction Policy authorization
components.json in root existsshadcn 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.

DepTypeInstall commandWhat it unlocks
alba + typelizer + alba-inertiagemsbundle add alba typelizer alba-inertiaConvention-based rendering, auto-generated TypeScript types from Ruby. Eliminates render inertia: { ... } boilerplate and manual TS interfaces. Unlocks alba-inertia skill.
js-routesgembundle add js-routesTyped path helpers (usersPath(), userPath(id)) in React — no more hardcoded URL strings.
pagygembundle add pagyLightweight pagination with Inertia-friendly metadata.
shadcn/ui (React)npxnpx shadcn@latest initPre-built React components adapted for Inertia. Unlocks shadcn-inertia skill.
shadcn-vue (Vue)npxnpx shadcn-vue@latest initPre-built Vue components adapted for Inertia. Unlocks shadcn-vue-inertia skill.
shadcn-svelte (Svelte)npxnpx shadcn-svelte@latest initPre-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:
    # 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:
    # 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 (~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

SymptomCauseFix
npx shadcn@latest init fails with "No framework detected"Missing or misconfigured vite.config.tsEnsure vite-plugin-ruby is configured and tailwindcss is in package.json before running init
Typelizer generates types in wrong directoryMissing or wrong output_dir in initializerAdd config/initializers/typelizer.rb with config.output_dir = Rails.root.join("app/frontend/types/generated")
@/ imports not resolvingAliases added to vite.config.ts instead of tsconfig.jsonvite-plugin-ruby handles Vite aliases — only tsconfig.json needs @/ paths for TypeScript
CLAUDE.md has conflicting instructionsMultiple ## Inertia Rails Stack sectionsDelete duplicates — only one auto-generated block should exist
Skills reference alba-inertia but it's not installedSetup wasn't run, or alba wasn't selectedRe-run setup; CLAUDE.md should say "alba-inertia skill does NOT apply" if gem is absent
js_routes:generate failsjs-routes gem installed but generator not yet runRun 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

Comments

Markdown supported