gezel Gezel Handboek

1.26274 — 1 October 2026

One day after 1.26273. This one is about steadiness. Most of it fixes the ways a task could stall or stop for good partway through. When the work does finish, you get the file itself instead of a path buried in a list. Narration reads the whole reply and no longer holds up the rest of the app. Chats pick up far less unrelated reference material, and there is a round of safety fixes.

If you read only one thing: craftbook tasks running on a model on your own computer get stuck much less often, and when one finishes, its closing message ends with a card for the file it made and an Open key.

Tasks that used to stall now finish

A craftbook is one of gezel's saved recipes for a piece of work, run as a task in steps by your gezels, the named AI craftspeople on your crew. Last release made those tasks easier to start. This one fixes many of the ways they could stall, each found in real runs:

  • Polishing a finished file. On an on-device model (llama.cpp, MLX or Ollama), a step whose file already passed its check could keep editing it for 12 to 20 minutes in a single turn, risking breaking it. The gezel is now told the file is done and to move on. If it keeps going, the turn ends and the step's check takes over.

  • A follow-up message that took away the step's tools. A message such as "save it to the drafts folder" could narrow a step's tools so far that it lost its only way to save its work. The gezel then paused the task, and it could not resume the task itself. A step now always keeps its saving tool and every tool its own instructions name.

  • A save that was too long. When a local model's save ran past the most it may write in one reply, it was told to pause the task, which had the same dead end. It is now told to write a shorter version that keeps every required section.

  • Several edits mistaken for a loop. Seven different heading fixes to one file were cut off at five as "not making progress", leaving slides unfixed. Different successful edits now count as progress; only failed edits are counted.

  • Reviews rejected for made-up sources that were not sources. A reviewer who described the citation format, writing something like <path/URL> or "n/a", had its review rejected three times and the task paused. Placeholders like those are no longer read as citations.

  • An old round of a looping recipe finishing the new one. In a recipe that goes review, revise, review, a chat left over from an earlier round could mark the current round done, against an unchanged file. Each round now belongs to its own session.

  • DeepSeek V4 thinking through the whole turn. On the ds4 engine, it could spend about 18 minutes thinking and write nothing. Gezel now stops the thinking at its budget, keeps what it thought on screen, and retries that reply with thinking off.

Finished work comes back as a file you can open

When a task made a deck or a document, its closing message used to list the deck as one unlinked path among the working files, sometimes under "…and 3 more", and the card in Updates previewed the outline rather than the result.

Now the closing message starts with "Here's your PowerPoint deck" (or whatever it made) and ends with a card for that file: its type, its name, whether it is in the project folder or the artifacts drawer, and its size. Open opens it, Show in folder shows it where it is saved, and Save a copy… saves it wherever you like. The same card sits under the step tracker on the task's page and in the Task card in the chat rail, where it appears with a dashed border, marked "in progress", as soon as the file exists. The card only names a file that is really there, and never a working paper such as an outline.

The Task card in the chat rail also follows the run as it goes, instead of staying as it was when you opened it. File names in its notes are links, and a reply that names a file the gezel wrote moments earlier now links to it too.

Narration reads the whole reply, as it arrives

Narration, the setting that reads gezels' replies aloud, used to stop after roughly the first 280 characters. It now reads the whole reply.

With Settings → Audio → Include progress updates on, the voice starts at the first finished sentence and keeps pace while the reply is still being written. Without it, the reply is read once it is finished, but playback starts as soon as the first sentence is ready.

While a gezel is speaking, a Stop narration key appears in the title bar. It stops the rest of that reply, and the next one is read as usual. Stopping a chat reply now stops its voice too.

Two fixes you may have noticed without knowing why. Speech now runs on its own thread, so reading a reply aloud no longer holds up the rest of gezel for a moment on every sentence. And narration no longer saves a sound file into the project's artifacts drawer for every sentence it reads.

Less unrelated reference material in your chats

Gezel adds passages from the Handboek and from any knowledge catalogs you installed to a conversation when they look relevant. Too often they did not need to be relevant: almost any message picked something up, so "What is 17 times 23?" came with an old release's notes.

