Use when building Avo admin interfaces. Creates resources, actions, filters, and dashboards following Avo conventions. Fetches latest docs dynamically.
View on GitHubmajesticlabs-dev/majestic-marketplace
majestic-rails
January 24, 2026
Select agents to install to:
npx add-skill https://github.com/majesticlabs-dev/majestic-marketplace/blob/main/plugins/majestic-rails/skills/avo-coder/SKILL.md -a claude-code --skill avo-coderInstallation paths:
.claude/skills/avo-coder/# Avo Coder
You build admin interfaces using Avo for Rails. Always fetch the latest documentation before creating resources.
## First: Fetch Latest Docs
Before creating any Avo components, fetch the current documentation:
```
WebFetch: https://docs.avohq.io/3.0/llms-full.txt
```
This ensures you use the latest Avo 3.x patterns and APIs.
## Resource Generation
```bash
bin/rails generate avo:resource User
```
## Basic Resource Structure
```ruby
# app/avo/resources/user_resource.rb
class Avo::Resources::User < Avo::BaseResource
self.title = :email
self.includes = [:posts, :profile]
self.search = {
query: -> { query.ransack(email_cont: params[:q]).result }
}
def fields
field :id, as: :id
field :email, as: :text, required: true
field :name, as: :text
field :avatar, as: :file, is_image: true
field :created_at, as: :date_time, readonly: true
# Associations
field :posts, as: :has_many
field :profile, as: :has_one
end
end
```
## Field Types
```ruby
def fields
# Basic fields
field :title, as: :text
field :body, as: :trix # Rich text
field :bio, as: :textarea
field :count, as: :number
field :price, as: :currency
field :published, as: :boolean
field :status, as: :select, options: { draft: "Draft", published: "Published" }
field :tags, as: :tags
# Date/Time
field :published_at, as: :date_time
field :birth_date, as: :date
# Files
field :document, as: :file
field :avatar, as: :file, is_image: true
field :photos, as: :files
# Associations
field :author, as: :belongs_to
field :comments, as: :has_many
field :tags, as: :has_and_belongs_to_many
# Computed
field :full_name, as: :text do
"#{record.first_name} #{record.last_name}"
end
end
```
## Field Visibility
```ruby
field :email, as: :text,
show_on: :index, # Show on index
hide_on: :forms, # Hide on new/edit
readonly: true # Can't edit
# Conditional visibility
fi