3.3 KiB
3.3 KiB
Gemini CLI Project Context
Gemini CLI is an open-source AI agent that brings the power of Gemini directly into the terminal. It is designed to be a terminal-first, extensible, and powerful tool for developers.
Project Overview
- Purpose: Provide a seamless terminal interface for Gemini models, supporting code understanding, generation, automation, and integration via MCP (Model Context Protocol).
- Main Technologies:
- Runtime: Node.js (>=20.0.0, recommended ~20.19.0 for development)
- Language: TypeScript
- UI Framework: React (using Ink for CLI rendering)
- Testing: Vitest
- Bundling: esbuild
- Linting/Formatting: ESLint, Prettier
- Architecture: Monorepo structure using npm workspaces.
packages/cli: User-facing terminal UI, input processing, and display rendering.packages/core: Backend logic, Gemini API orchestration, prompt construction, and tool execution.packages/core/src/tools/: Built-in tools for file system, shell, and web operations.packages/a2a-server: Experimental Agent-to-Agent server.packages/vscode-ide-companion: VS Code extension pairing with the CLI.
Building and Running
- Install Dependencies:
npm install - Build All:
npm run build:all(Builds packages, sandbox, and VS Code companion) - Build Packages:
npm run build - Run in Development:
npm run start - Run in Debug Mode:
npm run debug(Enables Node.js inspector) - Bundle Project:
npm run bundle - Clean Artifacts:
npm run clean
Testing and Quality
- Test Commands:
- Unit (All):
npm run test - Integration (E2E):
npm run test:e2e - Workspace-Specific:
npm test -w <pkg> -- <path>(Note:<path>must be relative to the workspace root, e.g.,-w @google/gemini-cli-core -- src/routing/modelRouterService.test.ts)
- Unit (All):
- Full Validation:
npm run preflight(Heaviest check; runs clean, install, build, lint, type check, and tests. Recommended before submitting PRs.) - Individual Checks:
npm run lint/npm run format/npm run typecheck
Development Conventions
- Contributions: Follow the process outlined in
CONTRIBUTING.md. Requires signing the Google CLA. - Pull Requests: Keep PRs small, focused, and linked to an existing issue.
- Commit Messages: Follow the Conventional Commits standard.
- Coding Style: Adhere to existing patterns in
packages/cli(React/Ink) andpackages/core(Backend logic). - Imports: Use specific imports and avoid restricted relative imports between packages (enforced by ESLint).
Testing Conventions
- Environment Variables: When testing code that depends on environment
variables, use
vi.stubEnv('NAME', 'value')inbeforeEachandvi.unstubAllEnvs()inafterEach. Avoid modifyingprocess.envdirectly as it can lead to test leakage and is less reliable. To "unset" a variable, use an empty stringvi.stubEnv('NAME', '').
Documentation
- Always use the
docs-writerskill when you are asked to write, edit, or review any documentation. - Documentation is located in the
docs/directory. - Suggest documentation updates when code changes render existing documentation obsolete or incomplete.