Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
b225df8
fix: harden xum directory transition
matifali Aug 22, 2026
fad2050
refactor: rename internal Mux identifiers to Xum
matifali Aug 22, 2026
12fb74a
🤖 feat: create a distinct Xum brand mark
matifali Aug 22, 2026
310453d
🤖 refactor: finish developer tooling Xum rename
matifali Aug 22, 2026
77e91db
docs: finish visible Xum branding
matifali Aug 22, 2026
6a47e86
test: use canonical Xum trust paths
matifali Aug 22, 2026
4a6489f
chore: use exec form for Docker healthcheck
matifali Aug 22, 2026
c5043ef
fix: export benchmark compatibility variables
matifali Aug 22, 2026
c93dcda
fix: preserve benchmark rename compatibility
matifali Aug 22, 2026
74edb26
fix: allow legacy leaderboard artifact filters
matifali Aug 22, 2026
e199f37
fix: preserve MuxMessage public type alias
matifali Aug 24, 2026
8cac1f7
fix: honor empty canonical providers override
matifali Aug 24, 2026
dfc29c0
fix: honor empty canonical benchmark repo root
matifali Aug 24, 2026
d1e0411
fix: finish visible and log rename cleanup
matifali Aug 24, 2026
14ad4f9
fix: allow legacy log cleanup compatibility
matifali Aug 24, 2026
5677ce5
test: verify legacy logs asynchronously
matifali Aug 24, 2026
8bb51ec
Merge remote-tracking branch 'origin/main' into rename-all-mux-mnenti…
matifali Aug 24, 2026
a5b4a71
Merge remote-tracking branch 'origin/main' into rename-all-mux-mnenti…
matifali Aug 24, 2026
4e4d1f6
fix: finish agent plugin Xum branding
matifali Aug 24, 2026
248d978
Merge remote-tracking branch 'origin/main' into rename-all-mux-mnenti…
matifali Aug 24, 2026
3d2a3b5
fix: preserve plugin and benchmark rename compatibility
matifali Aug 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
16 changes: 8 additions & 8 deletions .design-sync/conventions.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Mux design system — how to build with it
# Xum design system — how to build with it

These components are Mux's real, compiled React components (the desktop app's UI:
chat tool-call cards, message states, settings sections, banners, modals, small
Expand Down Expand Up @@ -30,14 +30,14 @@ There are **no CSS-module class maps**; style layout with Tailwind utility class
built from Mux's semantic color tokens (NOT raw hex). Real families (all in the
shipped stylesheet):

| Purpose | Utilities |
| ----------- | -------------------------------------------------------------------------------------------- |
| Surfaces | `bg-background`, `bg-background-secondary`, `bg-surface-primary`, `bg-surface-secondary` |
| Text | `text-foreground`, `text-muted-foreground`, `text-content-primary`, `text-content-secondary` |
| Borders | `border-border` |
| Accent | `bg-accent`, `text-accent` |
| Purpose | Utilities |
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Surfaces | `bg-background`, `bg-background-secondary`, `bg-surface-primary`, `bg-surface-secondary` |
| Text | `text-foreground`, `text-muted-foreground`, `text-content-primary`, `text-content-secondary` |
| Borders | `border-border` |
| Accent | `bg-accent`, `text-accent` |
| Agent modes | `text-plan-mode` / `bg-plan-mode` — same for `edit` / `exec` / `thinking` / `task`. `ask` & `debug` ship only as `--color-<mode>-mode` tokens (no utility): use `style={{ color: "var(--color-ask-mode)" }}` |
| Radius | `rounded-md` |
| Radius | `rounded-md` |

