Skip to main content
ReleasePreview
v2.25.11

Generators

  • ggml-llm — the llama.cpp runtime is updated to b11385.
  • ggml-decision — new backend for Generator Typed Decision (GGML). Local functions can call context.buttress.decide(). See functions.
  • ggml-tts — model files download in parallel, and a model released while loading is freed when loading finishes. OuteTTS models read every contraction and ellipsis correctly, and text that contains $ no longer changes the prompt.

Agents

  • MCP servers accept exposure / tool_exposure (direct or hidden) and timeout. See agents.
  • Set codemode = true to let an agent run scripts that call its tools in batches. Scripts stop after 5 minutes by default, 30 minutes at most.
ReleasePreview
v2.25.10

Generators

  • ggml-llm — the llama.cpp runtime is updated to b11192.
ReleasePreview
v2.25.9

Generators

  • ggml-llm multi-GPU splitting — split_mode selects how a model is spread across GPUs (none, layer, row, or the experimental tensor), and tensor_split sets the per-GPU proportions, as [3, 1] or "3,1". Both can be set in [runtime] or overridden per model, and are currently configurable in BRICKS Buttress only. Tensor parallelism is experimental and needs a compatible backend and model. See configuration.
  • ggml-stt — Whisper supports the snapdragon acceleration backend on compatible Qualcomm Linux arm64 hardware. See configuration.

Fixes

  • ggml-llm — Generators sharing a session cache no longer overwrite each other’s records, so a saved session survives a restart.
  • ggml-llm / ggml-stt — a context release delay of zero takes effect immediately, and an LLM model released while it is loading is freed once loading finishes.
ReleasePreview
v2.25.8

Agents

  • Local devices (experimental) — set local_devices = true on an agent to let it discover the BRICKS devices and project previews on your network, capture screenshots, inspect Bricks and logs, send taps, keys, and text, and run scripts through DevTools. It is enabled per agent, and uses device credentials where they are required. See agents.

Fixes

  • MLX models — unloading and reloading a model no longer leaves a release request waiting, or makes the newly loaded model unavailable.
ReleasePreview
v2.25.6

Agents

  • Agents (experimental) — [[agents]] tables in the server config define LLM agents that run inside the server, on a configured ggml or mlx generator (model = "buttress/<repo_id>") or an Anthropic, OpenAI, or Google model. Each agent takes a system prompt, local functions as tools, optional MCP servers, turn and token limits, and on-disk sessions that can be resumed or forked. Local functions and daemons call them with context.agents.run(name, { prompt, sessionId, fork }); over HTTP, GET /agents, POST /agents/:name/run (?stream=1 for SSE, which announces the session id first so an interrupted first turn stays continuable), and session listing and abort routes. bricks-buttress agent <name> opens a full-screen chat in the terminal — markdown answers, streamed thinking, tool-call lines, /new, /exit, and Ctrl+C to abort a turn, with --plain for pipes — and takes --sessions, --session <id>, and --fork <id>. See configuration.
  • Tool calling works on the ggml-llm and mlx-llm backends: tool calls come back as structured tool_calls on the OpenAI-compatible and Anthropic Messages endpoints, instead of raw <tool_call> text. Parallel calls, reasoning round-trips, and mid-stream abort are verified, which is what lets agents run on local GGUF and MLX models.

Local functions

  • A local function can read and write the bound workspace’s Data Bank through context.bank.list, get, update, and remove, once bricks buttress bank-key has stored credentials. See local functions.
  • Daemon local functions — a function file with meta.daemon = true runs as a long-lived background function with no deadline. It gets context.setInterval, context.bank.subscribe(propertyIds, onChange) for Data Bank change notifications over one auto-reconnecting connection, and context.onEvent and context.daemons.emit for function-to-daemon signalling. Daemons are not callable as MCP tools or over HTTP, restart on file edit, and show a live table on /status.
  • A local-function call whose client disconnected before dispatch is skipped, instead of running its side effects to its own timeout.

Fixes

  • CORS is decided once per path: a browser POST /functions/<name> with a JSON body passes preflight, /anthropic-messages keeps its x-api-key and anthropic-version headers, and per-surface cors_allowed_origins is honoured. Turning off [autodiscover] http.cors is no longer needed as a workaround.
  • The server no longer exits on a late native callback — a client aborting a completion or transcription mid-stream (ggml-llm, mlx-llm, onnx-stt), or a failed or just-finished onnx-tts or onnx-stt model load still reporting download progress.
  • An unparseable agents_options.session_max_age fails startup, instead of silently sweeping sessions after 30 days.
  • Standalone build: onnx-tts and onnx-stt sessions initialise again. They failed with “A boolean was expected” since the inference runtime update in v2.25.5. Chatterbox Multilingual is verified on a Snapdragon host.
ReleasePreview
v2.25.5

Generators

  • The onnx-tts backend serves the Chatterbox voice models, including Chatterbox Multilingual, so a Generator TTS (ONNX) can offload synthesis without downloading the model. See configuration.
ReleasePreview
v2.25.4

Generators

  • New ggml-tts backend — a Generator TTS (GGML) can offload synthesis to a Buttress server. The device streams the audio back without downloading the backbone or codec GGUF, with capability detection and memory guardrails, and the status page reports the new backend. See configuration.

