Skip to content

CLI Reference (Commands & Flags) ​

Complete reference documentation for all Probe command-line interface commands, options, and usage examples.

Search Command ​

Find code across your entire codebase:

bash
probe search <QUERY> [PATH] [OPTIONS]

Core Options ​

OptionFunction
<QUERY>Required: What to search for
[PATH]Where to search (default: current directory)
--files-onlyList matching files without code blocks
--ignore <PATTERN>Additional patterns to ignore
--exclude-filenames, -nExclude filenames from matching
--reranker, -r <TYPE>Algorithm: hybrid, hybrid2, bm25, tfidf
--frequency, -sEnable smart token matching (default)
--max-results <N>Limit number of results
--max-bytes <N>Limit total bytes of code
--max-tokens <N>Limit total tokens (for AI)
--allow-testsInclude test files and code
--any-termMatch any search term (OR logic)
--no-mergeKeep code blocks separate
--merge-threshold <N>Max lines between blocks to merge (default: 5)
--session <ID>Session ID for caching results
-o, --format <TYPE>Output as: color (default), terminal, markdown, plain, json, xml

Command Examples ​

bash
# Basic search - current directory
probe search "authentication flow"

# Search in specific folder
probe search "updateUser" ./src/api

# Limit for AI context windows
probe search "error handling" --max-tokens 8000

# Find raw files without parsing
probe search "config" --files-only

# Elastic search queries
# Use AND operator for terms that must appear together
probe search "error AND handling" ./

# Use OR operator for alternative terms
probe search "login OR authentication OR auth" ./src

# Group terms with parentheses for complex queries
probe search "(error OR exception) AND (handle OR process)" ./

# Use wildcards for partial matching
probe search "auth* connect*" ./

# Exclude terms with NOT operator
probe search "database NOT sqlite" ./

# Output as JSON for programmatic use
probe search "authentication" --format json

# Output as XML
probe search "authentication" --format xml

Extract Command ​

Pull complete code blocks from specific files and lines:

bash
probe extract <FILES> [OPTIONS]

Extract Options ​

OptionFunction
<FILES>Files to extract from (e.g., main.rs:42 or main.rs#function_name)
-c, --context <N>Add N context lines
-k, --keep-inputPreserve and display original input content
--prompt <TEMPLATE>System prompt template for LLM models (engineer, architect, or path to file)
--instructions <TEXT>User instructions for LLM models
-o, --format <TYPE>Output as: color (default), terminal, markdown, plain, json, xml
-o, --format <TYPE>Output as: color (default), terminal, markdown, plain, json, xml

Extraction Examples ​

bash
# Get function containing line 42
probe extract src/main.rs:42

# Extract multiple blocks
probe extract src/auth.js:15 src/api.js:27

# Extract by symbol name
probe extract src/main.rs#handle_extract

# Extract a specific line range
probe extract src/main.rs:10-20

# Output as JSON
probe extract src/handlers.rs:108 --format json

# Output as XML
probe extract src/handlers.rs:108 --format xml

# Add surrounding context
probe extract src/utils.rs:72 --context 5

# Preserve original input alongside extracted code
probe extract src/main.rs:42 --keep-input

# Extract from error output while preserving original messages
rustc main.rs 2>&1 | probe extract -k

# Extract code with LLM prompt and instructions
probe extract src/auth.rs#authenticate --prompt engineer --instructions "Explain this authentication function"

# Extract code with custom prompt template
probe extract src/api.js:42 --prompt /path/to/custom/prompt.txt --instructions "Refactor this code"

Query Command ​

Find specific code structures using tree-sitter patterns:

bash
probe query <PATTERN> <PATH> [OPTIONS]

Query Options ​

OptionFunction
<PATTERN>Tree-sitter pattern to search for
<PATH>Where to search
--language <LANG>Specify language (inferred from files if omitted)
--ignore <PATTERN>Additional patterns to ignore
--allow-testsInclude test code blocks
--max-results <N>Limit number of results
-o, --format <TYPE>Output as: color (default), terminal, markdown, plain, json, xml

Query Examples ​

bash
# Find Rust functions
probe query "fn $NAME($$$PARAMS) $$$BODY" ./src --language rust

# Find Python functions
probe query "def $NAME($$$PARAMS): $$$BODY" ./src --language python

# Find Go structs
probe query "type $NAME struct { $$$FIELDS }" ./src --language go

# Find C++ classes
probe query "class $NAME { $$$METHODS };" ./src --language cpp

# Output as JSON for programmatic use
probe query "fn $NAME($$$PARAMS) $$$BODY" ./src --language rust --format json

Output Formats ​

Probe supports multiple output formats to suit different needs:

FormatDescription
colorColorized terminal output (default)
terminalPlain terminal output without colors
markdownMarkdown-formatted output
plainPlain text output without formatting
jsonJSON-formatted output for programmatic use
xmlXML-formatted output for programmatic use

For detailed information about the JSON and XML output formats, see the Output Formats documentation.

Power Techniques ​

From Compiler Errors ​

Feed error output directly to extract relevant code:

bash
# Extract code from compiler errors
rustc main.rs 2>&1 | probe extract

# Pull code from test failures
go test ./... | probe extract

Unix Pipeline Integration ​

Chain with other tools for maximum effect:

bash
# Find then filter
probe search "database" | grep "connection"

# Process & format
probe search "api" --format json | jq '.results[0]'

Command Combinations ​

Create powerful workflows by combining features:

bash
# Find authentication code without tests
probe search "authenticate" --max-results 10 --ignore "test" --no-merge

# Extract specific functions with context
grep -n "handleRequest" ./src/*.js | cut -d':' -f1,2 | probe extract --context 3

# Find and extract error handlers
probe search "error handling" --files-only | xargs -I{} probe extract {} --format markdown

Session-Based Caching ​

Avoid seeing the same code blocks multiple times in a session:

bash
# First search - generates a session ID
probe search "authentication" --session ""
# Session: a1b2 (example output)

# Subsequent searches - reuse the session ID
probe search "login" --session "a1b2"
# Will skip code blocks already shown in the previous search

## Chat Command (`probe-chat`)

Engage in an interactive chat session with the Probe AI agent or send single messages for non-interactive use.

```bash
probe-chat [PATH] [OPTIONS]

Chat Options ​

OptionFunction
[PATH]Path to the codebase to search (overrides ALLOWED_FOLDERS env var)
-d, --debugEnable debug mode for verbose logging
--model-name <model>Specify the AI model to use (e.g., claude-3-opus-20240229, gpt-4o)
-f, --force-provider <provider>Force a specific provider (anthropic, openai, google)
-w, --webRun in web interface mode instead of CLI
-p, --port <port>Port for web server (default: 8080)
-m, --message <message>Send a single message and exit (non-interactive)
-s, --session-id <sessionId>Specify a session ID for the chat
--jsonOutput response as JSON in non-interactive mode
--max-iterations <number>Max tool iterations allowed (default: 30)
--prompt <value>Use a custom prompt (architect, code-review, support, engineer, path to file, or string)
--allow-editEnable code editing via the implement tool (uses Aider)
--trace-file [path]Enable file-based tracing (default: ./probe-traces.jsonl)
--trace-remote <url>Enable remote tracing to OpenTelemetry collector
--trace-consoleEnable console tracing for debugging

Code Editing (--allow-edit) ​

The --allow-edit flag lets Probe make changes to your code files.

How It Works ​

When you enable editing, Probe can modify your code when you ask it to:

  • "Fix this bug in main.py"
  • "Add error handling to this function"
  • "Refactor this code to be cleaner"

What You Need ​

  1. Install a Backend Tool: Probe can use different tools to make code changes:

    • Claude Code (default if available):

      bash
      npm install -g @anthropic-ai/claude-code
    • Aider (fallback):

      bash
      pip install aider-chat
  2. File Permissions: Make sure Probe can write to your project files.

Backend Configuration ​

Probe automatically detects which tool to use for code editing:

  1. Claude Code: Used by default if installed (cross-platform, including WSL on Windows)
  2. Aider: Used as fallback if Claude Code is not available

You can override this behavior by setting the implement_tool_backend environment variable:

bash
# Force using Claude Code
export implement_tool_backend=claude
probe-chat --allow-edit

# Force using Aider
export implement_tool_backend=aider
probe-chat --allow-edit

Usage Examples ​

bash
# Start chat with editing enabled
probe-chat --allow-edit

# Ask for a specific change
probe-chat --allow-edit --message "Add comments to the main function"

Important Safety Notes ​

  • Always review changes before keeping them
  • Test your code after Probe makes changes
  • Start small - try simple changes first to see how it works

GitHub Actions Alternative ​

If you're using Probe in GitHub Actions, you can use allow_suggestions instead, which creates reviewable suggestions rather than direct changes. See the GitHub Actions Integration guide for details.

OpenTelemetry Tracing ​

The --trace-file, --trace-remote, and --trace-console flags enable comprehensive monitoring and observability for AI interactions.

Tracing Options ​

File Tracing (--trace-file)

  • Saves traces to a JSON Lines format file for offline analysis
  • Default file path: ./probe-traces.jsonl
  • Custom path: --trace-file ./my-traces.jsonl

Remote Tracing (--trace-remote)

  • Sends traces to OpenTelemetry collectors (Jaeger, Zipkin, etc.)
  • Requires collector URL: --trace-remote http://localhost:4318/v1/traces

Console Tracing (--trace-console)

  • Outputs traces to console for debugging
  • Useful for development and troubleshooting

Usage Examples ​

bash
# Enable file-based tracing
probe-chat --trace-file

# Enable remote tracing to Jaeger
probe-chat --trace-remote http://localhost:4318/v1/traces

# Enable console tracing for debugging
probe-chat --trace-console

# Combine multiple tracing options
probe-chat --trace-file --trace-remote --trace-console

# Use custom file path
probe-chat --trace-file ./debug-traces.jsonl

What Gets Traced ​

The tracing system captures detailed information about AI interactions:

  • Performance Metrics: Response times, request durations, and throughput
  • Token Usage: Prompt tokens, completion tokens, and total consumption
  • Model Information: Provider, model name, and configuration
  • Session Data: Session IDs, iteration counts, and conversation flow
  • Error Tracking: Failed requests, timeouts, and error details

For more details on tracing, see the AI Chat documentation.

Chat Examples ​

bash
# Start interactive chat in the current directory
probe-chat

# Start interactive chat targeting a specific project path
probe-chat /path/to/my/project

# Use the 'engineer' persona
probe-chat --prompt engineer

# Send a single question and get a JSON response
probe-chat --message "Explain the auth flow in main.go" --json

# Start chat with editing enabled (requires Aider)
probe-chat /path/to/project --allow-edit

# Start chat with tracing enabled
probe-chat --trace-file ./session-traces.jsonl

# Start chat with full observability
probe-chat --trace-file --trace-remote http://localhost:4318/v1/traces --allow-edit

Released under the Apache 2.0 License.