# Performance & Agentic Roadmap for CLIProxyAPI This roadmap focuses on optimizing the server for high-performance single-user usage (low latency, high throughput) and enhancing agentic capabilities (tool use, reasoning, debugging). ## Phase 1: Core Performance Optimization ### 1.1 HTTP Client Reuse (Critical) **Problem:** Currently, handlers create a new `http.Client` for every request. This disables TCP connection pooling (Keep-Alive), causing unnecessary TLS handshakes and increasing latency. **Solution:** - Create a global `*http.Client` in `main.go` with optimized transport settings. - Inject this client into all handlers. ```go // Recommended Transport Settings t := &http.Transport{ MaxIdleConns: 100, MaxIdleConnsPerHost: 20, IdleConnTimeout: 90 * time.Second, DisableCompression: true, // Proxy should often pass through raw bytes } ``` ### 1.2 Memory Optimization (sync.Pool) **Problem:** JSON translation involves allocating new byte slices for every request/response body. **Solution:** - Implement `sync.Pool` for byte buffers used in the `translator` package. - Reuse buffers for reading request bodies and constructing responses. ### 1.3 Asynchronous Logging **Problem:** Logging might be blocking the request path. **Solution:** - Ensure `logrus` or the custom logger is writing asynchronously or to a buffered channel to avoid I/O blocking on the main request thread. ## Phase 2: Agentic Capabilities & Tooling ### 2.1 Unified Tool Abstraction **Current State:** Tool translation is handled point-to-point (e.g., Gemini->OpenAI). **Goal:** Create a standardized `ToolDefinition` struct in `sdk` that acts as an intermediate representation (IR). **Benefit:** - Easier to add new providers (Ollama, DeepSeek, etc.). - Write tools once, run on any provider. ### 2.2 "Agentic Trace" Debugging **Goal:** When using CLI tools (like Cline/RooCode), it's hard to see *why* a tool call failed. **Solution:** - Add a generic `X-Agent-Trace-ID` header. - Create a specific "Trace" log level that captures the *exact* JSON sent to and from the upstream provider for tool calls. - Expose a simple `/v1/trace/{id}` endpoint to view the "thought process" and tool outputs. ### 2.3 Enhanced "Thinking" Support **Goal:** Maximize the reasoning capabilities of models like Claude 3.7 and OpenAI o1. **Actions:** - Ensure `internal/thinking` supports "Budget" parameters for all providers (currently seems focused on specific ones). - Add support for "Thought Blocks" parsing in the stream to separate "reasoning" from "final answer" for clients that don't support it natively. ## Phase 3: Architecture & Maintainability ### 3.1 Refactor `main.go` **Problem:** The entry point is too complex (`God Function`). **Solution:** - Extract server initialization into `internal/bootstrap`. - Move configuration loading to `internal/config/loader.go`. ### 3.2 Security Hardening (Architectural) **Action:** - Externalize all hardcoded OAuth secrets to `config.yaml`. - Implement a simple "Allowlist" for the Management API's `APICall` to prevent SSRF, even in a private network (defense in depth). ## Implementation Priority 1. **Refactor HTTP Client** (Highest Impact/Effort ratio). 2. **Refactor `main.go`** (Makes future changes easier). 3. **Agentic Trace Logging** (High value for debugging "smart" agents). 4. **Buffer Pools** (Micro-optimization, do last).