Each catalog now has a cut-off measured against labelled questions, and a passage matched only on a shared word is no longer added unless the relevance check approved it. In our tests, off-topic messages that picked up a passage went from 25 out of 25 to 2 out of 25, and on-topic answers were unchanged.

The relevance check is a small model on your device, about 24 MB, that reads each passage before a gezel uses it. It is now on for new installs, with a checkbox in first-run setup to turn it off. If you already use gezel, your setting stays as it was. It is under Settings → Artificial Intelligence → Check that indexed context is on topic before using it.

One related change to your security settings: a catalog download you start yourself in Settings → Knowledge now goes ahead even when they turn off app network access. Those settings govern what gezels do, and a gezel still cannot start a download. Automatic update checks still follow the setting.

Safety fixes

Nothing you do changes for any of these.

  • The artifacts drawer can no longer be deleted whole. Deleting or renaming a path written as . or notes/.. removed the entire drawer: task inputs, prompt drafts, change proposals and data. That was possible from the app and from a gezel's tools. Both are now refused.

  • Web fetches cannot be pointed at your own network. An address written in a disguised form, such as [::ffff:127.0.0.1], could get past the guard that keeps fetches away from your computer, your local network and cloud metadata addresses. Those forms are now blocked.

  • Websites cannot read your device's gezel id. A web page could read it from the local service. The listener for the Office add-in, whose certificate your browsers trust, now answers only the add-in itself.

  • In Word, Excel and PowerPoint, only the gezel you picked can use the document. The document tools were offered to every gezel in the project, including background work. The pane names the gezel that can read the document, and warns you if that gezel's provider cannot reach it (GitHub Copilot, Claude CLI and Codex CLI).

  • Uninstalling on Windows removes the Office certificate. The "Gezel Office Local CA" was left in your trusted certificates after an uninstall.

  • Installing on Linux leaves other programs alone. The installer stopped every process running under the same user number as gezel's account, which could include a database in a Docker container, and then failed when they restarted.

Smaller things

  • Memory refusals are plain. A model that does not fit now says "There is not enough memory to run this model. Please select another model or close some applications on this device." The arithmetic went to the log. Gemma 4's E-series models on MLX were estimated to need about 1.75 times the memory they use, so they are refused less often on smaller Macs, and DeepSeek V4 Flash q2 is no longer refused full memory on the NVIDIA DGX Spark.

  • Your installed model is remembered. Where gezel's engine runs as a system service, the first-run check could keep an old model choice and offer to download the recommended model you already had.

  • Pictures from tools stay out of the way of text-only models. A tool that returns images, such as slide previews, no longer fails the reply on a model that cannot see; the reply goes on without them and says so. On models that can see, the images now arrive, and are sent once rather than with every later request.

  • The meester runs the recipe even when it gets the version wrong. The meester, the guildmaster gezel who coordinates your crew, sometimes asked for a craftbook version that does not exist, such as a "1.0" copied from your message. The task failed and the meester made the document by hand outside the recipe. The latest version now runs.

  • Document tools find files by their plain path. A reviewer opening powerpoint/task-13/deck.pptx was refused with "Ambiguous MCP root". The tools now find the file, or name the folders they looked in.

  • One foreman per project. Projects the meester starts no longer get a second, idle voorman, the gezel who leads a project's crew.

  • Codex CLI replies that go silent end after 10 minutes instead of waiting out a much longer limit, and time your computer spends asleep no longer counts.

  • New thread means a new thread. Sending quickly right after choosing New thread could land the message in the most recent old thread.

  • The Home greeting stays folded after your first message, instead of opening again.

  • The engine indicator shows the reply actually running, not the newest one still waiting its turn, and the queue indicator opens on the first click.

  • The Office pane is steadier. Approving its connection code works after the computer has slept, Allow edits switched on while it is connecting takes effect, and errors read as a sentence instead of "Gezel answered 500." The Office and LibreOffice setup cards, the chat box and the new-task dialog likewise show a sentence instead of "Gezel API error 409".

  • Settings lists look like lists. Pending apps in Connected Apps, Remote Servers, and a project's Connections tab are bordered rows with their buttons on the right, instead of bullet points.

  • Markdown source fields have room. The source view of a task step, a craftbook step, a change proposal or a code review showed about one line; it is now several lines tall.

  • Narrow windows keep their controls. Below about 760 pixels wide, the title bar keeps the queue, engine and stop-narration keys instead of hiding them. History and Craftbooks show the list first and then the item, with a Back key, when there is no room for both. A gezel's Model, Context, Sandbox and Access settings wrap together instead of splitting a label from its value.

  • Gezel loads about a fifth less styling before its first screen.

  • What's new is current. In 1.26273, the Handboek's What's new still opened on the previous release's notes. The build now checks for that.

  • Electron moved from 43.7.5 to 43.7.7.

