The quirq hub

The quirq hub keeps a space's work in step while people and agents work on it. xo sh runs the hub's client there, and xo gh runs GitHub's gh.

The quirq hub (hub.quirq.dev) is git hosting laid out like GitHub. It is a relay while the work is under way: GitHub stays where the work ends up.

GitHubThe hub
userbuilder: a person's login, with a personal space of the same name
organizationorg: projects with owners and members
repositoryproject, at <space>/<project>

When the xo server keeps a hub, xo login gets you a login there named after your XO username (xo's messages call it your hub agent), and hands it to the hub's client, spacehub (install it first). What xo pushes to the hub lands under that name, AGENT below:

  • a folder space from xo create space is the project AGENT/web, with one branch per repository;
  • a space's GitHub project is its copy AGENT/OWNER--REPO, such as AGENT/pallets--flask (how).

An xo older than 6e6d79b asked the hub for these the old way: the hub made an empty org named after the space (or OWNER--REPO) instead, and the push failed. Update xo (how) and run the command again. To remove those empty orgs, run space-hub's cleanup-junk-orgs.sh where you ran xo login. It lists the empty orgs xo made and deletes them only when you type y:

cd space-hub && git pull && bash scripts/cleanup-junk-orgs.sh

Anyone who can reach the hub can read every project on it in this version.

xo sh: the hub's client

xo sh ARGS runs spacehub ARGS on the hub xo login found. Without a hub it stops and says to run xo login. sh is a word inside xo only: the client is installed as spacehub, never as sh, the system shell.

xo sh auth status                # the hub, and who you are on it
xo sh project list AGENT         # the projects in your space, newest push first, with their sizes
xo sh project view site          # your project site: default branch, size and refs
xo sh project clone AGENT/site   # git clone it, with the hub as the remote "quirq"

A project name without a space is one in your own space. xo sh --help lists every spacehub command.

Work on a project together

Inside a clone, project sync --auto keeps your copy and everyone else's in step: every few seconds it commits your changes, rebases onto every push to the branch, and pushes. It stops on a conflict (exit 2) for you to fix.

xo sh project clone AGENT/site
cd site
xo sh project sync --auto        # edit together until a conflict

In the same clone:

xo sh project who                # who is connected to it right now
xo sh project watch              # each push, live
xo sh project member add bob     # let the builder bob push to it too

xo sh space clone AGENT clones every project in a space into one folder, and xo sh space sync --watch --auto, run there, keeps them all current. Autosync commits often, with generated messages, and skips commit hooks: squash before you take the work to GitHub.

xo gh: GitHub's gh

xo gh ARGS runs gh with these arguments, such as xo gh pr list or xo gh repo view. It is the same gh that xo login connects to GitHub.

What both pass on

  • The arguments go to the tool as they are, and its input, output and exit code are its own.
  • Neither tool gets your XO key. spacehub gets no GitHub token either, and gh never gets GH_HOST, so it always talks to github.com.
  • Put the word first: xo gh pr list, not xo --json gh pr list. xo's own options do not apply to it.

Next: every command.