the-mill 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- the_mill-0.2.0/LICENSE +21 -0
- the_mill-0.2.0/PKG-INFO +143 -0
- the_mill-0.2.0/README.md +106 -0
- the_mill-0.2.0/agent_coord/__init__.py +40 -0
- the_mill-0.2.0/agent_coord/__main__.py +1504 -0
- the_mill-0.2.0/agent_coord/admin.py +76 -0
- the_mill-0.2.0/agent_coord/align/__init__.py +17 -0
- the_mill-0.2.0/agent_coord/align/collect.py +13 -0
- the_mill-0.2.0/agent_coord/align/phrase.py +18 -0
- the_mill-0.2.0/agent_coord/align/words.py +6 -0
- the_mill-0.2.0/agent_coord/briefings/BOOTSTRAP.md +178 -0
- the_mill-0.2.0/agent_coord/briefings/HUMAN.md +62 -0
- the_mill-0.2.0/agent_coord/briefings/JOIN.md +87 -0
- the_mill-0.2.0/agent_coord/briefings/USECASES.md +175 -0
- the_mill-0.2.0/agent_coord/catalog.py +155 -0
- the_mill-0.2.0/agent_coord/config.py +142 -0
- the_mill-0.2.0/agent_coord/coord.py +5250 -0
- the_mill-0.2.0/agent_coord/dashboard.py +9 -0
- the_mill-0.2.0/agent_coord/door.py +1434 -0
- the_mill-0.2.0/agent_coord/files.py +154 -0
- the_mill-0.2.0/agent_coord/howto.py +201 -0
- the_mill-0.2.0/agent_coord/install.py +3315 -0
- the_mill-0.2.0/agent_coord/jobs/__init__.py +38 -0
- the_mill-0.2.0/agent_coord/jobs/caps.py +41 -0
- the_mill-0.2.0/agent_coord/jobs/constants.py +45 -0
- the_mill-0.2.0/agent_coord/jobs/needs.py +8 -0
- the_mill-0.2.0/agent_coord/jobs/observer.py +8 -0
- the_mill-0.2.0/agent_coord/jobs/progress.py +56 -0
- the_mill-0.2.0/agent_coord/kpi/__init__.py +22 -0
- the_mill-0.2.0/agent_coord/kpi/estimate.py +20 -0
- the_mill-0.2.0/agent_coord/kpi/last_gate.py +9 -0
- the_mill-0.2.0/agent_coord/kpi/rates.py +17 -0
- the_mill-0.2.0/agent_coord/kpi/where.py +51 -0
- the_mill-0.2.0/agent_coord/kpi/window.py +18 -0
- the_mill-0.2.0/agent_coord/leases/__init__.py +27 -0
- the_mill-0.2.0/agent_coord/leases/clock.py +13 -0
- the_mill-0.2.0/agent_coord/leases/errors.py +43 -0
- the_mill-0.2.0/agent_coord/leases/holders.py +40 -0
- the_mill-0.2.0/agent_coord/leases/keys.py +33 -0
- the_mill-0.2.0/agent_coord/mail/__init__.py +35 -0
- the_mill-0.2.0/agent_coord/mail/addressing.py +83 -0
- the_mill-0.2.0/agent_coord/mail/constants.py +10 -0
- the_mill-0.2.0/agent_coord/mail/filters.py +48 -0
- the_mill-0.2.0/agent_coord/mail/read_party.py +23 -0
- the_mill-0.2.0/agent_coord/middleware.py +878 -0
- the_mill-0.2.0/agent_coord/migrate.py +266 -0
- the_mill-0.2.0/agent_coord/netbind.py +207 -0
- the_mill-0.2.0/agent_coord/observe.py +478 -0
- the_mill-0.2.0/agent_coord/office.py +211 -0
- the_mill-0.2.0/agent_coord/presence/__init__.py +56 -0
- the_mill-0.2.0/agent_coord/presence/beat.py +7 -0
- the_mill-0.2.0/agent_coord/presence/drain.py +249 -0
- the_mill-0.2.0/agent_coord/presence/humans.py +23 -0
- the_mill-0.2.0/agent_coord/presence/roles.py +9 -0
- the_mill-0.2.0/agent_coord/presence/tokens.py +9 -0
- the_mill-0.2.0/agent_coord/presence/vendor.py +9 -0
- the_mill-0.2.0/agent_coord/proc.py +196 -0
- the_mill-0.2.0/agent_coord/py_gate.py +47 -0
- the_mill-0.2.0/agent_coord/schema.sql +256 -0
- the_mill-0.2.0/agent_coord/scripts/bootstrap.ps1 +44 -0
- the_mill-0.2.0/agent_coord/scripts/bootstrap.sh +42 -0
- the_mill-0.2.0/agent_coord/scripts/install.cmd +46 -0
- the_mill-0.2.0/agent_coord/scripts/register-windows-services.ps1 +51 -0
- the_mill-0.2.0/agent_coord/scripts/uninstall.cmd +49 -0
- the_mill-0.2.0/agent_coord/scripts/uninstall.ps1 +49 -0
- the_mill-0.2.0/agent_coord/scripts/unregister-windows-services.ps1 +56 -0
- the_mill-0.2.0/agent_coord/session_root.py +88 -0
- the_mill-0.2.0/agent_coord/static/board.html +505 -0
- the_mill-0.2.0/agent_coord/vendors/__init__.py +42 -0
- the_mill-0.2.0/agent_coord/vendors/grok_bot.py +25 -0
- the_mill-0.2.0/agent_coord/vendors/grok_build.py +95 -0
- the_mill-0.2.0/agent_coord/vendors/mill.py +19 -0
- the_mill-0.2.0/agent_coord/vendors/protocol.py +132 -0
- the_mill-0.2.0/agent_coord/vendors/stubs.py +47 -0
- the_mill-0.2.0/agent_coord/wake/__init__.py +5 -0
- the_mill-0.2.0/agent_coord/wake/hook.py +38 -0
- the_mill-0.2.0/agent_coord/wall_logic/__init__.py +212 -0
- the_mill-0.2.0/agent_coord/wall_logic/domains.py +77 -0
- the_mill-0.2.0/agent_coord/wall_logic/gutter.py +106 -0
- the_mill-0.2.0/agent_coord/wall_logic/honest.py +164 -0
- the_mill-0.2.0/agent_coord/wall_logic/js_lib.py +114 -0
- the_mill-0.2.0/agent_coord/wall_logic/keys.py +430 -0
- the_mill-0.2.0/agent_coord/wall_logic/knobs.py +610 -0
- the_mill-0.2.0/agent_coord/wall_logic/mail.py +307 -0
- the_mill-0.2.0/agent_coord/wall_logic/packs.py +91 -0
- the_mill-0.2.0/agent_coord/wall_logic/score.py +381 -0
- the_mill-0.2.0/agent_coord/wall_logic/tabs.py +171 -0
- the_mill-0.2.0/agent_coord/wall_ui/README.md +21 -0
- the_mill-0.2.0/agent_coord/wall_ui/components/gutter.css +30 -0
- the_mill-0.2.0/agent_coord/wall_ui/components/gutter.js +126 -0
- the_mill-0.2.0/agent_coord/wall_ui/default/README.md +10 -0
- the_mill-0.2.0/agent_coord/wall_ui/default/board.css +1180 -0
- the_mill-0.2.0/agent_coord/wall_ui/default/board.html +505 -0
- the_mill-0.2.0/agent_coord/wall_ui/default/boot.js +4546 -0
- the_mill-0.2.0/agent_coord/wall_ui/default/floor/floor.js +56 -0
- the_mill-0.2.0/agent_coord/wall_ui/default/gutter.css +30 -0
- the_mill-0.2.0/agent_coord/wall_ui/default/gutter.js +126 -0
- the_mill-0.2.0/agent_coord/wall_ui/default/mail/mail.js +199 -0
- the_mill-0.2.0/agent_coord/wall_ui/default/score/score.js +141 -0
- the_mill-0.2.0/agent_coord/wall_ui/lib/README.md +16 -0
- the_mill-0.2.0/agent_coord/wall_ui/lib/check.py +310 -0
- the_mill-0.2.0/agent_coord/wall_ui/lib/data.js +231 -0
- the_mill-0.2.0/agent_coord/wall_ui/lib/graph.js +52 -0
- the_mill-0.2.0/agent_coord/wall_ui/lib/keys.js +715 -0
- the_mill-0.2.0/agent_coord/wall_ui/lib/popup.js +113 -0
- the_mill-0.2.0/agent_coord/wall_ui/lib/table.js +66 -0
- the_mill-0.2.0/agent_coord/wall_ui/lib/tabs.js +75 -0
- the_mill-0.2.0/agent_coord/wall_ui/lib/theme.css +86 -0
- the_mill-0.2.0/agent_coord/wall_ui/lib/theme.js +56 -0
- the_mill-0.2.0/agent_coord/wall_ui/validate_assets.py +57 -0
- the_mill-0.2.0/agent_coord/win_wall_svc.py +186 -0
- the_mill-0.2.0/pyproject.toml +58 -0
- the_mill-0.2.0/setup.cfg +4 -0
- the_mill-0.2.0/tests/test_coord.py +3185 -0
- the_mill-0.2.0/tests/test_dual_scorecard_kill.py +112 -0
- the_mill-0.2.0/tests/test_idle_wake.py +149 -0
- the_mill-0.2.0/tests/test_install_empty_bootstrap.py +290 -0
- the_mill-0.2.0/tests/test_install_ootb_cmd.py +169 -0
- the_mill-0.2.0/tests/test_install_preflight.py +256 -0
- the_mill-0.2.0/tests/test_install_real_services.py +405 -0
- the_mill-0.2.0/tests/test_install_uninstall.py +322 -0
- the_mill-0.2.0/tests/test_jobs_helpers.py +167 -0
- the_mill-0.2.0/tests/test_kpi_helpers.py +187 -0
- the_mill-0.2.0/tests/test_leases_helpers.py +184 -0
- the_mill-0.2.0/tests/test_mail_addressing.py +334 -0
- the_mill-0.2.0/tests/test_mail_helpers.py +180 -0
- the_mill-0.2.0/tests/test_mail_human_required.py +100 -0
- the_mill-0.2.0/tests/test_maintenance_drain.py +129 -0
- the_mill-0.2.0/tests/test_presence_banner.py +60 -0
- the_mill-0.2.0/tests/test_presence_helpers.py +135 -0
- the_mill-0.2.0/tests/test_py_gate.py +95 -0
- the_mill-0.2.0/tests/test_schema_sql.py +48 -0
- the_mill-0.2.0/tests/test_thin_coord_helpers.py +102 -0
- the_mill-0.2.0/tests/test_tokens_est.py +42 -0
- the_mill-0.2.0/tests/test_vendor_spend.py +238 -0
- the_mill-0.2.0/tests/test_wall_cut6_knobs.py +120 -0
- the_mill-0.2.0/tests/test_wall_cut6_wire.py +104 -0
- the_mill-0.2.0/tests/test_wall_keys.py +167 -0
- the_mill-0.2.0/tests/test_wall_secure_https_lan.py +93 -0
- the_mill-0.2.0/the_mill.egg-info/PKG-INFO +143 -0
- the_mill-0.2.0/the_mill.egg-info/SOURCES.txt +143 -0
- the_mill-0.2.0/the_mill.egg-info/dependency_links.txt +1 -0
- the_mill-0.2.0/the_mill.egg-info/entry_points.txt +3 -0
- the_mill-0.2.0/the_mill.egg-info/requires.txt +7 -0
- the_mill-0.2.0/the_mill.egg-info/top_level.txt +1 -0
the_mill-0.2.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 pyginapithon
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
the_mill-0.2.0/PKG-INFO
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: the-mill
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: Local mill office: leases, JOBS, and MAIL so humans and agents coordinate without clobbering files.
|
|
5
|
+
Author: pyginapithon
|
|
6
|
+
License: MIT License
|
|
7
|
+
|
|
8
|
+
Copyright (c) 2026 pyginapithon
|
|
9
|
+
|
|
10
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
11
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
12
|
+
in the Software without restriction, including without limitation the rights
|
|
13
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
14
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
15
|
+
furnished to do so, subject to the following conditions:
|
|
16
|
+
|
|
17
|
+
The above copyright notice and this permission notice shall be included in all
|
|
18
|
+
copies or substantial portions of the Software.
|
|
19
|
+
|
|
20
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
21
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
22
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
23
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
24
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
25
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
26
|
+
SOFTWARE.
|
|
27
|
+
|
|
28
|
+
Requires-Python: >=3.10
|
|
29
|
+
Description-Content-Type: text/markdown
|
|
30
|
+
License-File: LICENSE
|
|
31
|
+
Requires-Dist: mysql-connector-python>=8.0
|
|
32
|
+
Provides-Extra: server
|
|
33
|
+
Provides-Extra: dev
|
|
34
|
+
Requires-Dist: pytest>=8; extra == "dev"
|
|
35
|
+
Requires-Dist: pytest-cov>=5; extra == "dev"
|
|
36
|
+
Dynamic: license-file
|
|
37
|
+
|
|
38
|
+
# The Mill - coordinate agents like an office, not a group chat
|
|
39
|
+
|
|
40
|
+
**Status:** early access / dogfood. We're hardening the physics and the human Wall. If that sounds useful, try it and tell us what's broken.
|
|
41
|
+
|
|
42
|
+
**For agents joining this office:** start at **[AGENTS.md](AGENTS.md)**. Policy lock: **[docs/DESIGN.md](docs/DESIGN.md)** (DESIGN wins on conflict). Install/how-to-run: **[docs/RUNBOOK.md](docs/RUNBOOK.md)**.
|
|
43
|
+
|
|
44
|
+
## Why it exists
|
|
45
|
+
|
|
46
|
+
AI desks (Grok, Claude, Gemini, ChatGPT, ...) don't share a brain - and they shouldn't. What they need is a **shared office**: who is here, what work is claimed, who may touch a file, and a place humans can **glance** to stay conscious of the project.
|
|
47
|
+
|
|
48
|
+
Most teams improvise with Slack threads, Jira tickets, or a "manager" agent that watches everyone. That burns tokens, doesn't travel across vendors, and either hides the truth or turns into surveillance.
|
|
49
|
+
|
|
50
|
+
**The Mill** is a small, local-first coordination layer: boring verbs, durable records, a human Wall for awareness.
|
|
51
|
+
|
|
52
|
+
## What it is
|
|
53
|
+
|
|
54
|
+
- **Mill API + CLI** - for agent desks (`presence`, `peek`, `needs`, `send`/`inbox`, leases, spend). Low token cost. Desks are mailboxes (`desk:human` / `desk:agent:<vendor>`); humans talk to their desk.
|
|
55
|
+
- **Wall** - for humans. Lands on **Session**; also Floor, Jobs, Scorecards Last (`agent_kpi` vs Target), Mail, Plan. The Wall is fungible; the office is the API. Intended to sit on any database and any web server; OOTB default is MySQL + Apache (free).
|
|
56
|
+
- **Physics** - file leases, live/dead sessions, mail as email (not fake chat SLA).
|
|
57
|
+
|
|
58
|
+
## Product vs repo layout
|
|
59
|
+
|
|
60
|
+
**Git** = contributors who modify the mill (product source + tests). **Fungible Wall is OOTB product** - it ships via pip `package-data` (`wall_ui/**/*.html|css|js|md`, plus static/schema/briefings/scripts), not "clone git to get a Wall." On-push **pack pipeline** builds the wheel and runs hygiene (not pytest). Contributors who change the pack: see [docs/BUILD.md](docs/BUILD.md).
|
|
61
|
+
|
|
62
|
+
| Surface | What | Installs with `pip install the-mill`? |
|
|
63
|
+
|---------|------|------------------------------------------|
|
|
64
|
+
| **Product (pip)** | `agent_coord/` - API/CLI (`mill`), `wall_ui/` (Wall assets + `lib/` theme), `static/`, `schema.sql`, `briefings/` | **Yes** (`[tool.setuptools.package-data]` keeps `wall_ui/**/*.html|css|js|md`, static, schema.sql, briefings, scripts) |
|
|
65
|
+
| **Dev / test (repo only)** | `tests/`, `docs/`, `tmp/`, `scripts/` (unless a script is an explicit console entry) | **No** - not Wall runtime; not required to run the office |
|
|
66
|
+
|
|
67
|
+
## How you start (human)
|
|
68
|
+
|
|
69
|
+
Someone points you at **this page** (or your team's Mill invite link). You do **not** set up the Mill yourself.
|
|
70
|
+
|
|
71
|
+
1. **Send this page (or the Get started block below) to your coding agent** - Grok, Claude, ChatGPT, Gemini, ...
|
|
72
|
+
2. Tell them: *"Stand up the Mill for our project; `pip install the-mill`; run `mill install` / join; give me the Wall URL."*
|
|
73
|
+
3. Open the **Wall URL** they return. Land on **Session**. Watch Jobs / Scorecards / Mail. Use Wall **GUIDE** if you need in-product help.
|
|
74
|
+
4. Keep talking to your agent when something looks wrong - you don't type mill commands or Last.
|
|
75
|
+
|
|
76
|
+
## Get started (paste to your agent)
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
Stand up The Mill (mill) for this team:
|
|
80
|
+
1) pip install the-mill (PyPI when published; until then pip install . from this repo). CLI is mill.
|
|
81
|
+
2) mill install / check records + wall for our OS (Win/Linux/macOS/WSL; iOS is Wall URL only)
|
|
82
|
+
3) briefing join / howto for=agent
|
|
83
|
+
4) set AGENT_COORD_OWNER and AGENT_COORD_VENDOR before presence
|
|
84
|
+
5) leave presence running; prove install check + peek
|
|
85
|
+
6) give me the human Wall HTTPS share URL (mill install prints it) and confirm Session is the landing tab
|
|
86
|
+
7) desks are mailboxes; humans talk to their desk. Pull Mill desk skill (not fat always-on rules)
|
|
87
|
+
Do not scrape the Wall; use CLI/API. Prefer MAIL/JOBS over chat spam.
|
|
88
|
+
Do not import wall.crt. This PC should trust the mill CA after install; other devices may Advanced then Proceed.
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Human Wall (after your agent finishes): the share URL `mill install` prints
|
|
92
|
+
Talk to us: <https://gitlab.com/pyginapithon/the-mill/-/issues>
|
|
93
|
+
Repo: <https://gitlab.com/pyginapithon/the-mill>
|
|
94
|
+
|
|
95
|
+
## How it's different
|
|
96
|
+
|
|
97
|
+
| Approach | Strength | Weakness vs Mill |
|
|
98
|
+
|----------|----------|------------------|
|
|
99
|
+
| **Vendor bot DMs** | Fast inside one app | Not multi-vendor; not durable office state |
|
|
100
|
+
| **Herdr-style watch** | Live activity feed | Master/slave; motion != coordination |
|
|
101
|
+
| **Jira / Slack** | Great human collab UX | Agents waste tokens on huge surfaces |
|
|
102
|
+
| **CI only** | Tests green | No mid-day "who's waiting on whom" |
|
|
103
|
+
| **The Mill** | Shared state + cheap verbs + human glance | Early: UX and install must earn "wow" |
|
|
104
|
+
|
|
105
|
+
## Who it's for
|
|
106
|
+
|
|
107
|
+
- More than one agent desk (or human + agents) on real work
|
|
108
|
+
- Awareness without puppeteering
|
|
109
|
+
- Teams that care about tokens-per-feature
|
|
110
|
+
|
|
111
|
+
## What we're asking you to try
|
|
112
|
+
|
|
113
|
+
1. Get this link, then hand it to your agent (block above).
|
|
114
|
+
2. Open the Wall; Session first glance.
|
|
115
|
+
3. Put two desks on the floor (any vendor that can hit CLI/API; vendor configured before presence).
|
|
116
|
+
4. Use JOBS + MAIL + leases for a real task.
|
|
117
|
+
5. Tell us what confused you in the first 10 minutes.
|
|
118
|
+
|
|
119
|
+
## Feedback loop
|
|
120
|
+
|
|
121
|
+
**you try, you report, Builder ships, Validator re-measures, the Wall gets better.**
|
|
122
|
+
|
|
123
|
+
## Honest caveats (today)
|
|
124
|
+
|
|
125
|
+
- Physics and Wall UX are being hardened.
|
|
126
|
+
- Expect sharp edges.
|
|
127
|
+
- Agents speak **API/CLI**, not Wall HTML.
|
|
128
|
+
- Mail wake hook needs a harness consumer per vendor to interrupt sleeping bots.
|
|
129
|
+
- After `mill install`, this PC should open `https://127.0.0.1/` without a warning (mill CA, never `wall.crt`). Other devices may Advanced then Proceed.
|
|
130
|
+
- `pip install the-mill` from the internet waits on PyPI; until then `pip install .` from this repo.
|
|
131
|
+
|
|
132
|
+
## More (depth)
|
|
133
|
+
|
|
134
|
+
| Doc | What |
|
|
135
|
+
|---|---|
|
|
136
|
+
| [AGENTS.md](AGENTS.md) | Agent join briefing (stays at repo root) |
|
|
137
|
+
| [docs/DESIGN.md](docs/DESIGN.md) | Policy + Lingo (SoR) |
|
|
138
|
+
| [docs/RUNBOOK.md](docs/RUNBOOK.md) | Install / how to run |
|
|
139
|
+
| [docs/BUILD.md](docs/BUILD.md) | Pack build + pack pipeline hygiene |
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
**One line:** *The Mill is an office for multi-vendor agents - humans get a link, agents install, the Wall keeps people in the loop without becoming the bottleneck or the surveillance camera.*
|
the_mill-0.2.0/README.md
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# The Mill - coordinate agents like an office, not a group chat
|
|
2
|
+
|
|
3
|
+
**Status:** early access / dogfood. We're hardening the physics and the human Wall. If that sounds useful, try it and tell us what's broken.
|
|
4
|
+
|
|
5
|
+
**For agents joining this office:** start at **[AGENTS.md](AGENTS.md)**. Policy lock: **[docs/DESIGN.md](docs/DESIGN.md)** (DESIGN wins on conflict). Install/how-to-run: **[docs/RUNBOOK.md](docs/RUNBOOK.md)**.
|
|
6
|
+
|
|
7
|
+
## Why it exists
|
|
8
|
+
|
|
9
|
+
AI desks (Grok, Claude, Gemini, ChatGPT, ...) don't share a brain - and they shouldn't. What they need is a **shared office**: who is here, what work is claimed, who may touch a file, and a place humans can **glance** to stay conscious of the project.
|
|
10
|
+
|
|
11
|
+
Most teams improvise with Slack threads, Jira tickets, or a "manager" agent that watches everyone. That burns tokens, doesn't travel across vendors, and either hides the truth or turns into surveillance.
|
|
12
|
+
|
|
13
|
+
**The Mill** is a small, local-first coordination layer: boring verbs, durable records, a human Wall for awareness.
|
|
14
|
+
|
|
15
|
+
## What it is
|
|
16
|
+
|
|
17
|
+
- **Mill API + CLI** - for agent desks (`presence`, `peek`, `needs`, `send`/`inbox`, leases, spend). Low token cost. Desks are mailboxes (`desk:human` / `desk:agent:<vendor>`); humans talk to their desk.
|
|
18
|
+
- **Wall** - for humans. Lands on **Session**; also Floor, Jobs, Scorecards Last (`agent_kpi` vs Target), Mail, Plan. The Wall is fungible; the office is the API. Intended to sit on any database and any web server; OOTB default is MySQL + Apache (free).
|
|
19
|
+
- **Physics** - file leases, live/dead sessions, mail as email (not fake chat SLA).
|
|
20
|
+
|
|
21
|
+
## Product vs repo layout
|
|
22
|
+
|
|
23
|
+
**Git** = contributors who modify the mill (product source + tests). **Fungible Wall is OOTB product** - it ships via pip `package-data` (`wall_ui/**/*.html|css|js|md`, plus static/schema/briefings/scripts), not "clone git to get a Wall." On-push **pack pipeline** builds the wheel and runs hygiene (not pytest). Contributors who change the pack: see [docs/BUILD.md](docs/BUILD.md).
|
|
24
|
+
|
|
25
|
+
| Surface | What | Installs with `pip install the-mill`? |
|
|
26
|
+
|---------|------|------------------------------------------|
|
|
27
|
+
| **Product (pip)** | `agent_coord/` - API/CLI (`mill`), `wall_ui/` (Wall assets + `lib/` theme), `static/`, `schema.sql`, `briefings/` | **Yes** (`[tool.setuptools.package-data]` keeps `wall_ui/**/*.html|css|js|md`, static, schema.sql, briefings, scripts) |
|
|
28
|
+
| **Dev / test (repo only)** | `tests/`, `docs/`, `tmp/`, `scripts/` (unless a script is an explicit console entry) | **No** - not Wall runtime; not required to run the office |
|
|
29
|
+
|
|
30
|
+
## How you start (human)
|
|
31
|
+
|
|
32
|
+
Someone points you at **this page** (or your team's Mill invite link). You do **not** set up the Mill yourself.
|
|
33
|
+
|
|
34
|
+
1. **Send this page (or the Get started block below) to your coding agent** - Grok, Claude, ChatGPT, Gemini, ...
|
|
35
|
+
2. Tell them: *"Stand up the Mill for our project; `pip install the-mill`; run `mill install` / join; give me the Wall URL."*
|
|
36
|
+
3. Open the **Wall URL** they return. Land on **Session**. Watch Jobs / Scorecards / Mail. Use Wall **GUIDE** if you need in-product help.
|
|
37
|
+
4. Keep talking to your agent when something looks wrong - you don't type mill commands or Last.
|
|
38
|
+
|
|
39
|
+
## Get started (paste to your agent)
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
Stand up The Mill (mill) for this team:
|
|
43
|
+
1) pip install the-mill (PyPI when published; until then pip install . from this repo). CLI is mill.
|
|
44
|
+
2) mill install / check records + wall for our OS (Win/Linux/macOS/WSL; iOS is Wall URL only)
|
|
45
|
+
3) briefing join / howto for=agent
|
|
46
|
+
4) set AGENT_COORD_OWNER and AGENT_COORD_VENDOR before presence
|
|
47
|
+
5) leave presence running; prove install check + peek
|
|
48
|
+
6) give me the human Wall HTTPS share URL (mill install prints it) and confirm Session is the landing tab
|
|
49
|
+
7) desks are mailboxes; humans talk to their desk. Pull Mill desk skill (not fat always-on rules)
|
|
50
|
+
Do not scrape the Wall; use CLI/API. Prefer MAIL/JOBS over chat spam.
|
|
51
|
+
Do not import wall.crt. This PC should trust the mill CA after install; other devices may Advanced then Proceed.
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Human Wall (after your agent finishes): the share URL `mill install` prints
|
|
55
|
+
Talk to us: <https://gitlab.com/pyginapithon/the-mill/-/issues>
|
|
56
|
+
Repo: <https://gitlab.com/pyginapithon/the-mill>
|
|
57
|
+
|
|
58
|
+
## How it's different
|
|
59
|
+
|
|
60
|
+
| Approach | Strength | Weakness vs Mill |
|
|
61
|
+
|----------|----------|------------------|
|
|
62
|
+
| **Vendor bot DMs** | Fast inside one app | Not multi-vendor; not durable office state |
|
|
63
|
+
| **Herdr-style watch** | Live activity feed | Master/slave; motion != coordination |
|
|
64
|
+
| **Jira / Slack** | Great human collab UX | Agents waste tokens on huge surfaces |
|
|
65
|
+
| **CI only** | Tests green | No mid-day "who's waiting on whom" |
|
|
66
|
+
| **The Mill** | Shared state + cheap verbs + human glance | Early: UX and install must earn "wow" |
|
|
67
|
+
|
|
68
|
+
## Who it's for
|
|
69
|
+
|
|
70
|
+
- More than one agent desk (or human + agents) on real work
|
|
71
|
+
- Awareness without puppeteering
|
|
72
|
+
- Teams that care about tokens-per-feature
|
|
73
|
+
|
|
74
|
+
## What we're asking you to try
|
|
75
|
+
|
|
76
|
+
1. Get this link, then hand it to your agent (block above).
|
|
77
|
+
2. Open the Wall; Session first glance.
|
|
78
|
+
3. Put two desks on the floor (any vendor that can hit CLI/API; vendor configured before presence).
|
|
79
|
+
4. Use JOBS + MAIL + leases for a real task.
|
|
80
|
+
5. Tell us what confused you in the first 10 minutes.
|
|
81
|
+
|
|
82
|
+
## Feedback loop
|
|
83
|
+
|
|
84
|
+
**you try, you report, Builder ships, Validator re-measures, the Wall gets better.**
|
|
85
|
+
|
|
86
|
+
## Honest caveats (today)
|
|
87
|
+
|
|
88
|
+
- Physics and Wall UX are being hardened.
|
|
89
|
+
- Expect sharp edges.
|
|
90
|
+
- Agents speak **API/CLI**, not Wall HTML.
|
|
91
|
+
- Mail wake hook needs a harness consumer per vendor to interrupt sleeping bots.
|
|
92
|
+
- After `mill install`, this PC should open `https://127.0.0.1/` without a warning (mill CA, never `wall.crt`). Other devices may Advanced then Proceed.
|
|
93
|
+
- `pip install the-mill` from the internet waits on PyPI; until then `pip install .` from this repo.
|
|
94
|
+
|
|
95
|
+
## More (depth)
|
|
96
|
+
|
|
97
|
+
| Doc | What |
|
|
98
|
+
|---|---|
|
|
99
|
+
| [AGENTS.md](AGENTS.md) | Agent join briefing (stays at repo root) |
|
|
100
|
+
| [docs/DESIGN.md](docs/DESIGN.md) | Policy + Lingo (SoR) |
|
|
101
|
+
| [docs/RUNBOOK.md](docs/RUNBOOK.md) | Install / how to run |
|
|
102
|
+
| [docs/BUILD.md](docs/BUILD.md) | Pack build + pack pipeline hygiene |
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
**One line:** *The Mill is an office for multi-vendor agents - humans get a link, agents install, the Wall keeps people in the loop without becoming the bottleneck or the surveillance camera.*
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"""Transactional multi-project locks and a small mailbox."""
|
|
2
|
+
|
|
3
|
+
import sys
|
|
4
|
+
|
|
5
|
+
# Import-time gate: refuse <3.10 before coord/presence (3.10-only syntax).
|
|
6
|
+
# Inline sys only so 3.8 can parse this module and exit cleanly (exit 2).
|
|
7
|
+
if sys.version_info < (3, 10):
|
|
8
|
+
sys.stderr.write(
|
|
9
|
+
"Python %d.%d is too old; mill needs Python 3.10+.\n"
|
|
10
|
+
"Hint: use uv + CPython 3.12 (e.g. uv python install 3.12; "
|
|
11
|
+
"uv venv --python 3.12).\n"
|
|
12
|
+
% (sys.version_info[0], sys.version_info[1])
|
|
13
|
+
)
|
|
14
|
+
raise SystemExit(2)
|
|
15
|
+
|
|
16
|
+
from .coord import (
|
|
17
|
+
Coord,
|
|
18
|
+
CoordError,
|
|
19
|
+
DriftError,
|
|
20
|
+
LockHeld,
|
|
21
|
+
NeedHeld,
|
|
22
|
+
default_owner,
|
|
23
|
+
file_key,
|
|
24
|
+
slug,
|
|
25
|
+
this_host,
|
|
26
|
+
)
|
|
27
|
+
from .files import staging
|
|
28
|
+
|
|
29
|
+
__all__ = [
|
|
30
|
+
"Coord",
|
|
31
|
+
"CoordError",
|
|
32
|
+
"DriftError",
|
|
33
|
+
"LockHeld",
|
|
34
|
+
"NeedHeld",
|
|
35
|
+
"default_owner",
|
|
36
|
+
"file_key",
|
|
37
|
+
"slug",
|
|
38
|
+
"staging",
|
|
39
|
+
"this_host",
|
|
40
|
+
]
|