SEO SpyGlass is a powerful backlink analysis tool designed to help website owners, marketers and SEO professionals understand and improve their search engine rankings. As part of the SEO PowerSuite toolkit, SEO SpyGlass focuses on uncovering backlink profiles, identifying ranking opportunities and detecting harmful links that can negatively affect performance. Its data rich reports, competitive insights and detailed link metrics make it an essential solution for anyone serious about search optimization.

What Is SEO SpyGlass

SEO SpyGlass is a desktop based software that gathers and evaluates backlinks pointing to a website. It compiles link data from its own index and third party sources to give users a full picture of their backlink profile. The tool provides deep analysis that helps identify strong links, weak links and potentially dangerous links that could lead to ranking penalties if not addressed.

With SEO SpyGlass, users can also analyze competitor backlink strategies, compare link profiles and discover new link building opportunities. This makes the tool highly valuable for improving domain authority, organic traffic and long term SEO performance.

Key Features

Comprehensive Backlink Index

SEO SpyGlass crawls billions of pages and maintains a large backlink index. Users gain access to a rich database of referring domains, anchor texts and link attributes.

Penalty Risk Calculation

The software analyzes each backlink and assigns a penalty risk score. This helps identify toxic or spammy links that could trigger search engine penalties and allows users to take corrective action.

Competitor Backlink Analysis

Users can input competitor URLs to analyze their link profiles. This reveals which domains link to competitors, which content attracts backlinks and where potential opportunities exist.

Link Quality Metrics

SEO SpyGlass provides metrics such as domain strength, link authority, link diversity and anchor text distribution. These metrics help users evaluate link quality and build a healthier backlink strategy.

Duplicate Link and Anchor Detection

The tool identifies repeated anchors and duplicate links that can dilute the effectiveness of a backlink profile.

Integration Capabilities

Users can connect Google Search Console and Google Analytics to enhance backlink analysis with verified data from Google.

Custom Reports

SEO SpyGlass generates detailed and easy to read reports suitable for clients, managers and internal teams. Reports can be tailored to highlight essential findings and recommendations.

Benefits of Using SEO SpyGlass

  1. Helps build safe and effective backlink strategies

  2. Detects risky links before they cause ranking issues

  3. Reveals competitor strengths and weaknesses

  4. Supports smarter outreach and link building efforts

  5. Saves time by automating backlink research

  6. Strengthens overall SEO performance

SEO SpyGlass remains a top choice for backlink analysis thanks to its deep database, competitor insights and reliable penalty detection features. It is a strategic tool that supports smarter link building and long term search engine success.

SEO SpyGlass 6.64.11 Enterprise - Yearly
$259
Software Informations:
Developer:

Operating System:
Windows / Mac / Linux
Date Added:
2026-10-08T18:03:54.226Z

Remotera is a free remote desktop and remote access solution developed by TkoSoft. Designed for Windows users, it aims to provide an easy way to access remote computers, transfer files, offer technical support, and manage unattended systems without the complexity often associated with enterprise remote access platforms.

Remotera focuses on simplicity. The software is distributed as a portable executable, allowing users to launch it without going through a traditional installation process. Users can connect to another computer using a generated ID and password, making setup straightforward even for non-technical users.

Unlike many commercial remote desktop solutions that restrict free usage or impose session limits, Remotera is offered as freeware for both personal and commercial use.

Key Features of Remotera

Remote Desktop Control

The core functionality allows full remote control of another Windows computer over the internet. This makes it suitable for technical support, remote work, and accessing personal devices while away from home.

File Transfer

Remotera includes built-in file and folder transfer capabilities, allowing users to move documents and other files directly between local and remote machines during a session.

Unattended Access

For users who need access to systems without someone present to approve connections, Remotera supports unattended access and static passwords. This is useful for administrators and remote workers.

Contact Management

Frequently accessed computers can be saved in a contact list, reducing the need to repeatedly enter connection credentials.

Remote Printing

The software supports remote printing, enabling documents opened on a remote machine to be printed locally.

Multiple Connections

Remotera can handle multiple remote sessions simultaneously, making it practical for support technicians and administrators managing several systems.

Performance and User Experience

The application emphasizes ease of use over advanced enterprise functionality. The interface is clean and accessible, with connection information clearly displayed and essential options available without excessive menus.

Its lightweight portable design is particularly attractive for quick support sessions because there is no installation wizard or complicated deployment process.

While it may not yet offer the extensive ecosystem found in larger competitors such as TeamViewer or AnyDesk, it covers the essential features most users need for everyday remote access.

Pros

  • Completely free for personal and commercial use.

  • Portable executable with no mandatory installation.

  • Supports unattended access.

  • Includes file transfer and remote printing.

  • Allows multiple simultaneous connections.

  • Simple interface suitable for beginners.

Cons

  • Currently available only for Windows.

  • Newer product with a smaller user base than established competitors.

  • Limited public documentation and community resources compared to mature remote access platforms.

Who Should Use Remotera?

Remotera is a good fit for IT support providers, small businesses, freelancers, remote workers, and home users who need a free remote desktop solution without licensing restrictions. It is especially appealing for those seeking a lightweight alternative to larger commercial remote access tools.

Final Verdict

Remotera delivers a surprisingly complete remote access experience for a free product. Its combination of remote desktop control, unattended access, file transfer, remote printing, and portable deployment makes it a practical choice for many Windows users. While it lacks the maturity and ecosystem of long-established competitors, it offers excellent value for users who want a straightforward and unrestricted remote desktop solution.

Remotera 2.4
Free
Software Informations:
Developer:

Operating System:
Windows
Date Added:
2026-10-08T17:03:46.182Z

OpenClaw, formerly known as Clawd Bot, stands out as one of the most exciting open-source personal AI assistants available in 2026. This powerful tool brings advanced AI capabilities directly into your daily messaging apps, letting you chat with a smart assistant that actually gets things done. Whether you want to manage emails, write code, or stay organized across platforms, OpenClaw delivers a seamless experience while keeping your data under your control.

What Is OpenClaw?

OpenClaw is an open-source, self-hosted AI personal assistant that runs on your own devices or a cloud server. Created by developer Peter Steinberger, it first gained massive attention under the name Clawd Bot before rebranding to OpenClaw on January 27, 2026. The name change came after Anthropic raised trademark concerns related to similarities with their Claude AI model. The shift to OpenClaw symbolizes growth and adaptation, much like a lobster molting its shell to grow bigger and stronger.

The project exploded in popularity thanks to its innovative approach. It integrates deeply with the messaging apps you already use every day, turning them into a gateway for interacting with advanced AI. With over 30,000 GitHub stars, a thriving Discord community of thousands, and contributions from hundreds of developers, OpenClaw has quickly become a favorite among tech enthusiasts and productivity seekers.

Download OpenClaw v2026.9.9 - Software Mirrors

OpenClaw v2026.9.9 for Windows

OpenClawCompanion-Setup-x64.exe | 122.78 MB

OpenClawCompanion-Setup-arm64.exe | 109.14 MB

OpenClaw v2026.9.9 for macOS

OpenClaw-2026.9.9.zip | 478.76 MB

OpenClaw-2026.9.9.dmg | 328.64 MB

OpenClaw-2026.9.9-x86_64.zip | 249.46 MB

OpenClaw-2026.9.9-x86_64.dmg | 174.78 MB

OpenClaw-2026.9.9-arm64.zip | 239.7 MB

OpenClaw-2026.9.9-arm64.dmg | 162.01 MB

OpenClaw v2026.9.9 for Linux

OpenClaw-2026.9.9-amd64.deb | 11.39 MB

OpenClaw-2026.9.9-amd64.AppImage | 133.74 MB

OpenClaw v2026.9.9 Source Code

OpenClaw v2026.9.9 Source code (zip)

OpenClaw v2026.9.9 Source code (tar.gz)

OpenClaw v2026.9.9 Release Notes:

2026.9.9

