v2.12

FujiwaraChoki/MoneyPrinterV2v2.12Sep 9, 2026by github-actions[bot]

Upgrading?

AI Summary

A comprehensive update focusing on UI unification, security hardening for connectors, Responses API preservation, and Context Doctor improvements.

Key Highlights

  • Connector & Transport hardening with atomic HTTP transfers and bounded WebSocket payloads
  • Unified File Browser and Editor with ACE syntax highlighting
  • Preservation of native tool calls and Responses API history
  • Context Doctor improvements with split-thoughts repair strategy
  • Prompt and profile compaction to reduce token usage

New Features

  • Enforced negotiated WebSocket payload ceilings
  • Made workspace HTTP file transfers atomic
  • Unified text and code editing with ACE syntax highlighting
  • Preserved native tool calls through Context Doctor
  • Added split-thoughts repair strategy
  • Made canvas rail movable and customizable
  • Added Safari setup to Browser settings

Full Release Notes

# Agent Zero Release Notes

## Connector & Transport Hardening
- Enforced negotiated WebSocket payload ceilings with a symmetric checksummed transfer protocol for large operations, including bounded transfer state, disk spooling, and automatic cancellation on pause, reset, delete, or disconnect
- Made workspace HTTP file transfers atomic with streaming uploads into partial files, size verification, fsync, and SHA-256 download receipts
- Bounded remote connector tool payloads with explicit continuation metadata for large content, rejecting oversized inline artifacts before base64 expansion and routing bulk files to authenticated HTTP transfers
- Documented connector payload contracts including WebSocket ceilings, transfer state machine, cancellation lifecycle, and remote text limits

## File Browser & Editor
- Added independent, lazily loaded directory trees to Files and Editor in canvas and modal modes with unified styling, lighter panel backgrounds, and flat toolbar controls
- Unified text and code editing in the shared Editor with ACE syntax highlighting, line numbers, native source search, and Markdown preview — removing the legacy file-editor modal
- Added File Browser preferences for sorting, view mode, initial tree visibility, and independent editing and transfer limits
- Exposed connected CLI and Launcher folders in Files with host permissions, authenticated HTTP transfers, size/SHA-256 checks, and atomic publication
- Centralized streamed file transfers and hardened archive operations with expansion and entry budgets, unsafe member rejection, and owned temporary-file cleanup
- Moved File Browser controls into a dedicated Settings category with appearance defaults, remote connections, file limits, and archive limits
- Added configurable editing (10 MiB default) and transfer (100 MiB default) limits shared across Files and Editor
- Fixed file links in chat messages to recognize file URLs and download API paths in the shared path-link renderer
- Polished Files selection toolbar, removed tree tooltips, matched folder icon tint to standard file icons, and hid file sizes in icon view

## Responses API & Native Tool Calls
- Preserved native tool calls through Context Doctor, leaving canonical function calls untouched by text repair
- Stored canonical function-call content through assistant history and masking, with proper repeated-response detection
- Streamed native tool arguments through the existing live display with alias normalization and masking
- Described bundled tool arguments in Responses schemas for 15 tool implementations with non-strict definitions
- Preserved policy-filtered guidance in native Responses function descriptions with A0 envelope-to-argument conversion
- Projected native system instructions only for Responses requests, reducing Codex input from ~16.4K to ~11.3K tokens
- Preserved native Responses history within prepared prompts, retaining original IDs and encrypted reasoning
- Consolidated Responses prompt bookkeeping outside Agent, reducing agent.py additions from 61 to 24 lines
- Made `llm_result` required in `hist_add_ai_response` with `LLMResult.non_llm` sentinel for non-LLM turns
- Kept Responses stream reconstruction inside the parser with one authoritative output-item store
- Skipped unused Chat replay preparation and shared input conversion for Chat Completions

## Context Doctor & Response Handling
- Added split-thoughts repair strategy extracting value selection into a helper with configurable settings
- Handled reasoning-only and plain-text fallback responses with dedicated retry warnings and user notices
- Tightened usable-response detection requiring at least one A0 key with a non-empty value
- Fixed raw-text fallback classification by moving raw thoughts wrapping after repair selection
- Counted `thoughts_fallback` warning toward the unusable-response limit
- Let Responses text reach the core response dispatcher while continuing to repair recognizable tool intent

## Prompt & Profile Improvements
- Hid disabled capabilities from system prompts so policy-filtered tool prompts remain the source of truth
- Moved MCP guidance into prompt templates with policy-filtered qualified names and schemas
- Compacted developer and researcher profile prompts, reducing token counts from ~2,600 to ~750 each
- Strengthened shared problem-solving prompts with observable success criteria, evidence-driven replanning, bug reproduction, and source-preserving synthesis
- Reinforced response tool usage in prompts, explicitly stating plain-text output without a tool call is invalid
- Stripped trailing newlines in `read_prompt` and `parse_prompt` for consistent template handling
- Added initial user turn to preserve AI greeting turn order when no project is selected
- Rendered scoped profile routing catalog as one line per profile ID with delegation context

