Add toolCall.askUser.trustModeTimeoutSeconds: in trust mode, an unanswered ask_user question times out and the LLM continues with its best judgment. Fix OpenAI-compatible chat splitting text around a duplicate thinking block, or dropping a few characters, when…
Read full notes
Add toolCall.askUser.trustModeTimeoutSeconds: in trust mode, an unanswered ask_user question times out and the LLM continues with its best judgment.
Fix OpenAI-compatible chat splitting text around a duplicate thinking block, or dropping a few characters, when one stream chunk carries both reasoning and text.
Fix "Waiting for tool call approval" progress being replaced by "Generating" when another tool call finishes while one still waits for approval. eca-emacs#334 Retry or auto-continue Anthropic streams that fail mid-response with an api_error, overloaded_error…
Read full notes
Fix "Waiting for tool call approval" progress being replaced by "Generating" when another tool call finishes while one still waits for approval. eca-emacs#334
Retry or auto-continue Anthropic streams that fail mid-response with an api_error, overloaded_error or timeout_error SSE event, instead of ending the prompt.
Refill the maxAutoContinues recovery budget once a response completes and its tools run, so long turns aren't stopped by failures spread across many steps.
Show consecutive thinking blocks as a single block in chat, live and on resume, without changing the history sent to providers. #643
Show subscription quota (Claude Pro/Max, ChatGPT, GitHub Copilot) with reset times instead of costs in chat usage and provider status, plus a /quota command. #641
Fix "Waiting for tool call approval" progress being replaced by "Generating" when another tool call finishes while one still waits for approval. eca-emacs#334 Scope "approve & remember" approvals to the chat and its subagents instead of all chats, add…
Read full notes
Fix "Waiting for tool call approval" progress being replaced by "Generating" when another tool call finishes while one still waits for approval. eca-emacs#334
Scope "approve & remember" approvals to the chat and its subagents instead of all chats, add /approvals and /forget-approvals commands to list and forget them. #639
Add subagent timeoutSeconds; on timeout or max steps the subagent gets a final no-tools turn to report findings, and a parent stop keeps its partial output. #625 Fix tool-call continuations sending the provider key resolved at prompt start, so a ${cmd:...} key…
Read full notes
Add subagent timeoutSeconds; on timeout or max steps the subagent gets a final no-tools turn to report findings, and a parent stop keeps its partial output. #625
Fix tool-call continuations sending the provider key resolved at prompt start, so a ${cmd:...} key that prints a short-lived token no longer expires mid-prompt; continuations read the key from the current config. #634
Support multiple accounts of the same provider (e.g. work and personal subscriptions) via provider inherit, like "anthropic-work": {"inherit": "anthropic"}. #617
Fix ECA processes overwriting each other's refreshed provider logins in the global cache.
List the new OpenAI gpt-6-sol/gpt-6-luna models for ChatGPT OAuth accounts by bumping the Codex client version the backend gates on. Fix /agent, /model and remote UI agent changes being reverted by the editor's next prompt; /resume now also restores the chat…
Read full notes
List the new OpenAI gpt-6-sol/gpt-6-luna models for ChatGPT OAuth accounts by bumping the Codex client version the backend gates on.
Fix /agent, /model and remote UI agent changes being reverted by the editor's next prompt; /resume now also restores the chat agent. eca-emacs#327
Retry transient openai-chat post-tool failures (e.g. 502) before new output without rerunning tools, so sub-agents survive flaky gateways. #620
Pin plugin sources to verified commits, add explicit /plugin-update, and preserve marketplace identity when installing plugins. Retry transient Anthropic post-tool failures before new output without rerunning tools; show recovery counts and explain exhausted…
Read full notes
Pin plugin sources to verified commits, add explicit /plugin-update, and preserve marketplace identity when installing plugins.
Retry transient Anthropic post-tool failures before new output without rerunning tools; show recovery counts and explain exhausted or disabled recovery.
Expand @file references in custom-command and parameterized-skill arguments into file content before sending the prompt. #163
Fix steered native commands (e.g. /sync-system-prompt) being sent to the LLM as text while the chat runs: run them at the next turn boundary or refuse chat-changing ones. #610
Return globalConfigPath in the initialize response so clients open the config file the server actually reads.
Retry one transient GitHub Copilot token-renewal gateway/service failure. #551 Build native binaries with GraalVM for JDK 25: fixes the idle server burning one CPU core per HTTPS connection closed by a gateway mid-stream. #608
Read full notes
Retry one transient GitHub Copilot token-renewal gateway/service failure. #551
Build native binaries with GraalVM for JDK 25: fixes the idle server burning one CPU core per HTTPS connection closed by a gateway mid-stream. #608
Fix answering pending questions from the remote UI without SSE subscribers; the first editor or HTTP answer wins. Fix GitHub Copilot gpt-5.6-*/gpt-6-* models sent to Chat Completions (unsupported_api_for_model) when the /models catalog is unavailable: gpt >=…
Read full notes
Fix answering pending questions from the remote UI without SSE subscribers; the first editor or HTTP answer wins.
Fix GitHub Copilot gpt-5.6-*/gpt-6-* models sent to Chat Completions (unsupported_api_for_model) when the /models catalog is unavailable: gpt >= 5.3 route to Responses by name.
Keep the catalog API and reasoning variants of hidden GitHub Copilot models (e.g. disabled policy) that are listed explicitly under the provider models config.
Fix context usage counting only output tokens on anthropic-compatible providers that report input usage in message_delta (e.g. Z.AI). #604 Accept unescaped square brackets, non-ASCII and other reserved chars in workspace file URI paths. #594 #605 Fix inflated…
Read full notes
Fix context usage counting only output tokens on anthropic-compatible providers that report input usage in message_delta (e.g. Z.AI). #604
Accept unescaped square brackets, non-ASCII and other reserved chars in workspace file URI paths. #594 #605
Fix inflated costs for OpenAI-compatible providers (e.g. Synthetic); count usage once per request before completion and retain received usage on stream errors.
Tool prompts: push, git config, shell search/read and sub-agents run on explicit request; rule headings are tool-scoped.
Recover Anthropic streaming responses interrupted by transient TLS bad_record_mac failures.
BREAKING: plugins.install now appends across config layers. Set plugins.installMode to replace beside the list to exclude inherited plugins as before.
Add mcpToolSearch config to keep MCP tool schemas out of context until the LLM loads them with the new eca__search_tools tool.
Fix /compact steered while the chat is running: compact with its instructions at the next turn boundary and resume the task, instead of sending it to the LLM as text. #600
Hide GitHub Copilot models the account can't use (model_picker_enabled: false or a disabled policy) instead of listing the whole catalog, and don't fall back to models.dev when none is usable. #601
Pick the GitHub Copilot default model from the account's catalog (versatile, then powerful, then lightweight category) instead of hardcoding gpt-5.5, which some plans don't include.
Fix remote MCP servers whose SSE events omit the space after event: (e.g. Z.AI) hanging on initialize; bump plumcp to 0.2.3. #586
Fix spawn_agent details to include the agent's configured variant; it was only sent when the LLM passed the variant argument explicitly. Add gpt-6-astra support: built-in variants low, medium, high, xhigh, max (no none), Codex Lite/context fallbacks, web…
Read full notes
Fix spawn_agent details to include the agent's configured variant; it was only sent when the LLM passed the variant argument explicitly.
Add gpt-6-astra support: built-in variants low, medium, high, xhigh, max (no none), Codex Lite/context fallbacks, web search and image generation.
Fix directory_tree hiding gitignored files but not their directories (e.g. .git, target); listing an ignored dir directly now shows its contents.
Honor no_proxy/NO_PROXY when routing HTTP and HTTPS requests through environment-configured proxies. #583
Stop retrying provider 429 errors that report exhausted usage or billing quota. #405
Add /agent to switch a chat's primary agent without resetting its established model or variant. #428
Add autoCompactTokensLeft to auto-compact when a fixed number of context tokens remain instead of a percentage. #582
Add view_image tool so the agent can load png/jpg/gif/webp files from disk into context as images for models with image input.
Echo user prompt and show a "Loading config" progress before resolving config, so slow ${cmd:...} keys no longer delay the chat UI. Fix config cache thrashing on unrelated db changes, which re-ran ${cmd:...} commands on every request and poll; cache successful…
Read full notes
Echo user prompt and show a "Loading config" progress before resolving config, so slow ${cmd:...} keys no longer delay the chat UI.
Fix config cache thrashing on unrelated db changes, which re-ran ${cmd:...} commands on every request and poll; cache successful ${cmd:...} results for 5 minutes.
Build fallback variants from /v1/models advertised reasoning efforts (OpenRouter, Synthetic) when no built-in or user variants exist. Add /chats command listing chats from all workspaces grouped by workspace path, with optional title filter. Workspace roots…
Read full notes
Build fallback variants from /v1/models advertised reasoning efforts (OpenRouter, Synthetic) when no built-in or user variants exist.
Add /chats command listing chats from all workspaces grouped by workspace path, with optional title filter. Workspace roots are persisted in the chats index or hash-recovered.
Add built-in effort variants for Claude models on openai-chat providers like OpenRouter, using the verbosity param which maps to Anthropic's output_config.effort.
Read full notes
Add built-in effort variants for Claude models on openai-chat providers like OpenRouter, using the verbosity param which maps to Anthropic's output_config.effort.
Set ECA_AGENT=1 and ECA_CHAT_ID env vars on commands spawned by shell, git, custom tools and hooks so external tooling can detect ECA-spawned commands.
Read full notes
Set ECA_AGENT=1 and ECA_CHAT_ID env vars on commands spawned by shell, git, custom tools and hooks so external tooling can detect ECA-spawned commands.
Improve subagent failure result: rate-limit reset time, parsed Anthropic error code, and retry guidance so the parent agent can re-spawn or switch model.
Read full notes
Improve subagent failure result: rate-limit reset time, parsed Anthropic error code, and retry guidance so the parent agent can re-spawn or switch model.
Add chat/inlinePrompt protocol method: inline editor prompts backed by regular chats, optionally forking an existing chat without replay. New chatInline config for model/agent/variant defaults. Return the new chatId in the chat/fork response and tag inline…
Read full notes
Add chat/inlinePrompt protocol method: inline editor prompts backed by regular chats, optionally forking an existing chat without replay. New chatInline config for model/agent/variant defaults.
Return the new chatId in the chat/fork response and tag inline chats with kind in chat/list.
Add /btw command to ask a side question in a forked chat, keeping the current chat history clean. Runs immediately even while the chat is running (steered /btw is not queued). Add /delete-chat command to permanently delete the current chat or a chat-id from…
Read full notes
Add /btw command to ask a side question in a forked chat, keeping the current chat history clean. Runs immediately even while the chat is running (steered /btw is not queued).
Add /delete-chat command to permanently delete the current chat or a chat-id from the /resume list, asking confirmation first.
Discover model context limit from llama.cpp/llama-swap /models meta.n_ctx/n_ctx_train, enabling usage limit and auto-compaction for local providers. #577 Restore parallel function-call batching for ChatGPT OAuth models that advertise Responses Lite and…
Read full notes
Discover model context limit from llama.cpp/llama-swap /modelsmeta.n_ctx/n_ctx_train, enabling usage limit and auto-compaction for local providers. #577
Restore parallel function-call batching for ChatGPT OAuth models that advertise Responses Lite and parallel tool-call support. #572
Add editor_definition and editor_references tools backed by the editor's language server, behind new client capabilities and toolCall.editorNav.enabled config. #351
Read full notes
Add editor_definition and editor_references tools backed by the editor's language server, behind new client capabilities and toolCall.editorNav.enabled config. #351
Retry LLM requests on network failures (VPN/wifi drops: DNS, refused or timed-out connects) with "Network issues" progress, instead of failing or hanging. Add connectTimeoutSeconds config (default 15) so requests fail fast instead of hanging when the network…
Read full notes
Retry LLM requests on network failures (VPN/wifi drops: DNS, refused or timed-out connects) with "Network issues" progress, instead of failing or hanging.
Add connectTimeoutSeconds config (default 15) so requests fail fast instead of hanging when the network black-holes connections.
Skip redundant MCP tool/serverUpdated notification after prompts/resources listing when the server has none. Chat retention (chatRetentionDays) now considers when the chat was last updated instead of when it was created, keeping old but still active chats.
Read full notes
Skip redundant MCP tool/serverUpdated notification after prompts/resources listing when the server has none.
Chat retention (chatRetentionDays) now considers when the chat was last updated instead of when it was created, keeping old but still active chats.
Improve /login UX: markdown links, provider/method selection via chat/askQuestion when supported by client, GitHub Copilot login completes automatically, secrets not echoed. Mark MCP servers as running right after tools listing, fetching prompts/resources…
Read full notes
Improve /login UX: markdown links, provider/method selection via chat/askQuestion when supported by client, GitHub Copilot login completes automatically, secrets not echoed.
Mark MCP servers as running right after tools listing, fetching prompts/resources afterwards so slow/unresponsive list requests don't delay server startup.
Ask user consent and enable the GitHub Copilot per-model policy when a request fails with model_not_supported, instead of surfacing the raw 400 error.
Store chats in per-chat cache files with a lazy-loaded index instead of one whole-workspace blob, fixing CPU spikes and slow startup as history grows; legacy caches migrate automatically. #557 Hooks db_cache_path now points at the workspace cache dir instead…
Read full notes
Store chats in per-chat cache files with a lazy-loaded index instead of one whole-workspace blob, fixing CPU spikes and slow startup as history grows; legacy caches migrate automatically. #557
Hooks db_cache_path now points at the workspace cache dir instead of db.transit.json; read-chat --db-cache-path accepts the dir or a legacy file. #557
Keep compact_chat in the tool schema across normal and compact requests, preserving prompt-cache prefixes while rejecting calls outside active compaction.
Share chat history across git worktrees of the same repo, and merge workspace cache writes from concurrent servers instead of overwriting. #558 Cache models.dev catalog on disk and fall back to it when the fetch fails, avoiding model capabilities silently…
Read full notes
Share chat history across git worktrees of the same repo, and merge workspace cache writes from concurrent servers instead of overwriting. #558
Cache models.dev catalog on disk and fall back to it when the fetch fails, avoiding model capabilities silently degrading (e.g. no image input) on transient network failures.
Fix ChatGPT OAuth routing and Responses Lite payloads for GPT-5.6 models. #563
Retry overloaded OpenAI post-tool requests without rerunning completed tools. #563
Fix git tool heredoc failures for messages with apostrophes on old shells (e.g. macOS bash 3.2); git tool now honors toolCall.shellCommand path/args config. #562
Read full notes
Fix git tool heredoc failures for messages with apostrophes on old shells (e.g. macOS bash 3.2); git tool now honors toolCall.shellCommand path/args config. #562
Return exhausted provider errors and partial output from sub-agents instead of reporting successful empty results. Add provider retry config for retry counts, backoff, and chat recovery; no-output retries replay the original request. Fail fast with the…
Read full notes
Return exhausted provider errors and partial output from sub-agents instead of reporting successful empty results.
Add provider retry config for retry counts, backoff, and chat recovery; no-output retries replay the original request.
Fail fast with the resolved path when a hook action file doesn't exist; document that relative hook file paths resolve against the first workspace root.
Fix OpenAI Responses SSE errors, incomplete responses, and premature stream closes so chats retry or finish instead of staying active.
Abort in-flight LLM streaming requests promptly on prompt stop for OpenAI, GitHub Copilot, Google, Ollama and custom OpenAI-compatible providers (previously only Anthropic/Bedrock), including while waiting for the first token. #554 Don't reset a chat's model…
Read full notes
Abort in-flight LLM streaming requests promptly on prompt stop for OpenAI, GitHub Copilot, Google, Ollama and custom OpenAI-compatible providers (previously only Anthropic/Bedrock), including while waiting for the first token. #554
Don't reset a chat's model when changing the agent of an already started chat; the agent's defaultModel now only applies to chats without an established model. editor-code-assistant/eca-emacs#282
Fix plugin-provided agents missing from the editor's agent list when model sync finishes before plugin resolution (common with providers using fetchModels: false): re-emit the chat config after plugins resolve.
Surface Anthropic refusal stop reason (e.g. Fable safety classifiers) as a clear chat message with Anthropic's category/explanation instead of silently ending the prompt.
Improve @/# completion performance: enumerate files via git ls-files instead of walking the whole tree, cache dir candidates and avoid re-computing sort keys.
Add text chat context type: inline client-supplied text (e.g. editor buffers, terminal output) with a label and content, delivered with the user message like images. Allows clients to send content that has no filesystem path.
Read full notes
Add text chat context type: inline client-supplied text (e.g. editor buffers, terminal output) with a label and content, delivered with the user message like images. Allows clients to send content that has no filesystem path.
Recover when the provider rejects an image in the request (e.g. xAI's 512px minimum on MCP tool images): retry without images instead of failing every subsequent prompt.
Read full notes
Recover when the provider rejects an image in the request (e.g. xAI's 512px minimum on MCP tool images): retry without images instead of failing every subsequent prompt.
Fix OpenRouter models failing every prompt with a context-window error: ignore catalog output limits >= context window and use limits from the provider's /models endpoint. Extend deepseek-v4 thinking variants (none, high, max) to also match deepseek-v4-flash…
Read full notes
Fix OpenRouter models failing every prompt with a context-window error: ignore catalog output limits >= context window and use limits from the provider's /models endpoint.
Extend deepseek-v4 thinking variants (none, high, max) to also match deepseek-v4-flash models.
Fix duplicate errors when a dead connection fails several stacked requests at once, which broke the auto-continue recovery and leaked state into the next prompt. #547
Improve resilience to connections dropped by proxies/networks: retry stale pooled connections, classify the error clearly, auto-continue up to 3 times per prompt. #547 Fix streaming tool calls dropped when provider sends empty-string id in subsequent chunks…
Read full notes
Improve resilience to connections dropped by proxies/networks: retry stale pooled connections, classify the error clearly, auto-continue up to 3 times per prompt. #547
Fix streaming tool calls dropped when provider sends empty-string id in subsequent chunks (e.g. DashScope/Qwen Cloud).
Truncate oversized failed tool output, preserving full logs on disk instead of overflowing the model context.
Honor model output limits in OpenAI-compatible Chat Completions and Ollama requests while preserving extraPayload overrides.
Fix remote server silently falling back to HTTP when the TLS private key is in SEC1 EC format; validate keys before caching and log HTTP fallback. #521
Read full notes
Fix remote server silently falling back to HTTP when the TLS private key is in SEC1 EC format; validate keys before caching and log HTTP fallback. #521
Add agent spawnableBy configuration to restrict subagent discovery and spawning to specific primary agents. Support MCP server names and regexes in disabledTools entries and add disabledTools to agent markdown frontmatter. #534 Log at debug level which…
Read full notes
Add agent spawnableBy configuration to restrict subagent discovery and spawning to specific primary agents.
Support MCP server names and regexes in disabledTools entries and add disabledTools to agent markdown frontmatter. #534
Log at debug level which approval rule caused a tool call allow/ask/deny and document how tool permissions work. #536