Ticket to PR
The most common use case for Otto: automatically converting Linear tickets into working pull requests.
How It Works
When you move a ticket to "In Progress", Otto:
- Reads the ticket — Parses the title, description, and any comments
- Clarifies requirements — Posts questions if anything is unclear
- Creates a plan — Outlines the implementation approach
- Writes code — Generates the necessary changes
- Opens a PR — Creates a pull request linked to the ticket
Best Practices
Write Clear Tickets
Otto works best with well-defined tickets:
## Add user avatar upload
**Acceptance Criteria:**
- User can upload JPG/PNG images up to 5MB
- Images are resized to 200x200px
- Stored in S3 bucket `user-avatars`
- Display on profile page
**Technical Notes:**
- Use existing S3 service in `libs/storage`
- Add new endpoint: POST /api/users/avatar
Add avatar feature
Include Technical Context
If your ticket involves specific patterns or constraints, include them:
- Which files/modules to modify
- API conventions to follow
- Testing requirements
- Dependencies to use (or avoid)
Use Labels
Set up triggers based on labels for more control:
otto:implement— Full implementationotto:plan-only— Just create a plan, don't codeotto:bug-fix— Focus on fixing a specific issue
Example
Here's a real example of Otto turning a ticket into a PR:
Linear Ticket:
Add pagination to the users list endpoint. Should support
pageandlimitquery params with a max limit of 100.
Otto's PR:
- Added
PaginationDtowith validation - Updated
UsersControllerwith query params - Modified
UsersServiceto support pagination - Added tests for edge cases
- Updated API documentation
Limitations
Otto works best when:
- Requirements are clear and specific
- The codebase has consistent patterns
- Changes are scoped to a few files
Consider breaking large features into smaller tickets for better results.
