letscode¶
A minimal, OpenAI-compatible coding agent for the terminal, written in Python.
Point it at any OpenAI-API-compatible endpoint (Ollama, Fireworks, OpenRouter, vLLM, llama.cpp's llama-server, …) and get a streaming agent loop with the four tools that cover 95% of coding sessions: read, write, edit, bash. Plus skills, slash commands, and a plugin system you can extend.
Using an AI coding tool?
letscode publishes an llms.txt index and a self-contained llms-full.txt reference following the llmstxt.org convention. Point your agent at those for the whole surface in one fetch.
-
Get started in 60 seconds
Install, set an API key, type a prompt.
-
Configure to your taste
User and project TOML, env vars, CLI flags: predictable precedence.
-
Extend with plugins
Pluggy + entry points. Bring your own tools, commands, skills, frontends.
-
Understand the model
Stable contracts, ten hooks, versioning rule, what's internal vs public.
What it is¶
A three-layer Python application: LLM client at the bottom (openai.AsyncOpenAI with base_url set), agent loop in the middle (event-driven async generator, parallel tool execution, hooks for everything), basic terminal frontend on top (prompt_toolkit + rich). Plugins extend any layer.
flowchart TD
User[User input] --> Frontend
Frontend[Basic TUI<br/>prompt_toolkit + rich] --> Agent
Agent[Agent loop<br/>event-driven async] --> LLM
LLM[LLM client<br/>OpenAI Chat Completions] --> Provider[(Any OpenAI-<br/>compatible<br/>endpoint)]
Agent --> Tools[Built-in tools<br/>read · write · edit · bash]
Plugins[(Pluggy + entry points)] -.extend.-> Tools
Plugins -.extend.-> Frontend
Plugins -.lifecycle hooks.-> Agent
What it isn't¶
Deliberate non-goals
- Not a Claude Code competitor. Anthropic ships its own first-class harness; letscode is for people who want a small, hackable Python harness against whatever endpoint they prefer.
- Not a framework. It's an application. The plugin system shapes this app; it isn't a library for building agents.
- No subscription OAuth flows, no bespoke package manager, no permission popups, no built-in to-dos. See the full list.
Providers¶
letscode speaks the OpenAI Chat Completions wire format, so any endpoint that implements it works without per-provider code paths.
No OPENAI_BASE_URL needed: the built-in catalog routes deepseek-chat to DeepSeek for you (v0.7). Same for fireworks, zai, gemini, openrouter.
Works without changes against Groq, Fireworks, Together, vLLM, LM Studio, xAI, Cerebras, Mistral, ZAI: anything OpenAI-compatible.
Status¶
Latest release: v0.7.0, 2026-07-28. Provider-aware model selection, plugin distribution, editor ergonomics. Next up (in devel): the 0.7.x patch line (plugin-load hardening, subagent model propagation) and v0.8 (ctx.ui interaction primitives, /login OAuth); 864 tests passing, ruff + ty + pyrefly + mypy --strict all clean. See the changelog.
The roadmap tracks where the project is going. The lessons learned tracks what we've learned along the way.