# R Author: retoor R is a command-line AI assistant written in C that provides an autonomous agent with full system access through function calling. It interfaces with OpenAI-compatible APIs and operates in an agentic loop, reasoning about tasks, executing tools, and iterating until goals are achieved. ## Features ### Autonomous Agent Architecture - ReAct (Reasoning + Acting) pattern implementation - Automatic tool execution loop with up to 300 iterations - Intelligent response parsing to detect incomplete work - Automatic continuation when tasks require multiple steps - Built-in retry logic for API failures ### AI Provider Support - OpenAI API (default) - Anthropic Claude - Ollama (self-hosted) - Grok - Any OpenAI-compatible API endpoint ### Tool System The agent has access to 15+ tools exposed via JSON schema descriptions: | Tool | Description | |------|-------------| | `linux_terminal_execute` | Execute shell commands with output capture | | `linux_terminal_execute_interactive` | Execute interactive commands (vim, htop, etc.) | | `read_file` | Read file contents | | `write_file` | Write content to files with automatic parent directory creation | | `directory_glob` | List directory contents with file metadata | | `mkdir` | Create directories recursively | | `chdir` | Change working directory | | `getpwd` | Get current working directory | | `http_fetch` | Fetch URL contents via HTTP GET | | `web_search` | Search the web for information | | `web_search_news` | Search for news articles | | `db_set` | Store key-value pairs in local SQLite database | | `db_get` | Retrieve values from database | | `db_query` | Execute arbitrary SQL queries | | `index_source_directory` | Index source files with contents | | `python_execute` | Execute Python code and capture output | ### Database - Local SQLite database at `~/.r.db` - Persistent key-value storage - Full SQL query support - File version history tracking ### REPL Interface - Readline integration with tab completion - Persistent command history at `~/.r_history` - Markdown syntax highlighting in terminal output - Session management for separate conversation contexts ### REPL Commands | Command | Description | |---------|-------------| | `!dump` | Show raw message JSON | | `!clear` | Clear conversation history | | `!session` | Display current session info | | `!verbose` | Toggle verbose mode | | `!tools` | List available tools | | `!models` | Show available models | | `!model ` | Switch AI model | | `exit` | Exit the REPL | ## Installation ### Dependencies ``` libcurl json-c readline ncurses sqlite3 gnutls gmp openssl ``` On Debian/Ubuntu: ```bash apt install libcurl4-openssl-dev libjson-c-dev libreadline-dev libncurses-dev libsqlite3-dev libgnutls28-dev libgmp-dev libssl-dev ``` ### Build ```bash make build ``` The binary is output to `bin/r` and copied to `./r`. ### Cross-Compilation ```bash make build_mingw # Windows executable ``` ### AppImage ```bash make appimage # Creates portable r-x86_64.AppImage ``` ## Configuration ### Environment Variables | Variable | Description | Example | |----------|-------------|---------| | `R_KEY` | API key (takes precedence over OPENAI_API_KEY) | `sk-...` | | `OPENAI_API_KEY` | OpenAI API key (fallback) | `sk-...` | | `OPENROUTER_API_KEY` | OpenRouter API key | `sk-or-...` | | `R_BASE_URL` | Custom API base URL (without /v1/...) | `https://openrouter.ai/api` | | `R_MODEL` | AI model name | `gpt-4o`, `x-ai/grok-code-fast-1` | | `R_USE_TOOLS` | Enable/disable function calling | `true`, `false`, `1`, `0` | | `R_USE_STRICT` | Enable strict mode for tool schemas | `true`, `false`, `1`, `0` | | `R_SYSTEM_MESSAGE` | Custom system prompt injected at startup | Any text | | `R_SESSION` | Default session name for conversation persistence | `myproject`, `$(date)` | ### Context Files - `.rcontext.txt` - Project-specific context (current directory) - `~/.rcontext.txt` - Global user context ## Bash Integration Integrate R as a fallback command handler in bash. When a command is not found, R will attempt to interpret it as a natural language query with automatic date-based sessions. Add to `~/.bashrc`: ```bash export R_BASE_URL="https://openrouter.ai/api" export R_KEY="$OPENROUTER_API_KEY" export R_MODEL="x-ai/grok-code-fast-1" export R_SESSION=$(date +%Y-%m-%d) command_not_found_handle() { script_path="/path/to/r" first_argument="$1" if "$script_path" "$@"; then echo -e "" else echo "bash: $first_argument: command not found" fi } ``` This enables: - Automatic session per day via `R_SESSION=$(date +%Y-%m-%d)` - Natural language commands directly in terminal - Fallback to standard "command not found" on failure ## Why Terminal AI Having an AI agent directly in your terminal eliminates context switching. Instead of copying error messages to a browser, describing your environment, or explaining file contents, the agent can see and act on everything directly. ### Practical Examples **Debug errors instantly** ```bash ./r "The build failed, check the error and fix it" # Agent reads error output, identifies the issue, edits the file, rebuilds ``` **Explore unfamiliar codebases** ```bash ./r "How does authentication work in this project?" # Agent searches files, reads relevant code, explains the flow ``` **Automate repetitive tasks** ```bash ./r "Rename all .jpeg files to .jpg and create a backup folder first" # Agent creates directory, moves files with proper naming ``` **System administration** ```bash ./r "Check disk usage and find the largest files in /var/log" # Agent runs du, finds large files, presents a summary ``` **Database operations** ```bash ./r "Show me all users who signed up last week" # Agent queries the database, formats results ``` **Web research while coding** ```bash ./r "What's the correct syntax for a PostgreSQL upsert?" # Agent searches the web, returns the answer with examples ``` **Code generation** ```bash ./r "Write a Python script that monitors CPU usage and alerts if above 90%" # Agent writes the script, saves it, makes it executable ``` **Git workflows** ```bash ./r "Show what changed since yesterday and summarize the commits" # Agent runs git log, git diff, provides summary ``` **File operations** ```bash ./r "Find all TODO comments in this project and list them by file" # Agent greps through codebase, organizes findings ``` **Data processing** ```bash cat data.csv | ./r --stdin "Calculate the average of the third column" # Agent processes piped data, returns calculation ``` **Multi-step tasks** ```bash ./r "Set up a new Python virtualenv, install requests and pytest, create a basic test file" # Agent executes multiple commands in sequence, creates files ``` **Environment inspection** ```bash ./r "What ports are in use and what processes are using them?" # Agent runs netstat/lsof, explains the output ``` The agent maintains conversation context within sessions, so follow-up queries understand previous actions. Combined with the bash integration, any unrecognized command becomes a natural language query to the AI. ## Usage ### Interactive Mode ```bash ./r ``` ### Single Query ```bash ./r "What files are in the current directory?" ``` ### With Piped Input ```bash cat error.log | ./r --stdin "Analyze these errors" ``` ### With Context File ```bash ./r --context project_docs.txt "Explain this project" ``` ### Session Management ```bash ./r --session=myproject # Named session ./r -s myproject # Short form ``` ### Options | Flag | Description | |------|-------------| | `--verbose` | Enable verbose output | | `--stdin` | Read prompt from stdin | | `--context ` | Include file as context | | `--py ` | Include Python file | | `--session ` | Use named session | | `--nh` | Disable syntax highlighting | | `--free` | Use free tier API | | `--api` | API mode | ## Architecture ### Header-Only Design The codebase uses a header-only architecture where `.h` files contain both declarations and implementations. All code compiles through includes from `main.c`. ### Core Components | File | Purpose | |------|---------| | `main.c` | Entry point, REPL loop, argument parsing | | `agent.h` | Autonomous agent loop with ReAct pattern | | `r.h` | Global configuration and environment handling | | `auth.h` | API key resolution | | `openai.h` | API communication | | `chat.h` | JSON prompt construction | | `messages.h` | Conversation history management | | `tools.h` | Tool definitions and execution dispatcher | | `http_curl.h` | libcurl wrapper for HTTP requests | | `line.h` | Readline integration | | `db_utils.h` | SQLite operations | | `browse.h` | Web search functionality | | `markdown.h` | Terminal markdown rendering | | `utils.h` | Path utilities | | `indexer.h` | Source directory indexing | ## License MIT