Highlights

  • GPT-6.1 Sol support: update the managed Codex app-server and its embedded model catalog so native Codex sessions can discover and run GPT-6.1 Sol. (#161446, #163560) Thanks @IstiqlalBhat, @fuller-stack-dev, @vincentkoc, and @RomneyDa.
  • Safer updates: inspect live WAL ownership without unstable full-database copies and retain published 2026.9.8 updater compatibility. (#162268, #163998) Thanks @RomneyDa.
  • Responsive background work: reuse the prepared runtime for Skill Workshop reviews and rooted cron jobs so they no longer stall the Gateway. (#164049) Thanks @RomneyDa.
  • Windows session recovery: bind session creation to the physical SQLite store identity so junction-backed stores publish correctly. (#162033) Thanks @cestercian, @RomneyDa, and @zhyx1996.
  • Cross-platform reliability: prevent Node process-exit hangs, preserve node work during metadata updates, and restore native Windows workspace and sandbox startup. (#163788, #164087, #164202, #158303) Thanks @paulcam206 and @RomneyDa.

Changes

  • No intentional capability changes beyond enabling the already-advertised GPT-6.1 Sol model on the managed Codex runtime.

Fixes

  • Codex: ship the 0.160.0 managed app-server, synchronized protocol/catalog metadata, and a package-level regression that requires GPT-6.1 Sol in the bundled native catalog. (#161446, #163560) Thanks @IstiqlalBhat, @fuller-stack-dev, @vincentkoc, and @RomneyDa.
  • Update and Gateway availability: avoid unstable live-database copies during ownership admission, reuse prepared plugin/runtime facts for rooted work, preserve node work through metadata refreshes, and retain 2026.9.8 first-hop compatibility. (#162268, #164049, #164087, #163998) Thanks @RomneyDa.
  • Windows: restore junction-backed session creation, native empty-workspace initialization, and MXC sandbox readiness and wire compatibility. (#162033, #164202, #158303) Thanks @cestercian, @RomneyDa, @zhyx1996, and @paulcam206.
  • Delivery and scheduling: restore ordinary iMessage finals, credit Discord thread deliveries, keep Telegram dashboard/control access separate, prevent stale cron cleanup from aborting a later run, and keep queued cancellation from stalling active turns. (#163742, #163756, #161369, #163704, #164230) Thanks @VACInc, @Kimiyu-186, @MertBasar0, @stuart-minion-ai, @mmaps, @joshavant, @jayzhou2309, @AXEG0, @vincentkoc, and @RomneyDa.
  • CLI lifecycle: prevent Node 24 and 26 CLI, hook-relay, and Gateway processes from hanging after output. (#163788) Thanks @RomneyDa.

Complete contribution record

This audited record covers the complete v2026.9.8..bec0cfd9a21a1e6d5900fd0ac859c23f56b45d87 history: 14 in-range PRs + 0 retained seed-only PRs = 14 unique PRs. The generation manifest also supplies direct commits as editorial input; the grouped notes above prioritize user impact. Shipped baseline exclusions: v2026.9.8 (0 PRs).

Pull requests

  • PR #161446 Thanks @IstiqlalBhat and @fuller-stack-dev and @RomneyDa.
  • PR #163560 Thanks @vincentkoc and @RomneyDa.
  • PR #163742 Thanks @VACInc and @Kimiyu-186 and @RomneyDa.
  • PR #163788 Thanks @RomneyDa.
  • PR #163704 Related #163568. Thanks @jayzhou2309 and @RomneyDa and @AXEG0.
  • PR #158303 Thanks @paulcam206 and @RomneyDa.
  • PR #161369 Thanks @mmaps and @joshavant and @RomneyDa.
  • PR #163756 Related #163724. Thanks @MertBasar0 and @RomneyDa and @stuart-minion-ai.
  • PR #164087 Thanks @RomneyDa.
  • PR #164202 Thanks @RomneyDa.
  • PR #164230 Thanks @vincentkoc and @RomneyDa.
  • PR #162268 Thanks @RomneyDa.
  • PR #164049 Thanks @RomneyDa.
  • PR #162033 Related #161953. Thanks @cestercian and @RomneyDa and @zhyx1996.

Release verification

  • npm package: https://www.npmjs.com/package/openclaw/v/2026.9.9
  • registry tarball: https://registry.npmjs.org/openclaw/-/openclaw-2026.9.9.tgz
  • integrity: sha512-3sB6ejq5smBozfBhVEDfK48wFpbkx+0f6PJ19qZjC3ab3RoFrYO58CnE2mAsbUy8sXdxdBtjQ3vkAqcW9BZXAw==
  • release SHA: bcfc88812a35243893585dbeca87ca41b48272ca
  • full release CI report: https://github.com/openclaw/releases/blob/main/evidence/2026.9.9/release-evidence.md
  • release publish: https://github.com/openclaw/openclaw/actions/runs/37760358165
  • npm preflight: https://github.com/openclaw/openclaw/actions/runs/37737494191
  • full release validation: https://github.com/openclaw/openclaw/actions/runs/37736976027
  • plugin npm publish: https://github.com/openclaw/openclaw/actions/runs/37761210573
  • plugin ClawHub publish: no normal OIDC candidates
  • plugin ClawHub bootstrap: not needed
  • OpenClaw npm publish: https://github.com/openclaw/openclaw/actions/runs/37755950239/attempts/1
  • Telegram integration checks: waived by the release owner for 2026.9.9 (source QA, Package Acceptance, published-package E2E); not run.
  • Android APK: skipped — apps/android/version.json is 2026.8.2, release train is 2026.9.9; run pnpm android:version:pin -- --from-gateway before the next tag.

Key Features of OpenClaw

OpenClaw goes far beyond simple chat responses. It acts as an active agent that can handle real tasks, remember context across sessions, and even reach out to you proactively.

Here are some of its standout features:

  • Multi-channel support: Connects to WhatsApp, Telegram, Discord, Slack, Signal, iMessage, Microsoft Teams, Matrix, Google Chat, and more. You get one unified conversation that persists no matter which app you use.

  • Proactive assistance: Unlike passive chatbots, OpenClaw can send you messages first with reminders, alerts, morning briefings, or updates when something important happens.

  • Persistent memory: It remembers everything from past interactions, so you never have to repeat context when picking up unfinished work.

  • Powerful integrations: Links to tools for email management (like Gmail triage, drafting replies, or unsubscribing), code editing in IDEs, calendar handling, and custom skills you can build or download.

  • Voice and text input: Send voice notes on supported apps for transcription and processing, with more audio features in development.

  • Self-hosted privacy: Run it locally on your Mac, Linux machine, or a cloud droplet. Your data stays with you instead of feeding into big cloud AI services.

  • Easy onboarding: The CLI wizard (openclaw onboard) guides you through setup, including daemon installation for always-on access.

Developers love using it for coding tasks, where it can fix tests, generate full-stack features, or compile research notes. Everyday users appreciate inbox zero automation, smart replies, and consolidated messaging from multiple platforms.

How to Get Started with OpenClaw

One-liner

#for macOS/linux
curl -fsSL https://openclaw.ai/install.sh | bash

#for Windows
powershell -c "irm https://openclaw.ai/install.ps1 | iex"

npm

npm i -g openclaw
openclaw onboard

pnpm

pnpm add -g openclaw
openclaw onboard

Download DMG file for macOS

Many run it on a home machine for privacy or on a cheap cloud server for 24/7 access. Once live, add OpenClaw as a contact in WhatsApp or invite the bot to your Discord server, then start chatting.

OpenClaw represents the next step in personal AI. It combines large language model smarts with real-world action, persistent context, and deep system access in a way few tools do. You get an assistant that lives in your existing apps, handles routine tasks autonomously, and evolves with community contributions.

If you value privacy, customization, and true productivity boosts, OpenClaw deserves a spot in your workflow. Head to the official site at https://openclaw.ai/, check the docs at https://docs.openclaw.ai/, or join the active Discord to see what others are building. The future of personal AI assistants looks a lot like OpenClaw, and it's already here for anyone ready to self-host it.

OpenClaw v2026.9.9
Free
Software Informations:
Developer:

Operating System:
MacOS / Windows / Linux
Date Added:
2026-10-08T16:19:06.038Z

EffectCraft is an open-source motion graphics and visual effects application designed as a clean-room reimplementation of Adobe After Effects. Written in Rust, it provides a native desktop editor for Windows, macOS, and Linux, alongside a browser-based version.

The application focuses on professional animation and compositing workflows, including keyframes, animated text, masks, visual effects, 3D cameras, lights, and a render queue. Its interface follows familiar After Effects conventions, making it easier for experienced motion designers to understand its workflow.

EffectCraft also stands out for its automation capabilities. Projects use a readable JSON-based format, and the application exposes its editing engine through a command-line interface, a JSON control channel, and an MCP server for AI agents.

Features

EffectCraft includes a broad collection of tools for motion graphics and visual effects.

  • Timeline and keyframes: Animate layer properties with linear, Bezier, hold, and eased interpolation. The Graph Editor provides value and speed graphs for adjusting animation curves.

  • Layer compositing: Combine text, shapes, footage, nested compositions, adjustment layers, solids, cameras, and lights. Parenting, track mattes, blend modes, and motion blur are supported.

  • Shape animation: Create shape layers with trim paths, repeaters, rounded corners, gradient strokes, and other procedural shape operators.

  • Masks and selection: Draw and edit masks with feathering, expansion, and different compositing modes.

  • Text animation: Work with point text, paragraph text, text animators, range selectors, and text-on-path workflows.

  • Expressions: Use JavaScript expressions with familiar After Effects-style objects and functions, including wiggle, loopOut, and layer references.

  • Puppet tools: Animate character and object deformations with pins, mesh controls, rigging, and follow-through.

  • Visual effects: Apply blur, sharpening, color correction, distortion, keying, noise, stylization, transitions, simulation, and audio effects.

  • Layer styles: Apply effects such as Drop Shadow, Inner Glow, Outer Glow, Bevel and Emboss, Satin, Stroke, and color overlays.

  • 3D scenes: Work with 3D layers, cameras, lights, depth of field, and shadows.

  • Motion tracking: Use tracking and analysis tools for motion-related workflows.

  • Audio support: Preview animations with synchronized audio, waveforms, meters, and audio effects.

  • Lottie integration: Import and export supported animations for use in websites and applications.

  • Render queue: Export animations and compositions to video, audio, image sequences, and animated formats.

  • Automation: Control editing operations through the CLI, JSON interface, and MCP server.

The effects library is particularly ambitious, covering hundreds of effects inspired by familiar After Effects categories. It includes tools for color correction, distortion, keying, simulation, perspective, time manipulation, audio processing, and stylization.

Lottie import and export is another practical advantage. It allows compatible animations to move between EffectCraft and web or application workflows without requiring a separate export plugin.

Download EffectCraft v0.6.0 - Software Mirrors

EffectCraft v0.6.0 for Windows

effectcraft-0.6.0-windows-x86.msi | 44.07 MB

effectcraft-0.6.0-windows-x86-portable.zip | 56.78 MB

effectcraft-0.6.0-windows-x64.msi | 45.12 MB

effectcraft-0.6.0-windows-x64-portable.zip | 59.79 MB

effectcraft-0.6.0-windows-arm64.msi | 40.14 MB

effectcraft-0.6.0-windows-arm64-portable.zip | 55.36 MB

EffectCraft v0.6.0 for macOS

effectcraft-cli-0.6.0-macos-universal.zip | 53.51 MB

effectcraft-0.6.0-macos-universal.dmg | 55.84 MB

EffectCraft v0.6.0 for Linux

effectcraft-0.6.0-linux-x86_64.tar.gz | 56.67 MB

effectcraft-0.6.0-linux-x86_64.rpm | 57.64 MB

effectcraft-0.6.0-linux-x86_64.flatpak | 36.81 MB

effectcraft-0.6.0-linux-x86_64.deb | 58.01 MB

effectcraft-0.6.0-linux-x86_64.AppImage.zsync | 184.05 kB

effectcraft-0.6.0-linux-x86_64.AppImage | 52.51 MB

effectcraft-0.6.0-linux-aarch64.tar.gz | 52.85 MB

effectcraft-0.6.0-linux-aarch64.rpm | 54.81 MB

effectcraft-0.6.0-linux-aarch64.flatpak | 32.43 MB

effectcraft-0.6.0-linux-aarch64.deb | 55.37 MB

effectcraft-0.6.0-linux-aarch64.AppImage.zsync | 172 kB

effectcraft-0.6.0-linux-aarch64.AppImage | 49.07 MB

EffectCraft v0.6.0 for BSD

effectcraft-0.6.0-freebsd-x86_64.tar.gz | 56.59 MB

Others Download related to EffectCraft v0.6.0

effectcraft-web-0.6.0.zip | 17.12 MB

EffectCraft v0.6.0 Source Code

EffectCraft v0.6.0 Source code (zip)

EffectCraft v0.6.0 Source code (tar.gz)

EffectCraft v0.6.0 Release Notes:

What's Changed

  • Window: saved workspaces are listed in Window ▸ Workspace (#191) by @bflatastic in #196

  • Render Queue: clicking the Output To file name opens a save dialog (#192) by @bflatastic in #197

  • Rename PrintCraft to PdfCraft by @echelon in #207

  • Preview: audio visualisers follow time in the viewer; sound starts once rendering keeps up (#208, #209) by @bflatastic in #219

  • App: starts with an empty project, opens on older GPUs, shows comps wider than the texture limit (#198, #201, #204) by @bflatastic in #220

  • Timeline, shapes and masks: Add menu, Change Renderer, toolbar Fill / Stroke, Alt+Shift+P reveal, mask selection, linked feather, Project selection box (#203, #205, #206) by @bflatastic in #221

  • Puppet: dragging pins keeps the layer under the Puppet cached (#212) by @bflatastic in #222

  • Docs: gaps.md records the user reports of 7 October by @bflatastic in #223

  • Web: replaced files reach reused workers, failed worker starts fail their job, failed storage writes retry (#215, #216, #218) by @bflatastic in #224

  • About: contributor and model credits compiled in (grab bag + table, self-submitted names) by @echelon in #228

  • Effects: Turbulent Displace displaces the whole layer, not one quadrant (#227) by @bflatastic in #235

  • Web: short Project panel, unreadable picked files, lost graphics device (#231, #226, #225) by @bflatastic in #237

  • Viewer: a press on a selected layer behind others acts on it (#230) by @bflatastic in #239

  • Settings: Language ▸ Match System follows the system language (#229) by @bflatastic in #241

  • Spacebar hand tool, Effect Controls menu, New Comp drop, switch drags (#227) by @bflatastic in #238

  • Shapes: draw into, copy, paste and duplicate shape contents (#227) by @bflatastic in #240

  • Docs: gaps.md records the user reports of 8 October by @bflatastic in #242

  • Logging: RUST_LOG prints to stderr, and start-up logs its milestones (#234) by @bflatastic in #244

  • Effects: the sim golden test accepts macOS 27's libm hash for Mr. Mercury (#232) by @bflatastic in #245

  • Fix variable-font animator test axis selection and endpoint delta by @ulanch in #233

  • App: a launch whose window never drew makes the next use OpenGL (#243) by @bflatastic in #247

  • Docs: gaps.md G4 lists py-aep as a candidate for .aep import (#248) by @bflatastic in #249

  • Timeline: a selected key selects its property and layer (#252) by @bflatastic in #255

  • Snapping: layers, scale handles and the work area snap as in After Effects (#253, #252) by @bflatastic in #265

  • Keyframes: ease presets apply saved curves to keyframe pairs (#254) by @bflatastic in #267

  • Render: render.backend says why it renders on the CPU; mcp --gpu documented (#262) by @bflatastic in #276

  • UI: long menus scroll, panels get scroll bars, Learn closes when leaving it (#269, #271, #272) by @bflatastic in #277

  • Puppet pin keys show in the Timeline; imports show an Importing card (#273, #270) by @bflatastic in #282

  • Release: FreeBSD x86_64, Flatpak x86_64 + aarch64, AppImage zsync updates; README Downloads by @echelon in #287

  • README Downloads: where to get it, then builds (Windows first) by @echelon in #291

  • Engine: adding a 3D model switches a Classic 3D comp to Advanced 3D (#264) by @bflatastic in #286

  • i18n: the browser build's Match System uses supported() too (#229) by @bflatastic in #292

New Contributors

  • @ulanch made their first contribution in #233

Full Changelog: v0.4.0...v0.6.0

Performance and Compatibility

EffectCraft is written in Rust and uses a modular architecture intended to keep the editing engine independent of the graphical interface. Its rendering system supports GPU acceleration, while CPU-based processing remains available for relevant operations.

The project is designed to run on Windows, macOS, and Linux. A WebAssembly build also allows the editor to run in a browser, with browser storage used for projects and related data.

Its rendering pipeline supports H.264, ProRes, HEVC, AV1, VP9, and Opus, alongside image sequences and other export formats. The project emphasizes Rust-based media processing rather than depending on FFmpeg as its internal encoding and decoding foundation.

EffectCraft also offers a useful approach to project files. Its native .ecproj format uses versioned JSON, making projects easier to inspect, compare, and manage in version control than opaque binary documents.

However, EffectCraft cannot open native After Effects .aep or .aepx project files, and third-party After Effects plugins cannot run in it. Compatibility with individual effects and workflows should therefore be tested before considering a complete migration.

The project is also relatively young. Although its feature list is extensive, the developers acknowledge that real-world workflow reliability and output fidelity still need further validation. Having an equivalent tool does not necessarily mean that it behaves identically to its After Effects counterpart.

System Requirements

EffectCraft supports:

  • Windows

  • macOS

  • Linux

  • WebAssembly-compatible browsers

Prebuilt desktop packages are available for supported platforms. Linux distributions have access to AppImage, DEB, RPM, and tarball packages, including x86_64 and ARM64 builds.

Building from source requires Rust and the appropriate platform dependencies. The browser version requires a WebAssembly-compatible browser and suitable graphics support.

Because EffectCraft can process complex compositions, performance will depend on the GPU, available memory, footage resolution, effect complexity, and output settings. The project does not yet provide sufficient real-world benchmarking to establish reliable performance expectations for every workload.

Pros and Cons

Pros

  • Free and open-source

  • Native Rust architecture

  • Windows, macOS, and Linux support

  • Browser-based WebAssembly version

  • Extensive keyframe and animation controls

  • Graph Editor with value and speed graphs

  • Large collection of visual effects

  • Masks, shape layers, and text animation

  • Expressions and puppet tools

  • 3D cameras, lights, and depth of field

  • GPU-accelerated rendering

  • Broad video and audio export support

  • Lottie import and export

  • Readable JSON-based project format

  • CLI and MCP automation

  • No telemetry by default

  • Designed to work offline

Cons

  • Still a young project

  • Cannot open native After Effects project files

  • No compatibility with third-party After Effects plugins

  • Output fidelity against After Effects has not been comprehensively measured

  • Some platform-specific workflows still need refinement

  • Performance on complex projects requires more independent benchmarking

  • Certain advanced features remain under development

  • Professional production workflows may require workarounds

How to Install

The easiest way to install EffectCraft is to download a prebuilt package from the project's GitHub releases.

Windows users can use the portable ZIP package. macOS users can install the universal disk image, while Linux users can choose from AppImage, DEB, RPM, or tarball packages.

Developers can build the application from source with Rust:

git clone https://github.com/storytold/effectcraft
cd effectcraft
cargo run --release -p effectcraft

To render a composition from the command line, use the companion CLI:

cargo run --release -p effectcraft-cli -- render --out intro.mp4

For AI-agent integration, launch the MCP server:

cargo run --release -p effectcraft-cli -- mcp

These capabilities make EffectCraft particularly interesting for developers building automated animation pipelines or integrating motion graphics into AI-assisted workflows.

Final Verdict

EffectCraft is an ambitious open-source After Effects alternative that combines a familiar animation workflow with a modern Rust-based engine. Its extensive effects library, keyframe controls, expressions, compositing tools, 3D features, and broad export support make it much more than a basic animation editor.

Its most distinctive advantage is automation. The CLI, JSON control channel, readable project files, and MCP server make it possible to integrate motion graphics into scripted and AI-assisted workflows. Lottie support also provides a practical bridge between desktop animation and web development.

The biggest limitation is compatibility and maturity. EffectCraft cannot open native After Effects projects or use its third-party plugins, and its own documentation acknowledges that feature coverage does not yet guarantee production-level reliability or equivalent output quality.

For motion designers, developers, and open-source enthusiasts looking for a capable alternative to proprietary animation software, EffectCraft is a promising project. It is particularly attractive for new projects that can use its native format and automation tools without depending on an existing After Effects workflow.

EffectCraft v0.6.0
Free
Software Informations:
Developer:

Operating System:
Windows / macOS / linux
Date Added:
2026-10-08T16:17:10.000Z

Opera GX is a special version of the Opera browser created with gamers in mind, but it also works great for anyone who wants more control over browser performance. Unlike traditional browsers, Opera GX focuses on managing system resources, visual customization, and quick access to gaming and social platforms.

It feels less like a standard browser and more like a control center for browsing, gaming, and multitasking.

Why Opera GX Stands Out

Performance Control That Actually Helps

One of the biggest reasons people choose Opera GX is GX Control. This feature lets you limit how much CPU, RAM, and network bandwidth the browser can use. If you play games or run heavy software while browsing, this helps prevent lag and keeps your system running smoothly.

You decide how much power the browser is allowed to use, which is something most browsers do not offer.

Designed to Match Your Style

Opera GX is highly customizable. You can change colors, themes, background music, and sound effects to match your setup or mood. Whether you prefer a subtle look or something bold and flashy, the browser adapts easily.

The design feels modern and gaming inspired without being overwhelming.

Built In Messaging and Streaming Access

Instead of switching between apps or tabs, Opera GX lets you chat directly from the sidebar. Popular services like WhatsApp, Telegram, and Facebook Messenger are built in.

Twitch is also integrated, allowing you to follow streams, receive notifications, and browse live channels while doing other things online.

GX Corner for Gaming News

GX Corner is a dedicated space inside the browser that shows gaming news, upcoming releases, deals, and events. It is useful if you like staying updated without opening extra websites.

Everyday Browsing Experience

Despite its gaming focus, Opera GX works very well as a daily browser. Pages load quickly, tabs are easy to manage, and the interface remains responsive even with many tabs open.

The built in ad blocker helps reduce clutter and improves loading speed. There is also a free built in VPN for basic privacy protection while browsing.

Privacy and Security

Opera GX includes standard security features such as phishing protection and secure browsing. The VPN helps hide your IP address, but it only works inside the browser. It is good for casual privacy needs, but it is not a replacement for a full VPN service.

Extensions and Compatibility

Opera GX supports Opera extensions and also allows you to install extensions from the Chrome Web Store. This makes it easy to add productivity tools, password managers, or developer extensions without compatibility issues.

Most websites work exactly as expected, just like they do in Chrome or Firefox.

If you want a browser that does more than just load web pages, Opera GX is worth trying. It gives you real control over system resources, looks great, and includes features that gamers and power users actually use. Whether you are gaming, streaming, chatting, or working, Opera GX delivers a smooth and enjoyable browsing experience.

Opera GX 136.0.6008.111 Offline Installer
Free
Software Informations:
Developer:

Operating System:
Windows / Mac / Android
Date Added:
2026-10-08T16:03:51.720Z

DeepSeek TUI is an open source terminal based coding agent designed for DeepSeek AI models. Unlike a simple chatbot, it can interact with your local workspace, execute shell commands, manage git operations, and assist with software development tasks directly from the command line.

The project is written in Rust and focuses on speed, low resource usage, and keyboard driven workflows. It is especially appealing for developers who spend most of their time in the terminal.

DeepSeek TUI is gaining attention among developers who prefer terminal based workflows and want direct access to AI powered coding tools without relying on heavy IDE integrations. Built around DeepSeek models, it transforms the terminal into an interactive coding assistant capable of editing files, running commands, and managing development workflows.

Download Codewhale v0.10.1 (Formerly DeepSeek TUI) - Software Mirrors

Codewhale v0.10.1 (Formerly DeepSeek TUI) for Windows

CodeWhaleSetup.exe | 43.71 MB

codewhale.bat | 196 B

codewhale-windows-x64.zip | 87.91 MB

codewhale-windows-x64.exe | 122.18 MB

codewhale-windows-x64-portable.zip | 87.9 MB

codewhale-windows-arm64.zip | 82.14 MB

codewhale-windows-arm64.exe | 98.94 MB

codewhale-windows-arm64-portable.zip | 82.14 MB

codewhale-tui-windows-x64.exe | 122.18 MB

codewhale-tui-windows-arm64.exe | 98.94 MB

codew-windows-x64.exe | 122.18 MB

codew-windows-arm64.exe | 98.94 MB

Codewhale v0.10.1 (Formerly DeepSeek TUI) for macOS

codewhale-tui-macos-x64 | 92.47 MB

codewhale-tui-macos-arm64 | 81.88 MB

codewhale-macos-x64.tar.gz | 81.7 MB

codewhale-macos-x64 | 92.47 MB

codewhale-macos-arm64.tar.gz | 75.82 MB

codewhale-macos-arm64 | 81.88 MB

codew-macos-x64 | 92.47 MB

codew-macos-arm64 | 81.88 MB

Codewhale v0.10.1 (Formerly DeepSeek TUI) for Linux

codewhale-tui-linux-x64 | 100.02 MB

codewhale-tui-linux-arm64 | 81.09 MB

codewhale-linux-x64.tar.gz | 84.44 MB

codewhale-linux-x64 | 100.02 MB

codewhale-linux-arm64.tar.gz | 77.12 MB

codewhale-linux-arm64 | 81.09 MB

codew-linux-x64 | 100.02 MB

codew-linux-arm64 | 81.09 MB

Codewhale v0.10.1 (Formerly DeepSeek TUI) for Android

codewhale-tui-android-arm64 | 84.58 MB

codewhale-android-arm64.tar.gz | 77.37 MB

codewhale-android-arm64 | 84.58 MB

codew-android-arm64 | 84.58 MB

Others Download related to Codewhale v0.10.1 (Formerly DeepSeek TUI)

codewhale-bundles-sha256.txt | 863 B

codewhale-artifacts-sha256.txt | 2.92 kB

Codewhale v0.10.1 (Formerly DeepSeek TUI) Source Code

Codewhale v0.10.1 (Formerly DeepSeek TUI) Source code (zip)

Codewhale v0.10.1 (Formerly DeepSeek TUI) Source code (tar.gz)

Codewhale v0.10.1 (Formerly DeepSeek TUI) Release Notes:

Codewhale is the public product from Shannon Labs. The codewhale</blockquote>
command, npm package, and release-asset names remain lowercase technical
identifiers. The legacy npm package deepseek-tui is deprecated and
receives no further releases. Users coming from v0.8.x legacy deepseek /
deepseek-tui names should migrate with docs/REBRAND.md.

Install

Recommended — official GitHub release

New macOS/Linux install (checksummed binaries from this release):
bash
curl -fsSL https://codewhale.net/install.sh | CODEWHALE_VERSION="v0.10.1" sh
"$HOME/.local/bin/codewhale" --version
For Windows, use the matching installer or archive below. For an existing direct install, run codewhale update; it prints the executable path and keeps newer builds. If the install directory is occupied by a different build, use the fresh-directory migration in the installation guide.

Secondary packaging — npm and Cargo

bash
npm install -g codewhale

or build from source

cargo install codewhale-cli --locked
The wrapper downloads the matched codewhale and codew command assets from this Release. Both contain the same compiled runtime.

Docker / GHCR

bash
docker run --rm -it \
  -e DEEPSEEK_API_KEY="$DEEPSEEK_API_KEY" \
  -v codewhale-home:/home/codewhale/.codewhale \
  ghcr.io/codewhale-hq/codewhale:v0.10.1
The image exposes the same runtime as both codewhale and codew. The latest tag is also updated on release.

Cargo (Linux / macOS)

bash
cargo install codewhale-cli --locked
The Cargo package installs codewhale. Cargo cannot create a second command alias from one binary target; users who want the shorter spelling can add a codew symlink to that installed executable. The npm, Homebrew, archive, shell-installer, and container channels install both command names directly.

Manual download — platform archives (recommended)

Each archive below contains the same runtime under the codewhale and codew command names, plus an install script:
  • Linux x64: codewhale-linux-x64.tar.gz | install.sh
  • Linux ARM64: codewhale-linux-arm64.tar.gz | install.sh
  • Android ARM64 (Termux): codewhale-android-arm64.tar.gz | install.sh
  • macOS x64: codewhale-macos-x64.tar.gz | install.sh
  • macOS ARM: codewhale-macos-arm64.tar.gz | install.sh
  • Windows x64 (installer): CodeWhaleSetup.exe | NSIS setup
  • Windows x64: codewhale-windows-x64.zip | install.bat
  • Windows x64 (portable): codewhale-windows-x64-portable.zip | —
  • Windows ARM64: codewhale-windows-arm64.zip | install.bat
  • Windows ARM64 (portable): codewhale-windows-arm64-portable.zip | —
Unix (Linux / macOS):
bash
tar xzf codewhale-.tar.gz
cd codewhale-
./install.sh
Windows:
  • For the installer path, run CodeWhaleSetup.exe; it installs
codewhale.exe, codew.exe, and codewhale.bat under %LOCALAPPDATA%\Programs\CodeWhale\bin, adds that directory to the current-user PATH, and creates a Start Menu shortcut that prefers Windows Terminal (wt.exe) when it is installed.
  • Extract the archive for your machine: codewhale-windows-x64.zip or
codewhale-windows-arm64.zip
  • Double-click codewhale.bat (not the raw .exe) to launch
  • Run install.bat to copy the binaries and launcher to %USERPROFILE%\bin
  • Add %USERPROFILE%\bin to your PATH
The portable Windows archive skips the install script — extract and run codewhale.bat from any directory. The NSIS installer is currently unsigned and may trigger Windows SmartScreen until a signing certificate is wired into the release pipeline. Each platform also has bare, unarchived codewhale- and codew- assets. The seven codewhale-tui- filenames attached to v0.9.5 are byte-identical compatibility copies used only to let already-installed v0.9.4 clients discover and cross this single-binary transition; current installers do not expose a third runtime. The legacy npm package deepseek-tui is deprecated and is not republished. For migration from v0.8.x legacy binary names, see docs/REBRAND.md.

Verify (recommended)

Download the checksum manifests from this Release and verify:
bash

Linux — archive bundles

sha256sum -c codewhale-bundles-sha256.txt --ignore-missing

Linux — individual binaries

sha256sum -c codewhale-artifacts-sha256.txt --ignore-missing

macOS

shasum -a 256 -c codewhale-bundles-sha256.txt --ignore-missing shasum -a 256 -c codewhale-artifacts-sha256.txt --ignore-missing

What's in v0.10.1

Contributor integration and reliability

  • OAuth retry diagnostics omit provider-controlled error fields; account replacement stops before retired Weixin receipts exceed their storage limit, preserving uncertain work for local review.
  • Resuming a session through a symlink to the same workspace no longer shows a false workspace-change warning.
  • Runtime clients can read one tool call's actual workspace changes and reviewed skill details (thanks @gaord, #6817 and #6869). In-flight snapshot pairs remain pending; missing objects and corrupt repository metadata are distinguished.
  • Search accepts valid preferred locales, and image dimensions describe the same bytes sent to the model (thanks @asto18089, #6860 and #6858). Automation deletion keeps its definition until cleanup succeeds, and compaction preserves its original summary anchor (#6864 and #6857).
  • Config/status/permission commands share portable contracts while the host retains mutation authority; queue workers acknowledge a scheduled retry for temporary first-claim contention and fail honestly on corruption (thanks @aboimpinto, #6832).
  • Indefinite questions, approvals and elevation waits survive the TUI watchdog. Answers get time to resume the current turn; settled requests disappear by identity. Thanks @7jrxt42BxFZo4iAnN4CX for #6872.
  • Configured approval expiry belongs to the held Engine request; hiding or covering its card cannot restart the deadline, and a late queued answer cannot approve an expired call.
  • Tool discovery keeps the highest-ranked matches when a result batch exceeds the existing cache bounds, preserving search order and the 16 KiB limit (adapted from @AdityaVG13's #6393).
  • Model-switch receipts now translate their session-only saving note in every complete locale pack; the three save commands remain directly usable (thanks @Lstarsky0, #6875).
  • Route-save receipts and /workspace replies are translated in every complete locale pack, the Operate descriptions in fourteen packs match the current English, pt-BR, es-419 and ca regain accents six strings had lost, and long CJK text can be shortened between Han and kana characters (thanks @Lstarsky0, #6884, #6885, #6886, #6888, #6887 and #6882).
  • Long sessions keep less in memory: superseded journal entries beyond a retained window move out of the live session into a per-session archive under sessions/.journal-archive/ (kept until the session is deleted; /branch can still restore an archived entry), ended shell operations in the work graph are capped, and session metadata larger than the first read no longer forces a full-file read. Not yet addressed: usage fingerprints in session metadata still grow without a bound, snapshots are still cloned on the UI task, and resume still reads the session file twice (thanks @7jrxt42BxFZo4iAnN4CX, refs #6842).
  • Weixin bridge threads belong to the account and chat that created them:
resuming or listing another chat's thread is refused. An explicit /new after an account replacement keeps the old account's private receipt and never replays its prompts automatically. Replies never reuse another bot account's Weixin context token, and /threads lists this chat's own older threads even when other chats have newer ones.
  • Windows messaging bridges retry a briefly locked record replacement
(EPERM/EACCES/EBUSY) with bounded delays and never delete the previous record first.
  • The website and README installation guides are generated from one shared
source, and the critical Simplified Chinese guides were re-reviewed against current English.
  • A Codewhale sign-in that expired, or an account service that is unreachable,
no longer blocks turns on your own provider key. The turn uses your local settings and Codewhale says once how to restore account preferences.
  • codewhale login keeps a DeepSeek route you chose, or one with a local key,
instead of switching it to the managed Codewhale provider.
  • The bundled computer-use plugin is 0.12.1, reconciled with canonical source
724f9c422db1a51880dc81154dae70816c475ed8 while retaining Core's embedding manifest and version contract. Its image renderer lock now carries Sharp 0.35.5.
  • The bundled first-party catalog pins marketplace revision
6512f1dfaa91ee287e9f81ebabaf4909e8a371a3 and lists all 19 reviewed plugins, up from 6. Every catalog plugin still installs disabled and untrusted until you review it.
  • Every committed npm lockfile is audited in CI, including build tooling. The
VS Code extension packages with @vscode/vsce 4 on Node 22 while it still compiles and tests on its Node 20 runtime. The website keeps one reviewed, hash-verified depth guard for an unpatched braces advisory (GHSA-vfj7-8cjw-p6xm); its raw audit findings are retained, not hidden.
  • Pasting through Windows Terminal (Ctrl+Shift+V) no longer drops emoji and
other characters outside the Basic Multilingual Plane. Release binaries and source builds carry a small patch to crossterm 0.29.0 in patches/ (the change proposed upstream as crossterm-rs/crossterm#1073); a real Windows Terminal paste of 24 Unicode lines is now a release gate.
  • Experimental extension host: reviewed Native plugins can register avatar
packs with ctx.avatars.registerPack (/pet avatar [key], `/pet action|view ). /plugin import dsh ` reviews a DeepSeek Harness bundle and now lists the Native host code it contains; `approve ` installs it disabled and untrusted. Trusted host plugins stay trusted across a restart, enabling a second host plugin activates it without /plugin reload, and the review no longer crashes the TUI. Codewhale v0.10.1 focuses on reliability and first-run behavior. Turns that stall now say so, approvals keep what you approved, plugin suggestions are quieter, and Fleet runs can be checked before they spend anything. Scripts that parse --json output should read the Breaking for scripts note below before upgrading.

Added

  • /plugin doctor reports stale built-in records and snapshots, and
/plugin doctor --fix retires them. A user plugin, a snapshot a running process names, and a snapshot inside the grace window are kept. The previous state.json is kept as state.json.pre-gc.
  • Reviewed plugins can declare named OpenAI-compatible OAuth routes. The host
owns PKCE, refresh and credential storage, and checks the review at each request (docs/PLUGIN_PROVIDERS.md, #6805). The provider capability advances plugin review policy to v5 (v6 with the extension host): older receipts require explicit review again.
  • OrcaRouter account sign-in uses PKCE and saves the same durable API key as
manual setup; its live catalog keeps chat-capable rows and stated pricing and modality facts (#6867).
  • Experimental TypeScript extension host. New in this release and off by
default: turn it on with [features] extension_host = true. A plugin that declares a native TypeScript or JavaScript entry (the Cordis / DeepSeek Harness plugin model) can contribute tools, slash commands, pre-execution policy hooks, additive prompt sections, reviewed skill roots and plugin-local JSON state. Its code runs in a separate Node process, never inside Codewhale (Bun is an opt-in through [extension_host] runtime), and every call goes through Codewhale's own gate: an extension tool is never treated as read-only, so it always meets the approval gate (Full Access, Bypass or a session grant for that reviewed plugin can satisfy it), a command runs only when you type it, and a plugin must be reviewed and enabled first. The host is sandboxed on macOS (Seatbelt) and on Linux with bubblewrap, with no direct network and no reads of the protected credential locations (Codewhale's secret stores and the Codewhale, Codex and DSH homes). A Native extension starts only after that sandbox is verified at launch: if bubblewrap is missing or its namespace probe fails, activation is refused with the concrete error. Codewhale's own pinned built-in host modules keep a diagnosed exception, and every effect still needs a Rust operation ticket. On Windows a Native extension starts only in a freshly created Less Privileged AppContainer whose only capability is registryRead (Winsock cannot start without it), after Codewhale checks its token and a real file and network probe; otherwise activation is refused. Other files you can read, such as project .env files, stay readable, and plugins sharing the host can interfere with each other, so enable only plugins you have reviewed (docs/EXTENSIONS.md).
  • Extension slash commands: a plugin registers one with ctx.commands.register.
It runs only when you type it, and it can show text, or submit a prompt as your next message that then goes through the ordinary turn and its approvals; it cannot call the model or a tool itself. A command cannot take a built-in command's name or another plugin's, and a markdown command with the same name wins. A command has 30 seconds, and commands are TUI only: the Runtime API does not list or run them.
  • Native extension authoring now includes policy listeners through
ctx.on('tools/pre-execute', ...), prompt sections through ctx.prompt.registerSection, and persistent plugin-local state through ctx.storage. Listeners may deny, ask, revise input or annotate; Rust rechecks revised calls and owns every approval. Prompt sections cannot replace the system prompt, and state exposes no session history or secret API. These services share the experimental, off-by-default host's reviewed owner lifecycle and are withdrawn when their owner unloads or is revoked; saved state remains available when the plugin reloads.
  • Extension tool input is checked against the JSON Schema the tool registered,
before an approval card appears and again before the call reaches the host. An invalid call comes back to the model as an error naming what to correct, and the host never sees it. A schema that cannot be compiled, or that refers outside itself with $ref, is refused when the tool registers.
  • An extension tool can call eligible core tools with core/call while the
ordinary turn is running that extension tool. Rust supplies a temporary invocation ticket and still owns planning, hooks, permissions, approval and execution. The ticket is bound to the plugin owner, host process and live invocation, and expires when that invocation ends or is revoked. Commands, timers and plugin startup cannot use this path. Approval grants are scoped to the reviewed extension build; a grant to the model does not cover it. Shell and network calls require a person's prompt even with a remembered grant; a permission mode that cannot present that prompt refuses the call. MCP tools, Computer Use, other extensions, agent/workflow launches and permission-changing tools remain unavailable through this path. A cancelled invocation withdraws its pending approvals instead of deciding them for you.
  • Extension host identity is checked at startup: its reported trust tier and
built-in module digests must match the process Rust launched. Built-in host code and third-party plugins have separate process and owner namespaces; the table pins the MCP protocol module and the execution harness. The optional Host MCP backend uses the official TypeScript SDK for framing, with Rust retaining credentials, network/process access, approval and exact operation tickets. All 30 existing recorded comparisons pass locally. The Rust backend stays the default until platform and rollout gates pass; its protocol adapters remain through the compatibility window.
  • A plugin can declare several native entries (native.paths, up to 64). They
activate in order under one owner, so one disable, review change or crash takes all of them down. If one entry fails to activate, only that entry is withdrawn: entries that already activated stay registered, and the plugin fails only when no entry activates.
  • Plugin settings and context: [plugins."".config] in your own
config.toml is passed to the plugin's apply(ctx, config) and checked against its exported Config schema; a project's .codewhale/config.toml cannot set it, a change applies at /plugin reload, and /plugin show lists the keys, never the values. Tools and commands also receive the workspace of the session that called them and a private data directory for the plugin under ~/.codewhale/extension-host/data/plugins/; no home, credential or other workspace path is passed.
  • codewhale --enable and --disable work from the
codewhale command; before, they were rejected. Put the flag before any subcommand.
  • The extension host bundle carries MIT-licensed code (Cordis, Schemastery and
others). Its third-party licence notices are generated from what the bundle actually contains and written beside the bundle when it is unpacked, and THIRD_PARTY_NOTICES.md lists the packages.
  • Extension host runtime: Bun 1.4.0 or newer is an opt-in; Node stays the default. [extension_host] runtime = "node" | "bun" | "auto" chooses: unset means node (or bun when the table sets only a bun path), bun runs only Bun, and auto prefers a supported Bun and uses Node when none is found or the Bun host fails to start. An explicit choice never falls back, and restarts keep the runtime the session first started on; a runtime binary replaced mid-session is refused. A configured node or bun path is used as given and fails loudly rather than falling through to PATH, and a runtime found on PATH inside a node_modules directory or the working directory is skipped, not run. codewhale doctor and /plugin show which runtime runs the host, why, and how its memory is capped. Under Bun the host never auto-installs packages and ignores .env and bunfig.toml in its data directory. Extensions cannot run native code inside the host on either runtime: bun:ffi, Bun.FFI, node:ffi, the SQLite builtins, process.dlopen, process.execve, Worker threads and ShadowRealm are refused, and the host will not start if one of these restrictions does not hold. Known limit: that lockdown covers the native-code entry points found so far (Bun 1.4, Node 22 and 26); one a newer runtime adds is not covered until it is added. The 1 GiB memory cap uses RLIMIT_DATA on Linux, the Job Object on Windows and, for a Bun host, a kernel jetsam limit on macOS; a Node host on macOS is checked at each heartbeat. Bun is qualified on macOS only: the Rust host tests, the memory cap included, have not run a Bun host on Linux or Windows (CI runs them with Node, and the JS host suites under Bun 1.4.0 on Linux). host/hello reports the runtime and version that actually run.
  • docs/features.toml lists every user feature with its status, first
release, docs page and owning code. A test fails when a [features] flag and its row disagree, or when a listed docs page or code path is missing. The configuration reference now lists the verify_tool, vision_model and extension_host flags, and config.example.toml lists code_mode.
  • A reusable GitHub Action runs PR reviews with a configurable model endpoint
and a checksum-pinned Codewhale binary. It checks the PR's eligibility and exact revisions before inference; fork events receive no model key (#6780).
  • An optional, off-by-default shadow Decision Gate classifies the first request
of a turn — tool need, answerability from context, intent — through the existing System One client and only logs a typed recommendation; it never changes routing or delays the model call. Configure it with SUPERFAST_ENABLED and SUPERFAST_PROVIDER (docs/CONFIGURATION.md) (#6603, #6604, thanks @Andrea-Bruno).
  • tool_call_after hooks for shell tools receive DEEPSEEK_TOOL_EXECUTION_RECEIPT: the command that actually ran after admission, its working directory, how it ended, and bounded stdout/stderr previews, so a hook can record exactly what executed (#6689, requested by @wuisabel-gif).
Supported settled local shell calls also send a versioned JSON document on stdin to foreground or background observers, with session/tool-call IDs, nullable exit status and output truncation flags. Existing environment fields stay available; unsupported execution paths send no document, and observer output cannot change the completed call (#6582).
  • Runtime API: turns now record what they produced. Each item and turn
carries typed artifact references (path, kind, size, revision, and a restore point when file-revert would accept one) for files a tool wrote, spilled tool output, and media.
  • Once the post-turn snapshot settles, the turn also lists what changed in
-- the workspace while it ran, including shell and sub-agent writes. It then -- publishes turn.artifacts.
  • GET /v1/threads/{id}/turns/{turn_id}/artifacts lists a turn's
-- references, and .../artifacts/{artifact_id} reads one from the -- workspace, the post-turn snapshot or the session artifact directory.
  • Spills from unbound runtime threads were unreadable before; they are now
-- readable.
  • The legacy artifact_refs field is now filled with the workspace files a
-- tool call wrote, so Preview in current desktop builds shows them (#6653).
  • Runtime API: git stage, unstage, discard and commit accept optional
expect preconditions (full HEAD id, an index token, per-file rev, or a whole-tree revision, all read from GET /v1/git). When the repository changed since the client read it, the write does nothing and answers 409 git_state_changed with the current state, so a Review sheet can no longer stage bytes, discard edits or commit an index the user never saw. Requests without expect behave as before. Path writes now use literal pathspecs, as the docs already said, and files[].path is workspace-relative in a subdirectory workspace. Guards cover executable mode, submodule HEAD and changes outside that workspace; oversized or budget-limited stat-only revisions cannot authorize a guarded write. Status stays best-effort: unreadable paths, symlinked ancestors, special files and broken nested repositories withhold only affected row tokens and the whole-tree revision. Normal Git filters and untracked settings apply, with directory inventories scoped to the rows or paths that need them. Untracked workspace files and renames leaving the workspace remain visible, and broken HEADs cannot satisfy an unborn-HEAD guard (#6647).
  • Runtime API: POST /v1/threads/{id}/fork-at-turn forks a thread at a named
user turn, keeping that turn and every turn before it. The receipt matches /undo and returns the first dropped prompt so a client can put it back in the composer. Naming the turn replaces a client-computed depth, which could fork the wrong prefix. The fork leaves the workspace and any running turn untouched (#6580, thanks @gaord).
  • Official model routing: /router (also /model router) sets up the Auto
router with presets: Jev (TypeSafe's decision model, via OpenRouter or a TypeSafe key), your provider's fast tier, Off, or Custom. Jev and Fast each make one test call before you save, the Turn Inspector (Ctrl+Alt+O or /turn inspect) shows the router's choice, cost and latency, and a failing router is shown as failing (#6525).
  • ChatGPT sign-in uses Codewhale-owned protected credentials and a model roster
fetched for the signed-in account. Account, workspace and issuer changes cannot reuse another roster; a missing or stale roster offers no models. Authentication failures and subscription limits do not silently fall back to a paid API route.
  • Code mode composes MCP and plugin tools and is on by default:
execute_tools programs can call MCP tools, and each nested call passes the same approval gate as a direct call, pausing the program for approval when needed. Every nested call keeps its receipt, including calls that finish before a deadline, and [features] code_mode = false stops offering execute_tools up front (it stays reachable through tool search). codewhale mcp list and codewhale doctor warn when a user MCP server duplicates the built-in Computer Use bundle (#6562, #6509).
  • Tsubasa is a bundled OpenAI-compatible provider row: base
https://api.tsubasa.sh/v1, key TSUBASA_API_KEY, model tsubasa-pro (also tsubasa-fast). Its window is 32,768 tokens; set providers.tsubasa.context_window to match (#6695, thanks @cenab).

Changed

  • The pinned prompt header follows the turn at the top of the viewport,
handing over to the previous prompt as you scroll, and clicking it jumps back to the message it names (#6830, thanks @SparkofSpike).
  • On Windows, every PowerShell command the shell tool starts now passes
-ExecutionPolicy Bypass for that process only, so a local Restricted or AllSigned policy no longer blocks multi-line commands. (.ps1 script tools still start as powershell -File without the flag and remain subject to the local policy.) A policy set by Group Policy still wins and the command is refused with PowerShell's own message. Scripts that a command invokes run under the same process-scoped setting. To let the machine or user policy apply instead, start Codewhale with CODEWHALE_POWERSHELL_EXECUTION_POLICY=inherit: it then omits -ExecutionPolicy, so a Restricted or AllSigned policy refuses the multi-line commands that need a temporary script; any other value keeps the default. Not verified on a native Windows machine (#6745).
  • The website's not-found page now uses the Codwhale poster and typo joke,
with English/Chinese recovery links to home and docs (#6419, #6420).
  • Script tools can no longer approve themselves or replace built-in tools
(founder decision D4). A # approval: auto line in a script under ~/.codewhale/tools (or [tools].plugin_dir) is ignored: the tool follows the session's approval setting like a script with no approval: line, and the runtime log and /plugin tools name each script that still declares it. A [tools.overrides] entry of type = "script" or type = "command" keyed by a built-in tool name is refused, and the built-in stays active; a status line names the key once per session, and the runtime log records it. type = "disabled" still turns a built-in off, and script or command overrides under a new name still work. To keep a wrapper such as an audited shell, disable the built-in and give the wrapper its own name (configuration).
  • Complete the session slash-command group’s shared command boundary, including
/structcopy, so all seventeen commands can compile independently of the TUI. Host operations remain behind capability interfaces; command behavior and upstream tool-execution identity safeguards are preserved (#6792, #6145).
  • The declared minimum Rust version is now 1.89. It said 1.88, which could not
build Codewhale: a locked dependency (serde-saphyr) needs 1.89, the version CI's minimum-version job builds. The install guides and the npm wrapper's build-from-source hints now say 1.89 too.
  • A deferred tool's first call now runs when its arguments already carry every
required field and no field the schema does not declare, instead of costing a retry turn. Malformed calls still get the schema, and approvals, deny lists and Plan mode apply first. Argument types are still checked by the tool itself. Sub-agents preload tools named in allowed_tools (#6494, #6437).
  • Automatic Git status and review reads need Git 2.31 or newer, because they pin
Git's runtime configuration overrides. With an older Git they refuse with "upgrade Git (2.31 or newer)". This covers the read-only Git tools (git_status, git_diff, git_log, git_show, git_blame, verify); Git writes you ask for keep their existing behavior (docs/dependency-maintenance.md).

Fixed

  • A failure Codewhale can name is no longer labelled an internal fault. An HTTP
400/405/409/413/422 rejection, an out-of-credits 402, the context-budget stop and a turn's own step or wall-clock ceiling now carry an input or budget label, and a bare ERROR from a provider is reported as an unreadable error instead of a warning. Refs #6843.
  • A transient upstream failure reported as an error frame inside a successful
response is retried within the stream retry budget. When the budget is spent the turn fails once with an error card instead of an amber warning that promised a retry. Refs #6795.
  • Diff lines and tool output wrap at grapheme boundaries, so emoji families,
skin tones and variation selectors no longer split across lines (#6829, thanks @Lstarsky0).
  • Twelve translated packs now translate the context inspector's making-room
and anchors rows, the Ctrl+O hint and the /turn inspect and /advisor descriptions instead of showing English (#6831, thanks @Lstarsky0).
  • Optional MCP servers can be found before they connect. tool_search matches
the query against configured, enabled server names (or an mcp__ prefix), connects up to eight matches within the existing boot wait, and returns their real tool schemas. Before, a lazily started server exposed no tools, so the model could never trigger its connection (#6828). Known limit: a query that names neither the server nor mcp does not wake it. codewhale mcp connect, validate and tools run their own connection and do not attach to a running session.
  • /undo and /restore refuse while a turn is running in the workspace,
instead of rewriting files under it.
  • --resume after a crash recovers that session's interrupted turn from
its crash checkpoint, as --continue does.
  • /resume keeps an imported session on the current provider route
instead of a default one.
  • When the stall watchdog recovers a turn, the Engine's turn is ended too, so
the next message is accepted (#6800).
  • A turn you cancel, or one the stall watchdog recovers, releases input at once.
A message still waiting to reach the engine is abandoned and its unsent text returns to the composer, instead of holding input for up to 60 seconds (#6800).
  • A transient upstream failure that a gateway reports as an error frame inside
a successful response ("Provider returned an empty response") is retried under the stream retry budget when nothing had streamed; authentication and invalid-model frames still fail at once (#6795).
  • Long sessions no longer start every turn late. Once a workspace held more
than 50 undo snapshots (around the sixteenth turn), each new snapshot rebuilt the whole snapshot history before the provider request, about 2.8 s per turn in a small workspace. Old snapshots are now dropped half a window at a time.
  • Resuming a crashed session from inside the TUI recovers its interrupted
turn too.
  • Release builds compile on Rust 1.99.
  • TUI undo and retry rewind the Engine conversation and saved session before
replacement inference. If the conversation or its settings change while undo is being prepared, it refuses without overwriting that newer state or changing the draft. Retained compaction summaries survive the rewind and cannot be selected as editable user prompts (#6788).
  • /edit replaces the exchange it revises through the same rollback: the old
prompt and its answer leave the transcript, the model's context and the saved session before the edited prompt is sent.
  • When the rollback that /edit needs is refused, your revised text goes back
to the composer with edit mode still on, instead of being dropped. Opening /edit while you are editing a queued follow-up returns that follow-up to the queue first.
  • A session can still be resumed by its id when a stray copy of its file sits
in the sessions directory; before, the id was reported as ambiguous.
  • Agents follow the Permissions you choose while they run: switching to
Full Access reaches an agent that is already working, instead of leaving it with the Auto-Review guardian that denied it. Tightening reaches it too. An agent's answer to an approval prompt is delivered while the main session is busy, and a forced delete inside the workspace is no longer treated as a catastrophic system delete. On Linux, Full Access switched on at runtime cannot lift the kernel no-new-privileges flag set at startup, so sudo and setuid helpers still fail; start with sandbox_mode = "danger-full-access" or CODEWHALE_NO_NEW_PRIVS=0 if agents need them (#6787).
  • Stream limits and transport settings share a typed [stream] configuration
table, including retry budgets, TCP keepalive and HTTP/2 keepalive. Explicit values take precedence over legacy [tui] aliases; omitted values preserve existing defaults and environment behavior. A configured HTTP/1 pin stays pinned during recovery. /config stream_chunk_timeout_secs ... --save updates the canonical setting so it survives reopening a configuration that already had a timeout. Transport changes apply when a client is built (#6700).
  • Switching providers keeps a model set only in the root default_text_model
with the provider it belongs to. Switching away and back (/provider in the TUI, or the desktop app's model chip) used to land on the provider's catalog default such as gpt-5.6, and a pass-through provider switched to in between inherited the other provider's model, or a stale legacy root model that the root default had been shadowing (#6693).
  • A turn no longer stops after an hour of work. The cumulative per-turn wall
clock is unlimited by default, like model steps; set [tui].turn_wall_clock_secs to cap it.
  • OpenRouter turns are priced again instead of always showing "rate
unavailable". The model-list refresh no longer fails as a whole on one bad row: ~ "latest" aliases are dropped, routers that publish a -1 variable price are listed without a rate, and other malformed rows are skipped and counted. Main interactive turns now honor a [[custom_models]] rate the same way background work does, a declaration without rates no longer hides the catalog price, and an explicit declared rate prices a vendor-pinned OpenRouter route (#6690).
  • codewhale exec can take prompts past the OS argument limit (~128 KiB on
Linux, where larger prompts failed with Argument list too long before Codewhale started): --prompt-file reads the prompt from a file, and --prompt-file - reads it from stdin; a positional - stays literal text (#6688).
  • Keep reasoning effort labels, including xhigh and ultra, visible beside
short model names in the 80-column terminal footer.
  • First-run TUI startup keeps explicitly configured providers, models and
endpoints (including environment overrides and a legacy top-level base_url), even with a missing key, instead of adopting a detected local Ollama model. The default_text_model line written into the generated first-launch config is not treated as a choice, so starting Ollama after the first launch is still detected. Usable configured routes skip the provider picker and record the provider step as configured, without claiming a successful check; missing-key recovery focuses the configured provider even on a fresh home. Switching from that recovery picker (or after Esc) to a provider that has its key clears the launch "needs a key" state, so the footer names the route instead of "model not connected" and a detected local Ollama can no longer take over the provider just chosen. Empty sessions no longer show a full context window from the startup prompt; a submitted first turn or reported usage still shows real pressure.
  • /trust on|off changes file-tool trust for this session. Add --save to
persist workspace trust for project skills, commands, hooks, MCP servers, and project context. Skipped-skill notices stay out of conversation titles and user bubbles, and trust changes append a correction to the model's history.
  • Stored-secret cleanup skips busy Runtime stores and reports unreadable paths
while continuing through other files. Configured storage roots may be symlinks; discovered symlinks are not followed. Cleanup also masks current configured credentials, and doctor's bounded scan reserves capacity for saved transcripts and checkpoints separately from Runtime receipts.
  • Hooks: tool_call_after and on_error now get a shell command's exit code
in DEEPSEEK_TOOL_EXIT_CODE on Runtime API threads as well as in the TUI, and for a failing command as well as a passing one, so exit_code conditions match. The Runtime API path passed no exit code at all, and a command that exited nonzero, timed out, or was killed reached hooks with no exit code on either surface. The new DEEPSEEK_TOOL_STATUS says how the command ended (completed, failed, timed_out, killed) (#6582).
  • Scrolling a long transcript repaints the reasoning reveal hint in place
instead of rebuilding the transcript tail. Wheel and scrollbar input use interactive frame pacing, collapsed tool groups reuse cached summaries, and height-only resizes keep wrapped history. Width changes still rewrap content, and other per-frame work still grows with session length (#6652).
  • A settled transcript frame reuses its existing render plan instead of
rebuilding or moving unchanged history on every poll. New output, selection, resize and other real changes still invalidate the affected work (#6652).
  • Workflow progress rows and working, verification and translation indicators
use the pinned Codewhale terminal component kit. Quiet and reduced-motion working/verification indicators hold its semantic current-work mark. Working and verification keep their existing delay and cadence, while translation uses the same earned marker and five-frame-per-second cadence. The Engine still supplies workflow state, clocks, localized text, custom themes and terminal adaptation. The composer, transcript viewports, dock tabs, posture/metrics rows, pending-input cards, approval band, Ocean background and the whale's Braille raster now also render through the pinned kit.
  • Calm transcript previews keep the latest three rows of live thought and a
single duration header when it settles. Successful tool headers are quieter; failed generic and MCP calls keep a bounded head-and-tail excerpt, with full output available in details. Existing collapsed groups show their hidden count and reveal cue, and explicit thought expansion stays available.
  • Composer history preserves multiline entries and literal quoted text while
retaining the old history file during migration. An oversized message stays in the composer if its paste file cannot be saved, with a localized notice; mouse placement and quoted file mentions handle multibyte text and spaces (#6776).
  • The notice for an oversized message that cannot be saved as a paste file is
now a short line that fits the footer ("Not sent: over N characters; paste file not saved."), in every supported language. The full reason, including the write error, goes to the transcript once.
  • Model-facing guidance names callable tools and explains discovery before a
deferred read. The stopship workflow's scout activates the deferred grep_files with one required tool_search call, then gathers bounded grep_files evidence from the current workflow source paths (#6747).
  • Simplified and Traditional Chinese permission, provider and session wording
now follows the current behavior. Chinese guides correct hook receipts, trusted skills, MCP startup and Windows limitations, preserving the contributor translations and a shared glossary.
  • Unknown website locale segments, including dotted missing paths, return a
real 404 with noindex metadata and no home-page canonical URL. The existing layout guards now have regression coverage across all registered locales (#6786).
  • The terminal caret no longer blinks at the hidden composer while a picker,
settings screen or other view covers it; it returns when the view closes (#6545).
  • On Linux and macOS, a background: true shell's process group is now
stopped when the TUI dies without cleaning up (SIGKILL, a crash, or the signal exit path). The shell and the processes it started used to keep running as orphans. Processes that move to their own process group or session, staged services you choose to keep, and tty: true background shells are not covered. Under the bwrap sandbox, the sandboxed command now also exits when bwrap does (#6654).
  • Idle task workers stop periodically reloading a settled, unchanged empty
queue, and task listings reuse an unchanged store snapshot. New queue writes and local notifications still wake workers; recent or unreadable metadata and failed claims keep bounded retries. This reduces repeated disk work when several TUIs share a data directory without changing task ownership or cancellation (#6573, #6728).
  • Idle task workers check the queue file's metadata about once a second instead
of five times a second, and no longer reloads the store when nothing changed. An in-process notification still wakes a worker at once; a write by another Codewhale process that shares the data directory is noticed within about a second instead of about 200 ms. A worker with pending work, a retry deadline or a failed claim keeps the short interval (#6728, #6573).
  • After five seconds without session activity, the UI loop polls every 250 ms
instead of 48 ms and the automation-panel scan backs off to 15 seconds. After thirty quiet seconds, the Git probe runs one git status every 15 seconds instead of the full probe every two seconds, unless the Git panel is showing. User input and engine events restore the active cadence. This reduces idle work; it does not remove every cost that grows with session history (#6728).
  • When the task store is busy, the message now names the process that holds its
lock and how long it has held it ("lock held by pid 1234 for 12s"), when that can be read. A repeated "Task claim unavailable" error is logged once per episode, then at debug level (#6573).
  • On Windows, Fleet can read a running worker's log while its writer holds the
file open, and task-store contention can still read the lock-holder record. These paths previously failed because of whole-file sharing and locking.
  • File writes, including legacy File and write_file calls, stop if the
original contents cannot be read; legacy writers also reject non-UTF-8 originals, keeping undo and diffs from recording an empty original file.
  • Resuming a session preserves user messages that quote a compaction marker.
  • Requirements allow-lists now check unset approval and sandbox defaults,
accept equivalent approval aliases, and lock permission posture when sandbox modes are constrained so saved Full Access and YOLO cannot bypass them.
  • Logout completes xAI OAuth revocation and attempts every credential deletion
before reporting remaining credentials with a non-zero exit status.
  • ChatGPT and xAI sign-in now show the account the selected route actually
uses, and sign-in names the account it replaces. /auth chatgpt and /auth xai-device switch the running session; signing in from a separate shell requires restarting an already-open session. Subscription-limit errors name the account that made the request and explain how to switch, without printing credentials (#6715).
  • doctor --fix keeps temporary files modified within the last hour.
  • Provider streams stop with a clear error if an SSE line exceeds 8 MiB.
  • Recursive rlm_query turns inherit the parent's remaining deadline,
bounded by the existing child budget, including asynchronous lock waits, startup, model requests and Python evaluation. Expired work is refused before dispatch; a timeout returns the last response with an incomplete-result error. Nested code and status receipts accompany the enclosing tool result on success or failure and survive its session save/reopen. In-flight receipts still need that result to be handed back before they become durable (#6511).
  • The TUI keeps redrawing while its terminal is unfocused. v0.10.0 held
every frame on focus loss, so on Windows Terminal, macOS and other terminals a window sitting behind another one looked frozen until you clicked back into it. Frames are now held only on GTK/VTE terminals, which replay the damage themselves when they return. That hold was added for the MATE flicker in #6311 (#6651).
  • TUI /undo now restores only the files the undone tool call or turn
changed, and refuses, changing nothing, when one of them changed since. Before, it checked out the whole snapshot tree, which also reverted later edits to other files. It also finds restore points older than the newest 100 snapshots, and a forked session can undo the turns it inherited. It waits for a post-turn snapshot that is still being written, leaves a changed symlink or other non-regular path in place (and says so) instead of refusing the whole undo, and writes nothing to the snapshot store when it refuses outside trusted mode (#6644).
  • On a fixed model, each Ctrl+T press now moves to a different thinking
tier. Ctrl+T and the /model picker could list tiers the route treats as the same one — DeepSeek's medium is high, and Z.ai GLM-5.2's low is high — so some presses changed nothing. They now share one list per route with one entry per effective tier. Under Auto model routing, Ctrl+T walks the picker's Auto list instead of a longer private one; the tier is still settled when the turn is routed, so two neighbouring choices can land on the same tier. DeepSeek now reports minimal, xhigh and ultra as the low, high and max it sends, in /status, receipts and /effort, and Kimi Code K3 no longer offers off, which it always ran as low (#6650).
  • A top-level base_url or api_key in config.toml now means one thing
everywhere. Every reader used its own rule for which routes inherited it, which is how a DeepSeek endpoint became the Xiaomi MiMo route's and failed with DeepSeek's 401. Old files keep working: the keys are read as [providers.deepseek] (or the vendor whose official host they name), the next save moves them there with a one-time backup and a one-line note, and a value that disagrees with its table is left for `codewhale config migrate --prefer to settle. codewhale config doctor` shows what is in use (#6394).
  • Setting up a bundled OpenAI-compatible host from /provider now shows
that host's key console, docs link and guidance on the setup form, the same way the built-in providers' key entry does; before, the descriptor file carried them and nothing read them. AICraft gains all three (#6616, thanks @BX166).
  • Runtime API undo now restores the files of the turns it undoes, for every
kind of thread. Before, a new thread's turns were not linked to their workspace snapshots, so patch-undo returned 201 and rewound the conversation but left the files changed, and file-revert refused. Each turn record now lists its snapshots in workspace_snapshots, the engine runs under the thread's own id across restarts, and a fork owns the turns it inherited. patch-undo restores only the files the undone turns changed, including every write in a turn, and leaves later edits by the user or another thread alone. Every tool call that may write is bounded by its own snapshots, so a file another thread or an editor changed while the turn ran is never reverted as the turn's, and a turn's restore points survive the snapshot count cap. When it cannot restore files (including a write to a gitignored path) it now refuses with 409 and an error.code instead of returning 201. A nameless PUT /v1/sessions updates the document the thread is bound to (#6621).
  • A Runtime thread that is not bound to a saved session keeps one engine
session id, its own thread id, across its first turn, eviction and restarts. Before, each engine spawn generated a new id, so the thread's tool-output spills, snapshot tags and shell jobs were scattered across a different sessions// per spawn (#6659).
  • Saved sessions no longer go orphaned, and existing orphans are repaired at
launch. Deleting a session now sets aside the Runtime store it was actually bound to, and switching a conversation to another host's store sets aside the store it left, unless another session still uses that store or it holds work. Exporting a thread (POST /v1/sessions) updates the thread's own document instead of creating a new one each time. A thread whose document was appended to elsewhere keeps loading. A thread whose document was deleted or rewritten loads from its own turns instead of failing, and threads write their files under the session they belong to. Each launch and `codewhale serve` repairs the store in the background: a store holding threads with no session gets a "Recovered:" session for each thread, and unreadable documents, unused empty stores and old files no session names move to sessions/.set-aside/ with a manifest. Nothing is deleted. codewhale doctor reports the last repair, and codewhale doctor --repair-sessions [--dry-run] runs one now. PUT and DELETE /v1/sessions refuse a session that another Codewhale process has open (#6144).
  • Runtime API: the thread event stream now ends with a typed stream.end
frame (reason and resume cursor) whenever the server closes it, including on shutdown, so clients can tell a Runtime error from a dropped connection and resume from the right event. A replay worker crash no longer ends history early and skips events without a detectable gap, and the mobile page resumes from its last event instead of replaying from zero, with stream statuses in the configured UI language. Cross-origin clients can read the stream-end and replay-progress capability headers, and the SDK exports isThreadStreamEnd for TypeScript narrowing.
  • codewhale exec --auto no longer exits 141 with no output when a child
it writes to, such as a stdio MCP server, closes its pipe early. Headless exec now ignores SIGPIPE while it runs, as the interactive TUI already did, and exec ... | head still ends quietly. One-shot codewhale exec no longer prints DeepSeek's raw <||DSML|| calls> tool-call markup as its answer: the markup is removed, and an answer that was only a tool call fails at once with the reason and a pointer to --auto, instead of asking the model again and blaming an incomplete provider response.
  • Resuming a session keeps its "Resumed:" confirmation on screen instead of
replacing it with "Make room automatically: on" when nothing was switched.
  • Tool output is no longer cut off where you can't get it back. Search
answers, test runs, git, verifier and web results reach the model whole up to one budget sized to the model's context window, and anything beyond it can be read back with retrieve_tool_result, including read-only tools executed alone or in parallel. Restored raw results use the active route's same inline budget; existing recovery receipts stay intact. Tiny budgets use a compact retrieval reference instead of a long artifact path and instructions; a complete reference is kept even when it alone exceeds the allowance. Native search now asks for answers up to 8,192 tokens (was 2,048–4,096) and waits long enough for them to arrive, and an answer the provider still cuts short is marked as cut (#6508).
  • The installation page is generated from docs/INSTALL.md, so the website
and the guide can no longer disagree; broken anchors and unsafe links fail the build (#6450).
  • codewhale config set refuses a value of the wrong type for a known setting
(a word for an on/off switch, text for a number, a choice outside the list) instead of saving it (#6568, thanks @dajiaohuang).
  • Receipts: /receipts, codewhale receipts [ID|--last] [--format md|json],
and GET /v1/threads/{id}/receipt (plus a per-turn form) list what a session did, one line per action: files changed with line counts, commands with exit codes, web and MCP calls, agents, approvals and who gave them, and failures. They also count what ran without asking and name the posture each turn ran under, read from the turn's own record. A call Codewhale blocked before it started (Auto-Review or guardian, a tool policy, a refused sandbox escalation, invalid input, a missing tool) is listed as blocked, with the reason, and is not counted as run or as ran without asking. Only Codewhale's own refusal text counts: an MCP server, a fetched page, or a program cannot make a call that ran read as blocked. A terminal session's receipt also lists the files a command changed in each turn, from the workspace snapshots taken before and after it (not ignored files or anything outside the workspace), with control characters in paths escaped so a file name cannot forge a receipt line. All three read the records Codewhale already keeps and say what those records do not hold (docs/RECEIPTS.md). audit.log is not that record: it logs security events, and it logs an approval only when one is requested, which under Full Access is almost never.
  • Approvals now record who decided: you, a session rule, or the posture. An
automatic approval used to be saved exactly like one you gave, and an app approval that expired was saved as your denial. GET /v1/approvals now returns decided_by.
  • Network audit lines now go to the same audit.log as every other audit
event ($CODEWHALE_HOME included), and test runs no longer append to your real one.
  • In the terminal UI, Auto-Review verdicts now reach audit.log, as
/permissions said they did; before, they were written only when CODEWHALE_TOOL_AUDIT_LOG was set. Headless exec and Runtime API sessions do not write them yet.
  • A turn that stops producing output now reports itself: the turn loop records
its phase and last progress, and an overdue phase surfaces instead of hanging silently until the stream idle timeout. A delegated agent's final result is never dropped when the host is busy, so a finished child no longer leaves a ghost Running row behind (#6184).
  • Git commands run by tools never stop to ask for a password, passphrase or
host-key confirmation inside the terminal, and git_fetch has a timeout (#6184).
  • A provider response that ends cleanly with no text and no tool call is
retried before the turn fails, and the failure names how many retries ran (#6310).
  • The context meter, the point where Codewhale makes room, preflight,
/context and turn receipts show one pressure number instead of disagreeing (#6407).
  • When Codewhale makes room, the note it leaves for the next turn is written in
its own words, under fixed headings: the objective, the user's corrections, permissions and limits, changed files, what is still running and the checks left. A message that quotes the note's opening words now stays in the conversation instead of being dropped. If the summary request itself is too large, older history is dropped but the previous note is kept, and making room stops rather than write a new note without it.
  • Continuing a conversation that is already open no longer adds a second
thread, and a fork keeps its own session file, so autosave on one side no longer leaves the other unloadable (#6406, thanks @gaord).
  • Upgrading Codewhale no longer turns off the built-in Computer Use. Each build
writes the built-in bundle to its own directory, so an upgrade used to present it as never reviewed and disabled. Now the review and enablement carry to the new build when its capabilities are unchanged. Changed capabilities show capabilities-changed and wait for review, and a revoked trust never carries (#6303).
  • "Allow for this conversation" records a grant for that tool and argument
class instead of switching the whole thread to Full Access, so the call you just approved is no longer failed by a Permissions change. An approval also survives a Permissions change that only widens what is allowed, grants end when a thread is archived or deleted, and web.run open grants are scoped by host. Full Access covers MCP tools that declare themselves destructive in every host, including codewhale exec (#3866).
  • web.run retries a refused page once with a browser user agent, and one
site's failure no longer fails the whole call or drops its search results.
  • Web search no longer stops when DuckDuckGo cannot be reached. After a
connection error, timeout or non-2xx answer, the search tries Bing before giving up, and the result says it used Bing. A DuckDuckGo that hangs no longer uses up the whole time budget: when Bing may follow, DuckDuckGo gets 60% of it and Bing the rest. This also covers the DuckDuckGo step after a configured API provider. A custom search_base_url still has no public fallback and keeps the full budget. Bing sees the query only after DuckDuckGo has failed or returned nothing it could read (#6746).
  • Hooks treat bash, Bash and exec_shell as one tool in tool_name
conditions, so the documented example fires.
  • macOS no longer reports Codewhale's ordinary heap as GPU (IOAccelerator)
memory.
  • Code highlighting uses less memory, and long transcripts, the pager and the
session picker do less work on the event loop; session previews load in the background (#6014).
  • The composer's send cue follows the draft, not a paste in progress
(#6397).
  • Voice status is localized, ASCII-mode markers are distinct, and the cursor
honours NO_COLOR (#5846).
  • /cache, /stash, /config, session prune, metrics --since and the
lane start/lane stop --json flags handle their edge cases.
  • Plain codewhale exec (no --auto) runs one Engine turn with the same
system prompt as every other run, so --json no longer changes the model's instructions. It offers no tools unless a flag grants them (--auto, --yolo, --allowed-tools, or resuming a session): --max-turns, --disallowed-tools, --append-system-prompt, --sandbox and --output-format stream-json no longer turn a chat call into a tool-using agent, and tool-only flags passed without a grant print a warning. A reply cut off at the provider's output limit is continued instead of failing the run, for at most 8 model steps unless --max-turns sets another limit. Breaking for scripts: the --json one-shot receipt no longer has stop_reason, adds the agent receipt's fields (prompt, tools, outcomes, status, termination_reason, error_category), and leaves out usage when the turn never settled (#6510).
  • codewhale review of a plain diff uses the same review prompt as
review --pr and prints the structured review as Markdown, or the model's prose when it ignores the JSON format (#6510).
  • A recursive rlm_query that runs out of rounds returns its last answer
marked [rlm_query incomplete: …] instead of an empty string, its model calls appear in the parent turn's record, and its history is no longer trimmed (#6511).
  • Starting without a network connection no longer drops images you attach to a
model that accepts them. The offline model list lagged behind providers and listed Claude and others as text-only; it can now only say a model takes images, never that it refuses them, and a provider that does refuse gets one resend without the image and a message saying so (#6396).
  • Model prices that a flat rate would get wrong now show as unknown after the
model list refreshes online, as they already did offline: DeepSeek (priced by time of day, or from Codewhale's reviewed table on hosted providers), Grok and MiniMax M3 (rates rise on long prompts), Xiaomi MiMo (pay-as-you-go and Token Plan keys look the same), GLM-5.3 and the Alibaba Model Studio plans (quota or credits, not per-token) and StepFun. DeepSeek's output limit stays at its published 384K instead of the refreshed 393,216, and the reasoning controls Codewhale records for Grok, MiniMax, Qwen 3.8 Max, Muse Spark and Step 3.5 (defaults, always-on thinking, extra effort tiers) survive the refresh. Committed corrections now fail at load if their provider or model is missing from the bundled seed; partial live refreshes may still omit those rows (#6396).
  • The offline model list is now generated from Models.dev instead of edited by
hand, so a fresh install without network sees the same limits, image support and reasoning controls as an online one. Claude, GPT-5.5, Kimi and several OpenRouter models now show image input offline, and a model whose catalog row offers an on/off switch next to its effort tiers keeps Off in /effort and Ctrl+T instead of rounding it up (#6396, #6612).
  • Cost estimates for GPT-5.6 and GPT-5.6 Sol use OpenAI's current rates of
$4 input, $0.40 cached input and $20 output per million tokens. They were still at the older $5, $0.50 and $30 (#6396).
  • codewhale integrations dsh now reads current DeepSeek Harness prerelease
versions such as 0.1.7-alpha.2 as semver. They were reported as offline and refused; they now show as stale-version (launchable once connected, clearly unverified). Only 0.1.0-rc.6 is still the verified version, and text that is not a version is still offline.
  • Rule and chain-segment source labels in the project instructions the model
receives (<project_rule source=...> and the scoped-instructions comments) are repo-relative instead of absolute. Moving or recasing a checkout no longer changes the pinned system prompt prefix or adds a spurious context update (#6739, thanks @asto18089).

Security

  • On Windows, a broad Node kill (Stop-Process -Name node,
Get-Process node | Stop-Process, taskkill /IM node.exe, and wrapped, aliased or nested-shell forms) is held by a built-in safety floor: it is refused in Full Access, Auto-Review and Never, and asks in other modes. With the npm launcher such a command ended this and every other npm-launched Codewhale session without cleanup. Stopping a server by PID or port still works, and the Windows installer and archives have no Node launcher (#6827, thanks @jayanthvee).
  • code_execution and js_execution now start their Python and Node
interpreters through the same permission-aware launcher as other commands, so the session's execution policy applies to them. Before, an approved call ran the interpreter directly, and its working directory was the only boundary (#6820, thanks @Guan0923).
  • A saved task without an auto_approve field is no longer treated as
auto-approved. Updates accept HTTPS URLs only from the release-host allow-list, and the npm release-asset check bounds every request.
  • Workspace profile and skill discovery, pasted-image and screenshot writes,
configuration redaction receipts and legacy configuration migration reject linked paths where they could redirect access outside their intended roots. Additional .codewhale writers use the existing confined filesystem helpers. The VS Code file opener checks the file's real path, and PowerShell temporary scripts receive unpredictable names and owner-only permissions.
  • Update development tooling to Undici 7.29.1 or newer for
GHSA-w293-vg96-wgc3, brace-expansion 1.1.21/5.0.12 for GHSA-q2hr-2g5m-vwhr, and the VS Code extension's markdown-it to 14.3.2 for GHSA-253c-mchw-3w2r.
  • Harden local runtime browser sessions, fleet SSH trust, agent continuation
ownership, task gate approval, plugin tool registration, bridge action tokens, and release metadata credential forwarding. Browser sessions recover across reloads and new tabs, and stream tickets retry after transient failures. Fleet SSH known-host checks support OpenSSH 7.x and later. SSH host configs using host_key_fingerprint must migrate to known_hosts with verified host keys; the unsupported fingerprint field is now refused when an SSH worker starts, before any connection is made, instead of being silently ignored.
  • Harden workspace instruction, note, and anchor file access with shared
no-follow reads and writes. Compaction loads pinned anchors only from trusted workspaces. Validate registry skill names before selecting cache paths.
  • Tighten approval, execution and endpoint boundaries. Computer control
consent and script calls need an exact decision a person gave on that call's own approval card. Automatic Git status and review reads go through the sanitized review command and stay pinned to the checked Git executable. Config backups, config dumps, MCP listings and notification payloads share one sensitive-key vocabulary; structured exports now also redact keys ending in key. Python a child model writes during a recursive rlm call is admitted round by round like an inline repl block, and Python kernels are discarded when permissions narrow. Gate commands and the cargo test runner start inside the session's shell sandbox. Mutable session artifacts are written and read through pinned session-relative paths. The stdio bridge's Runtime child chooses and reports its own loopback port.
  • Chat bridges (Feishu, Telegram, WeCom, Weixin) accept an approval decision
only from the person who started that turn, for the Runtime's current pending approval. After upgrading, approvals for turns that were already running are decided from the TUI, and WeCom /allow no longer takes remember.
  • More file and network paths are confined. A task or automation created by a
session without full shell access no longer inherits the host's shell default. The commit planner, oversized-paste backup and project harness notes do not read or write through links that leave the workspace. On Unix, audit and approval logs are created owner-only and are not opened through a link; Windows is unchanged. Lane ids must be plain names. A session file is refused when it records a different session id than its name. The updater does not follow a redirect from HTTPS to plain HTTP and stops reading a response larger than 512 MB.
  • Nothing is written through a .codewhale that is a link. The workflow run
journal no longer creates .codewhale/ or its ledger when it is opened, only when the first record is written, and reads and appends through the same confined helpers as other state. The sub-agent coordination lock refuses a linked .codewhale or state directory before it creates anything.
  • On Unix, the runtime log is created owner-only and is not opened through a
link; an existing log from an earlier version is tightened. The .reconcile.lock and current.json.lock lock files are created owner-only too.
  • Inline
     
    repl ` blocks in a reply now follow the same rules as the
code_execution tool. They never run in Plan mode or when code_execution is not on the turn's tool surface, and they are admitted like a code_execution call with the same code: before-tool hooks, disallowed-tool rules, Auto-Review (including its reviewer) and repository law all apply, then the same approval under the session's permission posture (a blocked, denied or unanswerable call skips them with a visible note). Only a fence that opens its own line counts, here and in the rlm tool's child rounds, so a reply that mentions a fence in prose runs nothing. An rlm(...) call from a fence gets a one-shot child answer rather than a child that runs its own code. The docs no longer describe the REPL kernel as sandboxed.
  • codewhale serve --mcp now exposes only read-only tools by default
(file_read, search). Tools that write files or run commands are neither listed nor run unless the operator sets require_approval = false in the MCP server config; a client's own approved flag no longer counts as approval. At startup the server names on stderr each configured tool it withholds and the setting that allows it.
  • A Bash entry in the disallowed tools now also blocks start_mcp_server
and start_registry_mcp_server, which launch local processes.
  • An MCP tool call whose connection closes before it answers is no longer
sent again on a new connection, since the server may already have run it. The same holds for a server error reply that mentions an expired or invalid session. The call reports an unknown outcome and the next call reconnects. Only a call the HTTP transport turned away for a stale session, before the server handled it, is still retried once.
  • Durable tasks and scheduled automations created by the agent no longer
carry more authority than the session that created them: requested auto_approve, trust_mode and allow_shell are capped at what that session holds, a task's workspace and an automation's directories must be reachable from the session, and a task's turn runs under the posture pinned when it was created instead of re-deriving one from the legacy bit or a legacy mode alias.
  • The approval card for creating a task or creating/updating an automation
now lists the requested trust mode, shell, auto-approve, mode and workspace as labeled lines.
  • "Approve for session" on a shell command now covers only a simple, known
command family (git status still covers git status -s). Compound, wrapper, interpreter, unrecognised and option-configured commands are granted as the exact command, and interact/wait calls on a running shell as the exact call.
  • Workflow plan approval flags shell, network and file-write capability for
the Bash, Web and File tool families regardless of letter case.
  • An agent session can no longer update, resume or run an automation whose
stored auto_approve, trust_mode or allow_shell is more than the session holds, unless the same update lowers those fields.
  • The approval summary every Runtime client receives for task and
automation create/update now names the requested trust mode, shell, auto-approve, mode and workspace, from the same fields the TUI card shows.
  • A shell session grant keeps its command family only when every option is a
known value-free option such as --release or --porcelain; other options, in any spelling, grant the exact command. Families whose arguments are what runs or is installed (go run, deno run, cargo run, make, git bisect, git submodule, package installs) grant the exact command.
  • Workflow plan approval recognises tool names in any quote style and with a
pattern suffix ('Web', File , Web(*)), and flags rlm, Git and GitHub, computer and browser control, and task/automation tools with the capabilities they carry.
  • Model-run code no longer inherits provider credentials or other secrets
from Codewhale's environment. Python code_execution (and every other Python runner), gate_run task gates, custom and completion verifier gates, persistent terminal sessions, and run_tests now start from the same scrubbed child environment as exec_shell; variables a gate declares are still passed through. gate_run also runs /bin/sh -c instead of a login shell, so profile files cannot re-export what was removed.
  • A workflow start with verify: true now needs approval even for a
read-only plan, because the completion gates run workspace build and test scripts.
  • Git commands no longer hand provider credentials to programs that a
workspace's git config can start (core.fsmonitor, hooks, filters) when they run through Codewhale's shared git helper: those start from the scrubbed environment plus the ssh agent, global config location and author identity. Sub-agent worktree provisioning and delivery do not use it yet. The read-only git_status, git_diff, history and verify tools also disable the workspace's fsmonitor, hooks and clean/process filters.
  • Language servers started for post-edit diagnostics, and every Python and
Node command constructor, start from the scrubbed child environment.
  • Proxy URLs passed to model-run children (HTTP_PROXY, HTTPS_PROXY,
ALL_PROXY, FTP_PROXY, CARGO_HTTP_PROXY) keep their host and port but lose any user:password@ part.
  • Behaviour change: the scrubbed child environment now keeps non-secret build
configuration — CARGO_* (except registry and token-like keys), RUSTFLAGS, RUST_LOG, RUST_BACKTRACE, VIRTUAL_ENV, JAVA_HOME, Go paths, NVM_*/NODE_OPTIONS and CA-bundle variables — so run_tests and gates keep the user's target dir, job limit and toolchain. Connection strings such as DATABASE_URL are still dropped; set them in the project's own config, or wrap the command in a script that sets them, when a build needs them.
  • Deny rules in the permission settings now hold for these ways of hiding a
command word until the shell runs it: a variable ($v), a substitution, a glob or brace list, escaped ANSI-C quoting, or a shell reading its script from a pipe, here-string or process substitution. Rules in a separate execpolicy.toml file are applied when the command runs, so there such a command is refused at run time rather than before an approval prompt. While any deny rule is configured in the permission settings, such a command is refused instead of being checked against text the shell will rewrite (an approval-always policy asks instead). This also applies to common forms such as source "$HOME/.cargo/env", eval "$(pyenv init -)" and `$PYTHON -m pytest`; name the command directly to run it. The same holds when the text does not parse cleanly (an unterminated quote, substitution or heredoc, a case inside $( … )) or when a parse budget runs out. Commands after if, then, while, do, ! and similar words, function f { … } bodies, and find -exec payloads are now checked like any other command.
  • Wrapper commands are unwrapped by their real option grammar, so
chroot DIR cmd, sudo --user NAME cmd and timeout -s SIG N cmd expose cmd (and any -c payload) to deny rules. Options missing from a wrapper's table are read both with and without a value, BSD and macOS options are covered (env -P, xargs -J, chroot -u), and more wrappers are recognized (caffeinate, arch, sandbox-exec, nsenter, unshare, runuser, flock, watch, wsl, noglob, nocorrect), including .exe spellings. Code passed as a string to trap, su -c, flock -c, script -c, watch, cmd /c and PowerShell -Command is checked as a command line.
  • (( … )) arithmetic no longer reads << as a heredoc that hides the lines
after it, and an xargs or find -exec replacement string used as the command or as shell code (xargs -I{} sh -c {}) counts as known only at run time.
  • task_shell_start and task gate commands are now checked against shell deny
and ask rules, like any other shell command.
  • An "approve for session" grant for a shell command covers only flag variants
of that command as written; a command with options before the subcommand, a chain, or nested code matches only an identical repeat.
  • The read-only shell surface for sub-agents rejects a word that starts with
an unquoted *, whose matches could be read as options; quote the pattern or give it a path prefix (src/*.rs).
  • A trusted or allow prefix such as git status no longer covers options
placed before the subcommand (git -c key=value status, git --exec-path=… status), nor a command that runs nested code or whose command word is resolved at run time. Such commands ask instead. Typed deny rules also match a path-qualified command word (/bin/rm).
  • Commands containing parentheses are no longer auto-approved as parallel
read-only commands, since some shells treat them as glob qualifiers or command substitution.
  • Sub-agent worktrees stay under the per-repo .codewhale-worktrees//
root: an absolute worktree_path is now held to the same containment as a relative one, with symlinks resolved before the check. Any start that asks for a worktree keeps the approval card, even for a read-only role. A worktree_base starting with - is refused, and git worktree add now receives its path and base after --.
  • Fleet and reasoning-router names must be plain file names (optionally
origin/name); a name with path separators or .. is refused before any file is looked up, through one shared check in the workflow crate.
  • pandoc_convert and image_ocr apply the same read deny-list and
credential-store checks as read, through one shared helper, and pandoc always runs with --sandbox. This needs pandoc 2.15 or newer; an older pandoc gets an upgrade message instead of a conversion.
  • Computer Use: screenshot and zoom output paths must be .png/.jpg/.jpeg
files inside the recordings directory, and zoom always crops the last captured raster instead of a caller-named source file.
  • Skill registry sync refuses an index key that is not a single path-safe
name before it is used as a cache directory, the same check an installed skill name already gets.
  • A project's .codewhale/config.toml can no longer set notes_path; it is
ignored with the other user-only keys. The note tool and /note refuse a notes file that is a symlink or whose directory resolves outside the workspace, and a note is flushed to disk before the tool reports success.
  • Diffs and shows that read repository content (codewhale review, the
git_diff/git_show tools, verification, delivery, task attempt records, @diff and the runtime API diff routes) share one flag set: no external diff, no textconv, and submodules compared by commit only, so a submodule's configured filters and diff drivers never run. Reads of the working tree (git_diff, git_show, git_blame, commit planning, verification, task attempt records, @diff/@git) also run through the hardened review command, so the repository's clean filters do not run either. git_blame and read-only shell git blame skip textconv, and read-only shell git reads neutralize the repository's clean filters.
  • git_fetch refuses refspecs that would write a local branch or tag: a
src:dst destination must be under refs/remotes/, and the two-word tag form is rejected.
  • Opening a URL on Windows goes through the URL protocol handler instead of
cmd /C start, so characters in the URL are not interpreted by the shell.
  • Skill downloads and the skills registry index are read through a streaming
size cap shared with the MCP HTTP transport, instead of buffering the whole body before checking its size.
  • Durable runtime thread, turn and item ids carry a full UUID instead of 32
random bits, so two records can no longer collide and overwrite each other.

Removed

  • Flags, settings and tool parameters that did nothing are gone
(#6516). --output-mode is hidden. It is still accepted, prints a warning, and is ignored.
  • The dispatcher no longer exports DEEPSEEK_ copies of its CODEWHALE_
variables. A DEEPSEEK_* variable you set yourself is still read.
  • lane start and workflow run --runtime vm|ci are rejected before a lane
is created. Older lane records for those runtimes still load.
  • The control socket's relaunch verb is removed; it always returned an
error.
  • The speech tool drops stream. stream=true used to fail; it is now
ignored, a complete audio file is written, and the result no longer carries "stream": false. The finance tool drops market, and a call that still passes it has it ignored.
  • [context].enabled, the seam-manager keys and
tui.terminal_probe_timeout_ms no longer load; old configs that carry them still start. The [workshop] docs now describe bounded spillover instead of a synthesis sub-agent.
  • About 2,650 lines of workflow code that nothing ran are deleted: the replay
executor, the review-repair loop and experimental search. The replay_diverged status they produced goes with them. The isolated Runtime Chat prompt and the legacy YOLO alias list each have one owner now (#6517).

Experience

  • Typing a first message with no model connected leaves a line in the
transcript that says the message was not sent and opens the provider picker.
  • First run picks a chat-capable Ollama model instead of the alphabetically
first tag, and says plainly when no model is available yet.
  • codewhale doctor leads and ends with one verdict and the next step, and
gives the update command for how you actually installed Codewhale. Command-line usage and errors say codewhale.
  • The approval card leads with a plain summary of the action, such as
"Run cargo test", and shows workspace-relative paths. The footer labels its values.
  • /status warns when the session's pinned model is no longer in its
provider's live model list (#6035).
  • Error messages give one true sentence and one next step. The TUI's English
copy says agent, Fleet, Permissions and Work consistently, help lists one summary per row, provider rows without a key say "needs key", /setup says what it sets up, and the pet tank rests when it is offline.
  • ACP clients can see the Permissions setting the server started with,
including Full Access and how to turn it on, but cannot select it (#6310).
  • GET /v1/commands tells clients each command's argument shape, so they do
not re-derive composer behaviour from the usage string (#6230).

Fleet and agents

  • codewhale fleet run --check runs every validation a real run would
and stops there: nothing is created, launched or spent.
  • A queued agent says why it is waiting, for example when launches are
throttled after provider rate limits, and when it stops waiting (#6277).
  • Read-only agents can run chained inspection commands (a leading cd,
&&, ;, echo separators, 2>/dev/null), and a refused command now names the rule it broke and what to do instead. Durable Fleet workers accept the same read-only commands as in-session agents. An agent's time budget starts when it launches, and a queued agent that never gets a slot says it never started (#6015).
  • Stopping an agent that writes files keeps and names the work it had
changed, as a budget stop already did (#5529).
  • workflow(fleet:) runs Fleets saved from the Fleet UI, and finds
workspace Fleets under .codewhale/fleets.
  • The runtime API can stop a delegated agent run from the desktop.
  • A finished agent's answer is no longer cut off. Its row and its completion
notification show the first sentence of its result instead of a ## Summary heading or its last tool, and opening the agent shows the whole result, or the full reason it stopped, even when no transcript was captured. Each agent also has one name: a workflow task's label or its dispatch name appears on the rows, the notification and the runtime API alike, never its internal id (#6565).
  • The mobile page shows the thread's agents: a strip naming each one, its
state, and what it is doing or what it found, rebuilt when the page reconnects. Sub-agent prompt caching now counts toward the session, including cache-write-only reports. PRICE and /cache show the parent, agents and combined hit rates, each labelled and weighted by all input tokens, including cache writes, and the footer cache N% still means this conversation's own requests (#6565).
  • The dock's GIT, FILES and NOTES views are real. GIT shows the branch and
where it stands against its upstream, the changes (with their paths one Enter away), linked worktrees and the last five commits, and it keeps updating during a turn while it is open. It says "not a git repository" only when that is true, reports failed status probes in the view and composer instead of claiming a clean tree, counts every unmerged path as a conflict, and only says there are more changed paths when the list is capped. FILES lists the files this session edited, including writes without diff receipts, and the files it read, with every unique path retained beyond the activity summary's twelve-path preview. FILES and its badge refresh from the current session even before TASKS opens. Edits with receipts show their size and open their diff. NOTES lists your /note notes. The git badge, the Git view and the model's git line now share one git status --porcelain=v2 call, so there are fewer git processes than before (#6565).
  • Background work tells you when it ends, even between refreshes. Batched
shell notices cover explicitly backgrounded or detached commands; foreground results and old completions from before this TUI session stay quiet. Switching sessions does not repeat a completion notice. Batched notices count completed, failed and stopped work separately; shell commands, task prompts and errors stay in the app, away from lock-screen notifications. A running dev server no longer holds the notice back. Failed, killed and timed-out shells retain their outcomes, and the last eight finished shells stay listed per session. Finished tasks no longer look live or reopen the dock. Background labels follow the UI language, long agent previews keep their full-result pointer, and the quiet indicator uses the engine's clock and limit without marking an active tool as quiet (#6565).

Plugins

  • Codewhale no longer appends plugin recommendations to your messages to the
model. Suggestions appear in one place, follow one switch and one budget, and never advertise built-in plugins, generic words or plugins for another operating system.
  • /plugin dismissals lists the plugins suggestions skip, and
/plugin dismissals reset [] brings them back.
  • Tools from reviewed plugins that declare themselves read-only no longer ask
for approval on every call.
  • The bundled Computer Use plugin is 0.12.0, the published upstream release
8435692 (#6303, #5856). On macOS the agent uses its own pointer and never drives your cursor. app_script refuses shell escapes. Clicks on irreversible actions such as pay, send or delete need confirmation. Consent decisions cannot ride inside run_actions or trajectory replay, and trajectories redact secure fields. Also new: a shared-computer control lease that pauses agent input while a person drives, and a browser attach mode for a shared Chromium. The vendored README no longer claims delegated agents share the Computer Use session; they never receive its tools.
  • The bundled first-party catalog pins marketplace revision
ae3dd2255a9a266365c6125a084f511eb26bc04d. It lists Computer Use 0.12.0 and adds Codewhale for Chrome (Chromewhale) 0.3.0 as a developer preview: you load its Chrome extension unpacked, and like every catalog plugin it installs disabled and untrusted until you review it.

Release reliability

  • Upload the complete release into a private draft, verify every asset's size
and SHA-256 digest, then publish. An interrupted retry cannot reuse stale same-size bytes. CNB and GHCR version tags follow canonical publication.
  • Ubuntu Lighthouse bootstrap requires trusted SSH source CIDRs or an explicit
public-SSH opt-in before changing the host; malformed IPv6 and broad default networks are refused.

CI

  • State-touching command and session tests seal HOME, USERPROFILE and
CODEWHALE_HOME onto temporary directories. Unsealed session, snapshot, artifact, composer-history, audit and built-in-plugin storage resolves into an isolated test root; unrelated worker threads cannot borrow another test's home seal. A child-process sentinel checks that known command-dispatch and session cases leave their ambient home unchanged.
  • Fork pull requests stay under the macOS runner limit and the Actions cache
stays under its cap.
  • Release candidates and releases share one parity gate, and a release tag
without a release-candidate receipt is refused.
  • Budget ratchets block same-repository pull requests unless the pull request
updates the budget with a receipt.
  • A CodeQL advanced-setup workflow is ready for when the repository switches
from default setup.

Contributors

  • @AdityaVG13 — supplied the discovery-cache priority correction adapted from #6393, keeping highest-ranked tools through cache overflow. Its broader echo and fork-inheritance draft remains open.
  • @LIghtJUNction — added reviewed plugin-provided AI routes with host-owned OAuth PKCE credentials and request-time authority checks (#6805).
Contributors and issue reporters are credited below, including @cenab's provider report.
  • @Guan0923 — accepted case-insensitive HTTP(S) schemes in config doctor without rewriting the configured URL (#6819), and routed the Python and JavaScript execution tools through the session's execution policy (#6820).
  • @harryvgiunta — added Yolo-Auto as a bundled OpenAI-compatible host, starting on the vendor's recommended qwen3.8-flash model (#6408).
  • @asto18089 — contributed the integrated runtime liveness, context, search, JavaScript execution, stopship scout and pet repairs, preserving their original contributor commits (#6799); made context rule and chain-segment source labels repository-relative (#6739).
  • @qiuYliangM — made provider-bound project instruction and constitution labels stable across directory moves and kept their absolute paths in operator reports (#6799).
  • @zhuowp — supplied the process-scoped PowerShell execution-policy repair adapted for Codewhale, preserving machine and user Group Policy precedence (#6745).
  • @Andrea-Bruno — designed the Superfast Decision Gate and contributed its off-by-default shadow classifier (#6604, #6603).
  • @gaord — let a client fork a thread at a named turn (#6580), let undo roll back files for the turn it is undoing (#6483), stopped resume and fork from duplicating threads and sessions (#6406), exposed user-defined provider routes to native clients (#6404), and kept a fork going when a turn lost its tool call (#6664).
  • @Lstarsky0 — moved the docs/work, legal, digest and FAQ pages onto the dictionary spine (#6405, #6417, #6499, #6574), tightened the Chinese-branching ceiling to 18 (#6403), and made Fleet publish without a two-link window (#6431). Also moved the constitution page onto the dictionary spine and kept its install link in the selected locale (#6733), wrapped diff and tool output at grapheme boundaries (#6829), and translated the context inspector rows twelve packs still shipped in English (#6831). Translated the session-only note after model switches across the complete TUI locale packs (#6875). Translated the route-save receipts (#6884) and /workspace replies (#6885), brought the Operate descriptions in fourteen packs up to date (#6886), restored lost accents in pt-BR, es-419 and ca (#6888), let semantic_truncate cut between Han and kana (#6887), and removed the unused session-only route-save choice (#6882).
  • @aboimpinto — restored a green Linux full-workspace test gate without loosening any test, twice (#6581, #6666). Completed the seventeen-command portable session group, including /structcopy (#6793).
  • @dajiaohuang — codewhale config set checks a known setting's value against its schema type before saving it (#6568).
  • @jayanthvee — reported and diagnosed that killing the npm launcher's node.exe ends Windows sessions without cleanup, with reproductions and fix directions (#6827).
  • @cenab — requested the Tsubasa provider row and supplied its endpoint, key and model values (#6695).
  • @BX166 — reported the AICraft provider row missing its key console, docs link and guidance, and supplied the values (#6616).
  • @Water-Run — ingested namespaced model-only catalog entries so models present only in the canonical models map reach the offering list (#6400), and retired the blanket dead-code allowance with its unused feature stages, tightening the budget to match (#6402).
  • @wuisabel-gif — designed the tool_call_after execution-receipt contract and its tests on a reference branch, which landed re-implemented on the current hook seam (#6689, #6713).
  • @SparkofSpike — let making room survive a provider request-body limit (HTTP 413) by shrinking, then replacing, inline images for that one summary pass (#6642). Translated seventeen Tier-2 guides and thirteen developer and internal docs into Simplified Chinese, and connected the localized documentation (#6662, #6663); added regression coverage for rejecting unknown website locales before dictionary lookup (#6786); made the pinned prompt header follow the viewport's turn and jump on click (#6830).
See CHANGELOG.md for full notes and docs/CHANGELOG_ARCHIVE.md for older releases.

Key Features of DeepSeek TUI

  • Terminal Native Workflow
    DeepSeek TUI operates entirely within the terminal, allowing developers to work without switching between browser windows or external interfaces.

  • AI Assisted Coding
    The assistant can read and edit files, generate code, explain logic, and help automate development tasks.

  • Shell Command Execution
    It supports running terminal commands directly through the interface, streamlining development workflows.

  • Git Integration
    Developers can manage repositories, review changes, and handle version control related tasks from inside the tool.

  • Multiple Work Modes
    DeepSeek TUI includes modes like Plan, Agent, and YOLO, offering different levels of automation and approval control.

  • Large Context Handling
    The tool is built around DeepSeek V4 capabilities, including support for extremely large context windows that help with understanding bigger codebases.

User Experience

DeepSeek TUI is designed for developers comfortable with terminal environments. The interface is keyboard focused and efficient, though beginners may need time to adapt.

The workflow feels closer to tools like Claude Code or Codex style assistants rather than traditional chat applications. Community feedback on Reddit and GitHub discussions highlights its speed and practical coding workflow.

Performance and Compatibility

Because it is written in Rust, DeepSeek TUI is lightweight and responsive. It supports Linux, macOS, and Windows, with installation available through npm, Cargo, or direct binaries.

Performance depends heavily on the connected DeepSeek models and API configuration, but the local interface itself remains fast and efficient.

Pros

  • Fast terminal native workflow

  • AI powered coding and automation

  • Lightweight Rust based architecture

  • Supports file editing and shell execution

  • Open source and actively developed

Cons

  • Requires familiarity with terminal workflows

  • Depends on external AI APIs

  • Advanced automation modes may feel risky for inexperienced users

DeepSeek TUI is ideal for developers, DevOps engineers, and terminal focused power users who want AI assistance integrated directly into their command line workflow. It is especially attractive for users seeking a lightweight alternative to browser based AI coding tools.

DeepSeek TUI combines AI coding assistance with the efficiency of terminal workflows. Its fast performance, flexible automation, and developer focused design make it one of the most interesting open source AI terminal tools currently gaining traction.

Codewhale v0.10.1 (Formerly DeepSeek TUI)
Free
Software Informations:
Developer:

Operating System:
Windows / macOS / Linux
Date Added:
2026-10-08T16:03:51.343Z