diff --git a/CHANGES.md b/CHANGES.md
index bb83649..f6096ea 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,5 +1,23 @@
 # Changelog
 
+## 0.2.1 (2026-07-26)
+
+### pygittools
+
+- Add a task editor and improve task creation, syncing, and deletion in the TUI.
+- Respect terminal color settings, using more reasonable defaults and configured values for colorization.
+- Normalize staged file paths and quiet upstream encoding warnings to reduce platform-specific issues.
+
+### pygitweb
+
+- Fix README packaging so it is correctly loaded on the docs page.
+
+### Tests and docs
+
+- Improve OAuth2 test coverage in `pygitweb`.
+- Increase `pgt` test coverage, fixing regressions on Windows.
+- Add coverage tooling to the development dependencies.
+
 ## 0.2.0 (2026-07-12)
 
 ### pygittools
diff --git a/README.md b/README.md
index b4177eb..b59079d 100644
--- a/README.md
+++ b/README.md
@@ -5,18 +5,34 @@ PyGitWeb and its bundled tools allow users to:
 - Manage projects and teams; built-in issues and kanban boards
 - Assist with info security including code signing and secret scanning
 
-PyGitTools, the dependent package of PyGitWeb, allows users to, without using the web server:
+PyGitTools, the core package of PyGitWeb, allows users to (without involving the web server):
 - Script Python workflows with Tasks, Merge Requests, and Hooks within a repositories
 - Setup hooks and jobs to run on your machine, including server-side hooks for branch protection
-- Use the bundled git terminal app (pgt) to quickly perform git actions
+- Use the bundled git terminal app (pgt) to quickly perform git actions and even manage tasks from the cli.
 
 ## Installation and Usage
 
-To setup with UV:
+To run with UV in bash _or_ powershell:
+```bash
+uv run --with pygitweb uvicorn pygitweb.main:app --host 0.0.0.0 --port 8000
 ```
-git clone https://app.pygitweb.com/html/pygitweb; cd pygitweb;
-uv sync --all-packages;
-uv run uvicorn pygitweb.main:app --host 0.0.0.0 --port 8000
+
+By default, this will set up local authenication and generate an `admin` account with a randomly generated password.
+
+If you are running locally with a firewall and NO reverse proxy or other risk of external traffic, you can run with auth disabled by setting `PYGITWEB_AUTH` falsy:
+
+```bash
+PYGITWEB_AUTH=0 uv run --with pygitweb uvicorn pygitweb.main:app --host 0.0.0.0 --port 8000
+```
+
+```powershell
+pwsh -Command { $env:PYGITWEB_AUTH=0; uv run --with pygitweb uvicorn pygitweb.main:app --host 0.0.0.0 --port 8000 }
+```
+
+Furthermore, if you just want to evalute `pgt` (the terminal app for using git) without involving the web server, use the following command in a project folder:
+
+```bash
+uv run --with pygittools pgt
 ```
 
 ## Installation with Docker
@@ -25,14 +41,27 @@ uv run uvicorn pygitweb.main:app --host 0.0.0.0 --port 8000
 
 ## Installation for Development
 
-```
-uv sync --all-packages --all-groups;
+Clone the repo over html:
+```bash
+git clone https://app.pygitweb.com/html/pygitweb;
+cd pygitweb; uv sync --all-packages --all-groups;
 uv run uvicorn pygitweb.main:app --reload --host 0.0.0.0 --port 8000
 ```
 
 Setting up your pre-commit hooks is recommended, but to manually run pre-commit checks, do:
-```
+
+```bash
 uv run ruff check --fix;
 uv run ruff format --preview;
-mypy .;
+uv run mypy .;
+uv run pytest .;
+```
+
+There are some open mypy issues, but any pytest regressions are considered blocking.
+
+To run tests and generate a coverage report, do
+
+```bash
+uv run coverage run -m pytest .;
+uv run coverage html;
 ```
diff --git a/pygitweb/README.md b/pygitweb/README.md
index 7cd903e..6f48531 100644
--- a/pygitweb/README.md
+++ b/pygitweb/README.md
@@ -20,7 +20,7 @@ environment variables, and optionally a `.env` file in the working directory via
 
 ## Routes
 
-Load the `/docs` page for a detailed view of routes (below the readme) if in debug mode. 
+Load the `/docs` page for a detailed view of routes (below the readme). 
 
 **No-project routes**
 
@@ -48,8 +48,8 @@ Load the `/docs` page for a detailed view of routes (below the readme) if in deb
 | heads | `updates`, `pf` | `GET /project/{project}?a=heads` | List branch heads. Supports long-poll subscribe. |
 | tags | `updates`, `pf` | `GET /project/{project}?a=tags` | List all tags. Supports long-poll subscribe. |
 | tag | `h` | `GET /project/{project}?a=tag&h=...` | Single tag view (tag ref or hash). |
-| commit | — | `GET /project/{project}?a=commit` | Commit information. |
-| commitdiff | — | `GET /project/{project}?a=commitdiff` | Commit diff (unified diff rendered with [diff2html](https://github.com/rtfpessoa/diff2html)). |
+| commit | `h` | `GET /project/{project}?a=commit&h=...` | Commit information. |
+| commitdiff | `h` | `GET /project/{project}?a=commitdiff&h=...` | Commit diff (unified diff rendered with [diff2html](https://github.com/rtfpessoa/diff2html)). |
 | patch | `h` | `GET /project/{project}?a=patch&h=...` | Single-commit patch (plain text). |
 | patches | `h`, `hb` | `GET /project/{project}?a=patches&h=...&hb=...` | Multi-commit patches for range `hb..h` (plain text). |
 | blobdiff | `h`, `hb`, `f`, `fp` | `GET /project/{project}?a=blobdiff&h=...&hb=...&f=...&fp=...` | Blob diff (two versions of a file) rendered with diff2html. |
@@ -100,16 +100,16 @@ subscribe to the project's change queue. The request is held for up to 30 second
   just the URL project (the action is still rendered for the URL project).
 
 The notify endpoint is intended for loopback use by `pygittools` post-receive hooks (see
-`pygittools/hook_samples/post-receive.notify`); production deployments should restrict it
-at the reverse proxy.
+`pygittools/hook_samples/post-receive.notify`). The server enforces loopback-only access and
+rejects unknown projects; production deployments should still restrict it at the reverse proxy.
 
 ## Hook management
 
-The project summary page exposes an **Update Hook** row that installs / removes the
-`update` bundle: `post-receive.notify` (feeds the change queue when refs are pushed) and
-`post-commit.notify` (feeds the change queue when a working clone of this repo records
-a local commit). Either is sufficient to wake long-poll subscribers; installing both
-covers server-side and client-side commit paths.
+The project summary page exposes a **Hooks** row that lists installed hooks and lets you
+install or remove pygittools samples, including the `update` bundle: `post-receive.notify`
+(feeds the change queue when refs are pushed) and `post-commit.notify` (feeds the change
+queue when a working clone of this repo records a local commit). Either is sufficient to
+wake long-poll subscribers; installing both covers server-side and client-side commit paths.
 
 The same operations are available programmatically via
 `POST /project/{name}/hook?name=<sample-or-bundle>&op=<...>`. Bundle status is
