Daily brief

Crush Hooks Now Watch the Whole Run, Copilot CLI Stops Rewriting Your Line Endings, and Copilot Learns to Draw

By · 1 Nov 2026

A developer seen from behind at a round white table looks at a portrait monitor where five cream panels arranged in a ring each have a small cobalt blue tile docked on their outer edge.

At a glance

  • Crush hooks can now follow a whole agent run, from session start to compaction.
  • Crush hook scripts largely match Claude Code's payloads, outputs and exit codes.
  • A Copilot CLI prerelease stops patches from rewriting line endings in mixed files.
  • Copilot can generate and edit images in chat, in public preview.

This is a thin weekend, and our stories run from one to four days old. Claude Code, Codex, Copilot CLI and Gemini CLI all kept the same latest tags overnight, and neither Cursor changelog moved. The newest work is two Copilot CLI prereleases from Saturday afternoon and evening, but they have not reached the default install, so we lead with the one stable release in the set. Crush v0.99.0 shipped on Thursday, and Copilot image generation is a Universe item from Wednesday.

Treat today as a small fixes and safe automation day: try one Crush lifecycle hook if you already write Claude Code hooks, test the Copilot CLI prerelease on a spare machine only if a line ending bug has bitten you, and agree where AI generated images may live before they show up in review.

Top Stories

1. Crush v0.99.0 hooks follow the whole run

Crush, Charm's terminal coding agent, shipped v0.99.0 on Thursday in a release titled "Catwalk v3, hooks!". Hooks are no longer only about tools. The hooks docs list 13 events, covering tool use (PreToolUse, PostToolUse, PostToolUseFailure), permissions (PermissionRequest, PermissionResult), sessions (SessionStart, SessionEnd), turns (TurnStart, TurnEnd, StopFailure, Interrupt) and compaction (PreCompact, PostCompact). Crush now checks hooks against that list, so an unknown event name is a config error instead of a hook that never fires.

The docs say Crush hooks are largely Claude Code compatible, with the same payload field names, the same output forms and the same exit codes, and most Claude Code hook scripts should run unchanged. A table maps each event to its Claude Code counterpart, for example TurnEnd to Stop and TurnStart to UserPromptSubmit. The config shape differs, though. Crush uses one flat list of commands per event rather than Claude Code's nested matcher groups, and only command hooks exist.

Exit code 2 blocks, and a PreCompact hook can block compaction, which the docs suggest for work like a migration in progress. Tool and turn events fire only for the top level agent, so a TurnEnd notification speaks once per prompt rather than once per subagent. The release also moves Crush to Catwalk v3, and existing provider configs migrate automatically.

Practical dev impact: If you already keep Claude Code hook scripts, try one of them under Crush before rewriting anything, and add a TurnEnd notification or a PreCompact guard without wrapping the CLI.

2. Copilot CLI prereleases keep your line endings

These fixes are in prerelease builds only. Copilot CLI shipped v1.0.106-1 and v1.0.106-2 on Saturday as GitHub prereleases, and the npm latest tag is still v1.0.105, so a normal install does not get them. They are not for production machines yet.

The headline fix is in apply_patch. In a file that mixes LF and CRLF line endings, Copilot CLI now keeps the ending of every line it does not change, instead of rewriting the whole file to match the ending of its first few lines. Our read: that old behavior is what turns a two line fix into a diff that touches every row.

The v1.0.106-1 build also keeps line breaks and indentation in text pasted over several lines after /clear, /new, /ask, /delegate or /diagnose. A copilot -p run stopped by Ctrl+C or a signal now writes its shutdown record before it exits, web_fetch decodes pages in the character encoding they declare, and clipboard copy works again on WSL. The v1.0.106-2 build stops an HTTP MCP server that accepts connections but never answers from holding startup for its timeout three times over, and saving MCP server changes now preserves a symlinked mcp-config.json.

Practical dev impact: If mixed line endings or a symlinked MCP config have been hurting you, try the prerelease on one spare machine, and keep the team on the v1.0.105 latest build until these fixes reach it.

3. Copilot can now generate and edit images

GitHub announced this on Wednesday during Universe, so treat it as a catch-up item from this week. You can describe an image in a Copilot chat in VS Code, the GitHub Copilot app or Copilot CLI. Your selected reasoning model calls a dedicated image tool powered by GPT Image 2.5 Flare, previews the result inline and saves it to your workspace.

It is a public preview for Copilot Pro, Pro+, Business and Enterprise, billed separately from your chat model based on image tokens that count toward your plan's AI credits. Organization and enterprise owners can turn it off by disabling the image generation model through Copilot model policies. A visible "Made with AI" watermark is available but off by default.

