Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,50 @@
All notable changes to Druks. Versions follow [semantic versioning](https://semver.org);
while Druks is pre-1.0, a minor bump may break compatibility.

## [0.3.0] — 2026-08-20

### Added

- **Logged-in browser sessions.** An extension declares a browser session for a
site; the operator logs in once through a Druks-hosted browser window, and a
workflow borrows that authenticated browser. The login is encrypted, stored
the first time a run reaches for it, and reused across runs.
- **The login window is real Chrome.** It runs full Chrome over noVNC, opens on
the session's own site, sets a timezone, and does not announce itself as
automation. It can route through a configurable egress proxy, including one
that needs credentials.
- **Installed apps mount in the shell.** An app ships an ESM entry and declared
navigation, and Druks renders it inside the dashboard instead of a separate
page. A mounted app borrows the shell's components, its markdown renderer, and
its form fields, and it can draw a gate.
- **Scheduled workflows dispatch.** A schedule fires the workflow's `dispatch()`
when it declares one, so a cadence runs the same policy a manual trigger does.

### Changed

- **One OAuth engine.** `OauthClient` in `druks.services` runs every OAuth
exchange; the MCP client is rewired onto it, and the mint seam takes a grant
rather than a pair of callables.
- **Usage is a platform surface**, not an app you install. Quota and spend are
part of the platform.
- **One control frame across the shell.** The accent color reaches every
surface, a declared field is drawn the same way wherever it appears, and
Settings names an app the way the app switcher does.
- **An approved, clean PR merges directly** instead of looping back through the
work gate.
- **Ship's gate policy stops paying for a durable runtime** just to assert the
policy.

### Fixed

- **The app engine pool is sized for the run queue**, not a single request.
- **Sandbox provisioning failures retry.** A transient provisioning error is
classified as transient, so the in-run retry covers it.
- **An expired credential reads as disconnected**, not Connected.
- **A spend-controlled Codex plan reports its quota as a weekly window.**
- **An extension that declares a subject is checked at load.** A missing subject
read-side fails when the extension loads, not on the first request.

## [0.2.0] — 2026-08-10

### Added
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "druks"
version = "0.2.0"
version = "0.3.0"
description = "Autonomous software delivery; the self-hosted home for durable agent apps."
readme = "README.md"
license = "MIT"
Expand Down
2 changes: 1 addition & 1 deletion uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.