Skip to content

Changes

The canonical, current change log lives at the repo root: CHANGES.md. The summary below covers the most recent release; click through for earlier versions.

v0.7.0: unreleased

Editor ergonomics. Ten items reducing daily-driver friction, no new architecture. Informed by notes/22-vs-tau.md. Mostly closes pi/tau parity gaps in input handling, session lifecycle, provider knobs.

Added

  • @path / !cmd / !!cmd input preprocessor: inline a file's contents (@src/foo.py), splice a shell command's output (!git status), or run silently for side effects (!!git fetch). See Input surfaces.
  • Prompt templates at ~/.letscode/prompts/<name>.md: drop a Markdown file and typing /<name> args splices its body into the next user message. {{args}} is substituted.
  • Session lifecycle: /new starts a fresh session in the same project; /resume [N] lists sessions or switches to #N; /name [TEXT] labels the current session.
  • Auto-session-naming: first user message derives a short label (local heuristic; never overwrites an explicit /name).
  • Session export: /copy, /export [PATH] (self-contained HTML), /share (secret GitHub gist via gh).
  • Resume recap: letscode -c prints a compact summary of the resumed session (count + last user + last assistant) before the prompt reappears.
  • --thinking LEVEL (and LETSCODE_THINKING + thinking = config): off | minimal | low | medium | high | xhigh. Sends reasoning_effort to OpenAI-compatible providers; rounded down per-model against a catalog capability list.
  • Config-driven model catalog: src/letscode/data/catalog.toml ships built-in pricing / context / thinking capabilities; users overlay via ~/.letscode/catalog.toml with no code changes. /model now lists catalog-known entries.
  • Provider retries with a new RetryEvent: 408/409/429/5xx bounce with exponential backoff (1s → 10s cap, 2 retries by default) and a subtle status line in the TUI. Cancellation interrupts the sleep.
  • Startup update check: one PyPI request per day, cached under ~/.letscode/cache/. Suppress with LETSCODE_NO_UPDATE_CHECK=1 or CI=1.
  • SOCKS proxy support: httpx[socks] shipped by default; the generic socks://… scheme rewrites to socks5://… on startup so common ALL_PROXY values just work.

Changed

  • The SDK's built-in retry loop is off (max_retries=0); letscode owns the retry policy so it can emit RetryEvent.
  • /model (no args) now lists catalog-known models alongside the active one.

v0.6.0 (2026-06-22)

MCP integration via the new letscode-mcp plugin, plus the mop-up from five weeks of v0.5 open-source use. No core changes; the extension model absorbs a full external protocol without touching the agent loop.

Added

  • letscode-mcp plugin (plugins/letscode-mcp/). Discover MCP servers from [mcp.servers.<name>] tables in ~/.letscode/config.toml; their tools surface as native letscode tools under the mcp_<server>_ namespace (or a user-configured prefix). stdio transport, one persistent ClientSession per server, failures degrade to ToolResult(is_error=True); never a traceback into the agent loop. Built on the official mcp Python SDK.
  • In-tree MCP test server (tests/fixtures/mcp_test_server.py): a minimal MCP JSON-RPC 2.0 stdio server used by the CI integration test (no npx/uvx dependency).
  • MCP end-to-end integration test (tests/b_integration/test_mcp_e2e.py) drives the full tool-call → MCP roundtrip → tool-result path against the real in-tree server via FakeLLMClient.

Changed

  • notes/05-gap-vs-pi.md gained a v0.4+v0.5 retrofit block documenting every closed and deferred gap.

v0.5.0 (2026-05-27)

First PyPI release. The focus of v0.5 was making letscode pleasant on first contact.

Added

  • letscode --version and letscode --init (scaffold a commented ~/.letscode/config.toml); both work with no API key.
  • Actionable no-API-key message (names the env var, --api-key, --init, the config path).
  • Per-turn footer shows provider prompt-cache hits when present.
  • Release-readiness gates: make verify-dist (drive the built wheel from a clean venv) and make verify-plugin (entry-point discovery from a non-editable install).

Changed

  • CLI migrated from typer/click to cyclopts: behaviour-preserving (same flags, env vars, exit codes).
  • Input typed at the > prompt no longer echoes twice.
  • Docs corrected: not on PyPI yet → install from source / built wheel.

Fixed

  • A malformed config file degrades to defaults with a one-line warning instead of a traceback.
  • Options after the prompt are no longer swallowed into it (letscode "p" --model x honours --model).

Earlier releases

  • v0.4.0 – 2026-05-19: Plugin & integration, RPC mode (--mode rpc), tree sessions (/tree//fork//clone), memory recall + /forget, /reload, interrupt-and-redirect streaming input, config sections, external Textual frontend.
  • v0.3.0 – 2026-05-13: Extension model + ergonomics, render_custom_message hook, Frontend Protocol, skill-to-tool synthesis, letscode-memory, docs site, Markdown rendering.
  • v0.2.0 – 2026-05-12: Two-tier message model, ExecutionEnv, parent_id sessions, compaction, steering / follow-up queues, TOML config.
  • v0.1.0 – 2026-05-09: Initial release, agent loop, four built-in tools, skill discovery, slash commands, sessions, basic TUI, plugin system.

For the full per-version breakdown, see CHANGES.md.