Skip to content

0.6.0a3

Pre-release
Pre-release

Choose a tag to compare

@frostming frostming released this 18 Oct 10:49
4c630d6

Warning

This is a pre-release with breaking changes from 0.6.0a2. Read the upgrade notes below.

Highlights

Code mode is a reusable bub.core component

Code mode moved from bub.builtin into bub.core.codemode, so an agent built on bub.core.Agent can use it without the app extra:

from bub.core import Agent
from bub.core.codemode import CodeMode

code_mode = CodeMode([search, fetch], models="openai:gpt-5")
agent = Agent(model=model, tools=[code_mode.run_code], system_prompt=["You are ...", code_mode.prompt])

CodeMode takes the tools callable from code (a list, or a function of the turn state), environment=, models= (a spec or a resolver that keeps credentials on the host), stub_dir=, media_tools= and name=. Calls made from code still emit ToolCallStarted / ToolCallFinished with context.code_mode set. Bub's own agents use the same class (bub.builtin.codemode.CODE_MODE).

max_tool_concurrency on bub.core.Agent

agent = Agent(model=model, tools=[...], max_tool_concurrency=2)

Limits how many tool calls from one model response run at once. None (the default) runs them all concurrently; 1 runs them one at a time, in order.

Docker images on GHCR

Each release now publishes a multi-arch image to ghcr.io/bubbuild/bub, tagged with the release version (e.g. ghcr.io/bubbuild/bub:0.6.0a3). docker compose up -d pulls it; pass --build to build from a local checkout instead. See Deploy the app.

Reorganized docs

The docs are split into SDK (bub.core) and app (bub[app]) guides, with new pages for agent events, app tools, reusing plugins and supported versions.

Fixes

  • Fuzzy (typo-tolerant) and non-ASCII tape search work again in the builtin tape store.
  • Shell output no longer breaks multi-byte UTF-8 characters split across chunks.

Upgrade notes

  • Compatibility aliases are back. bub.tape, bub.tools, bub.store and bub.sidecars (removed in 0.6.0a2) are again importable as aliases of the bub.core modules, along with bub.builtin.commands and bub.builtin.context. bub.hooks.interception keeps LlmCallRequest / LlmCallResult / LlmCallDecision as aliases of the LLMCall* payloads, so plugins written for 0.5.x work unchanged.
  • Code mode moves (no aliases): bub.builtin.codemode.code_runner → bub.core.codemode.runner, bub.builtin.codemode.republic_bridge → bub.core.codemode.republic_bridge, and LocalEnvironment / LocalProcess → bub.environment.

Changes

   🚨 Breaking Changes

   🚀 Features

   🐞 Bug Fixes

    View changes on GitHub