← Back to Whittl

WHITTL RELEASE NOTES

v2.6.1, v2.6.0 and v2.5.0, plus the v2.4 series

Jump to: v2.6.1 (October 2026) · v2.6.0 (October 2026) · v2.5.0 (September 2026) · v2.4.1 (May 2026) · v2.4.0 (April 2026)


v2.6.1: Two fixes

October 2026 · Patch release on top of v2.6.0

Two fixes, both found the day v2.6.0 shipped. If you have v2.6.0, Help > Check for Updates installs this.

◆

NO MORE SECOND WINDOW

In the installed version of Whittl, working on a project that has tests could open a second Whittl window, and the AI's progress in the first one would stop for up to a minute at a time. Whittl was starting a copy of itself where it meant to start Python to run your tests. It had done this since the test gate arrived in v2.5.0. Running Whittl from source was not affected.

◆

THE AI REMEMBERS ITS ANSWERS

When the AI answered a question in the chat, for example by listing ideas for your app, and you then asked it to go ahead ("do all of them"), it could not see the answer it had just given and asked what you meant. It now can, on every backend.


Whittl v2.6.0

v2.6.0: Plugins, and one agent for every model

October 2026 · Major release

Whittl 2.6.0 does two big things. You can now add to Whittl itself: a tool the AI can call, a tab, a readout, a menu item. And every model, on every backend, now works on your project the way the best ones do: reading, editing, running and checking its own work. Around those two, a month of using Whittl on real projects every day turned up a long list of smaller fixes, all listed below.


◆

PLUGINS

A plugin is a folder with a small manifest and a Python file. It can add a tool the AI calls while it works, a tab beside Code, a status bar readout, a dialog or a menu item under Edit > Plugins, a skill, or code that runs when a generation starts or ends, a project opens, or you run your app. Whittl's own Assets, Archives, Terminal and Help tabs are plugins built the same way, and so is the new context gauge in the status bar.


◆

ONE AGENT FOR EVERY MODEL

Whittl used to decide how much a model could do by which backend it was on. Now every backend gets the same tools, and what a model is given (its tools, its round budget, whether it keeps a session between your messages) depends on what that model can do.


◆

YOUR WORK IS SAFE


◆

PICTURES IN THE CHAT

Attach several images to one message (drop them, or paste), see each as a thumbnail before you send, and click any picture in the chat to see it full size. Pictures survive a restart, and they reach the model on every turn and every backend. Models that cannot read images get a description from one that can. The AI can hand you pictures too: a render of the app it built. You can also set your own name and picture for your messages in Preferences > Chat Appearance.


◆

KNOW WHAT YOU ARE PAYING


◆

NEW MODELS AND SKILLS


◆

EVERYTHING ELSE IN v2.6.0

The sections above are the headline. Below is the rest of what changed, grouped by area. Most of it was found by using Whittl on real projects every day and fixing what broke.

The agent loop

Auto-fix

Chat and editor

Models and providers

Web and files

Projects and builds

Interface and first run


◆

UPGRADING FROM v2.5.0


Whittl v2.5.0 - sharper with every cut

v2.5.0 — Sharper with every cut

September 2026 · Major release

v2.5.0 is about one thing: the AI does not get stuck anymore. When it does not know, it can go and find out. When it makes a mistake, the mistake becomes a rule. And it does not get to say "done" until the tests agree. Three headline features carry that, and a long tail of reliability work found by using Whittl on real projects carries the rest.


◆

WEB RESEARCH

The AI can now search the web and read pages while it works. When a model hits an API it does not know, a library quirk, or an error message it has never seen, it looks it up instead of guessing. The default backend is DuckDuckGo, so there is no API key to set up. Searches and page reads appear in the chat as they happen, and a per-session budget keeps a curious model from running away with it. Available in Agent Mode.


◆

AUTO-LEARNED SKILLS

Every time an auto-fix resolves a real error, Whittl records what was wrong and what fixed it, with a short code example, and feeds that back to every model on every project. Duplicates are counted instead of repeated, entries that stop being useful are retired, and patterns that keep proving themselves are promoted into Whittl's permanent skill library. The longer you use it, the better every model gets at building Python desktop apps.


◆

TEST GATE

If your project has tests, Whittl runs them after the AI says it is finished and before you see the result, and reports anything the change broke in chat with a report the AI can act on. Tests that were already failing before the change do not count against it. You see the state on the status bar, and the AI can no longer skip the step under pressure. Automatic re-prompting inside the same generation is the planned v2.5.x follow-up.


◆

