Sillage

Self-hosted · MIT licensed

Vibe-code from anywhere.

A web UI for the native Claude Code and Codex CLIs. They keep running on your own machine, under your account, with your subscriptions. You stop needing a terminal to reach them.

Install Source on GitHub

A Claude Code conversation running in Sillage, with tool call groups and a reply being written

Why Sillage

I wanted one place, on a server I own, that I can open from my phone. That is the whole starting point: vibe-code from wherever I happen to be, without hauling a laptop and a terminal around to do it.

What I did not want was another agent. Claude Code and Codex ship a harness their makers put real work into tuning: the prompts, the tools, the permission flow. Rewriting that inside a web app gets you a worse agent behind a nicer interface. So Sillage drives the native CLIs and stays out of their way.

It speaks Claude Code and Codex because those are the two I use. That is my own need, not a final list: adding a CLI means writing an adapter for it, and I expect to add more.

The last piece is the one a terminal cannot give me. I wanted a thin layer above the CLIs so that a session knows the others exist: what is running right now, what an earlier session decided and why, what it left for whoever picks the work up next. Whichever harness happened to run it.

One last thing, since it shaped all of the above: Sillage is built with AI, heavily. Claude Code and Codex wrote most of the code, and most of that happened from inside Sillage itself, often from a phone. The tool and the way I work on it grew together, which is why it ended up looking like this rather than like the specification I would have written first.

MarlBurroW

Around the conversation

Chat is the middle of it. The repository, the history and the work in flight stay one panel away.

Uncommitted changes, expanded hunks and the commit log, beside the agent that produced them.

What Sillage adds

The CLIs already know how to write code, and Sillage does not get in the way of that. What follows is the part it builds around them.

Install

Docker, or a systemd user service on Linux. Both bind to localhost by default.

# docker-compose.yml
services:
  sillage:
    image: ghcr.io/marlburrow/sillage:latest
    ports: ["127.0.0.1:7317:7317"]
    volumes:
      - sillage-data:/home/node/.local/share/sillage
      - ~/.claude:/home/node/.claude
      - ~/.codex:/home/node/.codex
      - ~/projects:/home/node/workspace
volumes:
  sillage-data:

The CLIs are not in the image: install the ones you actually use from the UI, and they land in the data volume. Mount your credential directories to share the authentication you already did on the host, then create the first account:

docker compose exec -it sillage node /app/server/cli/user-create.js

A word on security

Sillage is built for a trusted circle, not for the open Internet. Agents run under your system account with your credentials, every account on the instance shares them, and terminal mode is a full shell. The server listens on localhost and does not terminate TLS: reach it through a VPN, a tailnet or a reverse proxy you control.