Heads up This site is currently under heavy development.
Subscribe Get it delivered — the daily firehose, filtered to the tools you run, plus the documentation changes vendors never announce. Compare plans →

The AI Toolchain — issue -227, January 2, 2026

THE AI TOOLCHAIN NO. -227
Tail
THE DAILY RELEASE FIREHOSE
PUBLISHED JANUARY 2, 2026 · EVERY WEEKDAY
EDITIONS tail grep head diff uniq

The daily firehose — everything the toolchain shipped today, already filtered.

// HOW THIS ISSUE IS MADE

We read every release from the 174 tools on our watchlist at the source — GitHub and GitLab release notes, vendor release pages and changelogs, project blogs and feeds, vendor press releases, and the source code behind the tag. Bug-fix-only releases and non-product newsroom noise are dropped; what's left is summarized down to the new capability, how to try it, and any screenshots or videos the release itself published. Every entry links to the sources it was built from.

VIEW
ISSUE VIEW full issue
Do you prefer this view?
$ tct list   # 5 tools matched
AI & LLM Tooling
◆  AI Coding Agents

GitHub Copilot CLI

Sources Release notes → v0.0.374 NOTES

GitHub Copilot CLI v0.0.374 adds auto-compaction, a /compact command, built-in subagents, and a web_fetch tool.

└──▷ GET THIS VERSION
$ git clone --branch v0.0.374 https://github.com/github/copilot-cli.git
# already have the repo? check out this version:
$ git checkout v0.0.374
└──▷ TRY IT
Manually compact a long conversation context before hitting the token ceiling, preserving session continuity.
$ /compact
  • Adds /compact command to manually compact the conversation context.
  • Adds web_fetch built-in tool for fetching web content directly within a session.
  • Introduces auto-compaction that triggers automatically at 95% of the token limit to keep sessions alive.
  • Introduces built-in subagents for exploring and managing tasks.
Was this useful?

Earendil Works Pi

Sources Release notes → v0.31.0 NOTES

AI agent toolkit: unified LLM API, agent loop, TUI, coding agent CLI

Pi v0.31.0 adds session trees with in-place branching, a restructured hooks/tools API, structured compaction with file tracking, and new UI commands.

└──▷ GET THIS VERSION
$ git clone --branch v0.31.0 https://github.com/earendil-works/pi.git
# already have the repo? check out this version:
$ git checkout v0.31.0
└──▷ USE IT
Discover available models and resolve an API key using the new ModelRegistry, replacing the old resolveApiKey callback pattern.
typescript
import { discoverAuthStorage, discoverModels } from "@mariozechner/pi-coding-agent";

const authStorage = discoverAuthStorage();  // ~/.pi/agent/auth.json
const modelRegistry = discoverModels(authStorage);  // + ~/.pi/agent/models.json

const model = modelRegistry.find("anthropic", "claude-sonnet-4-20250514");
const apiKey = await modelRegistry.getApiKey(model);
const available = await modelRegistry.getAvailable();
Register a custom slash command in a hook that waits for the agent to finish before branching from a chosen entry.
typescript
pi.registerCommand("branch-here", {
  description: "Branch session from a specific entry",
  async handler(ctx) {
    await ctx.waitForIdle();
    const entries = ctx.sessionManager.getBranch();
    const target = entries[entries.length - 2];  // second-to-last entry
    await ctx.branch(target.id);
  }
});
  • Sessions now use a tree structure with id/parentId fields, enabling in-place branching via the new /tree command; existing sessions are auto-migrated from v1 to v2 on first load.
  • New /tree interactive navigator supports search, ←/→ paging, filter modes toggled with Ctrl+O (default → no-tools → user-only → labeled-only → all), and l to bookmark entries as LabelEntry.
  • New /share command uploads a session as a secret GitHub gist and returns a shareable URL via shittycodingagent.ai.
  • Adds enabledModels key to settings.json as an allowlist for models, mirroring the --models CLI flag.
  • New ModelRegistry class (discoverModels, discoverAuthStorage) resolves model discovery and API key lookup from ~/.pi/agent/auth.json and ~/.pi/agent/models.json; exposed to hooks and tools via ctx.modelRegistry.