THE TOP TWENTY

  1. Web research. The AI can search the web and read pages while it works. No API key needed; searches show in chat as they happen, with a per-session budget. Agent Mode.
  2. Auto-learned skills. Every real auto-fix becomes a teachable pattern with a code example, fed back to every model. Duplicates are counted, stale entries retire, proven patterns get promoted into the permanent skill library.
  3. Test gate. If your project has tests, they run after the AI says it is done and before you see the result. Anything the change broke is reported in chat with a fix-ready report; pre-existing failures do not count.
  4. Auto-fix that finishes. A landed fix re-runs your app on its own and reports honestly: fixed, stopped, or unverified. No more "Testing fix..." forever, and Stop means stop.
  5. Auto-fix that verifies its claims. A fix for a missing-attribute error is checked against the real API before it is called fixed; if the replacement does not exist, the AI is re-prompted with the actual list.
  6. Auto-fix rules that understand Python. The pre-launch rule pass works from the language's structure instead of pattern-matching text, so it no longer rewrites valid code such as format templates, scoped imports or comments.
  7. Edits made outside Whittl are kept. Change a project file in another editor while Whittl is open and Play picks up your version instead of overwriting it.
  8. Big projects, fast Play. Play on a large project is near-instant after the first run, the first run is far faster, and project switching is quicker. The editor handles very large files without freezing.
  9. Cheaper auto-fix on huge projects. The AI reads only the code it needs instead of receiving the whole project every round: faster, and a fraction of the cost.
  10. Long-file surgical edits. Files past a few hundred lines are edited function by function instead of regenerated, at roughly a tenth of the cost; short files get one clean rewrite instead of a dozen partial edits.
  11. Every model, one engine. All five backends share one streaming, continuation and fallback engine. A long answer that hits a model's output limit is resumed instead of truncated, on every backend.
  12. Model-aware requests and the Claude 5 family. Whittl adapts each request to what the model supports, so the newest models are never silently downgraded, and a thinking-depth setting works across backends.
  13. Warm prompt caches on OpenRouter. Replies stay fast and cheap on big projects because Whittl keeps each session on the provider that already holds its cache.
  14. Review-only mode and deep review. Ask for a review and you get a review, not an unrequested rewrite, including on multi-file projects.
  15. Glob and multi-edit tools. Pattern-based file discovery and several edits in one call round out the agentic toolset.
  16. Claude Code skills, translated. Skills written for Claude Code are read from their usual folders and their tool names translated to Whittl's, so the guidance is right for the tool the AI actually has.
  17. New bundled skills. UI design quality, media playback, charting, plus file-format skills for images, Word, PDF and spreadsheets, and a hardened PySide6 WebEngine section.
  18. Linux, first-class. A tkinter-complete bundled Python on both platforms, a faster AppImage launch, and in-app builds that produce smaller executables that actually start.
  19. Project hygiene. Archives live on disk, saves reconcile the folder, build output is never treated as source, renames move the folder cleanly, and the install cache checks the runtime it claims to know.
  20. Updater hardening. Every connection Whittl makes itself now verifies with its own certificate bundle, which is what fixes the Windows update check going forward.

◆

EVERYTHING ELSE IN v2.5.0

The twenty items above are the headline. Below is the rest of what changed, grouped by area. Most of it was found by using Whittl on real projects for four months and fixing what broke.

Auto-fix

The agentic tool loop

Backends and models

Performance

Projects, files and builds

Platform and first run

Interface


◆

UPGRADING FROM v2.4.x


v2.4.1 — Auto-fix Stale Rule Patch

May 2026 · Patch release on top of v2.4.0

v2.4.1 is a fast follow-up patching a specific failure mode that surfaced in the first hours of post-release usage: an auto-fix rule based on outdated PySide6 5.x knowledge was reverting AI-generated imports on every Run, creating infinite fix-and-revert spirals on any project using PySide6.QtWebEngineCore classes. Plus a defensive improvement to the file-state merge logic that hardens against a class of similar bugs.


◆

STALE WEBENGINE CLASS-LOCATION AUTOFIX RULE (fixed)

Field repro on a browser project running on PySide6 6.11.0: every press of the Run button produced this log signature, regardless of which model generated the project:

[AUTO-FIX] Moved QWebEnginePage from PySide6.QtWebEngineCore to PySide6.QtWebEngineWidgets
[RUN] Live error detected: cannot import name 'QWebEnginePage' from 'PySide6.QtWebEngineWidgets'
    Did you mean: 'QtWebEngineCore'?

The AI correctly imported QWebEnginePage from PySide6.QtWebEngineCore — its real location in PySide6 6.0 and later. Whittl's add_missing_imports autofix looked up QWebEnginePage in its internal class-to-module mapping, found it pointing at QtWebEngineWidgets (the PySide6 5.x location), and "moved" the import — silently breaking it. The AI's next auto-fix round restored the correct import; Whittl's autofix reverted it again on the next Run. The user could not break out of the loop without manually editing the file outside of Whittl.

