Thank you for your interest in contributing to the Runloop CLI! This document provides guidelines and instructions for contributing.
- Node.js >= 18.0.0
- pnpm
- Fork and clone the repository:
git clone https://github.com/runloopai/rl-cli.git
cd rl-cli- Install dependencies:
pnpm install- Build the project:
pnpm run build- Link for local development:
pnpm link --globalNow you can use rli commands locally with your changes.
# Watch mode - rebuilds on file changes
pnpm run dev
# Run the CLI
pnpm start -- <command>
# Or after linking
rli <command>This project uses Prettier and ESLint to maintain code quality.
# Check formatting
pnpm run format:check
# Auto-fix formatting
pnpm run format# Run linter
pnpm run lint
# Auto-fix lint issues
pnpm run lint:fix# Run all tests
pnpm test
# Run component tests with coverage
pnpm run test:components
# Watch mode
pnpm run test:watchPlease ensure all tests pass before submitting a pull request.
This project uses Conventional Commits for commit messages. This enables automatic changelog generation and semantic versioning.
<type>(<scope>): <description>
[optional body]
[optional footer(s)]
feat: A new featurefix: A bug fixdocs: Documentation changesstyle: Code style changes (formatting, etc.)refactor: Code changes that neither fix bugs nor add featurestest: Adding or updating testschore: Maintenance tasks
feat(devbox): add support for custom environment variables
fix(snapshot): resolve pagination issue in list command
docs: update installation instructions
- Create a new branch from
main:
git checkout -b feat/my-feature-
Make your changes and commit using conventional commits.
-
Push to your fork and open a pull request.
-
Ensure CI checks pass:
- Formatting (Prettier)
- Linting (ESLint)
- Build (TypeScript)
- Tests
-
Request review from maintainers.
PR titles should follow the conventional commit format as they are used for release notes.
src/
├── cli.ts # Main CLI entry point
├── commands/ # Command implementations
│ ├── devbox/ # Devbox commands (ssh, pty, exec, etc.)
│ ├── snapshot/ # Snapshot commands
│ ├── blueprint/ # Blueprint commands
│ └── object/ # Object storage commands
├── components/ # React/Ink UI components
├── hooks/ # Custom React hooks
├── lib/ # Reusable protocol clients (PTY, etc.)
├── mcp/ # MCP server implementation
├── router/ # Navigation router
├── screens/ # Full-screen views
├── services/ # API service wrappers
├── store/ # Zustand state management
└── utils/ # Utility functions
If you have questions, feel free to:
- Open an issue for discussion
- Check existing issues and pull requests
Thank you for contributing!