Skip to content

Releases: borg-ml/agent

v0.13.0

Choose a tag to compare

@github-actions github-actions released this 29 Sep 08:48

Borg Agent 0.13.0

Tools

  • The goal, plan, subagent and cross-agent messaging capabilities are their own
    tools, and one capability tool reaches everything else by name or by search.
    Both are on the default surface, not only on the opt-in one. A promoted name is
    refused through the generic tool and points at its own, and an unknown name is
    answered with the closest real capabilities rather than a bare error.
  • query_history is a tool, so which of its retrieval modes answers a question
    arrives with the guidance instead of after a wrong guess.
  • search_files is a tool backed by ripgrep's own engine, so it needs no
    external executable and is the thing to reach for rather than grep. A file with
    undecodable bytes no longer costs you every match inside it.
  • Extension capabilities are advertised with descriptions read from the live
    catalog, so a newly loaded extension is visible without restarting anything.
  • Computer use is a tool of its own. It was always a full capability - native
    desktop and private-display access, and the approval gate that refuses
    consequential controls until you confirm that exact action - but a model had to
    already know the name and invent a JSON body for it before it could take a
    screenshot. A subagent still gets the private headless display rather than
    yours: the spec is surface-aware, so promotion cannot widen a child's reach.

Performance

  • A fast reasoning model no longer makes the interface lag. Every frame was
    re-rendering the whole expanded block, beginning with a fresh copy of every
    byte of reasoning received so far, so a frame cost the length of the block and
    a stream cost the square of it. At 800 lines that was 17.22ms a frame and
    about seven seconds of CPU for one answer; it is now 0.27ms and 113ms, and a
    frame through a real terminal measures 2.02ms with thousands of deltas
    coalesced into it. The lines that have finished are reused, and the line still
    being written is redone, because that is the only one that can still change.
  • BORG_TUI_FPS and BORG_TUI_STREAMING_FPS are documented. They existed and
    were clamped, but appeared nowhere, so the one knob that changes how streamed
    text feels could not be found.

Reliability

  • A compaction that loses its connection is retried instead of failing your turn.
    One empty upstream response on one fold used to abort the whole sequence and
    fail the turn, costing you the context it was there to save. Retries are
    bounded, and a refusal no repeat can fix -- auth, billing, quota, an
    oversized request -- still fails on the first attempt with its real cause.
  • A provider error now names the field it rejected. Only the code and the
    parameter were reported, which say that something is wrong and never what;
    a malformed request was undiagnosable from outside. The provider's own
    wording comes through with the rejected value stripped.

Reliability

  • A history search on a resumed or forked session can no longer report "no
    matches" while having looked at almost none of the history. Those sessions were
    scanned oldest-first under a hard budget, so on a long thread only the oldest
    events were ever reachable and recent work was invisible however the query was
    phrased. The scan now covers the newest window, which is what a resumed thread
    is asking about.

  • Search results say whether they are complete. truncated already conflated
    "your hit list hit the limit" with "the scan never reached the rest of the
    history", and the two were indistinguishable to a caller. A result now carries
    search_incomplete plus the scanned_from_sequence..scanned_to_sequence
    window it covered, so an empty result reads as "not found in what I looked at"
    rather than "does not exist", and the rest can be paged with start_sequence.
    The query_history description says so too.

  • An upstream that answers with an empty response is retried instead of ending
    the turn. Only a refusal is treated as fatal now; everything else is
    retryable, as it was before mid-stream errors were recognised at all.

  • A tool call carrying the presentation field its own schema advertises is
    accepted. The same idea appears as action and as description, and a call
    formed exactly as documented was being refused as malformed - the cause of most
    of that tool's flakiness.

Terminal UI

  • An action group that live work was holding open now folds when that work
    finishes. A group held open by a running process never collapsed, because
    being the newest group kept it open on its own.
  • Pending input reads as an action group rather than a bordered panel: the
    same disclosure, the same summary, the same grey, no frame.
  • A retry no longer re-announces the goal. Every retry re-emits it, and the
    card was taken out and pushed back, so resuming dropped it to the bottom of
    the transcript and reprinted a goal already on screen.

