# AnchorCli An AI-powered coding assistant built as a .NET 10.0 console application, featuring the **Hashline** technique for safe, precise file editing. ## What is Hashline? AnchorCli's unique approach to file editing. Every line returned by file tools is prefixed with a content-derived hash anchor: ``` 1:a3| function hello() { 2:f1| return "world"; 3:0e| } ``` When editing, you reference these `line:hash` anchors instead of reproducing old content. Before any mutation, both the line number **and** hash are validated — stale anchors are rejected immediately. This eliminates: - Whitespace/indentation reproduction errors - Silent edits to the wrong line in large files - Entire-file rewrites just to change one line ## Features - **Interactive REPL**: Chat with an AI model to edit files, manage directories, and execute commands - **Comprehensive Toolset**: 12+ tools for file operations, editing, directory management, and command execution - **AOT-Ready**: Native AOT compilation for ~12 MB binaries with no .NET runtime dependency - **Rich CLI**: Beautiful terminal output using Spectre.Console with tables, rules, and colored text - **Streaming Responses**: Real-time AI response streaming in the terminal - **OpenAI-Compatible**: Works with any OpenAI-compatible API (OpenAI, Ollama, Cerebras, Groq, OpenRouter, etc.) ## Requirements - .NET 10 SDK - `clang` (for native AOT publish on Linux) ## Quick Start ```bash export ANCHOR_API_KEY=your_key_here export ANCHOR_MODEL=qwen3.5-27b # optional, default: gpt-4o export ANCHOR_ENDPOINT=https://api.openai.com/v1 # optional dotnet run --project AnchorCli ``` ## Native AOT Build ```bash dotnet publish AnchorCli -r linux-x64 -c Release ./AnchorCli/bin/Release/net10.0/linux-x64/publish/anchor ``` The resulting binary is ~12 MB, has no .NET runtime dependency, and starts instantly. ## Environment Variables | Variable | Default | Description | |---|---|---| | `ANCHOR_API_KEY` | *(required)* | API key for the LLM provider | | `ANCHOR_ENDPOINT` | `https://api.openai.com/v1` | Any OpenAI-compatible endpoint | | `ANCHOR_MODEL` | `gpt-4o` | Model name | | `ANCHOR_MAX_TOKENS` | `4096` | Max response tokens | ## Available Tools **File Operations:** - `read_file` - Read a file (or a window) with Hashline-tagged lines - `grep_file` - Search a file by regex — results are pre-tagged for immediate editing - `find_files` - Search for files matching glob patterns - `get_file_info` - Get detailed file information (size, permissions, etc.) **Edit Operations:** - `replace_lines` - Replace a range identified by `line:hash` anchors - `insert_after` - Insert lines after an anchor - `delete_range` - Delete a range between two anchors - `create_file` - Create a new file with optional initial content - `delete_file` - Delete a file permanently - `rename_file` - Rename or move a file - `copy_file` - Copy a file to a new location - `append_to_file` - Append lines to the end of a file **Directory Operations:** - `list_dir` - List directory contents - `create_dir` - Create a new directory (with parent directories) - `rename_dir` - Rename or move a directory - `delete_dir` - Delete a directory and all its contents **Command Execution:** - `execute_command` - Run shell commands (with user approval) ## Project Structure ``` AnchorCli/ ├── Program.cs # Entry point + REPL loop + AI client setup ├── Config/AppConfig.cs # Environment variable configuration ├── Hashline/ │ ├── HashlineEncoder.cs # Adler-8 + position-seed hashing │ └── HashlineValidator.cs # Anchor resolution + validation ├── Tools/ │ ├── FileTools.cs # read_file, grep_file, find_files, get_file_info │ ├── EditTools.cs # replace_lines, insert_after, delete_range, create/delete/rename/copy/append │ ├── DirTools.cs # list_dir, create_dir, rename_dir, delete_dir │ └── CommandTool.cs # execute_command └── Json/AppJsonContext.cs # Source-generated JSON context (AOT) ``` ## How It Works 1. **Setup**: The AI client is configured with your API credentials and model preferences 2. **REPL Loop**: You interact with the AI through a conversational interface 3. **Tool Calling**: The AI can call any of the available tools to read/edit files, manage directories, or execute commands 4. **Hashline Validation**: All file edits are validated using the Hashline technique to ensure precision 5. **Safe Execution**: Commands require explicit user approval before running ## Supported Models AnchorCli works with any OpenAI-compatible API endpoint, including: - OpenAI (gpt-4o, gpt-4.1, etc.) - Ollama (local models) - Cerebras - Groq - OpenRouter (qwen3.5-27b, etc.) - Any custom OpenAI-compatible server ## License MIT License - See LICENSE file for details.