Repository navigation
0.6.0a3
Pre-releaseWarning
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.storeandbub.sidecars(removed in 0.6.0a2) are again importable as aliases of thebub.coremodules, along withbub.builtin.commandsandbub.builtin.context.bub.hooks.interceptionkeepsLlmCallRequest/LlmCallResult/LlmCallDecisionas aliases of theLLMCall*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, andLocalEnvironment/LocalProcess→bub.environment.
Changes
🚨 Breaking Changes
- Make code mode a reusable core component - by @frostming in #367 (d3b05)
🚀 Features
- Add max_tool_concurrency to core Agent - by @frostming in #366 (24f9e)
- website: Render Mermaid diagrams with Pele - by @PsiACE in #369 (e37b0)
🐞 Bug Fixes
- Preserve UTF-8 across shell output chunks - by @yunyv in #360 (0bb39)
- Restore fuzzy and Unicode tape search - by @yunyv in #365 (db418)