@vibe-kit/grok-cli
Version:
An open-source AI agent that brings the power of Grok directly into your terminal.
357 lines (269 loc) • 9.45 kB
Markdown
# Grok CLI
A conversational AI CLI tool powered by Grok with intelligent text editor capabilities and tool usage.
<img width="980" height="435" alt="Screenshot 2025-07-21 at 13 35 41" src="https://github.com/user-attachments/assets/192402e3-30a8-47df-9fc8-a084c5696e78" />
## Features
- **🤖 Conversational AI**: Natural language interface powered by Grok-3
- **📝 Smart File Operations**: AI automatically uses tools to view, create, and edit files
- **⚡ Bash Integration**: Execute shell commands through natural conversation
- **🔧 Automatic Tool Selection**: AI intelligently chooses the right tools for your requests
- **🔌 MCP Tools**: Extend capabilities with Model Context Protocol servers (Linear, GitHub, etc.)
- **💬 Interactive UI**: Beautiful terminal interface built with Ink
- **🌍 Global Installation**: Install and use anywhere with `npm i -g @vibe-kit/grok-cli`
## Installation
### Prerequisites
- Node.js 16+
- Grok API key from X.AI
### Global Installation (Recommended)
```bash
npm install -g @vibe-kit/grok-cli
```
### Local Development
```bash
git clone <repository>
cd grok-cli
npm install
npm run build
npm link
```
## Setup
1. Get your Grok API key from [X.AI](https://x.ai)
2. Set up your API key (choose one method):
**Method 1: Environment Variable**
```bash
export GROK_API_KEY=your_api_key_here
```
**Method 2: .env File**
```bash
cp .env.example .env
# Edit .env and add your API key
```
**Method 3: Command Line Flag**
```bash
grok --api-key your_api_key_here
```
**Method 4: User Settings File**
Create `~/.grok/user-settings.json`:
```json
{
"apiKey": "your_api_key_here"
}
```
### Custom Base URL (Optional)
By default, the CLI uses `https://api.x.ai/v1` as the Grok API endpoint. You can configure a custom endpoint if needed (choose one method):
**Method 1: Environment Variable**
```bash
export GROK_BASE_URL=https://your-custom-endpoint.com/v1
```
**Method 2: Command Line Flag**
```bash
grok --api-key your_api_key_here --base-url https://your-custom-endpoint.com/v1
```
**Method 3: User Settings File**
Add to `~/.grok/user-settings.json`:
```json
{
"apiKey": "your_api_key_here",
"baseURL": "https://your-custom-endpoint.com/v1"
}
```
## Configuration Files
Grok CLI uses two types of configuration files to manage settings:
### User-Level Settings (`~/.grok/user-settings.json`)
This file stores **global settings** that apply across all projects. These settings rarely change and include:
- **API Key**: Your Grok API key
- **Base URL**: Custom API endpoint (if needed)
- **Default Model**: Your preferred model (e.g., `grok-4-latest`)
- **Available Models**: List of models you can use
**Example:**
```json
{
"apiKey": "your_api_key_here",
"baseURL": "https://api.x.ai/v1",
"defaultModel": "grok-4-latest",
"models": [
"grok-4-latest",
"grok-3-latest",
"grok-3-fast",
"grok-3-mini-fast"
]
}
```
### Project-Level Settings (`.grok/settings.json`)
This file stores **project-specific settings** in your current working directory. It includes:
- **Current Model**: The model currently in use for this project
- **MCP Servers**: Model Context Protocol server configurations
**Example:**
```json
{
"model": "grok-3-fast",
"mcpServers": {
"linear": {
"name": "linear",
"transport": "stdio",
"command": "npx",
"args": ["@linear/mcp-server"]
}
}
}
```
### How It Works
1. **Global Defaults**: User-level settings provide your default preferences
2. **Project Override**: Project-level settings override defaults for specific projects
3. **Directory-Specific**: When you change directories, project settings are loaded automatically
4. **Fallback Logic**: Project model → User default model → System default (`grok-4-latest`)
This means you can have different models for different projects while maintaining consistent global settings like your API key.
### Using Other API Providers
**Important**: Grok CLI uses **OpenAI-compatible APIs**. You can use any provider that implements the OpenAI chat completions standard.
**Popular Providers**:
- **X.AI (Grok)**: `https://api.x.ai/v1` (default)
- **OpenAI**: `https://api.openai.com/v1`
- **OpenRouter**: `https://openrouter.ai/api/v1`
- **Groq**: `https://api.groq.com/openai/v1`
**Example with OpenRouter**:
```json
{
"apiKey": "your_openrouter_key",
"baseURL": "https://openrouter.ai/api/v1",
"defaultModel": "anthropic/claude-3.5-sonnet",
"models": [
"anthropic/claude-3.5-sonnet",
"openai/gpt-4o",
"meta-llama/llama-3.1-70b-instruct"
]
}
```
## Usage
### Interactive Mode
Start the conversational AI assistant:
```bash
grok
```
Or specify a working directory:
```bash
grok -d /path/to/project
```
### Headless Mode
Process a single prompt and exit (useful for scripting and automation):
```bash
grok --prompt "show me the package.json file"
grok -p "create a new file called example.js with a hello world function"
grok --prompt "run npm test and show me the results" --directory /path/to/project
```
This mode is particularly useful for:
- **CI/CD pipelines**: Automate code analysis and file operations
- **Scripting**: Integrate AI assistance into shell scripts
- **Terminal benchmarks**: Perfect for tools like Terminal Bench that need non-interactive execution
- **Batch processing**: Process multiple prompts programmatically
### Model Selection
You can specify which AI model to use with the `--model` parameter or `GROK_MODEL` environment variable:
**Method 1: Command Line Flag**
```bash
# Use Grok models
grok --model grok-4-latest
grok --model grok-3-latest
grok --model grok-3-fast
# Use other models (with appropriate API endpoint)
grok --model gemini-2.5-pro --base-url https://api-endpoint.com/v1
grok --model claude-sonnet-4-20250514 --base-url https://api-endpoint.com/v1
```
**Method 2: Environment Variable**
```bash
export GROK_MODEL=grok-4-latest
grok
```
**Method 3: User Settings File**
Add to `~/.grok/user-settings.json`:
```json
{
"apiKey": "your_api_key_here",
"defaultModel": "grok-4-latest"
}
```
**Model Priority**: `--model` flag > `GROK_MODEL` environment variable > user default model > system default (grok-4-latest)
### Command Line Options
```bash
grok [options]
Options:
-V, --version output the version number
-d, --directory <dir> set working directory
-k, --api-key <key> Grok API key (or set GROK_API_KEY env var)
-u, --base-url <url> Grok API base URL (or set GROK_BASE_URL env var)
-m, --model <model> AI model to use (e.g., grok-4-latest, grok-3-latest) (or set GROK_MODEL env var)
-p, --prompt <prompt> process a single prompt and exit (headless mode)
-h, --help display help for command
```
### Custom Instructions
You can provide custom instructions to tailor Grok's behavior to your project by creating a `.grok/GROK.md` file in your project directory:
```bash
mkdir .grok
```
Create `.grok/GROK.md` with your custom instructions:
```markdown
# Custom Instructions for Grok CLI
Always use TypeScript for any new code files.
When creating React components, use functional components with hooks.
Prefer const assertions and explicit typing over inference where it improves clarity.
Always add JSDoc comments for public functions and interfaces.
Follow the existing code style and patterns in this project.
```
Grok will automatically load and follow these instructions when working in your project directory. The custom instructions are added to Grok's system prompt and take priority over default behavior.
## MCP Tools
Grok CLI supports MCP (Model Context Protocol) servers, allowing you to extend the AI assistant with additional tools and capabilities.
### Adding MCP Tools
#### Add a custom MCP server:
```bash
# Add an stdio-based MCP server
grok mcp add my-server --transport stdio --command "node" --args server.js
# Add an HTTP-based MCP server
grok mcp add my-server --transport http --url "http://localhost:3000"
# Add with environment variables
grok mcp add my-server --transport stdio --command "python" --args "-m" "my_mcp_server" --env "API_KEY=your_key"
```
#### Add from JSON configuration:
```bash
grok mcp add-json my-server '{"command": "node", "args": ["server.js"], "env": {"API_KEY": "your_key"}}'
```
### Linear Integration Example
To add Linear MCP tools for project management:
```bash
# Add Linear MCP server
grok mcp add linear --transport sse --url "https://mcp.linear.app/sse"
```
This enables Linear tools like:
- Create and manage Linear issues
- Search and filter issues
- Update issue status and assignees
- Access team and project information
### Managing MCP Servers
```bash
# List all configured servers
grok mcp list
# Test server connection
grok mcp test server-name
# Remove a server
grok mcp remove server-name
```
### Available Transport Types
- **stdio**: Run MCP server as a subprocess (most common)
- **http**: Connect to HTTP-based MCP server
- **sse**: Connect via Server-Sent Events
## Development
```bash
# Install dependencies
npm install
# Development mode
npm run dev
# Build project
npm run build
# Run linter
npm run lint
# Type check
npm run typecheck
```
## Architecture
- **Agent**: Core command processing and execution logic
- **Tools**: Text editor and bash tool implementations
- **UI**: Ink-based terminal interface components
- **Types**: TypeScript definitions for the entire system
## License
MIT