+29 moreshow less
  • Hooks API gains granular session events: session_start, session_before_switch, session_switch (with reason: "new" | "resume"), session_before_branch, session_branch, session_before_compact, session_compact, session_shutdown, session_before_tree, session_tree, before_agent_start, and context.
  • New hook API method pi.sendMessage(message, triggerTurn?) replaces pi.send() and creates a CustomMessageEntry.
  • New hook API method pi.appendEntry(customType, data?) for persisting hook state without exposing it to the LLM context.
  • New hook API method pi.registerCommand(name, options) for registering custom slash commands whose handlers receive HookCommandContext.
  • New hook API method pi.registerMessageRenderer(customType, renderer) for custom TUI rendering of hook entry types.
  • New hook context methods available in all events: ctx.isIdle(), ctx.abort(), ctx.hasQueuedMessages().
  • New UI helpers on ctx.ui: editor(title, prefill?) for multi-line editing with Ctrl+G external editor support, custom(component) for full TUI component rendering, setStatus(key, text) for persistent footer status text, and theme getter for theme-colored text.
  • New HookCommandContext-only methods for slash commands: ctx.waitForIdle(), ctx.newSession(options?), ctx.branch(entryId), ctx.navigateTree(targetId, options?).
  • New ctx.modelRegistry and ctx.model on hook context for API key resolution.
  • Custom tools execute signature reordered to execute(toolCallId, params, onUpdate, ctx, signal?) and gains CustomToolContext with sessionManager, modelRegistry, model, isIdle(), hasQueuedMessages(), and abort().
  • New SessionManager tree methods: getTree(), getBranch(), getLeafId(), getLeafEntry(), getEntry(), getChildren(), getLabel().
  • New SessionManager append methods: appendCustomEntry(), appendCustomMessageEntry(), appendLabelChange().
  • New SessionManager branch methods: branch(entryId), branchWithSummary().
  • New AgentSession method navigateTree(targetId, options?) for in-place session tree navigation.
  • New AgentSession method newSession(options?) accepts optional parentSession for lineage tracking.
  • SDK adds sendHookMessage(message, triggerTurn?) for hook message injection.
  • RPC prompt command replaces attachments field with images field using ImageContent format; auto_compaction_start gains reason field ("threshold" or "overflow"); auto_compaction_end gains willRetry field; compact response now includes full CompactionResult with summary, firstKeptEntryId, tokensBefore, and details.
  • RPC reset command replaced by new_session command with optional parentSession field.
  • Structured compaction now tracks readFiles and modifiedFiles arrays in details, accumulated across compactions, with clear sections: Goal, Progress, Key Information, File Operations.
  • New before_compact and before_tree hook events allow custom compaction implementations.
  • HTML export includes a tree visualization sidebar for navigating session branches.
  • HTML export supports keyboard shortcuts Ctrl+T (toggle thinking blocks) and Ctrl+O (toggle tool outputs).
  • HTML export supports theme-configurable background colors via optional export section in theme JSON.
  • HTML export syntax highlighting now uses theme colors matching TUI rendering.
  • New theme token thinkingText for configurable thinking block text color.
  • New theme tokens required for custom themes: selectedBg, customMessageBg, customMessageText, customMessageLabel (total color count increased from 46 to 50).
  • New BranchSummaryEntry, CustomEntry, CustomMessageEntry, and LabelEntry session entry types.
  • Session entries now use short 8-character hex IDs instead of full UUIDs.
  • ANTHROPIC_OAUTH_TOKEN environment variable now takes precedence over ANTHROPIC_API_KEY for API key resolution.
└──▷ BREAKING ON UPGRADE
  • !HookEventContext is renamed to HookContext; existing hooks referencing HookEventContext will break.
  • !The monolithic session hook event is removed; hooks must migrate to the granular events session_start, session_before_switch, session_switch, session_before_branch, session_branch, session_before_compact, session_compact, session_shutdown.
  • !Session entries are no longer passed in hook or custom tool events; code must call ctx.sessionManager.getEntries() or ctx.sessionManager.getBranch() instead.
  • !pi.send(text, attachments?) is replaced by pi.sendMessage(message, triggerTurn?); callers using the old signature will break.
  • !ctx.exec() moved to pi.exec(); existing hooks calling ctx.exec() will break.
  • !ctx.sessionFile replaced by ctx.sessionManager.getSessionFile().
  • !hookTimeout setting removed; hooks no longer have timeouts.
  • !resolveApiKey parameter removed; use ctx.modelRegistry.getApiKey(model) instead.
  • !Custom tool type CustomAgentTool renamed to CustomTool; ToolAPI renamed to CustomToolAPI; ToolContext renamed to CustomToolContext; ToolSessionEvent renamed to CustomToolSessionEvent.
  • !Custom tool execute parameter order changed from execute(toolCallId, params, signal, onUpdate) to execute(toolCallId, params, onUpdate, ctx, signal?).
  • !Custom tool dispose() method removed; use onSession with reason: "shutdown" for cleanup.
  • !SDK type AppMessage renamed to AgentMessage; references will break.
  • !SDK Attachment type removed; use ImageContent from @mariozechner/pi-ai and add images directly to message content arrays.
  • !AgentSession.branch(entryIndex: number) changed to branch(entryId: string).
  • !AgentSession.getUserMessagesForBranching() now returns { entryId, text } instead of { entryIndex, text }.
  • !AgentSession.reset() replaced by newSession(options?).
  • !SessionManager.saveXXX() methods renamed to appendXXX() (e.g., appendMessage, appendCompaction).
  • !SessionManager.branchInPlace() renamed to branch().
  • !SessionManager.reset() replaced by newSession(options?) with optional parentSession.
  • !SessionManager.createBranchedSessionFromEntries(entries, index) replaced by createBranchedSession(leafId).
  • !SessionHeader.branchedFrom renamed to SessionHeader.parentSession.
  • !SessionManager.saveCompaction(entry) replaced by appendCompaction(summary, firstKeptEntryId, tokensBefore, details?).
  • !SessionManager.getEntries() now excludes the session header; use getHeader() separately.
  • !SessionManager.getSessionFile() returns string | undefined (previously returned a value for in-memory sessions).
  • !SDK export messageTransformer renamed to convertToLlm.
  • !SDK SessionContext alias LoadedSession removed.
  • !RPC branch command field entryIndex replaced by entryId; get_branch_messages response field entryIndex replaced by entryId.
  • !RPC reset command replaced by new_session command.
  • !Custom themes must add selectedBg, customMessageBg, customMessageText, and customMessageLabel color tokens or they will fail to load.
