mirror of
https://github.com/samsonjs/vibetunnel.git
synced 2026-03-25 09:25:50 +00:00
199 lines
No EOL
5.9 KiB
Markdown
199 lines
No EOL
5.9 KiB
Markdown
# Using Gemini CLI for Large Codebase Analysis
|
|
|
|
When analyzing large codebases or multiple files that might exceed context limits, use the Gemini CLI with its massive context window (up to 2 million tokens). Use `gemini -p` to leverage Google Gemini's large context capacity.
|
|
|
|
## Prerequisites
|
|
|
|
Ensure Gemini CLI is installed before using these commands. Installation instructions: https://github.com/google/gemini-cli#installation
|
|
|
|
## File and Directory Inclusion Syntax
|
|
|
|
Use the `@` syntax to include files and directories in your Gemini prompts. The paths should be relative to WHERE you run the gemini command:
|
|
|
|
### Examples:
|
|
|
|
**Single file analysis:**
|
|
```bash
|
|
gemini -p "@web/src/server/server.ts Explain this file's purpose and structure"
|
|
```
|
|
|
|
**Multiple files:**
|
|
```bash
|
|
gemini -p "@package.json @web/src/client/app.ts Analyze the dependencies used in the code"
|
|
```
|
|
|
|
**Entire directory:**
|
|
```bash
|
|
gemini -p "@src/ Summarize the architecture of this codebase"
|
|
```
|
|
|
|
**Multiple directories:**
|
|
```bash
|
|
gemini -p "@src/ @tests/ Analyze test coverage for the source code"
|
|
```
|
|
|
|
**Current directory and subdirectories:**
|
|
```bash
|
|
gemini -p "@./ Give me an overview of this entire project"
|
|
# Or use --all_files flag:
|
|
gemini --all_files -p "Analyze the project structure and dependencies"
|
|
```
|
|
|
|
**⚠️ Security Warning:** Using `@./` may include sensitive files like `.env`, `.git/`, or API keys. Consider using specific directories or exclusion patterns.
|
|
|
|
## Implementation Verification Examples
|
|
|
|
**Check if a feature is implemented:**
|
|
```bash
|
|
gemini -p "@src/ @lib/ Has dark mode been implemented in this codebase? Show me the relevant files and functions"
|
|
```
|
|
|
|
**Verify authentication implementation:**
|
|
```bash
|
|
gemini -p "@src/ @middleware/ Is JWT authentication implemented? List all auth-related endpoints and middleware"
|
|
```
|
|
|
|
**Check for specific patterns:**
|
|
```bash
|
|
gemini -p "@src/ Are there any React hooks that handle WebSocket connections? List them with file paths"
|
|
```
|
|
|
|
**Verify error handling:**
|
|
```bash
|
|
gemini -p "@src/ @api/ Is proper error handling implemented for all API endpoints? Show examples of try-catch blocks"
|
|
```
|
|
|
|
**Check for rate limiting:**
|
|
```bash
|
|
gemini -p "@backend/ @middleware/ Is rate limiting implemented for the API? Show the implementation details"
|
|
```
|
|
|
|
**Verify caching strategy:**
|
|
```bash
|
|
gemini -p "@src/ @lib/ @services/ Is Redis caching implemented? List all cache-related functions and their usage"
|
|
```
|
|
|
|
**Check for specific security measures:**
|
|
```bash
|
|
gemini -p "@src/ @api/ Are SQL injection protections implemented? Show how user inputs are sanitized"
|
|
```
|
|
|
|
**Verify test coverage for features:**
|
|
```bash
|
|
gemini -p "@src/payment/ @tests/ Is the payment processing module fully tested? List all test cases"
|
|
```
|
|
|
|
## Error Scenarios and Handling
|
|
|
|
**Gemini CLI not installed:**
|
|
```bash
|
|
# Error: command not found: gemini
|
|
# Solution: Install Gemini CLI following instructions at https://github.com/google/gemini-cli#installation
|
|
```
|
|
|
|
**Invalid file paths:**
|
|
```bash
|
|
gemini -p "@nonexistent/path/ Analyze this code"
|
|
# Gemini will report: "Error: Path 'nonexistent/path/' does not exist"
|
|
# The command continues with any valid paths provided
|
|
```
|
|
|
|
**Network connectivity issues:**
|
|
```bash
|
|
# If API calls fail, you'll see:
|
|
# "Error: Failed to connect to Gemini API"
|
|
# Solution: Check your internet connection and API key configuration
|
|
```
|
|
|
|
**File encoding problems:**
|
|
```bash
|
|
# Non-UTF8 files are automatically skipped with a warning:
|
|
# "Warning: Skipping binary or non-UTF8 file: path/to/file"
|
|
```
|
|
|
|
**Context limit exceeded:**
|
|
```bash
|
|
# For extremely large codebases:
|
|
# "Error: Context limit exceeded (2M tokens)"
|
|
# Solution: Use more specific paths or directories instead of @./
|
|
```
|
|
|
|
**Timeout during analysis:**
|
|
```bash
|
|
# Default timeout is 30 seconds for API calls
|
|
# For longer operations, use the --timeout flag:
|
|
gemini --timeout 120 -p "@large-codebase/ Analyze architecture"
|
|
```
|
|
|
|
## When to Use Gemini CLI
|
|
|
|
Use `gemini -p` when:
|
|
- Analyzing entire codebases or large directories
|
|
- Comparing multiple large files
|
|
- Need to understand project-wide patterns or architecture
|
|
- Current context window is insufficient for the task
|
|
- Working with files totaling more than 100KB
|
|
- Verifying if specific features, patterns, or security measures are implemented
|
|
- Checking for the presence of certain coding patterns across the entire codebase
|
|
|
|
## Important Notes
|
|
|
|
- Paths in @ syntax are relative to your current working directory when invoking gemini
|
|
- The CLI will include file contents directly in the context
|
|
- The --yolo flag bypasses confirmation prompts (use cautiously)
|
|
- Gemini's context window can handle entire codebases that would overflow Claude's context
|
|
- When checking implementations, be specific about what you're looking for to get accurate results
|
|
- Symlinks are followed by default - be cautious with circular references
|
|
- Binary files are automatically excluded from analysis
|
|
- Use `.geminiignore` file to exclude specific patterns (similar to `.gitignore`)
|
|
|
|
## Using .geminiignore
|
|
|
|
Create a `.geminiignore` file in your project root to exclude files and directories from Gemini analysis. The syntax follows `.gitignore` patterns:
|
|
|
|
```
|
|
# Environment and secrets
|
|
.env*
|
|
*.key
|
|
*.pem
|
|
secrets/
|
|
credentials/
|
|
|
|
# Build artifacts
|
|
dist/
|
|
build/
|
|
*.min.js
|
|
*.bundle.js
|
|
|
|
# Dependencies
|
|
node_modules/
|
|
vendor/
|
|
venv/
|
|
|
|
# Large generated files
|
|
package-lock.json
|
|
yarn.lock
|
|
*.generated.ts
|
|
|
|
# Test fixtures
|
|
test/fixtures/large-data/
|
|
**/*.snapshot.js
|
|
|
|
# IDE and OS files
|
|
.idea/
|
|
.vscode/
|
|
.DS_Store
|
|
```
|
|
|
|
**Pattern Examples:**
|
|
- `*.log` - Exclude all log files
|
|
- `temp/` - Exclude temp directory
|
|
- `!important.log` - Include important.log even if *.log is excluded
|
|
- `src/**/test.js` - Exclude test.js in any subdirectory of src
|
|
- `/config.json` - Exclude config.json only in root directory
|
|
|
|
## Error Handling
|
|
|
|
- If paths don't exist, Gemini will report an error and continue with valid paths
|
|
- File encoding issues are handled gracefully (non-UTF8 files are skipped)
|
|
- For large repositories, consider using specific subdirectories to avoid timeouts |