Root cause: core/autofix_rules.py had four WebEngine classes hardcoded to QtWebEngineWidgets. In PySide6 6.0+ only QWebEngineView stayed in QtWebEngineWidgets — everything else (Page, Profile, Settings, History, CookieStore, Script, DownloadRequest, plus 16 more) moved to QtWebEngineCore. The rule was written against PySide6 5.x and never updated when the library reshuffled its module layout. Fix: corrected the mapping for the four affected classes and added 19 more QWebEngine* classes to QtWebEngineCore. Pinned by the 321 existing autofix tests.

Broader pattern worth flagging: frontier models often know newer APIs than Whittl's static rules do. The usual assumption that "Whittl's deterministic rules know better than the probabilistic AI" inverts in cases like this. A v2.5 candidate is being tracked for stale-rule detection.


◆

PREVIEW PANEL MERGE-BACK COULD CLOBBER AI EDITS (defensive fix)

Discovered during investigation of the WebEngine spiral above. The merge-back logic in preview_panel.get_all_files() unconditionally trusted the editor's get_code() output over the in-memory file dictionary on every read. Under tight timing (AI tool edit → signal dispatch → set_code() → Qt deferred layout pending → user clicks Run), the editor's get_code() could return a previous-frame value that overwrote the AI's fresh content before Run wrote files to disk.

Fix: set_code() now calls document().setModified(False) after each programmatic write. get_all_files() only merges editor content back into the file dict when document().isModified() is true (the user typed since the last set_code()). Otherwise it trusts the file dict, which already holds the latest AI / autofix output. User typing still wins; programmatic writes no longer get clobbered by stale display state.

This wasn't the cause of the WebEngine spiral — that was the autofix rule above — but it's a real defensive improvement.


◆

UPGRADING FROM v2.4.0


v2.4.0 — The Whittl Layer + In-App Updates

April 2026 · Major release


◆

HEADLINE: IN-APP AUTO-UPDATER

v2.3 and earlier dumped users at a browser download URL and expected them to find the installer, run it, click past SmartScreen, and restart manually. v2.4 replaces that with a proper in-app "Download → Restart to install" flow with SHA-256 verification and silent install handoff.

What changed

This is the first Whittl release that genuinely auto-updates itself. Subsequent versions ship through the same flow.


◆

THE WHITTL LAYER

Every other AI coding tool is a chat window over someone else's model. v2.4 formalizes what Whittl actually is: the knowledge layer that sits between you and the AI — 75+ auto-fix rules, a curated skills library, oscillation guards, hard round caps, tool executors, and validators. The model writes the code; Whittl makes the model better at building Python desktop apps.

This is positioning more than code — the components all existed in v2.3 — but v2.4 ships a versioned whittl_layer.json manifest pinning the layer's components and their versions. Foundation for v2.5's Whittl Commons: a download channel for community-sourced rule bundles that update independently of the binary.


◆

REWRITTEN HELP TAB + FULL DOCS SITE

The v2.3 Help tab was a plain-text QTextEdit skeleton with 5 sparse sections nobody read. v2.4 rewrites it as a proper QTextBrowser with:

Plus a brand-new full documentation site at lyndeneftoda.com/docs/ — from zero pages at v2.3 ship to 45 pages totalling ~62K words. Covers Getting Started (3 pages), Features (15), Backends (6), Workflows (9), Reference (8), and Troubleshooting (3). Built with MkDocs + Material, custom-styled to match the retro brand palette (VT323 + Press Start 2P, navy/cream/tan/copper).


◆

MID-GENERATION QUESTION TOOL

The AI can now ask you structured design questions mid-generation when it has to guess at a decision — SQLite vs JSON, bottom tabs vs nav drawer, local vs cloud. Better than guessing wrong and regenerating.


◆

CONTENT-AWARE SKILL INJECTION + LAZY LOADING

Skills can now declare YAML frontmatter that gates injection on the active project's actual imports and framework target. Skills without frontmatter keep today's always-inject behavior — no migration needed for existing libraries.


◆

CLAUDE-COMPATIBLE SKILL PATHS

SkillManager now discovers skills from three paths in priority order:

Whittl-wins dedupe protects vetted defaults — a random ~/.claude/skills/flet-mobile.md can't silently override Whittl's shipped guidance. Source-aware log line: [SKILLS] Injected 4200 chars (2800 whittl, 1400 claude-user) makes it visible when foreign skills are inflating the prompt. New Preferences toggle to disable Claude paths entirely if you want token cost bounded.


◆

edit_function — PER-FUNCTION SURGICAL EDITING

For projects with 500+ line files, full regen costs $0.05+ per turn and burns 30-60 seconds. v2.4 adds a third edit tier between surgical-diff and full-regen: per-function rewriter. The AI specifies {function_name, replacement_body}; Whittl uses AST to locate the function, replace the body, and preserve indentation across the file.


◆

BUG FIXES & POLISH

Field-driven fixes from real stress-test sessions:


◆

UPGRADING FROM v2.3


BACK TO WHITTL