In the terminal

If you use the gezel command (The gezel command line covers it):

  • An older Node.js gets a clear message. On Node.js older than 24, gezel and gezeld say "Gezel needs Node.js 24 or newer" and where to get it, instead of crashing.

  • You are told when a command starts the background service. A command that has to start it prints "Started the Gezel background service (pid N); it keeps running after this command. Stop it with gezel stop --daemon." Before, about 350 MB kept running without a word.

  • gezel native status and gezel native list leave nothing running. They used to start a background service that stayed up for twenty minutes or more.

  • gezel knowledge install is no longer refused by your security settings, matching the app.

  • gezel knowledge build and gezel knowledge search --semantic say how to install the embedding runtime when an npm install of gezel lacks it.

  • gezel do <craftbook> --wait, gezel task wait and gezel task resume are no longer held up by an old "task paused" notice after the task resumed. Questions and permission prompts still stop them.

  • A background service the command line starts now keeps a log in ~/.gezel/logs/, rolled at 10 MB and kept for seven days. Before, its output went nowhere.

For developers

  • Task outputs. GET /api/projects/:id/tasks/:num/outputs and client.getTaskOutputs() return a task's deliverable and its other files; the taskOutputs runtime capability says whether a host serves it. listTaskNotes(..., { withFileReferences }) (?refs=1) returns notes with their file references resolved.

  • Audio synthesis takes persist: false to skip writing the utterance to the artifacts drawer, and artifactPath in the response is now optional. The SSE stream always delivers at least one chunk.

  • CreateProjectRequest.lead takes 'auto' | 'none'; the meester's kickoff paths pass 'none'.

  • Search results carry similarity, and so does the retrieval trace. Per-catalog vector floors can be overridden with GEZEL_KNOWLEDGE_VECTOR_FLOORS, and the knowledge relevance bar with GEZEL_RELEVANCE_KNOWLEDGE_KEEP. Measure a new catalog or embedder with pnpm --filter @bendyline/gezel-evals run knowledge-calibration.

  • Knowledge install routes no longer return 403 network-blocked. They still refuse session tokens.

  • @bendyline/gezel-knowledge's compiler accepts shardFill: 'semantic', which raised routed recall@8 from 82.6% to 85.7% at six shards in our measurements.

  • @bendyline/gezel-client exports apiErrorMessage. The queue-status types now live in @bendyline/gezel/queue-status and are still re-exported from the client.

  • The local-model turn loop, the model-profile behaviors and the prompt builder moved into @bendyline/gezel/local-loop. The service re-exports them from their old paths.

  • gezeld answers --help and --version (which used to start a full daemon) and warns about unknown arguments. GEZEL_DAEMON_LOG_FILE=1 makes a daemon write the rolling service log, which the client sets for daemons it starts detached. GEZEL_WASM_BASELINE=1 starts a spawned daemon with --liftoff-only --no-wasm-tier-up, a workaround for V8 out-of-memory crashes.

  • Dependencies: Electron 43.7.7, fast-uri 3.1.8.

Things to see and do after update

Run a craftbook that stalled for you last week, and open what it hands back from the card at the end of the thread. If you like replies read aloud, turn on Settings → Audio → Include progress updates to hear them as they arrive. If you installed gezel before today, look at Settings → Artificial Intelligence → Check that indexed context is on topic before using it; it costs about 24 MB and keeps unrelated articles out of your conversations.

Watch this article as a slideshow