Shadow Judge completion oracle — EdgeCrab can now run an opt-in secondary LLM verdict before accepting a run as complete, then inject a continuation hint when a model appears to stop one step too early.
/shadow-judge TUI control surface — session-scoped on/off/toggle/status command plus a picker UI and status-bar intervention badge.
Structured report_task_status tool — the model can now emit milestone and blocked-state signals with evidence and remaining steps for the harness to interpret.
Completion and retry guards are stricter after tool activity — repeated malformed tool retries are suppressed semantically, not only by identical payload fingerprint.
Tool results carry richer machine-readable metadata — file writes and patches expose line counts, terminal results expose truncation, and searches expose pagination headers so the agent can continue intelligently.
Several tool schemas now align more closely with runtime behavior — clearer required arguments and fewer misleading schema-level requirements reduce avoidable invalid-argument loops.
Prompt cache architecture split into stable and dynamic system-prompt blocks — long-lived behavior guidance is now separated from session-specific content so future provider cache-control support can reuse a much larger stable prefix.
Skills prompt invalidation now uses a manifest instead of a short TTL — newly installed or edited skills show up immediately in the prompt path.
Published runtime dependency handoff — EdgeCrab now consumes edgequake-llm 0.6.12 from crates.io rather than a local path override.
Accessibility pass for the TUI palette — semantic colors were centralized and lifted to WCAG-compliant contrast ranges for dark terminals.
Cross-SDK example tracks — Each SDK now ships friendlier getting-started, business, and e2e example entry points with dedicated READMEs for faster onboarding.
Business-oriented agent showcases — Added more realistic SDK demos for review pipelines, documentation generation, support flows, and safe automation scenarios.
Grounded E2E smoke coverage — Refreshed runnable end-to-end verification across Rust, Python, Node.js, and WASM SDK targets.
One SDK naming story — Public docs and release surfaces now present a unified EdgeCrab SDK experience across languages, while historical repo folder names remain internal implementation details.
Provider-safe example defaults — Public examples now prefer Copilot, OpenAI, and Ollama-compatible model strings throughout the SDK docs and tutorial pages.
GitHub Copilot now defaults to Auto-first routing backed by the latest edgequake-llm provider behavior — GitHub’s live router chooses the chat-capable model and billing path allowed for the current account, so following that route avoids avoidable model-specific failures.
SDK documentation refresh — README and Astro docs now point to the new per-SDK example layout and highlight the most practical, user-facing example paths.
Copy-friendly GitHub device login in the TUI — /login now temporarily leaves the alternate screen, shows the device code on a clean plain-terminal panel, and restores the TUI afterward.
Gateway vision_analyze crashes on fresh installs — sending an image via WhatsApp, Telegram, or any gateway platform could fail with Cannot resolve allowed root '~/.edgecrab/images': No such file or directory. The path security layer now gracefully skips optional trusted roots (like gateway_media/, image_cache/, images/) that haven’t been created yet, instead of raising a hard error. The fix is general: any tool that passes lazily-created directories as extra trusted roots now works correctly on first run.
pdf_to_markdown extra-root guard simplified — the manual .exists() workaround added in v0.4.0 is replaced by the corrected behavior in the security layer.
ADR-001: Gateway Path Policy — full architectural decision record explaining the first-principles analysis, the Hermes comparison, alternatives rejected, and security invariants preserved.
Homebrew tap supports GitHub App tokens — no-secret short-lived authentication for automated formula updates. See the Homebrew tap setup guide for configuration steps.
Large tool outputs can now spill to session-scoped artifact files instead of bloating prompt history — successful tool results over the configured threshold are persisted under .edgecrab-artifacts/<session_id>/..., while the model sees a compact preview stub with metadata and a readable path.
Spill behavior is now configurable — tools.result_spill, tools.result_spill_threshold, and tools.result_spill_preview_lines plus matching EDGECRAB_TOOL_RESULT_SPILL* overrides control whether spilling is enabled, when it triggers, and how much preview is kept inline.
Config-driven git worktree mode and TUI worktree control surface — worktree: true and EDGECRAB_WORKTREE=1 now enable isolated git worktrees by default, /worktree and /w open a dedicated TUI report overlay, and worktree cleanup now preserves branches with unpushed commits.
First-class /log TUI with persisted log-level control — /log and /logs now open a split-pane log browser with entry inspector and live follow; 1-5 or /log level <level> persist the default log level.
Gateway/chat origin metadata now uses a named value type — the internal (String, String) pair has been replaced with OriginChat { platform, chat_id }, improving type safety without changing user-facing behavior.
Interactive and non-interactive log inspection now share one backend — edgecrab logs, startup logging, config persistence, and TUI browsers all reuse the same file-discovery and log-level helpers.
Rust crates.io release waits now fail soft without hanging a workflow runner — the helper keeps the intentional propagation delay, but every crates.io probe now uses explicit connection and total-request timeouts before the publish-retry logic takes over.
Manual release reruns now rebuild the requested tag, not the current branch tip — native binaries, Docker, Node SDK, and Python SDK dispatches now check out the selected tag ref so re-publishing a release is reproducible.
Release coordinator bumps now include the Node SDK lockfile — versioned release metadata can no longer drift between sdks/node/package.json and sdks/node/package-lock.json.
crates.io release propagation waits are now robust enough for real registry lag — the Rust release workflow now checks the exact published crate-version endpoint, allows a longer bounded wait, and keeps a short stabilization buffer before publishing dependents.
release version syncing now includes edgecrab-command-catalog and the Node SDK lockfile header — the version script and its drift check now cover these previously missed files, preventing silent version skew inside the workspace.
CLI reference docs now match the real command output — edgecrab version and edgecrab --version are documented separately, with the provider list corrected to the current model catalog output.
Astro docs no longer hard-code stale release numbers across install, update, ACP, self-hosting, and FAQ pages — examples now use explicit verification commands or placeholders where a fixed patch number would rot quickly.
cargo run at the workspace root now works — the workspace default member is edgecrab-cli, and the CLI package now declares default-run = "edgecrab".
npm CLI wrapper no longer serves stale native binaries — reinstall and first-run logic now verify the actual native binary version and replace mismatched cached binaries instead of silently reusing them.
PyPI CLI wrapper no longer prefers an unrelated older system binary on PATH — by default it now treats the package-managed native binary as authoritative, preventing stale Homebrew or cargo installs from shadowing the upgraded PyPI install.
CLI startup does less blocking work before the UI is usable — bundled skills sync is moved off the blocking startup path, and the initial skills/profile scans are now lazy where safe.
Release docs site facts are now source-derived at build time — homepage version, provider/tool/gateway counts, and related claims are generated from the repository state instead of stale hard-coded values.
Release automation now updates the external Homebrew tap explicitly — a dedicated workflow and helper script update raphaelmansuy/homebrew-tap from GitHub Release checksums.
crates.io publication waits are now version-aware — dependent crate publishing still waits for propagation, but the release workflow now polls for the exact published version instead of relying only on fixed sleeps.
Install and troubleshooting documentation was audited end-to-end — npm, PyPI, crates.io, Docker, Homebrew, cargo run, FAQ, release process, and site copy were all updated for accuracy.
New edgecrab-lsp crate — a dedicated subsystem for language-server lifecycle, document sync, diagnostics, position translation, workspace edits, and LLM-friendly result rendering.
25 LSP tools — EdgeCrab now exposes Claude-parity navigation plus code actions, rename, formatting, inlay hints, semantic tokens, signature help, type hierarchy, pull diagnostics, linked editing, LLM-enriched diagnostics, guided action selection, and workspace-wide type-error scans.
LSP-first agent guidance — when LSP tools are available, the prompt explicitly tells the agent to prefer semantic navigation and edits over plain text search.
CI and release automation updated for edgecrab-lsp — CI now runs the dedicated LSP package tests explicitly and the crates.io publish order includes the new crate before edgecrab-core.
Docs and website refreshed — the features overview, tool reference, coding workflows guide, and configuration reference now document the LSP feature set and configuration.
Release-prep honesty pass — the README, internal docs, and site now use source-derived provider/tool/gateway counts and the measured stripped macOS arm64 release binary size of about 49 MB instead of stale placeholder numbers.
Python SDK (sdks/python/) — edgecrab-sdk on PyPI. Sync and async clients (Agent / AsyncAgent) with conversation history, streaming via async generators, and a edgecrab CLI entry point (chat, models, health). 54 tests.
Node.js SDK (sdks/node/) — edgecrab-sdk on npm. TypeScript-first with dual CJS + ESM build. Agent class with streaming (async generator), tool customization, and a matching CLI. 24 tests.
CI workflow — Rust build, test, clippy (-D warnings), fmt validation on ubuntu / macos / windows matrix. Separate Python and Node.js SDK test jobs. cargo-audit security scan.
Release workflows — release-rust.yml publishes all 10 crates to crates.io in dependency order. release-python.yml builds wheels + sdist for PyPI. release-node.yml publishes to npm. release-docker.yml builds and pushes multi-arch image to GHCR (linux/amd64, linux/arm64).
Agent::chat_streaming() — async method delivering events via UnboundedSender<StreamEvent> for real-time TUI rendering.
StreamEvent enum — typed stream of Token(String), Reasoning(String), ToolExec, ToolDone, SubAgentStart/Finish, Clarify, Approval, ContextPressure, Done, Error(String), and more. Full list in agent.rs.
Context compression — compress_with_llm() in compression.rs summarizes old messages to stay within context windows without losing key facts.
IterationBudget — lock-free AtomicU32 CAS counter enforcing model.max_iterations (default: 90). Exhausted budget sets budget_exhausted: true in ConversationResult.
ApiMode auto-detection — routes to ChatCompletions, AnthropicMessages, or CodexResponses based on base URL and model name.
RunProcessTool — real background process spawning via tokio::process::Command. Returns a process handle for list_processes, kill_process, get_process_output, wait_for_process, write_stdin.
WebSearchTool — DuckDuckGo Instant Answer API. No API key required.
WebExtractTool — fetches URLs via reqwest, strips HTML to readable text, protected by SafeUrl SSRF guard.
apply_patch tool — companion to patch; applies unified diff patches to files.
browser_wait_for, browser_select, browser_hover — three new CDP browser control tools.
Fuzzy tool dispatch — Levenshtein distance ≤ 3 fallback for misspelled tool names. Exact match is O(1) HashMap; fuzzy is O(n) with threshold.
EdgeCrab follows Semantic Versioning. The 0.x series may include breaking config or CLI changes between minor versions — see individual release notes. Starting from 1.0.0, breaking changes will only appear in major version bumps.