Open Source AI Code Assistant - Design Document
Table of Contents
- Project Overview
- System Architecture
- Hardware Requirements
- Technology Stack
- Component Specifications
- API Specification
- CLI Interface Specification
- Shell Integration
- MCP Integration
- REPL Requirements
- Model Training Pipeline
- Data Processing Requirements
- Implementation Phases
- Testing Requirements
Project Overview
Mission Statement
Build “Del the Funky Robosapien” (or “Del” for short) - a completely free, open-source AI code assistant that runs entirely on consumer hardware, providing privacy-first AI assistance for developers without any cloud dependencies.
Core Requirements
- Privacy First: All data processing must happen locally
- Open Source: MIT license, fully auditable code
- Consumer Hardware: Must run on typical developer machines
- Self-Contained: No external API dependencies
- Extensible: Plugin architecture for custom workflows
- Multi-Platform: Support Linux, macOS, and Windows
Target Users
- Individual developers seeking privacy-first AI assistance
- Teams wanting to keep code confidential
- Organizations with strict data governance requirements
- Students learning to code without subscription costs
- Open source projects needing AI assistance
Success Criteria
- Generate useful code suggestions within 3 seconds
- Handle codebases up to 100,000 files
- Support 10+ programming languages
- Process Git histories with 50,000+ commits
- Train custom models on user data in under 4 hours
System Architecture
High-Level Architecture
┌─────────────────────────────────────────────────────────┐
│ User Interfaces │
│ ┌─────────────┬─────────────┬─────────────────────────┐ │
│ │ CLI Client │ Web Client │ IDE Extensions │ │
│ │ Commands │ Dashboard │ VS Code, Vim, Emacs │ │
│ │ REPL │ Chat UI │ IntelliJ, Sublime │ │
│ │ Scripts │ File Upload │ Custom integrations │ │
│ └─────────────┴─────────────┴─────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
│ HTTP/WebSocket API
▼
┌─────────────────────────────────────────────────────────┐
│ API Gateway │
│ • HTTP/HTTPS Server • Request/Response Logging │
│ • WebSocket Support • Rate Limiting │
│ • Authentication • Input Validation │
│ • CORS Handling • Error Management │
└─────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ Business Logic │
│ ┌─────────────────┬─────────────────┬─────────────────┐ │
│ │ Context Manager │ Code Analyzer │ Response Gen │ │
│ │ • File tracking │ • AST parsing │ • Prompt eng │ │
│ │ • Embeddings │ • Syntax check │ • Templates │ │
│ │ • Similarity │ • Dependencies │ • Streaming │ │
│ │ • Ranking │ • Call graphs │ • Formatting │ │
│ └─────────────────┴─────────────────┴─────────────────┘ │
└─────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ Infrastructure │
│ ┌─────────────────┬─────────────────┬─────────────────┐ │
│ │ Model Server │ Data Pipeline │ Storage Layer │ │
│ │ • LLM Inference │ • Git Parser │ • Vector DB │ │
│ │ • GPU Support │ • Email Parser │ • Context Store │ │
│ │ • Model Cache │ • Doc Parser │ • Config Store │ │
│ │ • Memory Mgmt │ • Training Prep │ • Session Mgmt │ │
│ └─────────────────┴─────────────────┴─────────────────┘ │
└─────────────────────────────────────────────────────────┘
Data Flow Architecture
Input Sources → Data Pipeline → Context Store → Model Server → Response
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
• Git repos • Parse files • Vector DB • LLM Inference • Text
• Email boxes • Extract code • Embeddings • GPU Accel • Code
• Documents • Analyze AST • Similarity • Memory Mgmt • Explanations
• Live files • Generate • Ranking • Streaming • Suggestions
• User input training data • Search • Error Handle • Context
Hardware Requirements
Minimum Configuration (Basic Usage)
| Component | Specification | Purpose |
|---|---|---|
| CPU | 4-core x86_64/ARM64, 2.5GHz+ | Model inference, embeddings |
| RAM | 8GB total (4GB model + 4GB system) | Model loading, context storage |
| Storage | 20GB free space, preferably SSD | Models, embeddings, context data |
| GPU | Optional, any OpenCL/CUDA compatible | Accelerated inference |
| Network | None (fully offline after setup) | Initial model downloads only |
| OS | Linux/macOS/Windows 10+ | Cross-platform support |
Expected Performance: 3B parameter model, 5-10 tokens/second, 4K context, single user
Recommended Configuration (Optimal Experience)
| Component | Specification | Purpose |
|---|---|---|
| CPU | 8-core with AVX2, 3.0GHz+ | Faster CPU inference |
| RAM | 16GB total (8GB model + 8GB system) | Larger models, more context |
| Storage | 100GB SSD, NVMe preferred | Multiple models, large context store |
| GPU | NVIDIA RTX 3060+ (8GB VRAM) or Apple M2 | GPU acceleration |
| Network | Gigabit for initial setup | Faster model downloads |
Expected Performance: 7B parameter model, 15-25 tokens/second, 8K context, 2-3 concurrent users
Enterprise Configuration (Heavy Usage)
| Component | Specification | Purpose |
|---|---|---|
| CPU | 16+ cores, server grade | Multiple concurrent requests |
| RAM | 32GB+ | Large models (13B+), extensive context |
| Storage | 500GB+ NVMe SSD | Multiple models, large datasets |
| GPU | RTX 4090 (24GB) or multiple GPUs | Maximum inference speed |
| Network | Multiple network interfaces | Team sharing, distributed setup |
Expected Performance: 13B+ parameter model, 30-100+ tokens/second, 16K+ context, 10+ users
Technology Stack
Core Technologies
- Primary Language: Go 1.21+ (performance, concurrency, simple deployment)
- ML Backend: llama.cpp with Go bindings (GGML/GGUF model support)
- Vector Database: ChromaDB with SQLite backend (embeddings storage)
- Web Framework: Gin framework (HTTP API) + Gorilla WebSocket
- CLI Framework: Cobra (commands) + Viper (configuration)
- Database: SQLite with GORM (metadata, sessions, configuration)
- Containerization: Docker + Docker Compose (easy deployment)
Key Rationale
- Go: Single binary deployment, excellent concurrency, fast compilation
- llama.cpp: Best performance for local LLM inference, active community
- SQLite: Zero-configuration, reliable, perfect for local storage
- ChromaDB: Purpose-built for embeddings, good Go integration
Alternative Technologies Considered
| Technology | Pros | Cons | Decision |
|---|---|---|---|
| Python | Rich ML ecosystem | Slower, complex deployment | Rejected |
| Rust | Maximum performance | Steeper learning curve | Future consideration |
| PostgreSQL | More features | Requires setup/maintenance | Unnecessary complexity |
| Weaviate | Advanced vector features | Heavy resource usage | Overkill for local use |
Component Specifications
1. Model Server Component
Purpose: Handle LLM inference with optimized performance
Requirements:
- Load GGUF format models (4-bit, 8-bit, 16-bit quantization)
- Support models from 1B to 70B parameters (based on hardware)
- Implement both CPU and GPU inference paths
- Provide streaming and batch inference APIs
- Manage model memory efficiently (load/unload based on usage)
- Support multiple concurrent requests with queueing
- Implement request timeout and cancellation
- Cache frequently used prompts and responses
Interfaces:
LoadModel(path string, config ModelConfig) errorGenerateResponse(request InferenceRequest) InferenceResponseGenerateStream(request InferenceRequest) <-chan StreamTokenUnloadModel() errorGetModelInfo() ModelInfoGetPerformanceStats() PerformanceStats
2. Context Manager Component
Purpose: Manage and search through codebase context
Requirements:
- Index files, Git commits, emails, and documents
- Generate embeddings for all content types
- Provide fast similarity search (sub-100ms for 10K documents)
- Rank results by relevance and recency
- Handle real-time file updates
- Support context windows up to 32K tokens
- Implement context compression for large codebases
- Provide context explanations (why something was included)
Interfaces:
AddContext(item ContextItem) errorSearchContext(query string, limit int) []ContextResultUpdateContext(path string) errorRemoveContext(path string) errorGetContextStats() ContextStatsOptimizeContextStore() error
3. Data Pipeline Component
Purpose: Process various data sources into searchable context
Requirements:
- Git Integration: Parse repositories, extract commits, diffs, messages
- Email Processing: Support mbox/maildir, extract code snippets
- File Processing: Handle 20+ programming languages, extract functions/classes
- Document Processing: Parse markdown, PDFs, text files
- Real-time Monitoring: Watch for file changes, auto-update context
- Batch Processing: Handle large datasets efficiently
- Data Validation: Ensure data quality, detect duplicates
- Format Conversion: Normalize different input formats
Supported File Types:
Programming: .go .py .js .ts .java .cpp .c .rs .rb .php .swift .kt
Markup: .md .html .xml .json .yaml .toml
Documents: .txt .pdf .rtf
Archives: .zip .tar.gz .git
Email: mbox, maildir formats
4. API Gateway Component
Purpose: Provide stable external interfaces
Requirements:
- REST API with OpenAPI 3.0 specification
- WebSocket API for real-time communication
- Request/response logging and metrics
- Rate limiting and abuse prevention
- Input validation and sanitization
- Error handling with meaningful messages
- CORS support for web clients
- Optional authentication/authorization
- API versioning support
- Health check endpoints
5. Storage Layer Component
Purpose: Persist context, configuration, and session data
Requirements:
- Vector Storage: Efficient embedding storage and retrieval
- Metadata Storage: File metadata, timestamps, relationships
- Configuration Storage: User preferences, model settings
- Session Storage: Conversation history, context state
- Cache Storage: Frequently accessed data
- Backup/Restore: Data export/import capabilities
- Migration Support: Schema updates without data loss
- Performance: Sub-10ms queries for common operations
API Specification
Base URL and Versioning
Base URL: http://localhost:8080/api/v1/
WebSocket: ws://localhost:8080/ws/
Authentication
Optional API key authentication:
Header: Authorization: Bearer <api_key>
Core Endpoints
1. Health and Status
GET /health
Response: {
"status": "healthy",
"version": "1.0.0",
"model_loaded": true,
"uptime_seconds": 3600,
"memory_usage_mb": 4096
}
2. Text Generation
POST /generate
Content-Type: application/json
Request Body:
{
"prompt": "How do I implement a binary search in Go?",
"max_tokens": 500,
"temperature": 0.7,
"top_p": 0.9,
"top_k": 40,
"repeat_penalty": 1.1,
"stop": ["```", "\n\n"],
"include_context": true,
"system_prompt": "You are a helpful coding assistant.",
"stream": false
}
Response:
{
"id": "gen_123456",
"text": "Here's how to implement binary search in Go:\n\n```go\nfunc binarySearch(arr []int, target int) int {\n left, right := 0, len(arr)-1\n \n for left <= right {\n mid := left + (right-left)/2\n if arr[mid] == target {\n return mid\n } else if arr[mid] < target {\n left = mid + 1\n } else {\n right = mid - 1\n }\n }\n return -1\n}\n```",
"token_count": 87,
"time_taken_ms": 1250,
"tokens_per_second": 69.6,
"context_used": [
{
"type": "file",
"path": "algorithms/search.go",
"relevance_score": 0.92,
"content_preview": "Binary search implementation..."
}
],
"finished": true
}
3. Streaming Generation
POST /generate/stream
Content-Type: application/json
Same request body as /generate with "stream": true
Response (Server-Sent Events):
data: {"type": "token", "content": "Here's"}
data: {"type": "token", "content": " how"}
data: {"type": "token", "content": " to"}
data: {"type": "context", "items": [...]}
data: {"type": "token", "content": " implement"}
data: {"type": "done", "stats": {"tokens": 87, "time_ms": 1250}}
4. Context Management
POST /context
Content-Type: application/json
Request Body:
{
"type": "file|git|email|document",
"path": "/path/to/source",
"content": "optional content override",
"metadata": {
"language": "go",
"size_bytes": 1024,
"last_modified": "2024-01-15T10:30:00Z"
}
}
Response:
{
"id": "ctx_789",
"status": "indexed",
"embedding_id": "emb_456",
"processing_time_ms": 150
}
5. Context Search
GET /context/search?q=error%20handling&limit=10&type=file
Response:
{
"query": "error handling",
"results": [
{
"id": "ctx_123",
"type": "file",
"path": "utils/errors.go",
"content_preview": "Error handling utilities for...",
"relevance_score": 0.94,
"metadata": {
"language": "go",
"functions": ["HandleError", "WrapError"],
"last_modified": "2024-01-15T10:30:00Z"
}
}
],
"total_results": 25,
"search_time_ms": 45
}
6. Model Management
GET /models
Response:
{
"current_model": {
"name": "codellama-7b-instruct",
"path": "/models/codellama-7b.gguf",
"size_gb": 3.8,
"parameters": "7B",
"quantization": "q4_0",
"context_length": 16384,
"loaded_at": "2024-01-15T09:00:00Z"
},
"available_models": [...]
}
POST /models/load
Request Body: {"model_path": "/path/to/model.gguf"}
Response: {"status": "loading", "estimated_time_seconds": 30}
7. Training Data Management
POST /training/prepare
Request Body:
{
"sources": [
{"type": "git", "path": "/path/to/repo"},
{"type": "email", "path": "/path/to/mailbox"},
{"type": "files", "path": "/path/to/docs", "pattern": "*.md"}
],
"output_path": "/tmp/training_data.jsonl",
"format": "instruction_following"
}
Response:
{
"job_id": "train_prep_001",
"status": "processing",
"estimated_examples": 50000,
"progress_url": "/training/prepare/train_prep_001/status"
}
WebSocket API
// Connection
ws://localhost:8080/ws/chat
// Message format
{
"type": "chat_message|context_update|model_status",
"id": "msg_123",
"content": {...},
"timestamp": "2024-01-15T10:30:00Z"
}
// Chat message
{
"type": "chat_message",
"content": {
"message": "Explain this function",
"context": ["file:///path/to/file.go:42-60"],
"stream": true
}
}
// Response
{
"type": "chat_response",
"id": "msg_123",
"content": {
"text": "This function implements...",
"partial": false,
"context_used": [...]
}
}
Error Responses
Status Codes:
200: Success
400: Bad Request (invalid input)
401: Unauthorized (if auth enabled)
429: Rate Limited
500: Internal Server Error
503: Service Unavailable (model loading)
Error Format:
{
"error": {
"code": "INVALID_REQUEST",
"message": "Temperature must be between 0 and 2",
"details": {
"field": "temperature",
"provided": 2.5,
"allowed_range": [0, 2]
}
}
}
CLI Interface Specification
Command Structure
del [global-flags] <command> [subcommand] [flags] [arguments]
Global Flags
--config, -c Config file path (default: ~/.del/config.yaml)
--verbose, -v Enable verbose logging
--debug Enable debug mode
--server, -s Server URL (default: http://localhost:8080)
--timeout Request timeout (default: 30s)
--no-color Disable colored output
--quiet, -q Suppress non-essential output
--format, -f Output format: text|json|yaml (default: text)
Server Management Commands
# Start server with various options
del server start [flags]
--port, -p Port number (default: 8080)
--host Bind address (default: localhost)
--model-path Model file path
--gpu Enable GPU acceleration
--max-memory Memory limit in GB (default: 8)
--workers Number of worker threads (default: auto)
--cors Enable CORS (default: true)
--auth Enable authentication
--cert TLS certificate file
--key TLS private key file
--log-level Logging level: debug|info|warn|error
--daemon, -d Run as daemon
--pid-file PID file path (daemon mode)
# Server control
del server stop [--force]
del server restart [start-flags]
del server status [--json]
del server logs [--tail N] [--follow]
Chat and Query Commands
# Single question
del ask "How do I handle errors in Go?" [flags]
--context Include context from files/git
--temperature Sampling temperature (0.0-2.0)
--max-tokens Maximum response tokens
--system-prompt Custom system prompt
--no-stream Disable streaming output
--save Save conversation to file
# Interactive chat mode
del chat [flags]
--model Model to use
--temperature Sampling temperature
--system-prompt System prompt file or text
--context-dir Directory to use for context
--load Load previous conversation
--save-on-exit Auto-save on exit
# Code-specific queries
del code [command] [flags]
explain FILE[:LINES] Explain code in file/lines
review FILE Review code for issues
optimize FILE Suggest optimizations
document FUNCTION Generate documentation
test FILE Generate unit tests
refactor FILE Suggest refactoring
Flags:
--language, -l Force language detection
--context Include related files
--output, -o Output file for generated code
--diff Show changes as diff
Context Management Commands
# Add context sources
del context add [type] [path] [flags]
file PATH Add file(s) to context
git REPO_PATH Add git repository
email MAILBOX_PATH Add email archive
url URL Add web page/documentation
Flags:
--recursive, -r Process directories recursively
--pattern File pattern filter (e.g., "*.go")
--exclude Exclusion patterns
--max-size Maximum file size (default: 1MB)
--follow-links Follow symbolic links
--encoding Text encoding (default: auto-detect)
# Search and manage context
del context search QUERY [flags]
--type Filter by type: file|git|email|url
--limit, -n Number of results (default: 10)
--min-score Minimum relevance score
--since Show items since date/time
--sort Sort by: relevance|date|size
del context list [--type TYPE] [--stats]
del context remove PATH [--type TYPE]
del context clear [--type TYPE] [--confirm]
del context rebuild [--force]
del context export FILE [--format json|yaml]
del context import FILE
Model Management Commands
# List and download models
del model list [flags]
--local Show only locally available models
--remote Show downloadable models
--size Include model sizes
--details Show detailed information
del model download NAME [flags]
--url Custom download URL
--quantization Quantization level: q4_0|q4_1|q5_0|q5_1|q8_0
--verify Verify checksum after download
--resume Resume interrupted download
# Model operations
del model load PATH [--force]
del model unload
del model info [NAME]
del model test [--prompt "test prompt"]
del model benchmark [--duration 60s]
del model convert INPUT OUTPUT [--quantization q4_0]
Training Commands
# Prepare training data
del train prepare [flags]
--sources Source specification file
--output Output training file
--format Format: alpaca|chatml|instruction
--max-examples Maximum training examples
--validation-split Validation set percentage
--shuffle Shuffle examples
--deduplicate Remove duplicate examples
# Run training
del train start CONFIG_FILE [flags]
--base-model Base model path
--output-dir Training output directory
--resume Resume from checkpoint
--gpu Enable GPU training
--wandb Enable Weights & Biases logging
--dry-run Validate config without training
del train status [JOB_ID]
del train stop JOB_ID [--save-checkpoint]
del train logs JOB_ID [--follow]
Configuration Commands
# Configuration management
del config init [--force]
del config show [KEY]
del config set KEY VALUE
del config get KEY
del config validate
del config reset [--confirm]
del config backup FILE
del config restore FILE
# Common settings
del config set model.default_path ./models/codellama-7b.gguf
del config set server.port 8080
del config set context.max_files 10000
del config set generation.temperature 0.7
Utility Commands
# System information
del info
--system Show system capabilities
--gpu GPU information
--models Installed models
--context Context statistics
--performance Performance benchmarks
# Maintenance
del doctor Check system health
del cleanup [--force] Clean temporary files
del upgrade [--check-only] Upgrade to latest version
del export DATA_DIR Export all data
del import DATA_DIR [--merge] Import data
# Help and documentation
del help [COMMAND]
del version [--full]
del examples [TOPIC]
Shell Integration
Del should provide seamless integration with Unix/Linux shell tools, allowing developers to combine AI assistance with traditional command-line workflows.
Command Execution Modes
1. Direct Shell Commands
# Execute shell commands directly within Del
del exec "ls -la src/"
del exec "grep -r 'TODO' . --include='*.go'"
del exec "find . -name '*.py' | head -10"
# With AI interpretation
del exec "ps aux | grep python" --explain
del exec "netstat -tulpn" --summarize
del exec "docker ps" --analyze
2. AI-Assisted Command Generation
# Generate and optionally execute commands
del suggest "show me all Go files modified in the last week"
# Outputs: find . -name "*.go" -mtime -7
# Prompt: Execute this command? [y/N/e(dit)]
del suggest "find large files over 100MB"
# Outputs: find . -type f -size +100M -exec ls -lh {} \;
del suggest "show git commits from last month with file changes"
# Outputs: git log --since="1 month ago" --stat --oneline
3. Shell Pipeline Integration
# Del as part of Unix pipelines
ls -la | del analyze "what files should I focus on?"
git log --oneline | del summarize
ps aux | del explain "what processes are using most memory?"
# Complex pipelines
find . -name "*.go" | xargs wc -l | del rank "by lines of code"
grep -r "func.*Error" . | del explain "error handling patterns"
4. REPL Shell Integration
# Within Del's interactive mode
> !ls -la src/
drwxr-xr-x 5 user user 4096 Jan 15 10:30 handlers/
-rw-r--r-- 1 user user 2048 Jan 15 09:45 main.go
...
> !grep -r "panic" . --include="*.go" | head -5
./handlers/auth.go:45: panic("invalid session")
./utils/db.go:23: // TODO: remove panic for production
...
> explain the last command output
The grep command found 2 instances of "panic" in your Go code:
1. Line 45 in auth.go has an actual panic call - this should be replaced with proper error handling
2. Line 23 in db.go has a TODO comment about removing a panic
Let me suggest safer alternatives for these...
Shell Integration Specifications
Command Execution Component
Purpose: Execute shell commands safely and capture output for AI processing
Requirements:
- Safe Execution: Sandboxed command execution with timeout protection
- Output Capture: Capture stdout, stderr, and exit codes
- Real-time Streaming: Show command output as it executes
- Working Directory: Respect current working directory context
- Environment Variables: Pass through relevant environment variables
- Interactive Commands: Handle commands requiring user input
- Privilege Control: Never execute commands requiring elevated privileges
- Command History: Track executed commands for context
Security Constraints:
Blocked Commands:
- sudo, su, doas (privilege escalation)
- rm -rf /, mkfs (destructive operations)
- dd, shred (disk operations)
- chmod 777, chown (permission changes)
- curl/wget to unknown domains (network security)
- eval, exec with untrusted input
Restricted Commands:
- git push (require confirmation)
- rm (require confirmation for multiple files)
- mv, cp (confirm overwrite operations)
- docker run (limit resource usage)
Time Limits:
- Default timeout: 30 seconds
- Long-running commands: 5 minutes with confirmation
- Interactive commands: 2 minutes timeout
Command Suggestion Engine
Purpose: Generate shell commands from natural language descriptions
Requirements:
- Context Awareness: Understand current directory, file types, project structure
- Platform Detection: Generate appropriate commands for Linux/macOS/Windows
- Safety Validation: Never suggest dangerous or destructive commands
- Command Explanation: Explain what generated commands do
- Alternative Options: Provide multiple command options when possible
- Learning: Learn from user corrections and preferences
Training Data Sources:
Command Examples:
- Common shell command patterns
- Stack Overflow command snippets
- GitHub repository scripts
- Unix manual pages and examples
- User's command history (with permission)
Pattern Recognition:
- "find files" → find, ls, locate commands
- "search content" → grep, ag, ripgrep commands
- "git operations" → git command variations
- "process management" → ps, kill, jobs commands
- "file operations" → cp, mv, chmod, tar commands
Command Categories and Examples
File and Directory Operations
# Natural language → Generated commands
"show me all Python files in this project"
→ find . -name "*.py" -type f
"find large files taking up space"
→ find . -type f -size +10M -exec ls -lh {} \; | sort -k5 -hr
"list files modified today"
→ find . -type f -newermt "today" -ls
"count lines of code in each directory"
→ find . -name "*.go" -exec wc -l {} \; | awk '{sum+=$1} END {print sum}'
Text Processing and Search
"find all TODO comments in Go files"
→ grep -rn "TODO\|FIXME\|XXX" --include="*.go" .
"show functions that return errors"
→ grep -rn "func.*error" --include="*.go" .
"find duplicate function names"
→ grep -rh "^func " --include="*.go" . | sort | uniq -d
"extract email addresses from logs"
→ grep -oE '\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b' *.log
Git Operations
"show commits from last week"
→ git log --since="1 week ago" --oneline
"find who changed this line"
→ git blame -L 45,45 src/main.go
"show files changed in last commit"
→ git diff --name-only HEAD~1
"find commits that mention 'bug'"
→ git log --grep="bug" --oneline
System Monitoring
"show processes using most CPU"
→ ps aux --sort=-%cpu | head -10
"check disk usage by directory"
→ du -sh */ | sort -hr
"show network connections"
→ netstat -tuln
"monitor log file for errors"
→ tail -f /var/log/app.log | grep -i error
Development Tools
"run tests and show coverage"
→ go test -coverprofile=coverage.out ./... && go tool cover -html=coverage.out
"format all Go code"
→ find . -name "*.go" -exec gofmt -w {} \;
"check for security vulnerabilities"
→ gosec ./...
"build for multiple platforms"
→ GOOS=linux GOARCH=amd64 go build -o myapp-linux ./cmd/
REPL Shell Integration
Shell Command Syntax in REPL
# Prefix commands with ! for execution
> !ls -la
> !grep -r "func main" .
> !git status
# Multi-line shell commands
> !for file in *.go; do
... echo "Processing $file"
... go fmt "$file"
... done
# Combine with AI analysis
> !docker ps
> explain what these containers do
# Store command output for analysis
> $output = !ps aux
> analyze $output for memory usage patterns
Interactive Command Building
# Step-by-step command construction
> build command to find large files
Del: I'll help you build a command to find large files. Let me ask a few questions:
1. What size threshold? (e.g., >100MB)
> 50MB
2. Which directory to search?
> current directory and subdirectories
3. Should I show file sizes?
> yes
Generated command: find . -type f -size +50M -exec ls -lh {} \;
Execute this command? [y/N/e(dit)/s(ave)]
> y
[Command executes and shows results]
Would you like me to explain what each part does?
Command History and Favorites
# Show recent shell commands
> :history shell
1. ls -la src/
2. grep -r "TODO" . --include="*.go"
3. git log --oneline | head -10
4. docker ps
# Save frequently used commands
> :save-command "show-todos" "grep -r 'TODO\|FIXME' --include='*.go' ."
> :run show-todos
# Command aliases for complex operations
> :alias disk-usage "du -sh */ | sort -hr"
> !disk-usage
API Endpoints for Shell Integration
Execute Shell Command
POST /api/v1/shell/execute
Content-Type: application/json
Request:
{
"command": "ls -la src/",
"working_directory": "/path/to/project",
"timeout_seconds": 30,
"capture_output": true,
"environment": {
"GOPATH": "/go",
"PATH": "/usr/local/bin:/usr/bin:/bin"
}
}
Response:
{
"command": "ls -la src/",
"exit_code": 0,
"stdout": "drwxr-xr-x 5 user user 4096 Jan 15 10:30 handlers/\n-rw-r--r-- 1 user user 2048 Jan 15 09:45 main.go\n",
"stderr": "",
"execution_time_ms": 45,
"working_directory": "/path/to/project"
}
Generate Shell Command
POST /api/v1/shell/suggest
Content-Type: application/json
Request:
{
"description": "find all Go files modified in the last 24 hours",
"context": {
"operating_system": "linux",
"current_directory": "/path/to/project",
"available_tools": ["find", "grep", "git"],
"project_type": "go"
}
}
Response:
{
"suggestions": [
{
"command": "find . -name '*.go' -mtime -1",
"explanation": "Find all .go files modified in the last 24 hours",
"confidence": 0.95,
"safety_level": "safe"
},
{
"command": "git log --since='24 hours ago' --name-only --pretty=format: | grep '\\.go
### Command Examples
```bash
# Quick start
del model download codellama-7b-instruct
del server start --port 8080 --gpu
del context add git .
del ask "How does the authentication work in this codebase?"
# Development workflow
del chat --context-dir ./src --save-on-exit
> How can I optimize the database queries in user.go?
> Generate unit tests for the UserService class
> Explain the dependency injection pattern used here
# Code review workflow
del context add git . --since "24 hours ago"
del code review src/handlers/auth.go
del code explain src/models/user.go:45-67
del code test src/services/email.go --output tests/
# Training custom model
del train prepare --sources training_sources.yaml --output training.jsonl
del train start training_config.yaml --gpu --wandb
del model load ./fine_tuned_model/model.gguf
REPL Requirements
Interactive Mode Features
The REPL (Read-Eval-Print Loop) should provide an interactive chat interface with the following capabilities:
Core REPL Commands
# Enter interactive mode
del chat
# REPL-specific commands (prefixed with : or /)
:help, :h Show available commands
:quit, :q, :exit Exit REPL
:clear, :cls Clear screen
:history Show command history
:save [filename] Save conversation
:load filename Load conversation
:context Show current context
:model Show current model info
:stats Show session statistics
:reset Reset conversation
:set key=value Change settings
:get key Show setting value
:debug Toggle debug mode
Multi-line Input Support
# Automatic multi-line detection
> def fibonacci(n):
... if n <= 1:
... return n
... return fibonacci(n-1) + fibonacci(n-2)
...
[Generated response]
# Explicit multi-line mode
> ```
... This is a multi-line
... input that continues
... until I type ```
Context Integration
# File reference
> @file:src/main.go explain this function
# Line range reference
> @src/auth.go:42-58 how can I improve this?
# Git commit reference
> @commit:abc123 what changed in this commit?
# Auto-complete suggestions
> @src/[TAB]
src/main.go src/auth.go src/utils.go
# Context shortcuts
> /explain # Explain current file/selection
> /review # Review current file
> /optimize # Suggest optimizations
> /document # Generate documentation
> /test # Generate tests
Advanced Features
# Code mode - specialized for code questions
> /code
Code mode enabled. Ask about code, get code responses.
code> implement binary search in rust
# Conversation modes
> /mode explain # Explanation-focused responses
> /mode debug # Debugging assistance
> /mode review # Code review mode
> /mode teach # Educational responses
# Session management
> /save important_discussion
Saved conversation to important_discussion.chat
> /load important_discussion
Loaded conversation from important_discussion.chat
Visual Enhancements
- Syntax Highlighting: Color-coded code in responses
- Progress Indicators: Show when model is thinking
- Token Streaming: Display responses as they generate
- Context Previews: Show what context is being used
- Error Formatting: Clear error messages with suggestions
Example REPL Session
$ del chat --context-dir ./myproject
Del the Funky Robosapien v1.0.0 (codellama-7b-instruct)
Context: 1,247 files indexed from ./myproject
Type :help for commands or start chatting!
> I'm getting a panic in my Go code, can you help debug it?
I'd be happy to help debug your Go panic! Could you share the panic
message and the relevant code? You can reference files directly like
@file:path/to/file.go or paste the error message.
> @file:src/handlers/user.go the panic happens around line 45
[Loading src/handlers/user.go...]
Looking at your user.go file around line 45, I can see the issue. You have:
```go
user := users[id] // Line 45
return user.Name // This panics if user is nil
The panic occurs because you’re not checking if the user exists in the map before accessing its fields. Here’s the fix:
user, exists := users[id]
if !exists {
return "", fmt.Errorf("user with id %s not found", id)
}
return user.Name, nil
This uses the two-value assignment to check if the key exists in the map.
That makes sense! Are there other similar patterns in my codebase?
Let me search for similar patterns in your codebase…
[Context: Searching 1,247 files for map access patterns]
I found 3 other locations with similar unsafe map access:
- src/handlers/auth.go:23 -
sessions[sessionID].UserID - src/models/cache.go:67 -
cache[key].Data - src/utils/config.go:12 -
settings[param].Value
Would you like me to show you how to fix each of these?
:save debugging_session Saved conversation to debugging_session.chat
:quit Goodbye! Your conversation was saved.
"explanation": "Use git to find Go files changed in last 24 hours (only if files are tracked)",
"confidence": 0.87,
"safety_level": "safe"
}
]
}
Configuration Options
Shell Integration Settings
# ~/.del/config.yaml
shell:
# Enable/disable shell integration
enabled: true
# Default shell to use
default_shell: "/bin/bash"
# Command timeout settings
timeouts:
default: 30s
interactive: 120s
long_running: 300s
# Safety settings
safety:
require_confirmation:
- "rm *"
- "git push"
- "docker run"
blocked_commands:
- "sudo"
- "rm -rf /"
- "mkfs"
- "dd if="
blocked_patterns:
- "curl.*|.*sh" # Prevent pipe to shell
- "wget.*|.*bash"
# Command suggestion settings
suggestions:
enabled: true
max_suggestions: 3
learn_from_usage: true
# History settings
history:
enabled: true
max_entries: 1000
file: "~/.del/shell_history"
This shell integration makes Del incredibly powerful by combining AI assistance with the full Unix toolchain that developers already know and love!
Command Examples
# Quick start
del model download codellama-7b-instruct
del server start --port 8080 --gpu
del context add git .
del ask "How does the authentication work in this codebase?"
# Development workflow
del chat --context-dir ./src --save-on-exit
> How can I optimize the database queries in user.go?
> Generate unit tests for the UserService class
> Explain the dependency injection pattern used here
# Code review workflow
del context add git . --since "24 hours ago"
del code review src/handlers/auth.go
del code explain src/models/user.go:45-67
del code test src/services/email.go --output tests/
# Training custom model
del train prepare --sources training_sources.yaml --output training.jsonl
del train start training_config.yaml --gpu --wandb
del model load ./fine_tuned_model/model.gguf
REPL Requirements
Interactive Mode Features
The REPL (Read-Eval-Print Loop) should provide an interactive chat interface with the following capabilities:
Core REPL Commands
# Enter interactive mode
del chat
# REPL-specific commands (prefixed with : or /)
:help, :h Show available commands
:quit, :q, :exit Exit REPL
:clear, :cls Clear screen
:history Show command history
:save [filename] Save conversation
:load filename Load conversation
:context Show current context
:model Show current model info
:stats Show session statistics
:reset Reset conversation
:set key=value Change settings
:get key Show setting value
:debug Toggle debug mode
Multi-line Input Support
# Automatic multi-line detection
> def fibonacci(n):
... if n <= 1:
... return n
... return fibonacci(n-1) + fibonacci(n-2)
...
[Generated response]
# Explicit multi-line mode
> ```
... This is a multi-line
... input that continues
... until I type ```
Context Integration
# File reference
> @file:src/main.go explain this function
# Line range reference
> @src/auth.go:42-58 how can I improve this?
# Git commit reference
> @commit:abc123 what changed in this commit?
# Auto-complete suggestions
> @src/[TAB]
src/main.go src/auth.go src/utils.go
# Context shortcuts
> /explain # Explain current file/selection
> /review # Review current file
> /optimize # Suggest optimizations
> /document # Generate documentation
> /test # Generate tests
Advanced Features
# Code mode - specialized for code questions
> /code
Code mode enabled. Ask about code, get code responses.
code> implement binary search in rust
# Conversation modes
> /mode explain # Explanation-focused responses
> /mode debug # Debugging assistance
> /mode review # Code review mode
> /mode teach # Educational responses
# Session management
> /save important_discussion
Saved conversation to important_discussion.chat
> /load important_discussion
Loaded conversation from important_discussion.chat
Visual Enhancements
- Syntax Highlighting: Color-coded code in responses
- Progress Indicators: Show when model is thinking
- Token Streaming: Display responses as they generate
- Context Previews: Show what context is being used
- Error Formatting: Clear error messages with suggestions
Example REPL Session
$ del chat --context-dir ./myproject
Del the Funky Robosapien v1.0.0 (codellama-7b-instruct)
Context: 1,247 files indexed from ./myproject
Type :help for commands or start chatting!
> I'm getting a panic in my Go code, can you help debug it?
I'd be happy to help debug your Go panic! Could you share the panic
message and the relevant code? You can reference files directly like
@file:path/to/file.go or paste the error message.
> @file:src/handlers/user.go the panic happens around line 45
[Loading src/handlers/user.go...]
Looking at your user.go file around line 45, I can see the issue. You have:
```go
user := users[id] // Line 45
return user.Name // This panics if user is nil
The panic occurs because you’re not checking if the user exists in the map before accessing its fields. Here’s the fix:
user, exists := users[id]
if !exists {
return "", fmt.Errorf("user with id %s not found", id)
}
return user.Name, nil
This uses the two-value assignment to check if the key exists in the map.
That makes sense! Are there other similar patterns in my codebase?
Let me search for similar patterns in your codebase…
[Context: Searching 1,247 files for map access patterns]
I found 3 other locations with similar unsafe map access:
- src/handlers/auth.go:23 -
sessions[sessionID].UserID - src/models/cache.go:67 -
cache[key].Data - src/utils/config.go:12 -
settings[param].Value
Would you like me to show you how to fix each of these?
:save debugging_session Saved conversation to debugging_session.chat
:quit Goodbye! Your conversation was saved.