Repository navigation
Releases: nibor1896/Crow
Release list
v4.3.0: a stop reaches the engine, error frames, warm new chats
A stop during a long prompt now reaches the engine, a failure in the middle of an answer shows its reason, and Flash-Next starts a new chat warm when its system prompt is the same. With crow-nest v0.15.0, measured on the Linux box: a new chat prefills 27 ids in 188 ms instead of about 6,800 in about 8.8 s, and a stop frees the engine at the next 2,048-token chunk. The Windows packages followed the same day; on Windows Crow keeps the crow-nest engine v0.13.2 (Known limitations).
Added
- Flash-Next starts a new chat warm when its head is the same (2026-10-22, owner decision).
manifests/stack.jsonpointflash-nextsetsCROW_PREFIX_ANCHOR=1, crow-nest's head anchor (crow-nestdocs/architecture.md7.17): the engine keeps the state at the first user turn, so a new chat with the same system prompt and tools rolls back onto it instead of prefilling everything. Live on the Linux box: the new chat prefilled 27 ids in 188 ms instead of about 6,800 in about 8.8 s. Needs crow-nest v0.15.0 or later; an older serve (v0.14.0) logs that it reads no such variable and runs as before.tools/check_stack.py12 of 12,tools/check_operating_point.py10 of 10. - Linux assets for 4.2.0 (2026-10-22). The v4.2.0 release carries
CrowSetup-linux-x64(5,382,480 B, sha25661712f57…) andcrow-4.2.0-linux-x64.tar.gz(60,394,008 B, sha256d8aad794…), the first Linux assets since v3.1.0. Built on the Linux box from the v4.2.0 tree:sd-serverbySD_RELEASE=1 tools/build-sd-server.sh(stable-diffusion.cpp2f88688, CUDA 13.3), the package bytools/pack-release.sh(44 files, no NVIDIA file, privacy gate clean), the installer byinstaller/build.sh(--selftest12 checks OK, privacy gate clean). It installs crow-nest engine v0.14.0 (crow-nest-engine-0.14.0-linux-x64.tar.gz, attached to crow-nest's v0.14.0 release); Windows keeps the v0.13.2 pin.docs/user-guide/install.mddownloads it instead of building it.
Fixed
- A local serve's failure after its first byte reaches the turn (2026-10-22,
9e7358d). When crow-nest refuses a VRAM allocation inside a request after its 200 head, it sends oneerrorframe and[DONE].stream_replyread that frame for remote endpoints only (#216), so the round ended on[DONE]with the frame skipped and its reason never shown. The local server's frame now raisesHTTP <code> mid-stream from <model>: <reason>like a remote one, in both shapes: the object crow-nest sends since its error-object fix (crow-nestb4231f4) and the bare string of an older serve. The judge kept only the status of a bare-string refusal; it keeps the reason now. 5 cases inTheLocalErrorFrameIsReadTests, 4 of them red on the old code; the whole suite 3,251 OK (146 skipped). Not checked live: no allocation failure was provoked against a running serve. - A stop during a long prompt reaches the engine (2026-10-22,
c635b32). While serve prefills it writes nothing, so the reader thread sits in a read and the stop'sresp.close()waited for its lock: measured on Linux against a server that sent the SSE head and then nothing, the close returned after 11.0 s and the server never saw the client leave. serve went on prefilling the whole prompt while the next request waited. The stop now shuts the socket down first (_hang_up): the close returns at once and the server sees the FIN at 1.0 s. crow-nest2593c4aends its prefill at the next chunk boundary on that FIN and keeps the state there, so the next request resumes instead of starting over. Linux only on the engine side; on Windows the read timeout still ends the read. New caseAStopHangsUpDuringASilentPrefillTests, red on the old code;test_the_read_timeout_is_what_bounds_an_aborted_readernow asserts the immediate abort on Linux. Whole suite 3,247 OK (146 skipped). Not checked in the window. - The Linux release packer no longer refuses the engine API URL (2026-10-22).
tools/pack-release.shrefused the 4.2.0 package oncli/crow_core.py'sENGINE_RELEASES_API(https://api.github.com/repos/<owner>/crow-nest/..., added with #367): the public-namespace context intools/repack-release.pynamedgithub.com/<owner>but not the REST API'sgithub.com/repos/<owner>. It does now; the new case intools/test_repack_release.pyis red without the change, 50 tests OK with it.
Measured
CrowSetup-linux-x64installs and runs Flash-Next end to end (2026-10-22, robin's live check on the Linux box, RTX 5090). Downloaded from the v4.2.0 release withcurllike a new user, run with its window, pointflash-next, default install root. The Flash-Next files already under<root>/models(copied from the Windows install) were verified by sha256 and not downloaded again; Crow 4.2.0, crow-nest engine v0.14.0, NVRTC andwhisper-smallwere fetched. Crow then served from<root>/bin/serve(sha256d1e3ac42…, the one in the engine package'sMANIFEST.json): a multi-step coding task with tool calls ran to the end, its 9 unittest cases passed, and every number in its report reproduced on a re-run.
Known limitations
- Windows keeps the crow-nest engine v0.13.2 (2026-10-22):
CrowSetup.exeand Settings → About install the v0.13.2 pin ofmanifests/stack.json, which reads noCROW_PREFIX_ANCHORand runs as before, so the warm new chat is Linux only for now. The Windows packages were attached on 2026-10-22, and the release has been marked latest since then. - Setup gives no feedback in two places (2026-10-22, the same live check). After the refusal of an install root that held other files, Retry did nothing until Pause and Resume; and while the Crow step prepared the venv and
whisper-small, the window showed no progress. Neither event reachessetup/setup.log, which only records state-file errors (#338). - Settings → About offers no engine update on Linux, as before: the updater asks for
crow-nest-engine-<v>-linux-x64.zip, crow-nest packs.tar.gz(crow-nest CHANGELOG, v0.13.2).
Install / upgrade
Windows, CrowSetup (installs Crow 4.3.0 and crow-nest engine v0.13.2; assets added 2026-10-22)
irm https://github.com/nibor1896/Crow/releases/latest/download/CrowSetup.exe -OutFile CrowSetup.exe; .\CrowSetup.exeWindows, script
irm https://raw.githubusercontent.com/nibor1896/Crow/main/install.ps1 | iexLinux, one window (Crow, the crow-nest engine v0.15.0 and the operating points you pick; needs gtk3, webkit2gtk-4.1, python-gobject)
curl -fLO https://github.com/nibor1896/Crow/releases/download/v4.3.0/CrowSetup-linux-x64 && chmod +x CrowSetup-linux-x64 && ./CrowSetup-linux-x64Linux, from a checkout
git fetch --tags && git checkout v4.3.0 && bash install.shIssues
None: every item names its commit.
v4.2.0
A usage dashboard opens the first start of each day and heads the Settings sheet: a year of tokens per day as a grid, the last 30 days per model (#406). The title bar is slimmer and the turn statistics fold behind one line.
Added
- A usage dashboard on the first start of the day (#406,
dbafb60,a6a7804,55b820a, 2026-10-18). On the first start of each day (a day starts at 04:00) the window comes up on an empty chat with the dashboard under the greeting and above the composer; the first message you send removes it. The same view is the new first page of Settings, Dashboard, with the switch "Show the dashboard on the first start of each day" (dashboard_daily, on by default). It shows an activity grid of the last 12 months (53 weeks, Monday on top, one square per day shaded by its tokens, a tooltip naming the day and its tokens), the tokens of the last 12 months, the tokens of the last 30 days, the current streak with the longest, the active days, and a table of tokens per model for the last 30 days (Model, Days, Tokens, Share of tokens). Tokens are input plus output. Every finished turn adds one line tousage.jsonlin Crow's state folder, whichever provider served it; nothing leaves the machine. The history starts with this build: older chats are not backfilled, because their saved figures carry no date and no model per turn. The phone's Settings show the same page. Measured 2026-10-18 (Windows 11, Python 3.13, generated ledger): a line is about 416 bytes, and the summary of 20,000 lines (8.3 MB) takes 63.9 ms, best of 5, against the ticket's bar of 200 ms. Checked live.
Changed
- A slimmer title bar (
7692995, 2026-10-18). The bar is 36 px high instead of 46, its buttons 28 px with 14 px icons, and a toggle that is on shows it by its colour alone, without a tile behind it. The chat head, the session list and the composer have less padding; the type size is unchanged. The phone keeps its 32 px buttons. Checked live. - Turn statistics folded by default (
7692995, 2026-10-18). After a turn, one faint line beside the copy button gives the decode rate, the decoded tokens and the wait; a click unfolds the full strip (Decode, Prefill, Cache, Rounds, Waited, Delegated). A cut-off turn still says so without unfolding. Checked live.
Fixed
- The trace label and its count sit on one baseline (
72329a7, 2026-10-18). "Trace" and "31 tool calls · 33 rounds" were centred as two boxes of different font and size, so their text sat at different heights; the head now aligns them on the baseline.
Install / upgrade
Windows, CrowSetup (installs Crow 4.2.0 and crow-nest engine v0.13.2):
irm https://github.com/nibor1896/Crow/releases/latest/download/CrowSetup.exe -OutFile CrowSetup.exe; .\CrowSetup.exeWindows, script:
irm https://raw.githubusercontent.com/nibor1896/Crow/main/install.ps1 | iexLinux:
curl -fsSL https://raw.githubusercontent.com/nibor1896/Crow/main/install.sh | bashLinux, one window (assets added 2026-10-22):
curl -fLO https://github.com/nibor1896/Crow/releases/download/v4.2.0/CrowSetup-linux-x64; chmod +x CrowSetup-linux-x64; ./CrowSetup-linux-x64It installs crow-4.2.0-linux-x64.tar.gz from this release and the crow-nest engine v0.14.0 for Linux; it needs gtk3, webkit2gtk-4.1, python-gobject and glibc 2.34+.
An installed Crow updates from Settings → About; the engine stays crow-nest v0.13.2.
Dashboard: it appears on the first start of each day (a day starts at 04:00) and is the first page of Settings, where "Show the dashboard on the first start of each day" switches the daily view off. The history starts with this version; it is kept in usage.jsonl in Crow's state folder (%LOCALAPPDATA%\Crow on Windows, ~/.local/state/crow on Linux) and never leaves the machine.
Issues
- #406 Usage dashboard: activity grid and tokens per model (checked live)
Linux assets (added 2026-10-22)
Built on Linux from the v4.2.0 tree. Live check (2026-10-22, RTX 5090): CrowSetup-linux-x64 downloaded from this release with curl, point flash-next, default install root; Crow then ran a multi-step coding task with tool calls on the packaged crow-nest engine v0.14.0 (bin/serve sha256 d1e3ac42…, as in the engine package's MANIFEST.json). Known gaps: Retry after a refused install root did nothing until Pause/Resume, and the window shows no progress while the Crow step prepares the venv and whisper-small.
CrowSetup-linux-x64: sha25661712f57479fdd726b49046981e8954b2384255f6cd403ca417cdb7ec744ac0f, built withinstaller/build.shcrow-4.2.0-linux-x64.tar.gz: sha256d8aad79445cd617fbb09185dec7d3361eb6af92cc032633e92cab13ac5ed37a1, built withtools/pack-release.sh(sd-serverstable-diffusion.cpp2f88688, CUDA 13.3; no NVIDIA file, CrowSetup fetches the CUDA libraries from NVIDIA's wheels)
v4.1.0
The operating-point window picks from one field with a Vision switch (#396), Flash-Next and the 27B can start without their vision tower (#397, not measured), and the window and the terminal menu start Crow on the Claude subscription without a local model, with a sign-in for the first start (#398).
Added
-
Start Crow on your Claude subscription from the operating-point window (#398,
6281ac4,41f1847, 2026-10-15). The window's Claude entry opens Crow on Claude (subscription) without a local model, whether or not a point runs, and a point can still be started there later. When you are not signed in, Sign in opens a terminal running the unmodifiedclaude auth login. The entry turns to Start by itself once you are signed in: Claude Code is asked every 3 s for up to 10 minutes. With a guard variable set, Claude Code missing, or an API key or cloud platform billed instead, the entry says so and offers no button. The terminal menu has the same line, "Start Crow with Claude (subscription)", andcrow_boot.py --start-claudedoes the same from the command line. Not checked live. -
Flash-Next and the 27B can start text only (#397,
08f2d79,2bd09f9, 2026-10-15). Each point has atextvariant inmanifests/stack.json: the same files, started withCROW_VIT=0and withoutCROW_VIT_MMPROJ. On Flash-Next the vision tower's VRAM stays free for the expert hot set. The 27B's variant keeps the base point's 131,072 context and only leaves the tower out.- The boot menu lists each variant on its own line under its point (
Qwen3.8-Flash-Next · text only), andcrow_boot.py --start <point> --variant textstarts one. - The contract file carries
"variant": "text"; a base start writes it as before. - A serve found by the scan counts as the variant when
/propssays vision false. - A
CROW_VITinherited from the shell no longer reaches a base start. tools/check_stack.pychecks the variants.
Not measured: no variant has been booted yet. The hot-set gain, the VRAM freed on the 27B and decode speed are open, with the criteria fixed in
runs/397-text-variants/PREREG.md(amended 2026-10-15 before any run). - The boot menu lists each variant on its own line under its point (
Changed
- The operating-point window picks from one field (#396,
198f8f1,ccce3f0, 2026-10-15). One dropdown replaces the row and Start button per point. It lists the operating points, the installed llama.cpp lines and Claude in groups, shows the chosen entry's line under it, and has one Start. It works from the keyboard: arrows, Home/End, Page Up/Down, Enter, Escape, and typing a name. Flash-Next and the 27B get a Vision switch that starts their text variant (#397), and the running card says "vision off" while one runs. The window stays 620 × 660 and nothing scrolls (headless render at that size). Not checked live.
Install / upgrade
Windows, CrowSetup (installs Crow 4.1.0 and crow-nest engine v0.13.2):
irm https://github.com/nibor1896/Crow/releases/latest/download/CrowSetup.exe -OutFile CrowSetup.exe; .\CrowSetup.exeWindows, script:
irm https://raw.githubusercontent.com/nibor1896/Crow/main/install.ps1 | iexLinux:
curl -fsSL https://raw.githubusercontent.com/nibor1896/Crow/main/install.sh | bashAn installed Crow updates from Settings → About; the engine stays crow-nest v0.13.2.
Claude subscription from the operating-point window (optional): with Claude Code installed (npm install -g @anthropic-ai/claude-code), pick Claude (subscription) in the window's field. Not signed in yet, Sign in opens a terminal running claude auth login; signed in, Start opens Crow on your plan without a local model. From a terminal: python cli\crow_boot.py --start-claude.
Text-only variants (not measured yet): switch Vision off for Qwen3.8-Flash-Next or Qwen3.8-27B, or python cli\crow_boot.py --start flash-next --variant text. The 27B's variant keeps 131,072 context.
Issues
v4.0.0
Your Claude subscription runs through Claude Code, and Crow no longer handles anybody's subscription token (#390). Major, because the Anthropic and OpenAI providers and every sign-in are gone: a setup that used them has to move to the Claude tile or to OpenRouter. The title bar loses its model chip; the composer chip carries the server's state (#391).
Added
- Your Claude subscription runs through Claude Code (#390,
ecb5192,0187e74,c110022, 2026-10-15). A new provider, Claude (subscription), runs each turn as an unmodifiedclaude -pchild in the chat's folder and shows its stream: answer, thinking, Claude Code's own tool calls, context. You sign in withclaude auth loginin a terminal; Crow never sees a token. The next line of a chat continues the same Claude Code session (--resume), Stop kills the child, and the release level maps to--permission-mode(manual→default,allowedit→acceptEdits,auto→auto,yolo→bypassPermissions). The composer's chip lists Fable 5.1, Opus 5.5, Sonnet 5.5 and Haiku 5.5, greys out a model the installed Claude Code is too old for, and offers the model's effort levels,(default)sending none; the context bar uses the window Claude Code reports. A turn is refused, with the variable named, whileANTHROPIC_API_KEY,ANTHROPIC_AUTH_TOKEN,ANTHROPIC_BASE_URLor a cloud-backend switch is set, because underclaude -pthose move the bill off the subscription. Crow's own tools are not offered there (images, goals,session_search,judge,render_page: use the local model), and an open goal is not nudged on it. Measured 2026-10-15 on Windows 11, Claude Code 2.1.300, Max plan, Haiku 5.5, throughrun_claude_turnwith the owner's Claude Code setup: first turn with one Bash call 10.9 / 12.4 s, the resumed second turn 4.8 / 5.6 s on the same session id, context 42,058 / 42,073 of 1,000,000 tokens. Not measured: quota per turn, Stop mid-turn, the window live.
Changed
- Settings → Subscriptions is one Claude tile (#390,
3a56279, 2026-10-15): the Claude Code version, whatclaude auth statussays (subscription, a token from the environment, or an API key that would be billed instead), and the guard variables that are set; a copy button forclaude auth loginandask again. Asked when the page opens, not at window start. - The title bar has no model chip any more (#391,
ba53b7f, 2026-10-15): it repeated the composer's chip. The server's state moved onto the composer chip's dot (green up, red down, amber connecting), and with no model known the chip saysconnectingorno server; on the phone, which draws no dot, the chip says it in words. On a local model Crow now asks the server's/healthevery 5 s outside a turn, so a stopped point turns the dot red without a line being sent, and a restarted one green again; on the Claude subscription the local server is not asked. Before, the state was asked only when the window started, so a point stopped mid-session left the dot green — the title-bar chip had the same gap — until a turn failed (the owner's live check, 2026-10-15). - Every way Crow used a subscription token itself (#390,
3a56279, 2026-10-15): the pastedclaude setup-tokentoken andCLAUDE_CODE_OAUTH_TOKENread by Crow, the borrowed sign-in from~/.claude/.credentials.json, Crow's own browser sign-in for Anthropic, and theanthropic-beta: oauth-2025-04-20header. Anthropic's terms ("Authentication and credential use", read 2026-10-15) do not let a third-party program route requests through, collect or store subscription credentials. So are the Anthropic and OpenAI providers themselves, keys included (the owner, 2026-10-15), and with them Anthropic's own/v1/messagesdialect: Settings → Model lists This machine and Claude (subscription), OpenRouter keeps its own page. A key saved for them stays inprovider_keys.jsonand is read by nobody. OpenAI comes back in its own ticket. Aprovider_tokens.jsonfrom before is deleted on the next start, with one log line.
Fixed
- The suites stay out of the real install (#392
fddb78a, #393 + #3945c36dd2, 2026-10-15). Three cases read or wrote the machine they ran on: the image-tool tests read%LOCALAPPDATA%\Crow\active-point.jsonand the runningserve, the process-scan test listed the realserve.exethrough CIM on Windows, and the video-stills test wrote into the install'svideo-stills. Seen in the v3.6.0 checks as three failures while a point ran; each test now uses its own temp folder or stand-in, red before and green after. No user-visible change.
Install / upgrade
Windows, CrowSetup (installs Crow 4.0.0 and crow-nest engine v0.13.2):
irm https://github.com/nibor1896/Crow/releases/latest/download/CrowSetup.exe -OutFile CrowSetup.exe; .\CrowSetup.exeWindows, script:
irm https://raw.githubusercontent.com/nibor1896/Crow/main/install.ps1 | iexLinux:
curl -fsSL https://raw.githubusercontent.com/nibor1896/Crow/main/install.sh | bashAn installed Crow updates from Settings → About; the engine stays crow-nest v0.13.2.
For the Claude subscription (optional), install and sign in to Claude Code once, then pick Claude (subscription) in Settings → Model and a chat with a folder:
npm install -g @anthropic-ai/claude-code
claude auth loginStart Crow from its shortcut, not from a shell that sets ANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKEN or ANTHROPIC_BASE_URL (a turn is refused while one is set). A setup that used the removed Anthropic or OpenAI key providers falls back to this machine; keys saved for them stay in provider_keys.json, unread.
Issues
v3.6.0
The window as in the October mockup (#380). Every render named below is tools/render_window.py (#381) in headless Chrome on Windows 11, dark, from a fixture; none is a screenshot of a live window.
Added
- The title bar searches chats and commands (#386,
8e93d3b,87c38c2, 2026-10-14). A 32 px magnifier over the chat panel's left edge; a click on it, Tab or Ctrl+K (from anywhere, the composer included) opens the field to about 300 px. Under it, at most 8 rows: Chats whose title or folder name contains the query (case-insensitive, in the rail's order, archived ones after them and marked) and Commands, the composer's slash commands. Up/Down move, Enter opens the chat or puts the command into the composer, Escape closes the list, clears the query and folds the field. A press in the field selects text instead of dragging the window (pywebview 6.2.1 starts a window drag for any press in the title bar's drag region). Messages are not searched; that stays the model'ssession_search. Rendered with the goal-run fixture at 1440×960:countlists "Count files, delegate 21×2" first,/golists/goal,crow+ ArrowDown + Enter opens the second result,/del+ Enter leaves/delegatein the composer, Escape folds the field 300.9 → 32 px. - A start screen for an empty chat (#385,
08e6c24, 2026-10-14). The mark (200 px), the greeting (26 px), the composer centred under them with the folder chip in its row, then Continue with up to two cards of the newest other chats (crow · goal 3/3 · 16:41), each opening its chat. The first line you send puts the composer back at the bottom. Rendered with the new fixturetools/fixtures/new-chat-2026-10-14.jsonat 1440×900: the group's centre 469.0 px = the panel's centre, the composer's top 26.0 px under the greeting. It pads 40 px top and bottom, not the mockup's 40/64, which puts the group 12 px above centre. - A copy button under each answer (#383,
2460c13, 2026-10-14): one icon after the telemetry strip copies that turn's answer, prose and code, live and replayed turns alike. A head line over the turn (Crow, model, level, time and the copy button,c323eb7) was built and dropped the same day on the owner's word: it repeated the title-bar chip, and its copy button beside the model name read as copying the model name. - A chat head and Ctrl+N (#385,
08e6c24, 2026-10-14). Over the conversation: the chat's title, the folder chip (moved here from the composer row), the branch of the folder's repository (hidden without one) and aGoal 3/3pill that opens the inspector's Goal tab; hidden on an empty chat. Ctrl+N starts a new chat from anywhere, the composer included, as the rail's New chat does.
Changed
- The chat is a rounded panel under a three-zone title bar (#382,
9c60754,59ac64c, 2026-10-14). The chat column has 14 px corners and 8 px of the rail's colour to its right and below; the lines between title bar, rail and side column are gone. The title bar (46 px) takes the columns' widths: rail toggle and CROW over the rail (with the rail shut only the toggle, and the panel starts at 50 px), the search and a model chip on the panel's two edges, then the inspector, git (a branch), browser (a globe) and phone toggles and the window buttons as stroke icons, the phone now after the globe. The model chip is the server's state as a dot and the model's name; a click slides out the level, the last turn's decode rate and the context in use (35.85 tok/s · 6.1k / 200kin the goal-run fixture). The Help menu is gone: Settings, its only entry, is a button at the foot of the rail. Colours from the mockup in all three themes; the light theme's accent is darker (#2b67c9) for contrast. Rendered with the goal-run fixture: the search's left edge and the chip's right edge on the panel's edges, 0 px off at 1180, 1440, 1920 and 2560 px wide, rail open and shut. - Mono text is set in Google Sans Code (#382,
59ac64c, 2026-10-14), the face incli/fonts(OFL); before, it was whatever monospace the system had. The page asks for the font after it has loaded (Api.mono_font, added withFontFace), the phone through its/apiproxy (the page's bridge methods 108 → 109). Inlined as a data URL the page measured 1,684,958 B as WebView2 counts it (UTF-16, limit 2 MB); through the bridge it is 972,242 B.document.fonts.checkis true in headless Chrome; WebKitGTK and WebView2 not rendered. - Goal, tool calls and subtasks are tabs of one inspector beside the chat (#384,
bee96f2,48d0f83,7fc97d3,93b8c72, 2026-10-14). The goal, subtasks and git cards that stood over the chat's top right and the code panel beside them are one column, opened by the panel icon in the title bar: Goal · Tools n · Subtasks n, plus Git and Browser while their title-bar toggles are on, with arrow keys, Home and End. A new goal selects Goal and a chat's first tool call without a goal selects Tools, unless you picked a tab in that chat. The Goal tab has a status pill, a progress bar and the steps as a timeline; Tools has one numbered row per call (kind dot, name, first argument; agoal_stepreadsstep 3 · done), numbered by the chat's calls so a cleared list never opens a wrong row. The column reserve the cards took on both sides of the chat (306 px, #233, #256) is gone; rendered at 1440×960 the chat head ends at x=1170 and the inspector starts at x=1180, 0 px overlap with the text column. A fresh install opens the inspector at 340 px, the mockup's width, the owner's choice of 2026-10-14 (was 260); saved widths are kept, and the grip still goes down to 260. The browser page shows only while the Browser tab is selected; on any other tab it is hidden withpane_hide, becausepane_coverdoes nothing on Windows. - The stats under an answer are a telemetry strip without a horizontal scrollbar (#383,
c323eb7,1c726db, 2026-10-14). The bracketed one-line string scrolled sideways and was cut off at the right edge indocs/images/window-goal-2026-09-16.png. It is now labelled cells that wrap: Decode, Prefill, Cache, Rounds, Waited, and Delegated when the turn delegated; a cut-off turn says so in a line under the strip. Rendered with the goal-run fixture and a 340 px inspector: six cells in one row at 1440×960 (744 of 744 px), four plus two at 1180×800 (484 of 484 px), no scroll; Decode 35.85 tok/s / 1,399 tok, Prefill 351.37 tok/s / 2,785 tok, Cache 99 % / 5,852 / 5,901, Rounds 12 / 11 tool calls, Waited 48.1 s, Delegated 1 / subtask · 65 tok. A turn redrawn from a saved chat shows no strip: the replay carries no numbers. - The Trace is a strip of the turn's tool calls (#383,
c323eb7, 2026-10-14). Its head readsTrace · 11 tool calls · 12 roundsinstead ofTrace · N roundsand still folds the earlier rounds; under it one segment per call in the colour of its kind (goal tools, delegation, the rest; a failed call red) and a legend. A click on a segment opens that call in the Tools tab. Rendered: 11 segments, 7 goal, 2 other, 2 delegation. - A delegated subtask is a one-line card where it was delegated (#383,
c323eb7, 2026-10-14): fork, id, task, model (hidden under 760 px), status andtok · s, redrawn as it runs; a click opens it in the Subtasks tab, where the full card stays. This reverses #255's "never a block of the chat" for that one line. Rendered: d1done,65 tok · 1.1 s. - Crow's answer is the size of the user's bubble (#383,
2460c13, 2026-10-14): 13 px, as the bubble, which inherits the window's 13 px; headings 15 / 14 / 13 px, inline code as a small chip, and the Thought fold a chevron,Thoughtand82 % of the turnwithout its border bar. The mockup's 14.5 px (66203cc) set Crow's text larger than the owner's own; he asked for one size. - The rail and the composer as in the mockup (#385,
08e6c24, 2026-10-14). Rail: a full-width New chat withCtrl N, chats under their folders and loose ones under No folder instead of "Chats", each row a title and a second line (goal 3/3 · 1 subtask · 16:41for a chat with a goal), no accent bar, subtask rows with a fork, id, task and state, and Archive and Settings at the foot. Composer: one row with the context meter, the model chip, the subtask chip, the release level, the microphone and a round send. Rendered with the goal-run fixture at 1440×960: your bubble's right edge on the box's right border (1120 = 1120) and the answer's left edge on its left border (294 = 294), 0 px as #280 asks. - The phone mirror wears the redesign (#387,
5bb9073, 2026-10-14). Header: rail, CROW, a search that opens across the header, the model chip (short name; a tap adds decode rate and context), the inspector toggle. The inspector is the right drawer with Goal, Tools, Subtasks and Git tabs; Git is no longer a drawer of its own, and there is no Browser tab (a phone has no live page). The chat head's goal pill replaces the goal bar, the telemetry is a 3-column grid, the subtask card drops the model, and the start screen stacks; on the start screen the+sheet holds the folder chip, Settings in the rail is a 44 px row, and trace segments get a 20 px tap band. The desktop page is byte-identical (stamped_page()compared). Rendered with--remoteat 390×844, goal-run fixture:scrollWidth390 in the chat, the open drawer, the open search, the start screen and the light theme; header targets 44×44 (model chip 84×44); drawer tabs 44 px high; telemetry 3 × 120 px,scrollWidth360 =clientWidth360; start screen mark 120 px, greeting 20 px, 2 cards. - Version 3.6.0 in
cli/crow_core.py,install.ps1andmanifests/operating-point.json; the README image's version pill.
Fixed
- An inspector width above 612 px survives a restart (#388,
528f113, 2026-10-14). A width dragged past 612 px with the browser open was stored, but read back only from 260 to 612, so it came back as 260 on the next start. It is now read bac...
v3.5.0
CrowSetup installs crow-nest engine v0.13.2; old file bodies join the context clearing; cut tool results keep both ends. Windows assets only, as for v3.4.x.
Changed
- Crow is pinned to crow-nest engine v0.13.2 (#377,
4823ffb,a8ada0a, 2026-10-14).manifests/stack.jsonengine_packagenamescrow-nest-engine-0.13.2-win-x64.zip(4,561,178 B, sha25654454734…,serve.exesha256ef439127…), built from the crow-nest tag v0.13.2 and attached to that release; CrowSetup installs it. v0.13.2 over v0.13.0: the Linux pinned-tier fix (crow-nest #230); the Windows engine path is unchanged.engine_package.knownalso names v0.13.1 (serve.exesha256af745027…, read from its release zip), so an engine installed from v0.13.1 no longer shows asunknownin Settings → About. - Version 3.5.0 in
cli/crow_core.py,install.ps1andmanifests/operating-point.json; the README image's version pill. - Old
write_file,append_fileandedit_filebodies join the #263 clearing batch (#359,c30017c,e8bd524). Behind the keep window (the last 5 rounds), a body of 600 chars or more becomes a one-line stub that keeps the argument names; the originals go to the samesession/cleared/file ("calls") before the stub is applied, and the batch'scrow.logline names both counts. A file whose body was cleared must be read again before the next write;/verifyreads a stubbed body back from the originals. Settingcontext_clear_inputs: unset is on with the local server and off on a remote provider,0off,1on. Replayed offline on the one long stored session (session-0915.json, 2026-09-15, 274 messages, n = 1): the bodies free 7,291 tokens (Flash-Next tokenizer) or 6,819 (GLM-5.3-Flash) on top of the 44,196 the results free, with the same one re-prefill event; the ticket's 8,000 is not reached on this session, and its own session is gone. Effect on a live goal run: unmeasured. tools/context_breakdown.py(#359,722d73d,bc26bab): tokens per category of a stored session (head, user, reasoning, assistant text, call arguments and results by tool), in total and behind the keep window, from the rendered template when jinja2 and the template are present;--replayforces one batch,--walkreplays the history under the live rule. A dev tool, not imported bycli/.- A cut tool result keeps both ends and names its position (#361,
c7a9f8e,c41fda8).run_commandkeeps the head and the tail and gives stderr its own share, so a linker error or a test summary after a long stdout survives;read_filecuts at a whole line and names the lines shown, the file's length and thestart_lineto continue with; a long line after a short one keeps its head. Results under the cap are byte-identical (goldens at 15,999 and 16,000 chars); the cap stays 16,000. How often results are cut in real runs: unmeasured.
Install / upgrade
Windows, CrowSetup (installs Crow 3.5.0 and crow-nest engine v0.13.2):
irm https://github.com/nibor1896/Crow/releases/latest/download/CrowSetup.exe -OutFile CrowSetup.exe; .\CrowSetup.exeWindows, script:
irm https://raw.githubusercontent.com/nibor1896/Crow/main/install.ps1 | iexLinux:
curl -fsSL https://raw.githubusercontent.com/nibor1896/Crow/main/install.sh | bashAn installed Crow updates from Settings → About; the engine entry there offers crow-nest v0.13.2.
Issues
v3.4.2
v3.4.1
CrowSetup installs the GLM-5.3-Flash point from Hugging Face; the README images show the shipped points. Windows assets only, as for v3.4.0.
Changed
- CrowSetup downloads the GLM-5.3-Flash container (#365, 2026-10-12). Its upload to
nibor1896/GLM-5.3-Flash-MUL1K3finished on 2026-10-12 (commitf78b8307,GLM-5.3-Flash-MUL1K3.cnq124,591,634,567 B, sha2569ce11456…as in that repo'sSHA256SUMS).manifests/stack.jsonmarks the file published at that commit, so theglm53-flashpoint no longer needs a local--source. - Version 3.4.1 in
cli/crow_core.py,install.ps1andmanifests/operating-point.json; the README image's version pill. - The README image shows the five operating points CrowSetup installs (
bf2742f, 2026-10-12): Flash-Next, 27B, GLM-5.3-Flash, Image Stack, Media Stack, instead of the earlier llama.cpp lines; two features added (engine updates in About, operating points).
Install / upgrade
- Existing install: Settings → About → install 3.4.1, restart Crow.
- New install, or GLM-5.3-Flash added: download
CrowSetup.exebelow and pick GLM-5.3-Flash; the container now downloads from Hugging Face.
Issues: #365.
v3.4.0
GLM-5.3-Flash reuses the server's prompt state across tool rounds and chats, CrowSetup installs crow-nest engine v0.13.0, and the turn line names how long prefill took. Windows assets only, as for v3.3.x.
Changed
- The GLM-5.3-Flash point reuses the prompt state across tool rounds and chats (
94e2556, 2026-10-12, owner decision). Theglm53-flashpoint inmanifests/stack.jsonaddsCROW_GLM_SMALL_PROMPT=1,CROW_GLM_ANSWER_REUSE=1andCROW_GLM_PREFIX_ANCHOR=1(crow-nest #216, #219, #217; default off in the engine) to thearm4.envset. The owner's live check of 2026-10-12 with the three switches on the installed engine v0.12.0, in the Crow window, one task of 3 rounds:[cache] LIVEevery round, prefill 55 / 154 / 86 new tokens in 2,680.8 / 4,539.0 / 3,105.1 ms (10.3 s in total), against 4.7 to 7.2 s per round and 36.5 s for 6 rounds in the task before with the switches off; decode 14.03 tok/s; no hang (n = 1 task). - Crow is pinned to crow-nest engine v0.13.0 (
94e2556, 2026-10-12).manifests/stack.jsonengine_packagenamescrow-nest-engine-0.13.0-win-x64.zip(4,526,571 B, sha2564b3d2e4b…,serve.exesha2567d73f8de…); CrowSetup installs it, and Settings → About offers it to an install on an older engine (#367). The engine's GLM reasoning box closes on the</think>token id instead of its text (crow-nest #221), and serve logs the generated ids of every request at INFO (crow-nest #223). - Version 3.4.0 in
cli/crow_core.py,install.ps1andmanifests/operating-point.json; the README image's version pill.
Fixed
- The turn line names how long prefill took (#370, 2026-10-12). It showed prefill only as a rate, so the owner's 3-round GLM task read
prefill 295 @ 28.57 tok/s, which looked like a broken prefill; the 10.3 s it took were not on the line. It now readsprefill 295 tok in 10.3s @ 28.57 tok/s; the rest of the line is unchanged.
Install / upgrade
- Existing install: Settings → About → install 3.4.0, restart Crow, then stop the point and press install 0.13.0 under CROW-NEST.
- New install: download
CrowSetup.exebelow and run it.
v3.3.1
The window leaves the GPU to the local engine on Windows, and Crow updates the crow-nest engine from Settings → About. Windows assets only, as for v3.3.0. CrowSetup still installs engine v0.12.0.
Added
- Crow updates the crow-nest engine from Settings → About (#367, 2026-10-11). Before, only CrowSetup wrote
bin\, on an install: an existing copy kept its engine, and the owner's ran Crow 3.3.0, which needs engine v0.12.0, on the engine of 2026-10-06 (serve.exesha256314E306C…). Nothing said so. About now showsengine crow-nest: installed …, pinned v0.12.0beside Crow's own version. The pin is the newengine_packageinmanifests/stack.json: asset, url, bytes, sha256 andserve_sha256;tools/check_stack.pychecks it. Whenbin\serve.exediffers from the pin, update engine (crow-nest) to v0.12.0 downloads only the pinned asset from crow-nest's GitHub release. It checks the size and sha256, then every file against the zip'sMANIFEST.json, and keeps each replaced file as*.bak-<old serve sha8>. It refuses while aservefrombin\runs. Tested offline with fake packages (10 core and 5 window tests); not run live against GitHub yet. Windows only: v0.12.0 has no Linux engine asset.
Changed
- Version 3.3.1 in
cli/crow_core.py,install.ps1andmanifests/operating-point.json; the README image's version pill.
Fixed
- The window no longer shares the GPU with the local engine on Windows (#368, 2026-10-11). The chat window and the operating-point window now start WebView2 with
--disable-gpu --disable-gpu-compositing(throughWEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS; a value already set is kept). Measured with GLM-5.3-Flash on crow-nest, same serve config: the v3.3.0 window decoded 7.6 and 7.9 tok/s (engine.log 2026-10-11 20:54Z and 20:56Z), the same window with the switch 14.17 tok/s (turn t3, n = 1).render_page's own headless browser does not inherit the switch and keeps its GPU/SwiftShader choice (#213, #293). The operating-point window's effect on decode and the browser panel's WebGL under the switch are not measured. Linux is unchanged.
Install / upgrade
Windows: download and run CrowSetup.exe below (Crow 3.3.1 + crow-nest engine v0.12.0). Existing models are recognised and not downloaded again. An existing install can also update its engine from Settings → About (#367).
irm https://github.com/nibor1896/Crow/releases/latest/download/CrowSetup.exe -OutFile CrowSetup.exe; .\CrowSetup.exeWindows, Crow alone (image server included in the package):
irm https://raw.githubusercontent.com/nibor1896/Crow/main/install.ps1 | iexLinux (no release asset; install.sh installs from the repository):
curl -fsSL https://raw.githubusercontent.com/nibor1896/Crow/main/install.sh | bash