Skip to content

Changelog

1.3.0

Extension System

  • New MCP extension: acts as an MCP client towards servers (stdio supported) and exposes their tools as xun tools.
  • New Skills extension: supports Agent Skills bundles, discovering them automatically, injecting only a compact catalogue, activating them on demand, and keeping catalogue and tools resynchronised on its own.
  • New extension_settings configuration field: bucketed per extension name, read by an extension through ExtensionContext.settings.
  • The toolbox gained a disabled-state query, pop for removal and registration of raw function objects, which is what extensions such as MCP rely on.

Core and Tools

  • Conversation messages were rebuilt as typed message classes: system prompt, user message and raw message each have their own.
  • Structured output became a soft constraint: with tools registered, response_format is no longer sent, so tool calls are not suppressed.
  • Completion retries and back-off were reworked: once the automatic retries run out, agreeing to retry grants a fresh window of attempts.
  • The risk-assessment sub-agent got budgets: limited iterations and at most 3 tool calls.
  • Added the sleep tool; the browser evaluate action gained a timeout.
  • Added the /handoff command, which packages the current task into a zip hand-off bundle.
  • /config can now edit a value, /revise accepts replacement content, /compact argument parsing was tightened, and /render validates the path and tolerates a missing suffix.
  • The commands that touch the file system were split out of the default set and are registered only by the interactive entry points.

CLI

  • The command line moved to prompt_toolkit: history search, / slash-command completion and @file reference completion; a confirmation prompt interrupts the current input and restores it verbatim.
  • Fixed garbled output under multi-threading.

Configuration and Prompts

  • AGENTS.md is loaded as its own section of the system prompt, with a new load_project_instructions switch.

Web Service and Frontend

  • HTML / Markdown preview: relative image paths, multi-file HTML, and renderable files open straight into the preview.
  • The preview can edit existing text files and create new ones; nested directories can be created in one step.
  • The settings menu shows the build version and commit.
  • The display layer was refactored: the event store stands on its own and events are kept apart from rendering; mid-screen control styling, table column widths, prompt cards and the spectrum animation were polished.

Containers and Multi-user

  • User containers are given the user name through an environment variable.

1.2.1

Web Service and Frontend

  • Added agent running-state events, so the front end can show exactly when an agent starts and stops running.
  • Fixed the activity preview flickering while it updates; narrow screens fall back to the working icon, which takes up less space.
  • Added a coloured spectrum line to the footer.

1.2.0

Extension System

  • Extension status and a display event: /extensions now reports load status, and an extension whose initialization raises fails visibly instead of leaving only a silent warning.
  • Version compatibility gate: @extension_attr(api_min_version=..., api_max_version=...) declares the supported version range; extensions outside it are marked skipped and never applied.
  • Added xun_version() to query the running version.

Core and Hooks

  • Execution hooks can take the run over: setting takeover_result returns that value straight from the hook handler, skipping the execution steps and appending nothing to the conversation history.
  • Added the html info event, rendered as rich text on the web.
  • Images coming back from tools are size-checked and downscaled automatically when too large; images given as URLs are downloaded before being uploaded.
  • request_image gained a crop parameter.
  • Tool call arguments now tolerate a list that was sent as a string, everywhere.
  • The default maximum iteration count went from 256 to 512.

Web Service and Frontend

  • Sessions can be renamed.
  • The event stream was reworked: messages stand apart from turns, collapsing was improved, single-agent sessions unfold automatically, and a summary card with an activity preview now shows while a run is in progress.
  • Static hosting may now serve the working directory root directly.
  • The slash-command cache is refreshed as the session changes.

1.1.1

Containers and Multi-user

  • xunc <directory> now really uses the mounted directory as the workspace instead of silently falling back to a temporary one.
  • Added xunx pause <user> / xunx resume <user>, which freeze or thaw one user's container without discarding its state.
  • Fixed a token starting with - being parsed as an option by xuns; container start-up now passes --token=<token>.

Web Service and Frontend

  • WebSocket sending was reworked: messages and commands carry a client_id, and the input box plus its attachments are cleared only once the server's accepted acknowledgement arrives; an unacknowledged submission is resent automatically after a reconnect, and the server deduplicates by client_id so nothing runs twice.
  • Sizes in the file details are now shown with a matching magnitude (B / KiB / MiB ...).
  • xuns accepts --no-initial-agent, which lets you browse the documentation without configuring an LLM.

Extension System

  • Start-up no longer prints the Loaded extensions: line.

1.1.0

Extension System (New)

  • Source files under $XUN_HOME/extensions/ were loaded automatically whenever an agent was initialized, in both the package form {name}/setup_extension.py and the flat form {name}.py; the entry point setup_extension(ctx) received an ExtensionContext.
  • Import and initialization failures only warned instead of blocking startup; the feature could be switched off with the enable_extensions config field.
  • Added the display-layer hooks before_display_info / before_display_warning / before_display_error, which could intercept agent output; added the /extensions command and in-repo examples.

Core and Tools

  • Session compaction became tiered: stale tool results were reclaimed first, summarization only ran when the limit was still exceeded, and further rounds could follow after summarization; summary text was no longer mixed into info messages.
  • Cancellation events became chained, so cancelling a parent agent cascaded to its sub-agents; the web frontend also honoured cancellation while waiting for input.
  • Lifecycle state moved into agent_state.py; display methods were extracted into AgentDisplayMixin and brought under type-state constraints.
  • Sub-agent getter parameters became the dataclass AgentGetterParam.
  • The shell tool was renamed to bash; overwriting an existing destination with copy required confirmation.
  • get_choice / get_confirm returned ChoiceOutcome (the chosen value plus its origin); auto-confirmation no longer wrote to the command and path allow-lists.
  • Fixed tool-call parameters drifting out of sync with history after being repaired by JSON fixing.

Configuration and Prompts

  • auto_confirm gained support for the XUN_AUTO_CONFIRM environment variable.
  • The system prompt required reading and following AGENTS.md in the working directory first.

Web Service and Frontend

  • File browsing gained PDF and fullscreen preview, syntax highlighting in the text preview, and inline editing; the list and the details moved to separate panes for faster scanning, and panels became mutually exclusive on narrow screens.
  • Uploads accepted whole directories; the result notification listed every file and dismissed itself automatically.
  • Added static directory serving at /srv/, exposing sites in the working directory directly (valid for 1 hour by default).
  • Event-list loading and transfer were optimized; pending input was kept across sessions; UI strings became bilingual (Chinese/English).

Containers and Multi-user

  • Container startup copied the host xun home into /.xun, taking only config.json and extensions.
  • xunc --env / xunx serve --env accepted NAME=VALUE assignments and wildcard forwarding of host variables.
  • xunx containers became persistent: serve re-adopted existing containers and kept their sessions after a restart, and containers of deleted users were cleaned up during reconciliation.
  • Added xunx upgrade; a running serve rebuilt containers at the next reconciliation.

Documentation

  • Added bilingual Chinese/English documentation (MkDocs), served by the web service at /docs with no login required.

1.0 — 2026-09-15

First official release: the execution loop with structured output, functions-as-tools with 8 built-in tool groups, display layers (console / web / null) and the web frontend, sub-agent generation and session compaction, session commands and policy confirmation, the xun / xuns / xunc entry points, and the xunx multi-user sharing service.