Generates Sorbet type signatures in separate RBI files from Ruby source files. Triggers when creating type definitions, adding types to Ruby code, or generating .rbi files for classes/modules without existing Sorbet signatures.
Installs into .claude/skills of the current project.
Are you the author of Generating Sorbet?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/aiskillstore-generating-sorbet)
---
name: generating-sorbet
description: Generates Sorbet type signatures in separate RBI files from Ruby source files. Triggers when creating type definitions, adding types to Ruby code, or generating .rbi files for classes/modules without existing Sorbet signatures.
---
# Sorbet RBI Generation Skill
Generate Sorbet type signatures in separate `.rbi` files. RBI files are used when you cannot or should not modify the original Ruby source - such as for gems, generated code, or legacy codebases.
# Instructions
When generating Sorbet RBI signatures, always follow these steps.
Copy this checklist and track your progress:
```
Sorbet RBI Generation Progress:
- [ ] Step 1: Analyze the Ruby source
- [ ] Step 2: Generate RBI files
- [ ] Step 3: Eliminate `T.untyped` in signatures
- [ ] Step 4: Review and refine signatures
- [ ] Step 5: Validate signatures with Sorbet
```
## Rules
- You MUST NOT run Ruby code of the project.
- You MUST NOT use `T.untyped`. Infer the proper type instead.
- You MUST NOT use `T.unsafe` - it bypasses type checking entirely.
- You MUST NOT use `T.cast` - it forces types without verification.
- You MUST ask the user to provide more details if something is not clear.
- You MUST prepend any command with `bundle exec` if the project has Gemfile.
- You MUST use `sig { }` block syntax for method signatures.
- You MUST add `extend T::Sig` to classes/modules before using `sig`.
- You MUST NOT add method bodies in RBI files - only signatures and empty method definitions.
- You MUST place RBI files in `./rbi` directory.
## 1. Analyze the Ruby Source
Always perform this step.
Read and understand the Ruby source file:
- Identify all classes, modules, methods, constants and instance variables.
- Note inheritance, module inclusion and definitions based on metaprogramming.
- Note visibility modifiers - `public`, `private`, `protected`.
- Note type parameters for generic classes.
## 2. Generate RBI Files
Always perform this step.
1. Determine the correct RBI directory:
Place RBI files in `./rbi` directory. Sorbet reads all `.rbi` files from this location.
RBI files are needed to describe code Sorbet cannot understand statically:
- Gem definitions
- Methods created with `define_method` or `method_missing`
- Constants from `const_get`/`const_set`
- Dynamic ancestors added via `extend`
- DSL-generated methods (Rails, ActiveRecord, etc.)
2. Create the RBI file with typed sigil:
```ruby
# typed: strict
```
3. Add `extend T::Sig` to each class/module:
```ruby
class MyClass
extend T::Sig
end
```
4. Add method stubs with signatures (no method bodies):
**Example - Ruby Source:**
```ruby
class User
attr_reader :name, :age
def initialize(name, age)
@name = name
@age = age
end
def greet(greeting)
"#{greeting}, #{@name}!"
end
end
```
**Example - RBI File (`rbi/user.rbi`):**
```ruby
# typed: strict
class User
extend T::Sig
sig { returns(String) }
attr_reader :name
sig { returns(Integer) }
attr_reader :age
sig { params(name: String, age: Integer).void }
def initialize(name, age); end
sig { params(greeting: String).returns(String) }
def greet(greeting); end
end
```
- RBI files mirror structure but contain only signatures and empty method stubs
- See [syntax.md](reference/syntax.md) for the full Sorbet RBI syntax guide
## 3. Eliminate `T.untyped` in Signatures
Always perform this step.
- Review all signatures and replace `T.untyped` with proper types.
- Use code context, method calls, and tests to infer types.
- Use `T.untyped` only as a last resort when type cannot be determined.
## 4. Review and Refine Signatures
Always perform this step.
- Verify signatures are correct, coherent, and complete.
- Remove unnecessary `T.untyped` types.
- Ensure all methods and attributes have signatures.
- Verify class hierarchy and module inclusions match the source.
- Fix any errors and repeat until signatures are correct.
## 5. Validate Signatures with Sorbet
Always perform this step.
Run Sorbet type checker to validate signatures:
```bash
srb tc
```
Or with bundle:
```bash
bundle exec srb tc
```
This checks:
- Signature syntax correctness
- Type consistency
- Method parameter/return type matching
- Class/module structure matching source
Fix any errors reported and repeat until validation passes.
# References
- [syntax.md](reference/syntax.md) - Sorbet RBI syntax guide
- [references/](reference/references/STRUCTURE.md) - Real-world RBI examples from stripe-ruby
- [Sorbet RBI documentation](https://sorbet.org/docs/rbi) - Official RBI docs