Skip to main content

Configuration

Learn how to configure and customize B4M CLI to fit your workflow.

Configuration File​

All configuration is stored in ~/.bike4mind/config.json.

Location:

  • macOS/Linux: ~/.bike4mind/config.json
  • Windows: %USERPROFILE%\.bike4mind\config.json

Permissions:

  • File mode: 0600 (readable/writable by owner only)
  • Contains sensitive data (API keys, tokens)

View Current Configuration​

# In CLI
/config

# Or inspect file directly
cat ~/.bike4mind/config.json

Example Configuration​

{
"apiUrl": "https://app.bike4mind.com",
"accessToken": "eyJ...",
"refreshToken": "eyJ...",
"user": {
"email": "john@example.com",
"userId": "usr_abc123"
},
"trustedTools": ["bash_execute", "web_search"],
"toolApiKeys": {
"serper": "your-serper-api-key",
"openweather": "your-openweather-api-key"
},
"mcpServers": [
{
"name": "github",
"enabled": true,
"env": {
"GITHUB_ACCESS_TOKEN": "ghp_..."
}
}
]
}

Authentication​

OAuth Tokens​

Automatically managed after running /login:

Fields:

  • accessToken - Short-lived access token (used for API requests)
  • refreshToken - Long-lived refresh token (used to get new access tokens)
  • user.email - Your email address
  • user.userId - Your user ID

Token Lifecycle:

  • Access tokens expire after 90 days
  • Refresh tokens expire after 1 year
  • CLI automatically refreshes expired access tokens
  • If refresh fails, you'll be prompted to /login again

Custom API Endpoint​

For self-hosted instances:

# Set custom endpoint
/set-api https://b4m.yourcompany.com

# Reset to default
/reset-api

Manual configuration:

{
"apiUrl": "https://b4m.yourcompany.com"
}

Tool API Keys​

Good news: B4M CLI's server-side tools (weather_info, web_search) use B4M's company API keys. No configuration needed!

Server-Side Tools (No Keys Required)​

These tools run on B4M servers with company API keys:

ToolDescriptionKey Required
weather_infoGet current weather❌ No (uses B4M keys)
web_searchSearch the web❌ No (uses B4M keys)

You don't need to configure API keys for these tools.

Local Tools (No Keys Required)​

All local tools execute without external API keys:

ToolDescription
file_readRead file contents
create_fileCreate new files
edit_local_fileEdit existing files
glob_filesFind files by pattern
grep_searchSearch file contents
delete_fileDelete files
dice_rollRoll dice
math_evaluateEvaluate math expressions
current_datetimeGet current date/time
bash_executeExecute shell commands

None of these require API keys or configuration.


Tool Permissions​

Control which tools can execute automatically vs. requiring permission.

Trusted Tools​

Tools in the trustedTools array execute without asking permission:

{
"trustedTools": [
"bash_execute",
"web_search",
"weather_info"
]
}

Manage Trusted Tools​

# View trusted tools
/trusted

# Trust a tool (add to list)
/trust bash_execute

# Untrust a tool (remove from list)
/untrust bash_execute

Permission Prompt​

When a non-trusted tool tries to execute:

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ⚠️ Permission Required ┃
┃ ┃
┃ Tool: bash_execute ┃
┃ ┃
┃ Arguments: ┃
┃ { "command": "ls -la /home" } ┃
┃ ┃
┃ ❯ ✓ Allow once ┃
┃ ✓ Always allow (trust this tool) ┃
┃ ✗ Deny ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

