Sillage

Open source / Self-hosted / Built around native CLIs

Keep your work
within reach.

A workspace for your coding agents.
Continue from your phone. Keep projects organised. Give each session the context to work with the others.

Claude Code, Codex and OpenCode run on your machine, with their native tools and your accounts. Sillage brings the work into your browser.

Install Sillage Explore the source

Claude Code + Codex + OpenCodeLinux · macOS · Windows / WSL2 · Docker · KubernetesReleases ↗
Sillage in 54 seconds: one session followed from desk to phone, a project board, shared skills and MCP servers, and two agents working it out together.

Your idea. A shared workspace.
Agents that get to work.

You steer from your browser. Everything comes together on your machine.

You, anywhereAsk, review, approve
Messages & live updates
Your computer or server
Starts & follows your agents
Claude Code
Codex
OpenCode

Your accounts & AI models Your agents

Read, edit & run
Your project filesCode, Git branches & terminal
The browser can close. Your agents keep working while their host stays awake.

Switch devices.
Keep the session.

Your agents have a home. Follow their work from any device.

Run Sillage on an always-on server, connect through your VPN, and pick up on your phone. Close your browser mid-turn: the agent keeps working, and the event journal brings the conversation back when you reconnect.

Answer a permission request, review a diff or send a correction. Install Sillage as a PWA and receive push notifications when a turn finishes or an agent needs your attention.

Prefer your own computer? Sillage works there too. Keep it awake and online, and set up remote access before switching devices. Your agents and files stay on the machine where you installed them.

Set up remote access & agent preview links ↗
  • Persistent sessions
  • Message queue & steering
  • Project-aware dictation

A project lasts longer
than a conversation.

Give the work a place to live, from the first task to the next handover.

The project board. Cards keep the task and its conversations together.

Cards with a history

Descriptions, attachments, linked sessions and notes. Start a conversation from a card; the next agent can read what came before.

Room for parallel work

Use the project root, an existing worktree or a new branch. Keep separate changes in separate worktrees while following them from the same project.

The repository at hand

Read files, edit code, inspect diffs and commits, or open a terminal beside the conversation. Search past conversations across projects.

Your agents should know
who else is working.

Two sessions can share a repository without sharing context. Sillage gives them tools to find that context.

Through the built-in MCP server, every agent can discover active sessions, read earlier decisions, identify who edited a file, contact another session and start a new one. The same project history is available to all of them.

Before starting work
See active sessions, branches and worktrees.list_sessions
Before undoing a change
Find the session that edited a file and check what it is doing.find_file_edits
When a decision already exists
Search earlier conversations and read the reasoning.search_history · read_conversation
When work overlaps
Message another session, announce a shared change or ask to be notified when it finishes.send_session_message · broadcast_session_message · notify_when_done
When handing work over
Read the task and leave a note for the next session.read_card · add_card_note
When work belongs elsewhere
Open a card for a bug found along the way. When you ask, start a new session with its own CLI, model, effort and worktree, then get notified when it finishes.create_card · start_session · list_models

These tools help agents coordinate; they do not lock files or prevent merge conflicts. Use separate worktrees when changes need isolation.

Read the tool definitions ↗

Native harnesses.
A shared workspace.

Choose Claude Code, Codex or OpenCode for each conversation. Keep the project around it.

Sillage drives the native CLIs: their tools, permission requests and agent behaviour. Each adapter translates its events into a common format for the interface, history and search.

The board and coordination tools belong to the project, so a Codex session can look up a decision made in a Claude Code conversation. Additional CLIs need their own adapter; Claude Code, Codex and OpenCode are supported today. OpenCode brings any provider and model it can reach, including local ones.

One set of instructions.
One memory.

Claude Code reads CLAUDE.md and keeps its memory under ~/.claude. Codex reads AGENTS.md, OpenCode either one. Sillage gives all three the same context.

Instructions are the rules you set, in a SILLAGE.md with a global part and one per project. They are added to each CLI's prompt: when a session starts for Claude Code and Codex, with every message for OpenCode. A project can keep them in Sillage, and the repository's CLAUDE.md and AGENTS.md are then hidden from agents so nothing arrives twice, or keep them in its repository, edited from the same panel.

Memory is what agents learn while working: one per project, in the format Claude Code already uses. Claude writes it as its native memory, pointed at Sillage's folder; Codex and OpenCode get the index and write through Sillage's tools. What one CLI learns, the others know, and you can read and correct every note.

When you change the rules
Ask an agent to revise the instructions; it edits them like a file.read_instructions · edit_instructions · write_instructions
When something is worth remembering
Codex and OpenCode note it in the project memory; Claude does it natively in the same folder.read_memory · write_memory · delete_memory

Both are read when a session starts: a session already running keeps the version it received. Existing projects keep their repository files until you move them into Sillage.

How it works in detail ↗

Some work should happen
while you are away.

A release watch every Monday. A dependency audit each night. Sillage runs them on time, in a fresh session, and keeps the results out of your way.

The scheduling page. One task, its cadence, its guard rails, and every run it has made.

A scheduled task is a prompt with a cadence: every few hours, a cron expression, or a single date. Each run opens a new session of the CLI you chose, with the model, effort and permissions fixed on the task. The agent is told nobody is at the keyboard, gets the date, link and last reply of the previous run, and is cut off after a maximum duration. A run that overlaps the previous one is skipped, or waits.

Runs do not pile up in the session list. They sit under their task in the sidebar, one line per task with its state and last run, and the scheduling page keeps the full history. Neither CLI has a durable scheduler of its own: Claude's cron dies with its session, Codex has none. The daemon that already keeps your sessions alive does this for both.

When you ask for recurring work
An agent can schedule it from the conversation, with an interval, a cron expression or a date. You adjust it later from the page.schedule_task

Runs use the project's default permissions unless the task says otherwise: a run that asks for a permission waits until its time is up. Pick a mode that fits what the task has to do on its own.

A closer look at the workspace

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.

The everyday details, covered.

Your machine.
Your workspace.

An always-on server is recommended for picking up work throughout the day. Your desktop works too, while it stays awake and connected.

Docker, a systemd user service on Linux, a launchd agent on macOS, the same service inside WSL2 on Windows, or a Helm chart. All bind to localhost or stay inside the cluster by default. Add private remote access with a VPN to connect from another device.

# 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
      - ~/.local/share/opencode:/home/node/.local/share/opencode
      - ~/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. Adjust the mounted paths and authenticate your agents. Start the container, then create the first account:

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

Why I built Sillage

I wanted one place, on a server I own, that I could open from my phone and keep working.

That was the starting point: pick up a project wherever I happen to be, without carrying a laptop or keeping track of a dozen terminals.

I wanted to keep the agents I already used. Sillage runs Claude Code, Codex and OpenCode through their native interfaces, keeping their tools and permission flows. Each has its own adapter; OpenCode also brings access to the providers and local models it supports.

What grew around them is a shared workspace: projects, a board, instructions and memory. An agent can find out what other sessions are doing, read earlier decisions and leave context for whoever picks up the work next, even when they use a different CLI.

Sillage is built with AI, heavily. Claude Code and Codex wrote most of the code, much of it from inside Sillage itself, often from a phone. The tool and the way I work on it grew together.

MarlBurroWCreator of Sillage

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.