원클릭으로
rbs-professional
A skill to assist to write RBS (Ruby signature, Ruby Type system) and rbs-inline.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
A skill to assist to write RBS (Ruby signature, Ruby Type system) and rbs-inline.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
GitHub Issue や Pull Request にコメントを投稿する。Use when Claude needs to: (1) Post a comment on a GitHub Issue, (2) Post a comment on a Pull Request, (3) Reply to existing discussions. コメント本文を標準入力から受け取ることで引用符の問題を回避する。
tomoasleep が書くような Pull Request の書き方を教えます。PR の説明文を書く・直す・レビューする・What/How/Why を整える・flaky 修正やバグ修正の説明を書くときは必ず使ってください。特に How が実装詳細に寄りすぎている場合や、Why に「なぜこの変更で直るのか」を検証可能に書く必要がある場合に使います。
指示された内容、または GitHub Pull Request で実装している内容に対して、 Playwright MCP, Playwright テストコードを生成および実行します。
GitHub Sub Issuesの作成・管理(追加/削除/一覧)を行うためのSkill。Use when Claude needs to: (1) Plan作成やタスク分解で関連するIssueを複数作り、親子関係を付けたい, (2) 既存の親Issueに子Issueを追加して進捗を追いたい, (3) 既存の親子関係を解除したい, (4) 親Issueに紐づくSub Issue一覧を取得したい
Skillの利用時に scripts の相対パス解決ミスを防ぐための実行手順。相対パス、cwd、No such file or directory、./scripts、scripts/ が出る文脈では必ずこのSkillを使って、Skill Base Directory基準で絶対パス実行に正規化する。
カレントディレクトリの .vibedump.jsonl に作業ログを追記し、jq でタスク状況を集計するときに使う
| name | rbs-professional |
| description | A skill to assist to write RBS (Ruby signature, Ruby Type system) and rbs-inline. |
RBS Professional is a skill designed to assist developers in writing RBS (Ruby Signature) and rbs-inline (embedding RBS type declarations into Ruby code as comments) code. RBS is a language for describing the types of Ruby programs, enabling better type checking and documentation.
_type_ ::= _class-name_ _type-arguments_ (Class instance type)
| _interface-name_ _type-arguments_ (Interface type)
| _alias-name_ _type-arguments_ (Alias type)
| `singleton(` _class-name_ `)` (Class singleton type)
| _literal_ (Literal type)
| _type_ `|` _type_ (Union type)
| _type_ `&` _type_ (Intersection type)
| _type_ `?` (Optional type)
| `{` _record-name_ `:` _type_ `,` etc. `}` (Record type)
| `[]` | `[` _type_ `,` etc. `]` (Tuples)
| _type-variable_ (Type variables)
| `self`
| `instance`
| `class`
| `bool`
| `untyped`
| `nil`
| `top`
| `bot`
| `void`
| _proc_ (Proc type)
_class-name_ ::= _namespace_ /[A-Z]\w*/
_interface-name_ ::= _namespace_ /_[A-Z]\w*/
_alias-name_ ::= _namespace_ /[a-z]\w*/
_type-variable_ ::= /[A-Z]\w*/
_namespace_ ::= (Empty namespace)
| `::` (Root)
| _namespace_ /[A-Z]\w*/ `::` (Namespace)
_type-arguments_ ::= (No type arguments)
| `[` _type_ `,` etc. `]` (Type arguments)
_literal_ ::= _string-literal_
| _symbol-literal_
| _integer-literal_
| `true`
| `false`
_proc_ ::= `^` _parameters?_ _self-type-binding?_ _block?_ `->` _type_
| `^` `(` `?` `)` `->` _type_ # Proc type with untyped parameter
Integer # Instance of Integer class
::Integer # Instance of ::Integer class
Hash[Symbol, String] # Instance of Hash class with type application of Symbol and String
_ToS # _ToS interface
::Enumerator::_Each[String] # Interface name with namespace and type application
The name of type aliases starts with lowercase [a-z].
name
::JSON::t # Alias name with namespace
list[Integer] # Type alias can be generic
singleton(String)
singleton(::Hash) # Class singleton type cannot be parametrized.
123 # Integer
"hello world" # A string
:to_s # A symbol
true # true or false
Integer | String # Integer or String
Array[Integer | String] # Array of Integer or String
_Reader & _Writer # _Reader and _Writer
# @rbs size: Integer -- The size of the section in px
# @rbs optional: Integer -- Type of the optional parameter
# @rbs title: String -- Title of the section
# @rbs content: String -- Type of the optional keyword parameter
# @rbs *rest: String -- Type of the rest args
# @rbs **kwrest: untyped -- Type of the keyword rest args
# @rbs return: Section? -- Returns the new section or `nil`
def section(size, optional=123, title:, content: "Hello!", *rest, **kwrest)
end
# @rbs &block: (?) -> untyped -- Block is required, but not clear what will be yielded
def foo(&block)
yield 1
yield 2, "true"
end
# @rbs &block: ? (?) -> untyped -- Block is optional
def bar(&block)
end
# @rbs &: (String) -> void -- It yields String
def baz
end
# @rbs *: untyped
# @rbs **: String
# @rbs &: ? (String) -> bool
def foo(*, **) = nil
# @rbs yields: String
# @rbs skip: untyped
# @rbs !return: bool
def foo(return:, yields:, skip:) #: void
end
# `# @rbs override` annotation tells the method is overriding the super class definition.
# @rbs override
def foo(x, y)
end
class Foo
attr_reader :name #: String
attr_reader :size, :count #: Integer
end
class Foo
# @rbs @name: String -- Instance variable
# @rbs self.@all_names: Array[String] -- Instance variable of the class
end
# @rbs generic A -- Type of `a`
# @rbs generic unchecked in B < String -- Type of `b`
class Foo
end
# @rbs generic annotation, like class definition.# @rbs module-self annotation.# @rbs module-self BasicObject
module Kernel
end
The constant super class is supported. Generics is also supported by #[ annotation.
class Foo < String
end
class Bar < Array #[String]
end
The #[ syntax allows mixing generic modules.
class Foo
include Foo
extend Enumerable #[Integer, void]
end
# @rbs inherits annotation allows specifying super class with RBS syntax, even if the super class syntax in Ruby is something unsupported.
# @rbs inherits Hash[String, Integer]
class Foo < Hash
end
# @rbs inherits Struct[String | Integer]
class Bar < Struct.new(:size, :name, keyword_init: true)
end
For method calls with blocks that defines modules/classes implicitly, we introduce @rbs class and @rbs module syntax.
The @rbs module and @rbs class annotations accepts RBS syntax for opening modules/classes. end is omitted.
module Foo
extend ActiveSupport::Concern
# @rbs module ClassMethods
class_methods do
# @rbs () -> Integer
def foo = 123
end
end
VERSION = "1.2.3"
Foo = [1,2,3].sample #: Integer
We have # @rbs! annotation for something not covered by the annotations.
class Person
include ActiveModel::Model
include ActiveModel::Attributes
attribute :id, :integer, default: 0
attribute :name, :string, default: ''
# @rbs!
# attr_accessor id (): Integer
#
# attr_accessor name (): String
end