Terminal UI

  • A status line that overflows now ends in a mark. Losing its last column to
    truncation used to drop the tail with nothing to show the text had been cut.
  • The effort and billing segments share one colour instead of being graded per
    value, so the same colour no longer means xhigh in one place and a pro/max
    subscription in another.
  • Dragging the scrollbar moves the transcript one line per row. A scrollbar maps
    proportionally, so on a long thread one row of drag moved hundreds of lines and
    the closer to the middle of the thumb you grabbed, the less each row was
    worth. Clicking the track still jumps - that gesture means "go there" - and
    only the drag changed.
  • The composer's text-entry ground is darker and neutral, so the three rows you
    type in read as a well rather than another band of transcript.
  • The splash says what it is. It now reads "BORG" over "agent" over the version
    with the channel beside it, and all three lines keep one width and one centre
    whatever the version turns out to be - the v prefix yields to the width
    rather than the layout bending around it.

Providers

  • A tool result carrying an image no longer puts the image inside the tool
    result field, which the API reads as text. A valid screenshot came back as
    invalid_value on input -- "the image data you provided does not
    represent a valid image" -- and broke every later turn in the session.
  • An image attachment is typed by what its bytes are, not by what the file is
    called, on every path.
  • A pay-per-use OpenAI key is no longer sent the request shape a ChatGPT
    subscription uses, which the public API rejects outright.

Providers

  • Qwen models that take an effort ladder are sent one. enable_thinking is a
    boolean and is right for Qwen3.5/3.6/3.7, but the Qwen3.8 family takes
    reasoning_effort instead and converts a level into a thinking budget itself
    • so a laddered model was being offered low/medium/high in the picker and then
      having enable_thinking put in the body, and the effort had no effect on the
      request. The choice is now made per model from the catalog entry that already
      exists for it.

Setup

  • The Python library's documented usage is corrected: borg is already in the
    namespace, so import borg is not part of it.
  • HOME can be set for the runtime worker as a user setting, defaulting to off.

Full changelog

v0.12.9

Choose a tag to compare

@github-actions github-actions released this 27 Sep 23:01

Borg Agent 0.12.9

Updates

  • Automatic updates accept larger release archives; release packaging stays within
    the old updater's download limit so existing installations can still upgrade.

Terminal UI

  • Ctrl/Cmd numbered hints no longer recolour the subscription label in the footer.
  • Persistent Python workers no longer let child-process terminal prompts overwrite
    the TUI or stall on terminal job control.

Full changelog

v0.12.8

Choose a tag to compare

@github-actions github-actions released this 27 Sep 20:00

Borg Agent 0.12.8

Terminal UI

  • The splash swaps orange and white between the logo and alpha caption, including glitches.
  • Collapsed plan previews show open items before completed items; keyboard hint badges
    no longer overlap popups or repaint the footer background.
  • Running command follow-ups use the shorter “Read output” action label.
  • Enhanced terminal input requests shifted key characters so uppercase and punctuation
    reach the composer on terminals that report alternate key codes.
  • Stopping a background command watcher also stops job-control child processes
    instead of leaving builds running after the watcher exits.

Full changelog

v0.12.7

Choose a tag to compare

@github-actions github-actions released this 27 Sep 13:49

Borg Agent 0.12.7

Context

  • Native automatic compaction preserves the request prefix needed to restore
    subsequent provider-measured usage after restart. Local context estimates no
    longer count duplicated provider output or opaque reasoning signatures as text.

Full changelog

v0.12.6

Choose a tag to compare

@github-actions github-actions released this 27 Sep 07:00

Borg Agent 0.12.6

Terminal UI

  • Numbered keyboard hints label the status controls above and below the composer
    instead of transcript rows. Badges sit above their controls; hold Ctrl on
    Linux/Windows or Cmd on macOS, or press F12 in terminals without modifier events.
  • Escape sends queued user input into an active turn instead of interrupting it;
    with no queued input, Escape still interrupts.
  • Plan updates highlight replaced and removed rows in red and their replacements
    in green. Fresh chats no longer show an empty 0/0 completed plan card.

Configuration

  • [prompt] append in agent.toml adds user-scoped instructions to local agent
    turns without replacing Borg's core prompt. It applies when a session or host
    executor starts with the new settings.

Full changelog

v0.12.5

Choose a tag to compare

@github-actions github-actions released this 27 Sep 03:25

Borg Agent 0.12.5

Context

  • Resumed native sessions restore provider-measured context usage when the
    saved checkpoint matches the replayed conversation and request prefix.
    Compaction explains when it is using a local estimate instead.
  • Codex compaction uses low reasoning effort instead of inheriting the working
    turn's high or extra-high effort, while preserving the cached request prefix.

Work coordination

  • Agent plans and shared work use one durable todo model. Assigned work appears
    in ordered per-agent plans; omitting an assignee creates unassigned backlog.
    Migration preserves existing work, dependencies, subtasks and review metadata.
  • Plans retain blocked and awaiting-review states, and selected-agent views can
    show and edit stopped agents' work. Removing an item from a plan unassigns it
    rather than deleting it. Concurrent claims and edits use revision checks.