## Canvas & UI
- Made the canvas rail movable and customizable with a vertical drag handle, keyboard support, viewport bounds, and remembered position
- Added a "Show verbose tool calls" preference gating tool name and args display in the message stream
- Added `text_editor` custom message handler with dynamic action+path headings
- Themed dark checkboxes with light checkmarks and centered Memory Dashboard selection controls
- Polished surface modal headers to a shared 48px height with centered controls
- Refreshed context indicator after clearing chat
- Showed LiteLLM and Secrets settings by default without collapsible wrappers
- Avoided replaying queued WebUI updates — live benchmark showed catch-up reduced from 1.95s to immediate
- Fixed context window popover staying within bounds on short labels
- Fixed Browser tab switching stuck in loading state when reusing the same viewer URL
- Fixed branch button injection skipping markdown-wrapped action bars
- Clarified required Agent Editor instructions with validation errors and tooltip cleanup

## Browser & Desktop
- Added Safari setup to Browser settings with structured setup guidance for Safari and Chromium-family browsers
- Sped up Browser and Desktop startup by limiting initial D-Bus and CUPS waits to one second
- Fitted Desktop display to the active canvas, removing the aspect-ratio fallback that cropped narrow viewports
- Fixed Desktop and Office package installation using the Python 3.13-compatible Kali snapshot
- Preserved the shared browser cleanup thread across context resets

## Model & Provider Management
- Prevented chat parameters from leaking into embedding configurations
- Preserved Codex OAuth prompt cache affinity with stable session/thread IDs and bounded default cache keys
- Kept OAuth model discovery tied to account availability without replacing empty catalogs with generic registry models
- Reported provider usage for streamed Chat Completions turns with automatic retry when `stream_options` is rejected
- Kept encrypted Chat reasoning out of readable output by filtering provider encrypted-reasoning markers
- Preserved Codex Chat bridge usage and terminal outcomes with token count translation
- Reported invalid model parameter JSON before saving with editor context identifying the preset and slot
- Avoided repeated preset reads during embedding comparisons — median save time reduced from 1,171ms to 52ms
- Discarded model search results for changed drafts and queries
- Set tested Codex client version (0.153.3) by default for model discovery without CLI

## Skills & Plugins
- Added an on-demand guide for managing projects, chats, profiles, and saved tasks through existing APIs
- Consolidated plugin authoring behind `a0-create-plugin` and lifecycle management behind `a0-manage-plugin`
- Required `hooks.py` for plugin setup and cleanup in authoring guidance
- Hid remote skill discovery until the A0 CLI connects
- Fixed trailing commas in six JSON skill examples and rewrote 23 skill descriptions for catalog preview
- Validated skill examples and sharpened descriptions with regression checks

## Parallel Execution & Terminal
- Kept parallel terminal jobs alive until their commands finish, publishing progress through job results
- Kept goal operations out of disposable parallel workers with shared validation across dispatch paths
- Preserved streamed child log content in parallel jobs so user-visible output is never replaced

## Security Fixes
- **WhatsApp**: Fixed media path traversal and enforced pre-download sender/group authorization
- **Telegram**: Fixed webhook authentication bypass — reject HTTP updates for polling bots and require matching nonempty webhook secret
- **IMAP**: Fixed sender whitelist bypass with strict mailbox parsing requiring exactly one valid From address

## Infrastructure & Stability
- Optimized scoped tool policy resolution reusing one fresh policy snapshot across batches
- Unified embedding calls behind a single batch entry point removing duplicate transport logic
- Serialized shared event-loop initialization to prevent concurrent first-use from stranding tasks
- Preserved rollback stash identity during self-update by tracking Git object IDs
- Preserved non-LLM mode when reloading result metadata through dictionary and history round trips
- Restored legacy assistant history call compatibility accepting message-only and positional ID calls
- Shared editor log presentation across local and remote tools
- Kept the rate limiter demo out of test collection
- Used 4-space indented tree in workdir extras for token-compact agent-facing output
- Routed nudge as system message and minified message templates
- Simplified WhatsApp pairing to one QR-code action with sequential polling
- Updated Launcher README links to v1.7
- Ignored `.venv` in generated gitignore templates

## Breaking Changes
- `hist_add_ai_response` now requires an `llm_result` parameter — use `LLMResult.non_llm()` for non-LLM turns (greeting, intervention progress). Legacy message-only and positional ID calls remain supported via automatic sentinel injection.
- `thoughts` is no longer auto-populated from `reasoning` when absent (reasoning-to-thoughts revert).
- Plugin authoring now requires `hooks.py` for dependency installation, initialization, and uninstall cleanup — `execute.py` setup patterns are no longer supported.

Related Repositories