Getting Started

Introduction

uxd materializes any git ref of a configured project into an isolated, runnable local workspace with one command.

uxd — unpack, execute, debug — materializes any git ref of a configured project into an isolated, runnable local workspace with one command.

AI coding agents produce branches and pull requests faster than anyone can read them. Reading a diff tells you what changed; it does not tell you whether the app still works. uxd closes that gap: it turns a ref — a PR number, a branch, a commit, a URL, or a local path — into a ready-to-run git worktree, so you can start the app, click through the UI, and poke at the change instead of reviewing blind.

uxd my-project 42 code        # PR #42 → worktree → open in editor
uxd my-project 42 run dev     # same workspace → install deps → start dev server
uxd my-project clean --merged # dispose of workspaces whose PRs merged

The one pipeline

Every workspace command is the same three steps:

resolve(ref) → materialize(workspace) → act(command)

Resolve turns a ref into a concrete git target. Materialize ensures a worktree exists for that target, with dependencies installed, seed files copied, and ports allocated — idempotent, and cheap when the workspace already exists. Act does the thing you asked for: open an editor, run a configured command, exec an arbitrary command, drop into a shell, diff, or sync.

checkout is the pipeline with a no-op act step. Every other verb is a thin wrapper over it. Learn the pipeline once and the whole CLI follows.

What you get

Isolated workspaces

One git worktree per ref, off a single bare clone. Branches do not fight over your main checkout, and you can hold several refs open at once.

Ports that do not collide

Each workspace gets its own port allocation, exported as $UXD_PORT and interpolated into your config, so two dev servers run side by side.

Setup that runs itself

Dependency installs and seed files (.env.local and friends) are part of materializing, not a checklist you keep in your head.

Degrades gracefully

gh adds PR state, CI marks, and true PR diffs. Without it, everything still works against plain git.

Where to go next