Practical dev impact: Because generated images land straight in your workspace, decide whether they belong in the repository, which folder they go in and whether they need the watermark, so placeholder art does not slip into a release.

Practical Impact Analysis

All three stories are about trust in small things rather than headline features. Crush's hooks release matters most for anyone building guardrails. An event list that maps onto Claude Code's means one set of scripts can guard more than one agent, and validated event names remove a quiet failure mode where a misspelled hook simply never ran. Our read: teams that already use hooks to block risky commands can bring one more agent under the same rules with little new code.

The Copilot CLI line ending fix matters most on Windows and in older repositories, where a patch that rewrites every ending hides the real change in review. Because it is prerelease only, the safe move is to check whether your repo has mixed files at all, and wait for latest unless the bug is costing you time. Image generation is the most visible change, but it spends credits and writes files without a label unless you opt in, so it needs a team rule first. Elsewhere, Qwen Code v0.26.5 arrived late Saturday with Generated UI on by default and a /verify-pr flow that only reuses your working tree when it is a clean checkout of the PR head.

Tutorial

  1. Open a new terminal in the root of one test repo. Nothing below installs anything or changes files.
  2. Step 1 prints the npm tags for Crush and Copilot CLI and your installed versions.
  3. Step 2 lists files that mix CRLF and LF line endings, which are the files the Copilot CLI fix is about. Our read: a file is listed when it has at least one CRLF line and at least one line without one, so a CRLF file whose last line has no newline shows up too.
  4. Step 3 prints two hook lines in the documented hook add syntax. Copy them into your project .crushrc yourself, and point them at your own scripts.
# We have not run this script end to end on every platform. It prints and checks, and changes no files.
# Run it from the root of one test repo.

# 1. Which versions are out, and which do you have?
#    At 6:01 AM ET Sun 1 Nov npm showed @charmland/crush latest v0.99.0,
#    and @github/copilot latest v1.0.105 with prerelease v1.0.106-2.
npm view @charmland/crush dist-tags.latest
npm view @github/copilot dist-tags
if command -v crush >/dev/null; then crush --version; else echo "no crush CLI on PATH"; fi
if command -v copilot >/dev/null; then copilot --version; else echo "no copilot CLI on PATH"; fi
#    Optional install only. Pinned at 6:01 AM ET Sun 1 Nov, npm registry channel:
# npm install -g @charmland/crush@0.99.0
#    Spare test machine only, npm prerelease channel, not for production:
# npm install -g @github/copilot@1.0.106-2

# 2. Which text files mix CRLF and LF endings? Lists file names only.
while IFS= read -r f; do
  grep -lv $'\r$' "$f"
done < <(grep -rlI --exclude-dir=.git $'\r' .)
echo "Any file listed above mixes line endings."

# 3. Crush hooks, from the v0.99.0 hooks docs. Paste into your project .crushrc yourself.
echo 'hook add TurnEnd --name "done" --command "./hooks/notify.sh"'
echo 'hook add PreCompact --name "no-compact" --command "./hooks/maybe-skip-compact.sh"'
#    The docs' PreCompact example blocks compaction while a marker file exists:
#    if [ -f .migration-in-progress ]; then echo '{"halt":true,"reason":"migration in progress"}'; fi
echo "Done. Nothing was installed or changed on disk."

If a Crush hook never seems to run, check the event name first, because v0.99.0 reports an unknown event as a config error.

Sources:

Recommended AI prompt

Copy this paragraph into ChatGPT, Claude, Gemini, Grok, or whatever AI you use.

Prompt

You are my developer tooling lead for Sunday 1 November 2026. Story 1: Crush v0.99.0 supports 13 hook events across tools, sessions, turns, permissions and compaction, and says its hooks are largely Claude Code compatible. Story 2: Copilot CLI prereleases v1.0.106-1 and v1.0.106-2 keep mixed LF and CRLF line endings intact in apply_patch, keep multi-line pastes after slash commands, stop slow HTTP MCP servers from holding startup three times, and preserve symlinked mcp-config.json files, while the npm latest tag is still v1.0.105. Story 3: Copilot image generation is in public preview, saves images to the workspace, bills image tokens against AI credits and has an optional "Made with AI" watermark that is off by default. Ask me which of these tools my team uses, whether we have mixed line endings or existing Claude Code hooks, and how we treat generated assets, then give me a short checklist for each story, and link the official release notes or docs for each step instead of inventing settings or flags.