Compass release notes

Every release of Compass, newest first. Subscribe with RSS.

16 October 2026

Compass 0.4.1: Build a product on Compass

A product built on Compass can now change how the whole install behaves: it registers a host, which runs before the open defaults and can add API routes, lifecycle hooks and its own job queue.

Hosts

Every function registered under the compass.hosts entry point (or named in COMPASS_HOSTS) runs once per process, at the start of the CLI and before the API is assembled. With a product installed, compass api and compass serve become that product's API and daemon, without a second app module.

[project.entry-points."compass.hosts"]

Routes and lifecycle hooks

compass_api.extensions gains register_router, register_startup and register_shutdown. The app runs the startup and shutdown hooks through its lifespan.

register_router(router, prefix="/api/acme")

Open defaults stay safe

With a host installed, Compass keeps the host's job queue and shows its tabs. If a host fails, the failure is logged and the open defaults stay in effect.

15 October 2026

Compass 0.4.0: Install captains from the page

An administrator can now install a catalog captain from Settings → Captains → Available, click Restart Compass, and start using it. Update and uninstall work the same way, and compass validate runs the CI's manifest checks on a captain you are writing.

Install, update, uninstall

Install and Update buttons on Available, and Uninstall on captains installed from the page. Restart Compass from the page; a banner waits until Compass is back.

POST /api/captains/install | uninstall | restart

Installs that can't half-fail

Compass installs the requested set into a fresh directory and swaps it in under a file lock, so the API and the daemon never install at the same time. If an install fails, the previous set stays in place and the page shows the error.

Trust settings

Only catalog entries with a pinned pip line can be installed: branches and version ranges are refused. Installing needs an administrator and is refused in read-only mode. COMPASS_CATALOG_ALLOW limits installs to the captains you name, and COMPASS_CATALOG_INSTALL=off turns page installs off.

COMPASS_CATALOG_ALLOW=hello

compass validate

Run the CI's manifest checks on your own captain before you publish it. compass install and compass uninstall do the same as the page from a shell in the container.

compass validate path=./my-captain

The development guide

docs/captain_development.md goes from an empty directory to a catalog entry: start from the example, the local loop, commands, settings, a dashboard page, tests, versions and publishing.

docs/captain_development.md

14 October 2026

Compass 0.3.0: The captain catalog

Settings → Captains gets an Available tab: a searchable catalog of captains, with each entry checked against your install. The example captain is the catalog's first open entry.

Settings → Captains → Available

Search the catalog from the dashboard. Each entry is checked against your install and marked installed, update available, installable, incompatible or vendor. Available gives you the COMPASS_EXTENSIONS line to add and tells you to restart.

One JSON catalog

Compass reads one catalog file (COMPASS_CATALOG_URL, or off to disable it). When the source can't be read it falls back to the copy shipped with Compass, and it drops invalid entries with the reason why.

COMPASS_CATALOG_URL=off

From the API and the shell

GET /api/captains/catalog?q= returns the same annotated list as the dashboard, and compass catalog prints it in a terminal.

compass catalog q=hello

The example captain

The toy captain moved to examples/captain-hello as a pip-installable distribution with its own entry point. It is the catalog's first open entry, and docs/writing_a_captain.md now covers publishing to the catalog.

pip install ./examples/captain-hello

14 October 2026

Compass 0.2.1: A patch for captains

A small follow-up to 0.2.0: the test suite collects again now that captains is a namespace package, and the dashboard chooses its opening tab the same way the hosted product does.

Tests import by path

Because captains is now a namespace package, a tests directory on sys.path added tests/captains/* to it, and the honeypot tests stopped collecting. pytest now runs with --import-mode=importlib, so test directories stay off sys.path.

addopts = "--import-mode=importlib"

The opening tab follows the product

The dashboard opens on the default tab, or on the first enabled tab when the default is turned off. Routers are registered as (router, prefix) pairs, as they are in the hosted product, so both builds stay in step.

14 October 2026

Compass 0.2.0: Captains as extensions

Each Compass capability is now a captain: a single manifest that a Python package can provide. Captains are turned on, off and configured per workspace from the dashboard, and extra ones are installed into the image when it starts.

One manifest per captain

A captain declares its commands, API routes, dashboard tabs, background services, config schema and the core version it needs. Compass discovers captains through the compass.captains entry point, so a third-party package can add its own next to the built-in ones.

[project.entry-points."compass.captains"]

Settings → Captains

Turn each captain on or off per workspace, with dependency rules so nothing that another captain needs can be turned off. Configure it through a form generated from its schema, with secrets masked. A turned-off captain's jobs and writes are refused.

compass captains | enable | disable | configure

Extensions in the image

List packages in COMPASS_EXTENSIONS and the image installs them when it starts. The daemon runs the services of active captains and stops them when one is turned off. A captain the dashboard has no component for gets a generic page.

COMPASS_EXTENSIONS=my-captain@git+https://…

A guide to writing captains

docs/writing_a_captain.md covers the manifest, discovery, configuration and tests, with a toy captain to start from. Any command can also be started through POST /api/jobs.

docs/writing_a_captain.md

13 October 2026

Compass 0.1.0: Compass goes open source

The open edition of Compass: it maps an AWS account to the Terraform and repositories that own it, then acts on the map. It runs on your machine in Docker Compose, with your credentials, and nothing leaves.

The infra map

Every resource in every region, joined to the Terraform state and module that manages it and the repository that holds it. Export it as JSON, DOT or a single HTML page.

compass mapper run

Decoys that trip when used

Honeytokens (an IAM key, a database password, an SSH key, an S3 object, an API token, a DNS record) placed where they look real, as a pull request to your infra repo. When one is used you get the incident, its blast radius and a response within a risk policy you set.

compass honeypot create honeytoken_class=aws_credential

Code-as-cloud

Resources nobody wrote Terraform for become a pull request: generated configuration, literals rewired to references in your modules, checked with a plan, import blocks included. Drift is handled the same way.

compass iac import repo=<owner>/<repo>

A PR watcher

Compass syncs the pull requests it opened, reads the reviews and answers them. With an Anthropic key it pushes the revision a reviewer asked for, within the files the pull request already touches. Anything riskier is labelled for a human.

compass prs sync

Runs on your machine

A dashboard, an API, a daemon and a local DynamoDB in Docker Compose. Install it from the terminal in a few commands, or ask Claude Code: the compass-open skill walks the steps and checks each one. Apache-2.0.

docker compose up -d