Every release of Compass, newest first. Subscribe with RSS.
16 October 2026
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
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
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
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
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
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