Skip to content

v0.16.0

Choose a tag to compare

@github-actions github-actions released this 20 Oct 19:49
· 237 commits to main since this release
c53ab56

Before you upgrade

  • Service code moved under domains/. Each service's top level now holds only its standard files (service.py, models.py, queries.py, ...). Its subsystems moved under domains/. If your code imports a service's internal modules, import from its service.py instead. The changelog lists every move.
  • Everyone is signed out once. Sign-in cookies are now named for the project (<project>_session, <project>_refresh), so two Aegis apps on one host no longer sign each other out.
  • The dev stack listens on localhost only. Every port the dev compose publishes binds 127.0.0.1. Anything that reached the dev stack from another machine stops working.
  • aegis remove-service now drops the service's tables, after exporting them. Removing a service with tables keeps its revisions and adds one that exports its rows and then drops its tables, as plugin removal already did. Before, the tables stayed in place. Its settings are commented out in .env (values kept), since the app refuses a setting it no longer declares.
  • ai[rag] moves to chromadb 1.x. An existing data/chromadb upgrades in place the first time it opens, and that is one way. Keep a copy if you might need to roll back.

Highlights

Meetings (experimental)

aegis add-service meetings adds a bot that joins Google Meet as a visible, announced participant, signed in as its own Google account. It keeps a transcript from Meet's captions and hears the call. Once the call ends, it writes notes: a summary, decisions, action items, open questions, commitments, contradictions and positions, each citing the lines it came from. It keeps everyone you meet as people, with a guide on how to work with each, and reads what a series of meetings keeps coming back to. Agents can join from their own calendar when invited. You can send, watch, search and read meetings from Overseer (both UIs), the /meetings page, the CLI and the API.

Screenshot 2026-10-20 at 3 34 13 PM Screenshot 2026-10-20 at 3 32 55 PM

The database in Overseer.

Database > Tables shows any table's rows, schema and relationships, with filters, sorting and export. Database > Query runs read-only SQL in an editor, and saved queries come back as named tabs. Columns marked secret never show.

Screenshot 2026-10-20 at 3 41 47 PM Screenshot 2026-10-20 at 3 42 49 PM

Redis and containers

Pick a Redis family on Overseer's Redis page to see it in its own terms. The slow log says what each query touched. Container and host charts keep history past the hour. taskiq consumers no longer pile up.

Tabs in drawers

Long views (a meeting, a person, a series) read one tab at a time, with shared tabbed and tab_panel macros for your own pages.

Security

  • The dev stack listens on localhost only (see above).
  • htmx, its SSE extension, Alpine and Chart.js load with pinned versions and integrity hashes. The Query editor ships with the app instead of loading from esm.sh.
  • A model can mark a column secret (info={"secret": True}). Rows and Query hide it, and more kinds of keys and codes are caught in errors and logs.
  • Query on PostgreSQL runs as a reader that cannot see secret columns, and refuses functions and views that could read around that.
  • Only the default agent sees the system status. Agents that answer your app's own users no longer see its infrastructure.

Fixed

  • aegis update run from a template checkout brings taskiq and dramatiq worker changes (broker.py, pools.py, ...). It used to skip them without a word.
  • aegis add-service on a stack with a worker keeps only that worker backend's queue file.
  • aegis remove-service leaves a stack that starts and migrates: alembic stays while its revisions do, and the removed service's settings no longer block startup.
  • An htmx stack with the AI service on its memory backend starts again.
  • Postgres stacks, stacks with basic auth and Meetings, and stacks that add a database later pass their own tests.
  • The error store is bounded by bytes, so an error storm can no longer fill Redis.
  • Generated stacks' tests run on every GitHub runner (the chromadb change above).
  • Overseer charts draw again.
  • A Python 3.13 project starts again.
  • Two stacks with storage run side by side.
  • Overseer > Code follows a name re-exported from a package.