Models

  • A generator pinned to an exact model id resolves to it even when a looser sibling entry also matches.
ReleasePreview
v2.25.2

Local functions

  • File downloads work from the packaged distribution again — /functions/files/* and /buttress/download answered HTTP 200 with [object Object] in v2.25.1. See local functions.
  • A raw-prompt completion returns its generated text instead of an empty string.

Models

  • GET /v1/models lists the canonical model id for a generator pinned to a specific file, so two generators sharing a repository are distinguishable and the id echoed back by a completion is one the listing actually shows. The compatibility endpoints accept only configured models. See configuration.

Fixes

  • Download credentials are kept out of logs and error output.
  • A failed install rollback keeps its backups instead of deleting them. See installation.
ReleasePreview
v2.25.1

Local functions

  • Local functions (experimental) — .ts / .js files you drop in a configured directory become both MCP tools and HTTP endpoints, so an agent can run server-side work — ffmpeg, or the server’s own LLM / STT / TTS generators — without standing up a separate service. One file is one function, with a JSON Schema declaration MCP receives verbatim, SSE progress streaming, a per-call scratch directory with file upload and download, optional custom authentication, optional hot reload, ready-to-copy samples, and a local functions activity card on the status page.
  • A function can also be called with GET /functions/<name> using the query string as input, so a browser, an EventSource, a webhook, or plain curl can invoke one.
  • A new simple-rag function sample ships with the vector search support it needs bundled into the distribution.
  • bricks buttress mcp-config writes the .mcp.json entry an agent needs. See BRICKS CLI.

Installation

  • Standalone distribution — bricks-buttress now ships as a self-contained executable. The installer detects the host’s ggml accelerator (CUDA, Vulkan, Snapdragon, or default) and downloads only the native packages that build needs, installs into the same ~/.bricks-cli/bin the BRICKS CLI uses, and bricks-buttress update updates in place. See installation.

Generators

  • Generator Vector Store — the GGML embedding model and tokenizer can now be offloaded to BRICKS Buttress, so a device can index and search documents without downloading either GGUF. See BRICKS Foundation.

Fixes

  • Session uploads get a unique stored filename, so two files uploaded in the same session cannot overwrite each other.
  • Model downloads for the LLM, STT, and ONNX backends stay inside the server’s cache directory.
  • Generator finalization is authorized per session and correctly refcounted, so a session that starts the same model twice releases both.
ReleasePreview
v2.25.0

Backends

  • ONNX backends — Generator STT and TTS workloads can offload to BRICKS Buttress through transformers.js and ONNX Runtime, with automatic hardware detection across CUDA, CoreML, DirectML, and CPU, and memory-aware model selection. See configuration.
  • Parakeet engine — the GGML STT backend now runs both Whisper and NVIDIA Parakeet, and advertises the engines it supports so older clients fall back safely.

Autodiscovery

  • Web LAN auto-discovery — web and virtual devices can find a BRICKS Buttress on the local network through a signed HTTP probe and offload inference to it, controlled by the new per-device Local Network Access setting. See autodiscovery.
ReleasePreview
v2.24.6

Generators

  • Generator STT (GGML) — Buttress applies GPU / flash-attention / thread settings correctly at load time.
  • Generator LLM (MLX) — Buttress forwards tokenizer and model config overrides when provided.
ReleasePreview
v2.24.5

WebSocket RPC

  • Binary payload serialization — ArrayBuffer payloads (e.g. from RealtimeTranscriber) and binary auth tokens are now serialized and deserialized as proper Uint8Array / Buffer values, fixing previous Invalid params errors on transcribeData and other binary-payload calls.
  • Proper error instances — JSON-RPC error responses arrive at callers as Error instances with the server’s code / message, fixing previous Transcription error: [object Object] notifications.

CLI

  • buttress-server --version reports the packaged version of the standalone CLI.

Generators

  • Generator LLM (GGML) — bumped llama.cpp runtime to b9254 and exposed MTP (multi-token prediction) speculative decoding parameters.
ReleasePreview
v2.24.4

Sessions

  • WebSocket session resume — sessions survive reconnects through proxies / tunnels. A server-issued session id is exchanged on the WS handshake and restored on subsequent connects, replacing the previous IP-based scheme.

File uploads

  • Per-session scope — uploads and downloads are now scoped to the active session id (X-Buttress-Sess-Id header required). Uploaded files land under a per-session subdirectory and are wiped when the session times out.
ReleasePreview
v2.24.3

Authentication

  • Workspace-scoped JWT auth — each Buttress server is bound to a workspace via bricks buttress bind and verifies issued tokens with EdDSA. /buttress/rpc, /oai-compat, /anthropic-messages, and upload / download endpoints now require authentication. See workspace binding.

Discovery

  • LAN auto-discovery — Launcher selects from a multi-server pool (90s TTL, ranked by hardware caps) and only trusts servers in the workspace’s bound list. See autodiscovery.
  • Signed UDP ANNOUNCE — per-server Ed25519 signatures protect LAN discovery from spoofing. PROTOCOL_VERSION bumps to 2.0 — re-run bricks buttress bind and restart the server after upgrading.

Compat endpoints

  • New TOML config flags [openai_compat] enabled and [anthropic_messages] enabled to enable the experimental compat endpoints. See configuration.