For a token Tailwind doesn't expose as a utility, reference it directly:
`style={{ color: "var(--color-content-primary)" }}`. Token names live in the
Expand Down
2 changes: 1 addition & 1 deletion .design-sync/previews/PRLinkBadge.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import type { GitHubPRLinkWithStatus } from "@/common/types/links";
// PRLinkBadge only needs theme + tooltip from the shell.
const PR_LINK: GitHubPRLinkWithStatus = {
type: "github-pr",
url: "https://github.com/coder/mux/pull/1623",
url: "https://github.com/coder/xum/pull/1623",
owner: "coder",
repo: "mux",
number: 1623,
Expand Down
12 changes: 8 additions & 4 deletions .envrc
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,13 @@ nix_direnv_manual_reload

use flake .

# Optional: shared per-user env vars for all mux worktrees
MUX_SHARED_ENVRC="$HOME/.mux/.envrc"
if [[ -f "$MUX_SHARED_ENVRC" ]]; then
# Optional: shared per-user env vars for all Xum worktrees.
XUM_SHARED_ENVRC="$HOME/.xum/.envrc"
LEGACY_MUX_SHARED_ENVRC="$HOME/.mux/.envrc"
if [[ -f "$XUM_SHARED_ENVRC" ]]; then
# source_env() also calls watch_file(), so edits trigger direnv reloads.
source_env "$MUX_SHARED_ENVRC"
source_env "$XUM_SHARED_ENVRC"
elif [[ -f "$LEGACY_MUX_SHARED_ENVRC" ]]; then
# Existing developer machines may not have moved their shared env file yet.
source_env "$LEGACY_MUX_SHARED_ENVRC"
fi
37 changes: 21 additions & 16 deletions .github/workflows/nightly-terminal-bench.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,13 @@ on:
description: "Experiments to enable (comma-separated)"
required: false
type: string
xum_run_as_goal:
description: "Run nightly smoke/matrix tasks as strict Xum CLI Goal Runs"
required: false
default: false
type: boolean
mux_run_as_goal:
description: "Run nightly smoke/matrix tasks as strict mux CLI Goal Runs"
description: "Deprecated alias for xum_run_as_goal"
required: false
default: false
type: boolean
Expand All @@ -32,13 +37,13 @@ jobs:
uses: ./.github/workflows/terminal-bench.yml
with:
model_name: "anthropic/claude-sonnet-4-5"
mux_run_args: "--thinking high"
xum_run_args: "--thinking high"
dataset: "terminal-bench@2.0"
concurrency: "1"
env: "daytona"
task_names: "chess-best-move"
experiments: ${{ inputs.experiments }}
mux_run_as_goal: ${{ github.event_name == 'workflow_dispatch' && inputs.mux_run_as_goal || false }}
xum_run_as_goal: ${{ github.event_name == 'workflow_dispatch' && (inputs.xum_run_as_goal || inputs.mux_run_as_goal) || false }}
# Keep least-privilege secret scope for reusable workflow calls.
secrets:
TERMINAL_BENCH_ANTHROPIC_API_KEY: ${{ secrets.TERMINAL_BENCH_ANTHROPIC_API_KEY }}
Expand All @@ -48,23 +53,23 @@ jobs:
GCP_SA_KEY: ${{ secrets.GCP_SA_KEY }}

# Smoke tests for Harbor SWE-style datasets (single task each).
# These validate that mux can run inside the dataset's repo checkout (--runtime local)
# and that we target the verifier's expected working directory (MUX_PROJECT_PATH).
# These validate that Xum can run inside the dataset's repo checkout (--runtime local)
# and that we target the verifier's expected working directory (XUM_PROJECT_PATH).
swebench-verified-smoke-test:
name: "Smoke test (swebench-verified: django__django-10097)"
needs: smoke-test
uses: ./.github/workflows/terminal-bench.yml
with:
model_name: "anthropic/claude-sonnet-4-5"
mux_run_args: "--thinking high --runtime local"
xum_run_args: "--thinking high --runtime local"
dataset: "swebench-verified@1.0"
concurrency: "1"
env: "daytona"
task_names: "django__django-10097"
mux_project_path: "/testbed"
xum_project_path: "/testbed"
timeout: "3000"
experiments: ${{ inputs.experiments }}
mux_run_as_goal: ${{ github.event_name == 'workflow_dispatch' && inputs.mux_run_as_goal || false }}
xum_run_as_goal: ${{ github.event_name == 'workflow_dispatch' && (inputs.xum_run_as_goal || inputs.mux_run_as_goal) || false }}
secrets:
TERMINAL_BENCH_ANTHROPIC_API_KEY: ${{ secrets.TERMINAL_BENCH_ANTHROPIC_API_KEY }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
Expand All @@ -78,15 +83,15 @@ jobs:
uses: ./.github/workflows/terminal-bench.yml
with:
model_name: "anthropic/claude-sonnet-4-5"
mux_run_args: "--thinking high --runtime local"
xum_run_args: "--thinking high --runtime local"
dataset: "swe-gen-js@1.0"
concurrency: "1"
env: "daytona"
task_names: "biomejs__biome-7314"
mux_project_path: "/app/src"
xum_project_path: "/app/src"
timeout: "600"
experiments: ${{ inputs.experiments }}
mux_run_as_goal: ${{ github.event_name == 'workflow_dispatch' && inputs.mux_run_as_goal || false }}
xum_run_as_goal: ${{ github.event_name == 'workflow_dispatch' && (inputs.xum_run_as_goal || inputs.mux_run_as_goal) || false }}
secrets:
TERMINAL_BENCH_ANTHROPIC_API_KEY: ${{ secrets.TERMINAL_BENCH_ANTHROPIC_API_KEY }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
Expand All @@ -100,15 +105,15 @@ jobs:
uses: ./.github/workflows/terminal-bench.yml
with:
model_name: "anthropic/claude-sonnet-4-5"
mux_run_args: "--thinking high --runtime local"
xum_run_args: "--thinking high --runtime local"
dataset: "aider-polyglot@1.0"
concurrency: "1"
env: "daytona"
task_names: "polyglot_cpp_all-your-base"
mux_project_path: "/app"
xum_project_path: "/app"
timeout: "1800"
experiments: ${{ inputs.experiments }}
mux_run_as_goal: ${{ github.event_name == 'workflow_dispatch' && inputs.mux_run_as_goal || false }}
xum_run_as_goal: ${{ github.event_name == 'workflow_dispatch' && (inputs.xum_run_as_goal || inputs.mux_run_as_goal) || false }}
secrets:
TERMINAL_BENCH_ANTHROPIC_API_KEY: ${{ secrets.TERMINAL_BENCH_ANTHROPIC_API_KEY }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
Expand Down Expand Up @@ -147,12 +152,12 @@ jobs:
uses: ./.github/workflows/terminal-bench.yml
with:
model_name: ${{ matrix.model }}
mux_run_args: "--thinking high"
xum_run_args: "--thinking high"
dataset: "terminal-bench@2.0"
concurrency: "48"
env: "daytona"
experiments: ${{ inputs.experiments }}
mux_run_as_goal: ${{ github.event_name == 'workflow_dispatch' && inputs.mux_run_as_goal || false }}
xum_run_as_goal: ${{ github.event_name == 'workflow_dispatch' && (inputs.xum_run_as_goal || inputs.mux_run_as_goal) || false }}
allow_transient_agent_errors: true
secrets:
TERMINAL_BENCH_ANTHROPIC_API_KEY: ${{ secrets.TERMINAL_BENCH_ANTHROPIC_API_KEY }}
Expand Down
50 changes: 34 additions & 16 deletions .github/workflows/terminal-bench.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,18 +44,34 @@ on:
required: false
type: string
default: ""
mux_project_path:
xum_project_path:
description: "Project path inside the task container (e.g., /testbed, /app/src)"
required: false
type: string
default: ""
xum_run_args:
description: "Additional CLI flags passed to Xum run (e.g., --thinking high --use-1m --budget 5.00; with goal mode, add --goal-turns/--goal-budget)"
required: false
type: string
default: ""
xum_run_as_goal:
description: "Run each task instruction as a Xum CLI Goal Run"
required: false
type: boolean
default: false
# Compatibility inputs for reusable-workflow callers created before the rename.
mux_project_path:
description: "Deprecated alias for xum_project_path"
required: false
type: string
default: ""
mux_run_args:
description: "Additional CLI flags passed to mux run (e.g., --thinking high --use-1m --budget 5.00; with goal mode, add --goal-turns/--goal-budget)"
description: "Deprecated alias for xum_run_args"
required: false
type: string
default: ""
mux_run_as_goal:
description: "Run each task instruction as a mux CLI Goal Run"
description: "Deprecated alias for xum_run_as_goal"
required: false
type: boolean
default: false
Expand Down Expand Up @@ -101,12 +117,14 @@ on:
description: "Model to use (e.g., anthropic/claude-opus-5, openai/gpt-5.6-sol)"
required: false
type: string
# GitHub caps workflow_dispatch at ten inputs. Keep these established
# external names while reusable workflow calls use canonical xum_* inputs.
mux_run_args:
description: "Additional CLI flags passed to mux run (e.g., --thinking high --use-1m; with goal mode, add --goal-turns/--goal-budget)"
description: "Additional CLI flags passed to Xum run (legacy input name)"
required: false
type: string
mux_run_as_goal:
description: "Run each task instruction as a mux CLI Goal Run"
description: "Run each task instruction as a Xum CLI Goal Run (legacy input name)"
required: false
default: false
type: boolean
Expand Down Expand Up @@ -192,15 +210,15 @@ jobs:
TB_ENV: ${{ inputs.env }}
TB_TASK_NAMES: ${{ inputs.task_names }}
TB_MODEL: ${{ inputs.model_name }}
MUX_MODEL: ${{ inputs.model_name }}
XUM_MODEL: ${{ inputs.model_name }}
TB_TIMEOUT: ${{ inputs.timeout }}
MUX_PROJECT_PATH: ${{ inputs.mux_project_path }}
XUM_PROJECT_PATH: ${{ inputs.xum_project_path || inputs.mux_project_path }}
TB_ARGS: >-
${{ inputs.max_tasks && format('--n-tasks {0}', inputs.max_tasks) || '' }}
${{ inputs.extra_args || '' }}
MUX_EXPERIMENTS: ${{ inputs.experiments }}
MUX_RUN_ARGS: ${{ inputs.mux_run_args }}
MUX_RUN_AS_GOAL: ${{ inputs.mux_run_as_goal && '1' || '' }}
XUM_EXPERIMENTS: ${{ inputs.experiments }}
XUM_RUN_ARGS: ${{ inputs.xum_run_args || inputs.mux_run_args }}
XUM_RUN_AS_GOAL: ${{ (inputs.xum_run_as_goal || inputs.mux_run_as_goal) && '1' || '' }}
ANTHROPIC_API_KEY: ${{ secrets.TERMINAL_BENCH_ANTHROPIC_API_KEY }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }}
Expand Down Expand Up @@ -280,13 +298,13 @@ jobs:
echo "Artifact name: $ARTIFACT_NAME"

- name: Upload Terminal-Bench results to BigQuery
if: always() && github.repository == 'coder/mux' && startsWith(inputs.dataset, 'terminal-bench@')
if: always() && github.repository == 'coder/xum' && startsWith(inputs.dataset, 'terminal-bench@')
env:
GCP_SA_KEY: ${{ secrets.GCP_SA_KEY }}
GCP_PROJECT_ID: mux-benchmarks
BQ_DATASET: benchmarks
MUX_EXPERIMENTS: ${{ inputs.experiments }}
MUX_RUN_AS_GOAL: ${{ inputs.mux_run_as_goal && '1' || '' }}
XUM_EXPERIMENTS: ${{ inputs.experiments }}
XUM_RUN_AS_GOAL: ${{ inputs.xum_run_as_goal && '1' || '' }}
Comment thread
matifali marked this conversation as resolved.
run: |
if [ -z "$GCP_SA_KEY" ]; then
echo "GCP_SA_KEY not set, skipping BigQuery upload"
Expand All @@ -299,13 +317,13 @@ jobs:
rm -f /tmp/gcp-sa.json

- name: Upload Harbor results to BigQuery
if: always() && github.repository == 'coder/mux' && !startsWith(inputs.dataset, 'terminal-bench@')
if: always() && github.repository == 'coder/xum' && !startsWith(inputs.dataset, 'terminal-bench@')
env:
GCP_SA_KEY: ${{ secrets.GCP_SA_KEY }}
GCP_PROJECT_ID: mux-benchmarks
BQ_DATASET: benchmarks
MUX_EXPERIMENTS: ${{ inputs.experiments }}
MUX_RUN_AS_GOAL: ${{ inputs.mux_run_as_goal && '1' || '' }}
XUM_EXPERIMENTS: ${{ inputs.experiments }}
XUM_RUN_AS_GOAL: ${{ inputs.xum_run_as_goal && '1' || '' }}
run: |
if [ -z "$GCP_SA_KEY" ]; then
echo "GCP_SA_KEY not set, skipping BigQuery upload"
Expand Down
Loading
Loading