Project Structure
Understanding the codebase organization and architecture of Gemini CLI
Project Overview
Gemini CLI is organized as a monorepo with multiple interconnected packages
Gemini CLI is a Lerna-based monorepo project that modularizes functionality into independent packages for easier development, testing, and maintenance.
Package Structure
Core packages that make up the Gemini CLI ecosystem
CLI Package
packages/cli
Main command-line interface and user-facing commands
Key Responsibilities:
- Command parsing and routing
- User interface and interaction
- Configuration management
- Error handling and reporting
- Help and documentation display
Core Package
packages/core
Core functionality and business logic
Key Responsibilities:
- API client implementations
- Model interactions
- Tool management system
- MCP protocol handling
- State management
Tools Package
packages/tools
Built-in tools and utilities
Key Responsibilities:
- File system operations
- Shell command execution
- Web requests and searches
- Memory management
- Tool registration
Extensions Package
packages/extensions
Extension system and plugin management
Key Responsibilities:
- Extension loading and management
- Plugin registry
- Extension API
- Lifecycle management
- Dependency resolution
Development Workflow
How to work with the codebase effectively
Global Commands
npm run bootstrap
Install and link all packages
npm run build
Build all packages
npm run test
Run all tests
npm run lint
Lint all packages
Package-specific Commands
lerna run build --scope @gemini/cli
Build specific package
lerna run test --scope @gemini/core
Test specific package
lerna add lodash packages/core
Add dependency to package
Architecture Principles
Key principles guiding the project structure
Modular Design
Each package has a single responsibility
- Clear separation of concerns
- Minimal inter-package dependencies
- Well-defined interfaces
- Independent testing
Extensible Architecture
Built for extensibility and customization
- Plugin-based architecture
- Tool registration system
- Event-driven communication
- Configuration-driven behavior
Next Steps
Continue your development journey with these resources