Documentation Index
Fetch the complete documentation index at: https://mintlify.com/5unnykum4r/grip-ai/llms.txt
Use this file to discover all available pages before exploring further.
Overview
The grip config command provides tools to view and modify your Grip AI configuration. All commands automatically mask sensitive data like API keys and tokens.
Subcommands
grip config show - Print current configuration (API keys masked)
grip config set - Update a configuration value by dot-path
grip config path - Print the config file path
grip config show
Display the complete configuration with syntax highlighting:
Example output:
╭─ grip Config ────────────────────────────────────╮
│ { │
│ "agents": { │
│ "defaults": { │
│ "model": "gpt-4o", │
│ "provider": "openai", │
│ "engine": "litellm", │
│ "workspace": "~/grip/workspace", │
│ "max_iterations": 10, │
│ "temperature": 0.7 │
│ } │
│ }, │
│ "providers": { │
│ "openai": { │
│ "api_key": "sk-***xyz" │
│ }, │
│ "anthropic": { │
│ "api_key": "sk-***abc" │
│ } │
│ }, │
│ "gateway": { │
│ "host": "0.0.0.0", │
│ "port": 8080 │
│ } │
│ } │
│ │
│ ~/.grip/config.json │
╰──────────────────────────────────────────────────╯
Security Features
API keys and tokens are automatically masked:
- Shows first 4 and last 4 characters
- Masks middle portion with
***
- Detects keys containing:
sk-, key-, token, secret
- Applies to values matching common key patterns
Example:
- Original:
sk-proj-abcdefghijklmnopqrstuvwxyz123456
- Masked:
sk-p***3456
Sensitive data is masked only in output. The actual config file remains unchanged.
grip config set
Update a configuration value using dot-notation:
grip config set <key> <value>
Usage
Key format: Dot-separated path (e.g., agents.defaults.model)
Value: New value to set (automatically coerced to correct type)
Examples
Change Model
grip config set agents.defaults.model gpt-4o
Updated agents.defaults.model = gpt-4o
Update Temperature
grip config set agents.defaults.temperature 0.3
Updated agents.defaults.temperature = 0.3
Change Gateway Port
grip config set gateway.port 3000
Updated gateway.port = 3000
Enable Channel
grip config set channels.telegram.enabled true
Updated channels.telegram.enabled = true
Set Provider
grip config set agents.defaults.provider anthropic
Updated agents.defaults.provider = anthropic
Update Max Iterations
grip config set agents.defaults.max_iterations 15
Updated agents.defaults.max_iterations = 15
Type Coercion
Values are automatically converted to match the existing type:
| Existing Type | Input Examples | Result |
|---|
bool | true, false, 1, 0, yes, no | Boolean |
int | 42, 100, 0 | Integer |
float | 0.7, 1.5, 3.14 | Float |
string | Any text | String |
Examples:
# Boolean
grip config set heartbeat.enabled true # → true (bool)
grip config set heartbeat.enabled yes # → true (bool)
grip config set heartbeat.enabled 1 # → true (bool)
# Integer
grip config set gateway.port 3000 # → 3000 (int)
grip config set cron.enabled false # → false (bool)
# Float
grip config set agents.defaults.temperature 0.8 # → 0.8 (float)
# String
grip config set agents.defaults.model gpt-4o # → "gpt-4o" (string)
Error Handling
Invalid Key Path
$ grip config set invalid.path value
Error: Invalid config path 'invalid.path'. 'invalid' not found.
Invalid Value Type
$ grip config set gateway.port abc
Error: Validation error: invalid literal for int() with base 10: 'abc'
Nested Path Not Found
$ grip config set agents.defaults.nonexistent value
Error: Invalid config path 'agents.defaults.nonexistent'. 'nonexistent' not found.
grip config path
Print the configuration file location:
Output:
/home/user/.grip/config.json
Use Cases
Edit config manually:
vim $(grip config path)
nano $(grip config path)
code $(grip config path)
Backup config:
cp $(grip config path) $(grip config path).backup
View raw config:
cat $(grip config path)
jq . $(grip config path)
Check file permissions:
ls -la $(grip config path)
Configuration Structure
Complete Example
{
"agents": {
"defaults": {
"model": "gpt-4o",
"provider": "openai",
"engine": "litellm",
"workspace": "~/grip/workspace",
"max_iterations": 10,
"temperature": 0.7,
"dry_run": false
}
},
"providers": {
"openai": {
"api_key": "sk-proj-...",
"base_url": null
},
"anthropic": {
"api_key": "sk-ant-...",
"base_url": null
},
"openrouter": {
"api_key": "sk-or-...",
"base_url": "https://openrouter.ai/api/v1"
}
},
"gateway": {
"host": "0.0.0.0",
"port": 8080,
"api": {
"max_request_body_bytes": 1048576,
"rate_limit_per_minute": 60,
"rate_limit_per_minute_per_ip": 10
}
},
"channels": {
"telegram": {
"enabled": true,
"bot_token": "123456:ABC-DEF..."
},
"discord": {
"enabled": false,
"bot_token": ""
},
"slack": {
"enabled": false,
"bot_token": "",
"signing_secret": ""
}
},
"cron": {
"enabled": true,
"timezone": "America/New_York"
},
"heartbeat": {
"enabled": true,
"interval_minutes": 60,
"reply_to": "telegram:123456"
},
"tools": {
"mcp_servers": {
"todoist": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://ai.todoist.net/mcp"]
}
}
},
"platform": {
"os": "linux"
}
}
Common Configuration Tasks
Switch Models
# Use GPT-4o
grip config set agents.defaults.model gpt-4o
# Use Claude Sonnet 4
grip config set agents.defaults.model claude-sonnet-4
grip config set agents.defaults.provider anthropic
# Use via OpenRouter
grip config set agents.defaults.model anthropic/claude-opus-4
grip config set agents.defaults.provider openrouter
# Change port
grip config set gateway.port 3000
# Bind to localhost only
grip config set gateway.host 127.0.0.1
# Adjust rate limits
grip config set gateway.api.rate_limit_per_minute 120
grip config set gateway.api.rate_limit_per_minute_per_ip 20
Enable Channels
# Enable Telegram
grip config set channels.telegram.enabled true
grip config set channels.telegram.bot_token "123456:ABC-DEF..."
# Enable Discord
grip config set channels.discord.enabled true
grip config set channels.discord.bot_token "MTk4..."
# Enable heartbeat
grip config set heartbeat.enabled true
# Set interval (in minutes)
grip config set heartbeat.interval_minutes 120
# Set reply destination
grip config set heartbeat.reply_to "telegram:123456"
Adjust Agent Behavior
# Reduce temperature for more deterministic responses
grip config set agents.defaults.temperature 0.3
# Increase max iterations for complex tasks
grip config set agents.defaults.max_iterations 20
# Change workspace location
grip config set agents.defaults.workspace "~/custom/workspace"
Environment Variables
API keys can be set via environment variables instead of config file:
# OpenAI
export OPENAI_API_KEY="sk-proj-..."
# Anthropic
export ANTHROPIC_API_KEY="sk-ant-..."
# OpenRouter
export OPENROUTER_API_KEY="sk-or-..."
# Start grip
grip agent
Environment variables take precedence over config file values.
Manual Editing
You can edit the config file directly:
After editing, verify the config:
If there are validation errors:
$ grip agent
Error: Validation error: Invalid configuration...
Revert to backup or fix the JSON syntax.
Backup and Restore
Create Backup
cp $(grip config path) $(grip config path).backup.$(date +%Y%m%d)
Restore from Backup
cp $(grip config path).backup.20260228 $(grip config path)
grip config show
Version Control
cd ~/.grip
git init
echo "*.backup" >> .gitignore
git add config.json
git commit -m "Initial config"
# After changes
git diff config.json
git add config.json
git commit -m "Update model to gpt-4o"
Never commit API keys to public repositories. Use environment variables or encrypted storage.
- grip agent - Uses config for model, provider, workspace
- grip gateway - Reads gateway, channels, and cron config
- grip mcp - Modifies tools.mcp_servers config section
- grip onboard - Interactive setup wizard to create initial config