Was this useful?

Alibaba Qwen Code

Sources Release notes → v0.6.0-nightly.20260102.105ad743 NOTES

Qwen Code v0.6.0-nightly adds system-locale-based LLM language auto-detection and ChatCompletionContentPart merging support.

└──▷ GET THIS VERSION
$ git clone --branch v0.6.0-nightly.20260102.105ad743 https://github.com/QwenLM/qwen-code.git
# already have the repo? check out this version:
$ git checkout v0.6.0-nightly.20260102.105ad743
  • Supports merging ChatCompletionContentPart objects and filters empty messages in API content handling.
  • Auto-detects the preferred LLM output language from the system locale, removing the need to manually configure language preference.
  • Adds Russian translation strings for internationalized UI surfaces.
Was this useful?
◆  Local LLM Runtimes

KoboldCpp

Sources Release notes → v1.105.4 NOTES

KoboldCpp v1.105.4 adds --gendefaults for API payload overrides, a new Adaptive-P sampler, and expanded image/video model support.

└──▷ GET THIS VERSION
$ git clone --branch v1.105.4 https://github.com/LostRuins/koboldcpp.git
# already have the repo? check out this version:
$ git checkout v1.105.4
└──▷ TRY IT
Force a specific temperature and top_k on every incoming API request to correct a frontend that sends bad defaults.
$ koboldcpp --model mymodel.gguf --gendefaults '{"temperature": 0.7, "top_k": 40}'
Save VRAM when running Wan2.2 video or Qwen Image generation by enabling the TAEHV approximator instead of the full VAE decoder.
$ koboldcpp --model mymodel.gguf --sdmodel wan2.2.gguf --sdvaeauto
  • Adds --gendefaults flag, accepting a JSON dictionary to append or overwrite any API fields (e.g. temperature, top_k, step count) on all incoming API payloads — useful for correcting misbehaving frontends; supersedes and absorbs the now-deprecated --sdgendefaults.
  • Adds support for the 'Adaptive-P' sampler, which allows selecting lower-probability tokens; configure via adaptive target and adaptive decay parameters, recommended for use alongside min-P.
  • Adds support for Ovis Image and Qwen Image Edit model types.
  • Adds TAEHV support for WAN VAE (compatible with Wan2.2 videos, Qwen Image, and Qwen Image Edit), enabling large memory savings; activate via the 'TAE SD' checkbox or --sdvaeauto.
  • Adds support for using remote HTTP MCP servers for tool calling in Kobold Lite.
+3 moreshow less
  • Extends --autofit to allocate extra space when multiple models are loaded simultaneously (e.g. image generation, embeddings).
  • Allows configuring the number of --smartcache slots (added in hotfix 1.105.1) and improves snapshotting logic for RNN models.
  • StableUI SDUI adds support for requesting AVI-formatted video output (must be enabled in settings first).
└──▷ BREAKING ON UPGRADE
  • !--sdgendefaults has been deprecated and merged into --gendefaults; existing configurations using --sdgendefaults should be migrated to --gendefaults.
Was this useful?

llama.cpp

Sources Release notes → b7614 NOTES

llama.cpp b7614 adds support for the Maincoder-1B model architecture.

└──▷ GET THIS VERSION
$ git clone --branch b7614 https://github.com/ggml-org/llama.cpp.git
# already have the repo? check out this version:
$ git checkout b7614
  • Adds support for the Maincoder-1B model architecture via a new maincoder.cpp backend.
Was this useful?
my-toolchain — 0 tools
paste an install list to detect your tools

A brew list, a Brewfile, requirements.txt, a Dockerfile — or just the product names, free-form. Nothing leaves your browser.

    browse all tools →