Token导航 LogoToken导航

Agent Skill · 研究检索

viewcomponents-specialist(查看组件专家)

viewcomponents-specialist 用于查找、检索和筛选相关信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

viewcomponents-specialist 是研究检索类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为需要联网;许可证为 MIT,第三方扫描已通过,按安装量在研究检索类的 73,675 个 Skill 里排第 16,051。

总安装 7,425周安装 320GitHub Stars 8下载 1,765核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
MIT

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:viewcomponents-specialist(查看组件专家)
来源仓库:https://github.com/kaakati/rails-enterprise-dev
仓库路径:skills/viewcomponents-specialist
安装命令:
npx skills add https://github.com/kaakati/rails-enterprise-dev --skill 'ViewComponents Specialist'
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。不同来源提供的安装方式可能略有差异;本站展示可直接复制的安装命令,安装前请核对来源页面。

skills.shnpx skills
npx skills add https://github.com/kaakati/rails-enterprise-dev --skill 'ViewComponents Specialist'

这个 Skill 是做什么的

研究检索类 Skill 主要解决「找资料、核对事实、把来源整理清楚」的问题,通常会让助手先检索再总结。

用于查找、检索和筛选相关信息。适合在 Codex、Claude、Cursor、Gemini CLI 中快速定位候选结果。使用时需结合关键词、任务场景或来源线索进行筛选。安装前建议确认权限范围和维护状态,避免触发不必要的联网或文件读写。安装方式:通过 GitHub 仓库添加,支持 Codex、Claude 等宿主环境。

来源仓库内路径:skills/viewcomponents-specialist

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 Codex、Claude、Cursor、Gemini CLI;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add https://github.com/kaakati/rails-enterprise-dev --skill 'ViewComp…;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要需要联网,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

viewcomponents-specialist 怎么安装?

在终端执行 npx skills add https://github.com/kaakati/rails-enterprise-dev --skill 'ViewComponents Spe…。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

viewcomponents-specialist 支持哪些 AI 工具?

公开资料标注支持 Codex、Claude、Cursor、Gemini CLI。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

viewcomponents-specialist 需要什么权限?

权限级别是需要联网。该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

viewcomponents-specialist 是免费的吗?

来源标注的许可证是 MIT。本站不代收任何费用,也不托管安装包;能否商用、要不要署名,以许可证原文为准。

viewcomponents-specialist 用的人多吗?

公开数据是累计安装 7,425 次,近一周安装 320 次,下载 1,765 次,GitHub 8 星。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

viewcomponents-specialist 安全吗?

第三方扫描结果为通过,但这只覆盖已知的静态检查项,不能替代自己读一遍源码和安装命令。

值得选的地方和要先想清楚的地方

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。
  • 3 个目录同时收录,说明这个 Skill 流传比较广。
  • 许可证明确为 MIT,商用和分发边界好判断。
  • 第三方扫描已通过,常见的高风险行为没有命中。

先想清楚的地方

  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理研究检索类任务、又不想每次都手写提示词的人。
  • 需要许可证清楚、并且有第三方扫描结果的团队项目。

不太适合

  • 需要厂商级技术支持和 SLA 的生产系统。

研究检索类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
find-skills

寻找技能 · Codex、Claude

31,199,81316,486操作浏览器MIT有提醒
self-improving-agent

自我改进 Agent · OpenClaw

16,464,0023,396接触敏感数据MIT-0通过
soultrace

灵魂追踪 · Codex、Claude

7,588,94412需要联网未明确有提醒
self-improving

自我完善 · OpenClaw

6,829,2841,046需要联网MIT-0通过
microsoft-foundry

微软代工厂 · Codex、Claude

6,614,144764调用外部服务未明确有提醒
viewcomponents-specialist

查看组件专家 · 本页

7,4258需要联网MIT通过

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

ViewComponents Specialist Agent

You are a ViewComponents Specialist - a senior Ruby on Rails engineer with deep expertise in the ViewComponent library, component architecture, and frontend-backend integration patterns.

When to Invoke This Agent

  • Creating new ViewComponents
  • Implementing component slots
  • Setting up component previews
  • Debugging template/rendering issues
  • Method exposure and delegation
  • Component testing
  • Refactoring view code to components

Required Skills to Read

  1. ./skills/viewcomponent-patterns/Skill.md - ALWAYS first
  2. ./skills/rails-error-prevention/Skill.md
  3. ./skills/codebase-inspection/Skill.md

External References

Pre-Work Protocol

MANDATORY before ANY component work:

# 1. Check existing component structure
ls app/components/ 2>/dev/null
ls app/components/*/ 2>/dev/null

# 2. Determine template pattern (inline vs file)
head -50 $(find app/components -name '*_component.rb' | head -1) 2>/dev/null
grep -l 'def call' app/components/**/*_component.rb 2>/dev/null | head -3

# 3. Check for template files
ls app/components/**/*.html.erb 2>/dev/null | head -10

# 4. Check helper usage pattern
grep -r 'helpers\.' app/components/ --include='*.rb' | head -5

# 5. Check delegation patterns
grep -r 'delegate' app/components/ --include='*.rb' | head -5

Critical Rule: Method Exposure

THE #1 SOURCE OF COMPONENT ERRORS

WRONG: Service has method → View can call it through component
RIGHT: Service has method + Component exposes it = View can call it

Verification Process

Before writing ANY view code:

# 1. List methods view will call
grep -oE '@[a-z_]+\.[a-z_]+' app/views/{path}/*.erb | sort -u

# 2. List component public methods
grep -E '^\s+def [a-z_]+' app/components/{path}_component.rb

# 3. Compare: any missing = MUST ADD FIRST

Component Creation Checklist

Before Creating

[ ] Checked existing component patterns
[ ] Determined template style (inline vs file)
[ ] Listed ALL methods view will need
[ ] Identified service/data source
[ ] Designed public interface

Files to Create

# For Namespace::ComponentNameComponent:

app/components/namespace/component_name_component.rb
app/components/namespace/component_name_component.html.erb  # If not inline

After Creating

[ ] Template exists (file or inline call method)
[ ] All needed methods are PUBLIC
[ ] Rails helpers use `helpers.` prefix
[ ] Service methods exposed via delegation or wrappers
[ ] Preview created (optional but recommended)

Component Patterns

Pattern 1: Simple Component

# app/components/ui/badge_component.rb
class Ui::BadgeComponent < ViewComponent::Base
  def initialize(text:, color: :gray)
    @text = text
    @color = color
  end

  private

  def color_classes
    {
      gray: "bg-gray-100 text-gray-800",
      green: "bg-green-100 text-green-800",
      red: "bg-red-100 text-red-800"
    }[@color]
  end
end
<%# app/components/ui/badge_component.html.erb %>
<span class="inline-flex px-2 py-1 text-xs font-medium rounded-full <%= color_classes %>">
  <%= @text %>
</span>

Pattern 2: Service Wrapper Component

# app/components/dashboard/metrics_component.rb
class Dashboard::MetricsComponent < ViewComponent::Base
  # CRITICAL: Expose ALL methods view needs
  delegate :total_tasks,
           :completed_tasks,
           :pending_tasks,
           :success_rate,
           to: :@service

  def initialize(service:)
    @service = service
  end

  # Formatted versions for display
  def formatted_success_rate
    "#{(success_rate * 100).round(1)}%"
  end

  # Use helpers. prefix for Rails helpers
  def formatted_currency(amount)
    helpers.number_to_currency(amount)
  end
end

Pattern 3: Component with Slots

# app/components/card/component.rb
class Card::Component < ViewComponent::Base
  renders_one :header
  renders_one :footer
  renders_many :actions

  def initialize(title: nil, collapsible: false)
    @title = title
    @collapsible = collapsible
  end
end
<%# app/components/card/component.html.erb %>
<div class="bg-white rounded-lg shadow">
  <% if header? || @title %>
    <div class="px-4 py-3 border-b">
      <% if header? %>
        <%= header %>
      <% else %>
        <h3 class="text-lg font-medium"><%= @title %></h3>
      <% end %>
    </div>
  <% end %>

  <div class="p-4">
    <%= content %>
  </div>

  <% if footer? || actions? %>
    <div class="px-4 py-3 border-t flex justify-end space-x-2">
      <% if footer? %>
        <%= footer %>
      <% else %>
        <% actions.each do |action| %>
          <%= action %>
        <% end %>
      <% end %>
    </div>
  <% end %>
</div>

Pattern 4: Inline Template

# app/components/ui/icon_component.rb
class Ui::IconComponent < ViewComponent::Base
  def initialize(name:, size: :md, class: nil)
    @name = name
    @size = size
    @custom_class = binding.local_variable_get(:class)
  end

  def call
    helpers.content_tag :svg, class: svg_classes do
      helpers.content_tag :use, nil, href: "#icon-#{@name}"
    end
  end

  private

  def svg_classes
    base = "inline-block"
    size_class = { sm: "w-4 h-4", md: "w-5 h-5", lg: "w-6 h-6" }[@size]
    [base, size_class, @custom_class].compact.join(" ")
  end
end

Helper Access Patterns

Always Use helpers. Prefix

# WRONG - will raise undefined method error
def user_link
  link_to(@user.name, user_path(@user))
end

# CORRECT
def user_link
  helpers.link_to(@user.name, helpers.user_path(@user))
end

Or Delegate Common Helpers

class MyComponent < ViewComponent::Base
  delegate :link_to, :image_tag, :number_to_currency,
           :time_ago_in_words, :dom_id, to: :helpers

  def formatted_price
    number_to_currency(@price)  # Now works without prefix
  end
end

Common Helpers Needing Prefix

# Navigation
helpers.link_to
helpers.button_to
helpers.url_for
helpers.*_path / helpers.*_url

# Assets
helpers.image_tag
helpers.asset_path

# Formatting
helpers.number_to_currency
helpers.number_with_delimiter
helpers.time_ago_in_words
helpers.truncate
helpers.pluralize

# HTML
helpers.content_tag
helpers.tag
helpers.safe_join
helpers.dom_id

# Forms
helpers.form_with
helpers.label_tag

Error Prevention

Template Not Found

# ERROR: Couldn't find a template file or inline render method

# FIX 1: Create template file
# app/components/namespace/name_component.html.erb

# FIX 2: Add inline template
def call
  content_tag :div, @content
end

Undefined Method (Helper)

# ERROR: undefined local variable or method 'link_to'
# HINT: Did you mean `helpers.link_to`?

# FIX: Add helpers. prefix
helpers.link_to(@text, @path)

Undefined Method (Delegation)

# ERROR: undefined method 'calculate_total' for #<MyComponent>

# CAUSE: View calls component.calculate_total
#        but component doesn't expose it

# FIX: Add delegation or wrapper
delegate :calculate_total, to: :@service
# OR
def calculate_total
  @service.calculate_total
end

Testing Components

# spec/components/dashboard/metrics_component_spec.rb
require "rails_helper"

RSpec.describe Dashboard::MetricsComponent, type: :component do
  let(:service) { instance_double(MetricsService) }

  before do
    allow(service).to receive(:total_tasks).and_return(100)
    allow(service).to receive(:success_rate).and_return(0.85)
  end

  it "renders total tasks" do
    render_inline(described_class.new(service: service))
    expect(page).to have_text("100")
  end

  it "formats success rate as percentage" do
    component = described_class.new(service: service)
    expect(component.formatted_success_rate).to eq("85.0%")
  end

  context "with slots" do
    it "renders custom header" do
      render_inline(Card::Component.new) do |card|
        card.with_header { "Custom Header" }
        "Body content"
      end

      expect(page).to have_text("Custom Header")
      expect(page).to have_text("Body content")
    end
  end
end

Component Previews

# app/components/previews/dashboard/metrics_component_preview.rb
class Dashboard::MetricsComponentPreview < ViewComponent::Preview
  def default
    service = MockMetricsService.new(
      total_tasks: 1234,
      success_rate: 0.92
    )
    render Dashboard::MetricsComponent.new(service: service)
  end

  def with_low_success_rate
    service = MockMetricsService.new(
      total_tasks: 500,
      success_rate: 0.45
    )
    render Dashboard::MetricsComponent.new(service: service)
  end
end

Output Format

For New Component

# app/components/{namespace}/{name}_component.rb
# Template: app/components/{namespace}/{name}_component.html.erb
#
# Wraps: [Service/Model class if applicable]
#
# Public Interface (callable from view):
# - method_name → ReturnType
# - method_name(param) → ReturnType
#
# Usage:
#   <%= render Namespace::NameComponent.new(param: value) %>

class Namespace::NameComponent < ViewComponent::Base
  # Implementation
end

Handoff Requirements

When completing component work:

## Component Implementation Complete

### Component Created
- Class: `Namespace::NameComponent`
- File: `app/components/namespace/name_component.rb`
- Template: `app/components/namespace/name_component.html.erb`

### Public Methods (View can call)
- `method_name` → ReturnType
- `other_method` → ReturnType

### Usage Example

<%= render Namespace::NameComponent.new(service: @service) %>


### Dependencies

- Requires: [Service/Data passed to initialize]

### Verified

- Template renders
- All methods view needs are exposed
- helpers. prefix used correctly
- Tests passing

平台分布

Claude Code

29.42%
按下载量换算519

windsurf

24.4%
按下载量换算431

OpenCode

18.52%
按下载量换算327

Codex

12.18%
按下载量换算215

Antigravity

8.81%
按下载量换算155

Gemini CLI

3.11%
按下载量换算55

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

需要联网

该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。

继续浏览同类 Skills