Options:

  • Allow once - Permit this execution only
  • Always allow - Trust this tool (won't ask again)
  • Deny - Block this execution

Safety Recommendations​

✅ Safe to trust:

  • dice_roll - Random number generation
  • math_evaluate - Safe mathematical calculations
  • current_datetime - Read-only date/time info
  • file_read - Read-only file access
  • glob_files - Read-only file searching
  • grep_search - Read-only content searching

⚠️ Use caution:

  • bash_execute - Can run any shell command
  • web_search - Makes external HTTP requests
  • weather_info - Makes external API calls
  • create_file - Creates new files
  • edit_local_file - Modifies existing files

🛑 Rarely trust (review each time):

  • delete_file - Permanently deletes files
  • MCP tools with file write access
  • Tools that modify system state
  • Tools from unknown sources

Context Files​

B4M CLI automatically loads project-specific instructions from context files.

Supported Files​

The CLI looks for these files in your current directory (priority order):

  1. CLAUDE.local.md - Personal instructions (gitignored)
  2. CLAUDE.md - Project instructions (committed)
  3. AGENTS.md - Cross-tool standard
  4. AI.local.md - Personal instructions
  5. AI.md - Project instructions
  6. INSTRUCTIONS.md - Project instructions (lowest priority)

Global context files (in ~/.bike4mind/):

  1. AI.local.md - Personal global instructions
  2. AI.md - Global instructions

How It Works​

  • CLI loads the first matching file from each layer (global and project)
  • Project files take precedence over global files
  • Only one file from each layer is loaded
  • .local.md files are for personal preferences (add to .gitignore)

Example startup:

$ b4m

📄 Global context: ~/.bike4mind/AI.md
📄 Project context: CLAUDE.md

>

Create a Context File​

For a specific project:

cat > CLAUDE.md << 'EOF'
# TypeScript Project Instructions

## Code Style
- Use TypeScript strict mode
- Prefer functional components with hooks
- Follow existing patterns in codebase

## Testing
- Write tests for new features
- Run `pnpm test` before committing

## Documentation
- Update README for user-facing changes
- Add JSDoc comments to exported functions
EOF

For all your projects (global):

cat > ~/.bike4mind/AI.md << 'EOF'
# Personal AI Assistant Preferences

- Always explain your reasoning
- Provide code examples when relevant
- Use clear, concise language
- Ask clarifying questions when uncertain
EOF

Context File Limits​

  • Maximum size: 100 KB per file
  • Symlinks are rejected for security
  • Must be valid UTF-8 text
  • Markdown formatting recommended (but not required)

Best Practices​

✅ Do:

  • Use descriptive, actionable instructions
  • Keep it concise and focused
  • Use .local.md for personal preferences
  • Commit project-level instructions (e.g., CLAUDE.md)
  • Update as project standards evolve

❌ Don't:

  • Include sensitive information (API keys, credentials)
  • Make files too large (keep under 10KB when possible)
  • Use as a dump for everything (be selective)
  • Duplicate instructions between global and project files

Example Use Cases​

Project-specific coding standards:

# API Development Guidelines

- Use REST conventions
- Validate all inputs with Zod
- Return errors as `{ error: string }`
- Include request ID in logs

Team workflow:

# PR Review Checklist

Before requesting review:
- [ ] Tests pass locally
- [ ] No TypeScript errors
- [ ] Updated CHANGELOG.md
- [ ] Added documentation

Personal preferences:

# My Preferences

- I prefer async/await over promises
- Explain complex algorithms step-by-step
- Suggest improvements even when not asked

MCP Servers​

See MCP Integration → for complete documentation.

Quick reference:

{
"mcpServers": [
{
"name": "github",
"enabled": true,
"env": {
"GITHUB_ACCESS_TOKEN": "ghp_..."
}
}
]
}

Debug Logging​

Automatic Debug Logs​

Debug logs are always written to ~/.bike4mind/debug/[session-id].txt.

What's logged:

  • Session configuration
  • HTTP requests/responses
  • SSE streaming events
  • Tool execution details
  • Error diagnostics
  • Authentication flow

Location:

~/.bike4mind/debug/
├── abc123-session-id.txt
├── def456-session-id.txt
└── ...

Retention:

  • Logs older than 30 days are auto-deleted on CLI startup
  • You can manually delete logs anytime

Verbose Console Output​

Enable verbose output with --verbose or -v:

b4m --verbose

This shows debug logs in the console in addition to writing to file.

Use verbose when:

  • Debugging issues in real-time
  • Developing integrations
  • Troubleshooting tool execution
  • Investigating API errors

View Debug Logs​

# List all debug logs
ls -lh ~/.bike4mind/debug/

# View latest log
cat ~/.bike4mind/debug/*.txt | tail -n 100

# Follow logs in real-time (during session)
tail -f ~/.bike4mind/debug/[session-id].txt

Storage Locations​

Directory Structure​

~/.bike4mind/
├── config.json # Main configuration (0600 permissions)
├── sessions/ # Saved conversations
│ ├── my-work.json
│ ├── debugging.json
│ └── research.json
├── debug/ # Debug logs (auto-cleanup after 30 days)
│ ├── abc123.txt
│ └── def456.txt
└── images/ # Cached images (if image rendering enabled)
├── img-001.png
└── img-002.jpg

Backup Configuration​

To backup your configuration:

# Backup
cp ~/.bike4mind/config.json ~/.bike4mind/config.backup.json

# Restore
cp ~/.bike4mind/config.backup.json ~/.bike4mind/config.json

Reset to Defaults​

To start fresh:

# Remove all configuration and data
rm -rf ~/.bike4mind/

# Remove configuration only (keep sessions)
rm ~/.bike4mind/config.json

Note: You'll need to re-authenticate after removing config.


Environment Variables​

B4M CLI respects these environment variables:

VariablePurposeExample
B4M_API_URLOverride default API endpointhttps://b4m.company.com
B4M_VERBOSEEnable verbose logging1 or true
OPENWEATHER_API_KEYOpenWeather API keyabc123...
SERPER_API_KEYSerper API keyxyz789...
NO_COLORDisable colored output1

Set environment variables:

# Temporary (current session)
export B4M_VERBOSE=1
b4m

# Permanent (add to ~/.bashrc or ~/.zshrc)
echo 'export B4M_VERBOSE=1' >> ~/.zshrc

Configuration Precedence​

When multiple configuration sources exist, this is the precedence (highest to lowest):

  1. Command-line flags (e.g., --verbose)
  2. Environment variables (e.g., B4M_API_URL)
  3. Config file (~/.bike4mind/config.json)
  4. Built-in defaults

Example:

  • Config file has apiUrl: "https://example.com"
  • Environment has B4M_API_URL=https://custom.com
  • Result: CLI uses https://custom.com (env overrides config)

Advanced Configuration​

Custom Session Directory​

Not currently supported, but planned:

{
"sessionDir": "/custom/path/to/sessions"
}

Model Selection​

Not currently supported via config, but planned:

{
"model": "claude-3-opus-20240229",
"temperature": 0.7,
"maxTokens": 4096
}

Troubleshooting Configuration​

Config File Corruption​

If your config is corrupted:

# Backup corrupt file
mv ~/.bike4mind/config.json ~/.bike4mind/config.broken.json

# Let CLI recreate defaults
b4m

Permission Errors​

Fix file permissions:

# Correct permissions for config
chmod 600 ~/.bike4mind/config.json

# Correct permissions for directory
chmod 700 ~/.bike4mind/

Invalid JSON​

Validate your config file:

# Check if JSON is valid
cat ~/.bike4mind/config.json | jq .

# If jq not installed
python3 -m json.tool ~/.bike4mind/config.json

See Also​