mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-02-01 14:44:29 +00:00
80 lines
3.3 KiB
Markdown
80 lines
3.3 KiB
Markdown
# 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](https://github.com/vadimdemedes/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`)
|
|
- **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](https://www.conventionalcommits.org/) standard.
|
|
- **Coding Style:** Adhere to existing patterns in `packages/cli` (React/Ink)
|
|
and `packages/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')` in `beforeEach` and
|
|
`vi.unstubAllEnvs()` in `afterEach`. Avoid modifying `process.env` directly as
|
|
it can lead to test leakage and is less reliable. To "unset" a variable, use
|
|
an empty string `vi.stubEnv('NAME', '')`.
|
|
|
|
## Documentation
|
|
|
|
- Always use the `docs-writer` skill 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.
|