Repository navigation
0.6.0 #389
frostming
announced in
Announcements
0.6.0
#389
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Bub 0.6.0 is the first stable release of the 0.6 line. It splits Bub into an embeddable agent kernel,
bub.core, and the full app,bub[app]. It also moves model access to Republic and turns the agent loop into events that plugins and SDK users share. This note covers everything since 0.5.1. If you tested the 0.6.0 alphas, the changes after 0.6.0a3 are listed in Since 0.6.0a3.Highlights
pip install bubinstalls only the agent kernelbub.coreinstalls and imports without the rest of Bub. Its only dependencies arerepublic,pydantic,loguruandtyping-extensions. The CLI, gateway, channels, plugin system and TUI prompts are in theappextra:If you run
bubwithout the extra, it lists the missing packages and tells you how to install them. The Docker image,install.sh/install.ps1andbub installalready installbub[app].An event-driven core
Agentbub.core.Agentruns the agent loop over a tape store and reports every step on anEventBus:RunStarted/RunFinished,LLMCallStarted/LLMCallFinished,ToolCallStarted/ToolCallFinished,StepFinished,MessagesPending,ChatFinished. It also accepts:WebSearch,WebFetch,CodeExecution,ImageGeneration,NativeTool) alongside ordinary tools. The provider runs them server-side.max_tool_concurrency=to limit how many tool calls from one response run at once.The system prompt and tools are now prepared once per run, so the request prefix stays stable across the steps of a turn and prompt caching works better. The system prompt is recorded on the tape only when it changes.
Reuse Bub plugins with any core
Agentbub.hooks.agent.AgentPluginsconnects plugin agent-loop hooks (before/after_llm_call,before/after_tool_call,continue_prompt,provide_steering_inbox,system_prompt, tape store/context/sidecar,load_state,provide_environment, and the newprovide_tools) to anybub.core.Agent:BubAgentuses the same adapter, so plugins behave the same in both.Code mode as a reusable component
Code mode lives in
bub.core.codemode. Any core agent can use it without theappextra. Code can call Republic models and pass media attachments.Models and accounts through Republic
Built-in model requests use Republic for provider authentication, message encoding and streaming. Reasoning and provider data survive tape reload and replay.
codex:<model>withbub login codex(supports--device-auth).openai:<model>uses API credentials.extra_body.CLI improvements
bubwithout a command startsbub chat.bub --version/-V, andbub pluginsshows each loaded plugin's distribution and version.,modelcompletion lists the models each configured provider offers.,model <provider>:narrows the list to one provider.elapsed_seconds,ttft_secondsandtotal_seconds.Docker images on GHCR
Each release publishes a multi-arch image:
ghcr.io/bubbuild/bub:0.6.0,:0.6and:latest. See Deploy the app.New docs
The docs at bub.build are reorganized into SDK (
bub.core) and app (bub[app]) guides, in English and Chinese.Fixes
exceed_context_size_errornow start the automatic handoff instead of failing the turn.tool_describeagain for deferred tools they have already loaded.tool_describelists them underalready_loaded.bub acpand directprocess_inbound()turns no longer look for a Telegram token.tool_resultsas aBubError, so consumers such as the ACP server can mark it failed.bub chatprompt no longer redraws itself forever.aiohttp,multidict,urllib3,certifianduv.Upgrade notes
appextra wherever you use the CLI, gateway, channels or plugins:pip install "bub[app]"/uv add "bub[app]".pip install -U bubalone leaves thebubcommand without its dependencies.bub.tape,bub.tools,bub.storeandbub.sidecarsare now inbub.core.*. The old names still import as aliases, and so doLlmCallRequest/LlmCallResult/LlmCallDecision, so most 0.5.x plugins work unchanged. Code mode internals moved without aliases:bub.builtin.codemode.code_runner→bub.core.codemode.runner,bub.builtin.codemode.republic_bridge→bub.core.codemode.republic_bridge,LocalEnvironment/LocalProcess→bub.environment.BeforeLlmCall→LLMCallStarted,AfterLlmCall→LLMCallFinished,BeforeToolCall→ToolCallStarted,AfterToolCall→ToolCallFinished,ChatCompleted→ChatFinished. Hook names are unchanged.@toolno longer registers tools globally, andbub.core.tools.REGISTRYis no longer filled. Plugins should provide tools with the newprovide_toolshook. Tools that an entry-point plugin creates with@toolat import time are still collected, with aDeprecationWarning. To look up tools, use an agent'stoolsorframework.get_tools().Agent.pending_messages,has_pending_messagesandcontinue_promptare gone. Handle theMessagesPendingevent and setStepFinished.next_promptinstead.ToolExecution.tool_resultsand intool_resultsevent data are nowBubErrorinstances, not dicts. The tape still records them as dicts. Failed results are no longer spilled.codex:<model>and runbub login codex. Pass provider options through to Republic, and put provider-specific fields inextra_body..envloading moved frombub.frameworktobub.configure.run_onceis an async generator. The kernel'sFileTapeStorematches by substring; the builtin plugin still provides fuzzy search throughbub.builtin.store.FuzzyFileTapeStore.Since 0.6.0a3
The breaking changes in this list are
AgentPlugins/provide_tools(#371) andBubErrortool results (#385). The other changes are Republic-based models andbub login codex(#349), OSC 7501 status (#345), per-run prompt and tool preparation (#376), the new CLI options and,modelcompletion (#377, #380, #381,bub→bub chat), the token speed fix (#386), the channel prompt fix (#384), the deferred tools fix (#387), the context size fix (#388), security updates (#374, #378) and the docs overhaul (#375).This discussion was created from the release 0.6.0.
All reactions