Willow's Grove
The operator's seat for the Willow AI fleet — a loopback-only served page on
127.0.0.1:8766, hosting Grove Web Components that read live state from
Postgres, the Nestor store, and the willow-mcp kb_journal seam. No public
HTTP surface. The MCP server (./run_mcp.sh) is a separate process for
remote (claude.ai) tool access.
Home: willow-memory/willows-grove. Ratified by the human trust root,
not the fleet — see docs/INVARIANTS.md §12.
Entry points
| Command | Purpose |
|---|---|
python3 grove_serve.py |
Loopback-only served-page host on 127.0.0.1:8766 |
./run_mcp.sh |
Grove MCP server — stdio mode (Claude Code / Cursor spawns this) |
./run_mcp.sh --serve |
Grove MCP over HTTP+OAuth on :8765 for remote clients behind a tunnel |
scripts/grove-serve {install|on|off|status} |
Toggle the --serve systemd unit + .mcp.json entry together |
See docs/OPS_RUNBOOK.md for boot preconditions,
health-check sweeps, and failure recovery.
Architecture
| File / dir | What |
|---|---|
grove_serve.py |
Loopback-only served-page host on 127.0.0.1:8766 (Starlette + uvicorn; two placeholder routes) |
grove_html.py |
The served page's HTML shell |
grove_db.py |
Postgres reader (bounded connect_timeout + statement_timeout) |
grove_reader.py |
Reader helpers for channels, messages, agents, routing |
grove/ |
Grove Python package (readers, endpoints, MCP serve-mode auth) |
web/components/*.js |
Web Components |
web/boot/*.js |
Page-level boot modules |
u2u/ |
Signed LAN transport (see u2u section above) |
bridge/ |
Matrix bridge |
u2u — signed LAN transport (not encrypted)
The u2u/ package carries signed (Ed25519) human-to-human DMs across the
LAN. Messages are cleartext on the LAN — u2u guarantees who sent this and
that the message is intact, not that only the recipient can read it.
See docs/design/u2u-security-limits.md
for the full statement of what u2u does and does not guarantee. Encryption is planned for Gate 6.
Discipline
Twelve CI-enforced invariants in docs/INVARIANTS.md:
- §1 three-state contract (populated / empty / unreachable — never collapsed)
- §2 supersedes D7 ("absence is a state" no longer covers unreachable)
- §3 doc discipline (citations resolve, CHANGELOG cites PR, sections name witnesses)
- §4 reader/endpoint coverage
- §5 u2u trust order (signature → consent → dispatch, in that sequence — see
docs/design/u2u-security-limits.md) - §6 manifests describe code, not aspirations
- §7 consent flows are real, not automatic
- §8 panels consume live endpoints
- §9 seed reads real canon
- §10 CI proves the invariants
- §11 persona provenance (
Persona:trailer on every code-changing commit) - §12 ratification (
Ratified-by:line on every PR-open and merge)
Every section is enforced by at least one CI witness. The checkers live at
scripts/check_*.py; they run on every push through
.github/workflows/tests.yml.
Getting started as a tester
git clone https://github.com/willow-memory/willows-grove.git
cd willows-grove
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
psql -c "CREATE DATABASE willow_20;" && psql -d willow_20 -f schema.sql
python3 -m pytest -x -q --ignore=tests/e2e --ignore=tests/e2e_ollama --ignore=tests/e2e_willow_mcp
Then python3 grove_serve.py and open http://127.0.0.1:8766 in a browser
running on the same box.
The audit record
docs/audits/loki-v0.9-audit.md — Loki's v0.9 audit in his voice.
38 ranked findings from a seven-lens Loki-swarm, all resolved in the
build or refuted with reason.
docs/audits/loki-swarm-measurement.md — persona-discipline scored on
seven dimensions. The measurement research: register hold 0/41 florid,
deny-list hold 0/41 build proposals, three-column completeness 41/41,
softening 1/41, authority-as-correctness 0/41. Reproducibility layer at
docs/audits/loki-swarm-metadata.md.
What's known-not-yet-done
docs/design/pr14-carryovers.md — the v0.10 punch list. Nothing here is
implemented yet; it names what v0.9 punted and why.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file willows_grove-0.9.0.tar.gz.
File metadata
- Download URL: willows_grove-0.9.0.tar.gz
- Upload date:
- Size: 1.1 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0c95ee631b52def10d1b0ab196533ab0abf51ca950237e25dac24338fa1ed545
|
|
| MD5 |
d976a331df1d9ab13c2ce1c76a9773cc
|
|
| BLAKE2b-256 |
773e1fccdce75766bbca2d531ff973a3e60172f499e3d587f40207be7813f45e
|
Provenance
The following attestation bundles were made for willows_grove-0.9.0.tar.gz:
Publisher:
release.yml on willow-memory/willows-grove
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
willows_grove-0.9.0.tar.gz -
Subject digest:
0c95ee631b52def10d1b0ab196533ab0abf51ca950237e25dac24338fa1ed545 - Sigstore transparency entry: 2619769503
- Sigstore integration time:
-
Permalink:
willow-memory/willows-grove@2a1532381e6f293b3ae2e85f7e6670d25c9fb0e6 -
Branch / Tag:
refs/tags/v0.9.0 - Owner: https://github.com/willow-memory
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@2a1532381e6f293b3ae2e85f7e6670d25c9fb0e6 -
Trigger Event:
push
-
Statement type:
File details
Details for the file willows_grove-0.9.0-py3-none-any.whl.
File metadata
- Download URL: willows_grove-0.9.0-py3-none-any.whl
- Upload date:
- Size: 169.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
62371eea7719429ae5d639c38d2b70b2b27d5f2e7621247054d7abc4ab52a81f
|
|
| MD5 |
7ffeeee66776dac5d7fca1fe3ecba592
|
|
| BLAKE2b-256 |
84cdb5f7a5d38b72bbc3de466ef69f4c53e203b80631524e30abef8d7883be1d
|
Provenance
The following attestation bundles were made for willows_grove-0.9.0-py3-none-any.whl:
Publisher:
release.yml on willow-memory/willows-grove
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
willows_grove-0.9.0-py3-none-any.whl -
Subject digest:
62371eea7719429ae5d639c38d2b70b2b27d5f2e7621247054d7abc4ab52a81f - Sigstore transparency entry: 2619769714
- Sigstore integration time:
-
Permalink:
willow-memory/willows-grove@2a1532381e6f293b3ae2e85f7e6670d25c9fb0e6 -
Branch / Tag:
refs/tags/v0.9.0 - Owner: https://github.com/willow-memory
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@2a1532381e6f293b3ae2e85f7e6670d25c9fb0e6 -
Trigger Event:
push
-
Statement type: