Skip to content

Releases: nibor1896/Crow

v4.3.0: a stop reaches the engine, error frames, warm new chats

Choose a tag to compare

@nibor1896 nibor1896 released this 22 Oct 10:30
3c19c99

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.json point flash-next sets CROW_PREFIX_ANCHOR=1, crow-nest's head anchor (crow-nest docs/architecture.md 7.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.py 12 of 12, tools/check_operating_point.py 10 of 10.
  • Linux assets for 4.2.0 (2026-10-22). The v4.2.0 release carries CrowSetup-linux-x64 (5,382,480 B, sha256 61712f57…) and crow-4.2.0-linux-x64.tar.gz (60,394,008 B, sha256 d8aad794…), the first Linux assets since v3.1.0. Built on the Linux box from the v4.2.0 tree: sd-server by SD_RELEASE=1 tools/build-sd-server.sh (stable-diffusion.cpp 2f88688, CUDA 13.3), the package by tools/pack-release.sh (44 files, no NVIDIA file, privacy gate clean), the installer by installer/build.sh (--selftest 12 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.md downloads 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 one error frame and [DONE]. stream_reply read 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 raises HTTP <code> mid-stream from <model>: <reason> like a remote one, in both shapes: the object crow-nest sends since its error-object fix (crow-nest b4231f4) 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 in TheLocalErrorFrameIsReadTests, 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's resp.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-nest 2593c4a ends 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 case AStopHangsUpDuringASilentPrefillTests, red on the old code; test_the_read_timeout_is_what_bounds_an_aborted_reader now 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.sh refused the 4.2.0 package on cli/crow_core.py's ENGINE_RELEASES_API (https://api.github.com/repos/<owner>/crow-nest/..., added with #367): the public-namespace context in tools/repack-release.py named github.com/<owner> but not the REST API's github.com/repos/<owner>. It does now; the new case in tools/test_repack_release.py is red without the change, 50 tests OK with it.

Measured

  • CrowSetup-linux-x64 installs 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 with curl like a new user, run with its window, point flash-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 and whisper-small were fetched. Crow then served from <root>/bin/serve (sha256 d1e3ac42…, the one in the engine package's MANIFEST.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.exe and Settings → About install the v0.13.2 pin of manifests/stack.json, which reads no CROW_PREFIX_ANCHOR and 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 reaches setup/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.exe

Windows, script

irm https://raw.githubusercontent.com/nibor1896/Crow/main/install.ps1 | iex

Linux, 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-x64

Linux, from a checkout

git fetch --tags && git checkout v4.3.0 && bash install.sh

Issues

None: every item names its commit.

v4.2.0

Choose a tag to compare

@nibor1896 nibor1896 released this 18 Oct 19:23
aa65046

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 to usage.jsonl in 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.exe

Windows, script:

irm https://raw.githubusercontent.com/nibor1896/Crow/main/install.ps1 | iex

Linux:

curl -fsSL https://raw.githubusercontent.com/nibor1896/Crow/main/install.sh | bash

Linux, 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-x64

It 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: sha256 61712f57479fdd726b49046981e8954b2384255f6cd403ca417cdb7ec744ac0f, built with installer/build.sh
  • crow-4.2.0-linux-x64.tar.gz: sha256 d8aad79445cd617fbb09185dec7d3361eb6af92cc032633e92cab13ac5ed37a1, built with tools/pack-release.sh (sd-server stable-diffusion.cpp 2f88688, CUDA 13.3; no NVIDIA file, CrowSetup fetches the CUDA libraries from NVIDIA's wheels)

v4.1.0

Choose a tag to compare

@nibor1896 nibor1896 released this 15 Oct 17:47
8b45ab6

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 unmodified claude 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)", and crow_boot.py --start-claude does 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 a text variant in manifests/stack.json: the same files, started with CROW_VIT=0 and without CROW_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), and crow_boot.py --start <point> --variant text starts 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 /props says vision false.
    • A CROW_VIT inherited from the shell no longer reaches a base start.
    • tools/check_stack.py checks 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).

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.exe

Windows, script:

irm https://raw.githubusercontent.com/nibor1896/Crow/main/install.ps1 | iex

Linux:

curl -fsSL https://raw.githubusercontent.com/nibor1896/Crow/main/install.sh | bash

An 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

  • #396 Boot window: model dropdown with a vision switch (live check pending)
  • #397 Text-only variants of Flash-Next and the 27B (not measured; live check pending)
  • #398 Boot window: start Crow on the Claude subscription (live check pending)

v4.0.0

Choose a tag to compare

@nibor1896 nibor1896 released this 15 Oct 10:19
6c3fecc

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 unmodified claude -p child in the chat's folder and shows its stream: answer, thinking, Claude Code's own tool calls, context. You sign in with claude auth login in 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, while ANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKEN, ANTHROPIC_BASE_URL or a cloud-backend switch is set, because under claude -p those 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, through run_claude_turn with 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, what claude auth status says (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 for claude auth login and ask 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 says connecting or no server; on the phone, which draws no dot, the chip says it in words. On a local model Crow now asks the server's /health every 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 pasted claude setup-token token and CLAUDE_CODE_OAUTH_TOKEN read by Crow, the borrowed sign-in from ~/.claude/.credentials.json, Crow's own browser sign-in for Anthropic, and the anthropic-beta: oauth-2025-04-20 header. 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/messages dialect: Settings → Model lists This machine and Claude (subscription), OpenRouter keeps its own page. A key saved for them stays in provider_keys.json and is read by nobody. OpenAI comes back in its own ticket. A provider_tokens.json from before is deleted on the next start, with one log line.

Fixed

  • The suites stay out of the real install (#392 fddb78a, #393 + #394 5c36dd2, 2026-10-15). Three cases read or wrote the machine they ran on: the image-tool tests read %LOCALAPPDATA%\Crow\active-point.json and the running serve, the process-scan test listed the real serve.exe through CIM on Windows, and the video-stills test wrote into the install's video-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.exe

Windows, script:

irm https://raw.githubusercontent.com/nibor1896/Crow/main/install.ps1 | iex

Linux:

curl -fsSL https://raw.githubusercontent.com/nibor1896/Crow/main/install.sh | bash

An 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 login

Start 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

  • #390 Claude subscription: run the claude CLI, drop token reuse
  • #391 Title bar repeats the model chip (live check of the health dot pending)
  • #392 Image tool tests read the real active-point.json
  • #393 Process-scan test lists real servers on Windows
  • #394 Video stills test writes into the real install

v3.6.0

Choose a tag to compare

@nibor1896 nibor1896 released this 14 Oct 19:26
e69873f

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's session_search. Rendered with the goal-run fixture at 1440×960: count lists "Count files, delegate 21×2" first, /go lists /goal, crow + ArrowDown + Enter opens the second result, /del + Enter leaves /delegate in 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 fixture tools/fixtures/new-chat-2026-10-14.json at 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 a Goal 3/3 pill 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 / 200k in 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 in cli/fonts (OFL); before, it was whatever monospace the system had. The page asks for the font after it has loaded (Api.mono_font, added with FontFace), the phone through its /api proxy (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.check is 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; a goal_step reads step 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 with pane_hide, because pane_cover does 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 in docs/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 reads Trace · 11 tool calls · 12 rounds instead of Trace · N rounds and 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 and tok · 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: d1 done, 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, Thought and 82 % of the turn without 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 with Ctrl 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:41 for 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 --remote at 390×844, goal-run fixture: scrollWidth 390 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, scrollWidth 360 = clientWidth 360; start screen mark 120 px, greeting 20 px, 2 cards.
  • Version 3.6.0 in cli/crow_core.py, install.ps1 and manifests/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...
Read more

v3.5.0

Choose a tag to compare

@nibor1896 nibor1896 released this 14 Oct 14:57
845da00

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.json engine_package names crow-nest-engine-0.13.2-win-x64.zip (4,561,178 B, sha256 54454734…, serve.exe sha256 ef439127…), 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.known also names v0.13.1 (serve.exe sha256 af745027…, read from its release zip), so an engine installed from v0.13.1 no longer shows as unknown in Settings → About.
  • Version 3.5.0 in cli/crow_core.py, install.ps1 and manifests/operating-point.json; the README image's version pill.
  • Old write_file, append_file and edit_file bodies 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 same session/cleared/ file ("calls") before the stub is applied, and the batch's crow.log line names both counts. A file whose body was cleared must be read again before the next write; /verify reads a stubbed body back from the originals. Setting context_clear_inputs: unset is on with the local server and off on a remote provider, 0 off, 1 on. 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; --replay forces one batch, --walk replays the history under the live rule. A dev tool, not imported by cli/.
  • A cut tool result keeps both ends and names its position (#361, c7a9f8e, c41fda8). run_command keeps 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_file cuts at a whole line and names the lines shown, the file's length and the start_line to 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.exe

Windows, script:

irm https://raw.githubusercontent.com/nibor1896/Crow/main/install.ps1 | iex

Linux:

curl -fsSL https://raw.githubusercontent.com/nibor1896/Crow/main/install.sh | bash

An installed Crow updates from Settings → About; the engine entry there offers crow-nest v0.13.2.

Issues

  • #359 Old write_file and edit_file bodies are never cleared (live check pending)
  • #361 Cut tool results lose the tail and name no position (live check pending)
  • Engine pin: PR #377; release PR #379

v3.4.2

Choose a tag to compare

@nibor1896 nibor1896 released this 13 Oct 21:28
e9c41c9

See CHANGELOG.md, section 3.4.2.

v3.4.1

Choose a tag to compare

@nibor1896 nibor1896 released this 12 Oct 07:24
8a66c76

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-MUL1K3 finished on 2026-10-12 (commit f78b8307, GLM-5.3-Flash-MUL1K3.cnq 124,591,634,567 B, sha256 9ce11456… as in that repo's SHA256SUMS). manifests/stack.json marks the file published at that commit, so the glm53-flash point no longer needs a local --source.
  • Version 3.4.1 in cli/crow_core.py, install.ps1 and manifests/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.exe below and pick GLM-5.3-Flash; the container now downloads from Hugging Face.

Issues: #365.

v3.4.0

Choose a tag to compare

@nibor1896 nibor1896 released this 11 Oct 23:19
033c6e1

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). The glm53-flash point in manifests/stack.json adds CROW_GLM_SMALL_PROMPT=1, CROW_GLM_ANSWER_REUSE=1 and CROW_GLM_PREFIX_ANCHOR=1 (crow-nest #216, #219, #217; default off in the engine) to the arm4.env set. 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] LIVE every 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.json engine_package names crow-nest-engine-0.13.0-win-x64.zip (4,526,571 B, sha256 4b3d2e4b…, serve.exe sha256 7d73f8de…); 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.ps1 and manifests/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 reads prefill 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.exe below and run it.

Issues: #367, #370.

v3.3.1

Choose a tag to compare

@nibor1896 nibor1896 released this 11 Oct 21:24
59fda2b

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.exe sha256 314E306C…). Nothing said so. About now shows engine crow-nest: installed …, pinned v0.12.0 beside Crow's own version. The pin is the new engine_package in manifests/stack.json: asset, url, bytes, sha256 and serve_sha256; tools/check_stack.py checks it. When bin\serve.exe differs 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's MANIFEST.json, and keeps each replaced file as *.bak-<old serve sha8>. It refuses while a serve from bin\ 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.ps1 and manifests/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 (through WEBVIEW2_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.exe

Windows, Crow alone (image server included in the package):

irm https://raw.githubusercontent.com/nibor1896/Crow/main/install.ps1 | iex

Linux (no release asset; install.sh installs from the repository):

curl -fsSL https://raw.githubusercontent.com/nibor1896/Crow/main/install.sh | bash

Issues

  • #367 — Crow never updates the crow-nest engine in bin (live check pending)
  • #368 — The window shares the GPU with the engine during decode (live check pending)