Providers and tools

  • Claude subscription cache warming uses the same pinned account and connector,
    with capped output and no API-billing fallback. Adaptive thinking settings are
    preserved; budget-based thinking remains ineligible. Subscription cost
    comparisons are labelled as API-equivalent estimates. Automatic Codex warming
    remains disabled without established cache-retention semantics.
  • MCP discovery follows paginated tool lists within a bounded discovery timeout.
    MCP tool errors propagate as failures, including through code mode, rather
    than appearing as successful raw responses.

Terminal UI

  • Fast streamed replies avoid rescanning earlier styled spans when wrapping,
    and code blocks reuse highlighting for completed lines instead of restarting
    from the top on every repaint.
  • Modifier-held numbered hints activate visible clickable targets with 1–9 and
    0, with an F12 fallback for terminals that cannot report modifier holds.
  • Received agent messages use an incoming arrow.
  • The status row's scroll-back and return buttons no longer cover the status
    line. The line gives up their columns and ends in an ellipsis in front of
    them, and a click on a button no longer reaches the control it used to hide.

Full changelog

v0.12.4

Choose a tag to compare

@github-actions github-actions released this 26 Sep 19:39

Borg Agent 0.12.4

Providers

  • Vercel AI Gateway is a provider. borg login vercel stores a gateway key, or
    set VERCEL_AI_GATEWAY_API_KEY, and /model lists every language model the
    gateway serves — 264 today, including stealth/pixel-canary — from a session
    on any provider. Embedding, reranking, image, video, realtime, speech and
    transcription models are left out: they cannot answer a chat completion.

Terminal UI

  • A completed reasoning row is marked ◦ instead of ✦.

Sessions

  • Sending a message no longer resumes a goal that a stop or a block left
    parked. The message is still answered and an Escape stop is still released,
    but the goal waits for an explicit /goal resume. Set
    [capabilities] resume_paused_goal_on_message = true for the previous
    behavior.

Full changelog

v0.11.6

Choose a tag to compare

@github-actions github-actions released this 25 Sep 13:40

Borg Agent 0.11.6

Models

  • Ordered model fallback chains: set [models].fallback (for example
    ["claude-opus-5-5@max", "gpt-6-sol@xhigh", "opencode-go/deepseek-v4.1"])
    and a usage limit moves the same turn to the next model with quota, then back
    once the limit resets. Named chains compose with chain:<name>, and a route
    never spends API credit unless it opts in. See docs/model-fallback.md.
  • A new session started without --provider or --model begins on the first
    route of the chain when that subscription is signed in.

Terminal

  • Footer hover hints say click and right-click, and they and the Pending Input
    controls use the footer's style: keys in white, the rest in dark grey.
  • Stopped and failed subagents stay on the team roster, after the working ones,
    marked "click to resume"; the status line shows "N stopped" when none are
    working so the roster stays reachable.
  • "Jump to bottom" sits on the status row instead of covering the newest
    transcript line.

History

  • Filtering history by actor works without search text.

Full changelog

v0.11.3

Choose a tag to compare

@github-actions github-actions released this 24 Sep 14:35

Borg Agent 0.11.3

Terminal

  • Image previews render once, at native size. Resumed and child
    transcripts forgot the terminal's graphics support, so a preview drew a
    blocky text fallback under a stretched copy of the image and was captioned
    "text unreadable here". Every transcript now uses the graphics protocol.
  • Message backgrounds and diff highlight bars reach both edges of the screen;
    the scrollbar is drawn over them.
  • The footer's ↓N behind-count shows a "git pull" tooltip on hover, like the
    ↑N push count, so it is clear that clicking it pulls.

Agents and teams

  • Messages sent while a steer is in flight are delivered together. A
    second message was held until the next model call, which could be a long
    tool call away. Held messages now go to the model, each separately, as soon
    as the earlier one is accepted.

Full changelog

v0.11.1

Choose a tag to compare

@github-actions github-actions released this 24 Sep 11:33

Borg Agent 0.11.1

Agents and teams

  • Messages you send during a usage-limit wait run immediately. Borg no
    longer holds them until the automatic retry, which could be hours away after
    you had already topped up or switched account. If the limit still applies,
    the turn returns to the same wait.
  • Team reports stay out of Pending Input during a usage-limit wait. A
    subagent report that arrived while the session waited on a usage limit was
    queued as if you had typed it; it is now kept as a team update.

Full changelog