mooting 0.1.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.
- mooting-0.1.0/LICENSE +21 -0
- mooting-0.1.0/PKG-INFO +185 -0
- mooting-0.1.0/README.md +157 -0
- mooting-0.1.0/mooting/__init__.py +3 -0
- mooting-0.1.0/mooting/cli.py +617 -0
- mooting-0.1.0/mooting/console.py +1184 -0
- mooting-0.1.0/mooting/doctor.py +139 -0
- mooting-0.1.0/mooting/drivers/__init__.py +4 -0
- mooting-0.1.0/mooting/drivers/base.py +194 -0
- mooting-0.1.0/mooting/drivers/fake.py +65 -0
- mooting-0.1.0/mooting/drivers/registry.py +37 -0
- mooting-0.1.0/mooting/drivers/spawn.py +462 -0
- mooting-0.1.0/mooting/install.py +75 -0
- mooting-0.1.0/mooting/mcp_server.py +299 -0
- mooting-0.1.0/mooting/minutes.py +182 -0
- mooting-0.1.0/mooting/models.py +73 -0
- mooting-0.1.0/mooting/schema.sql +181 -0
- mooting-0.1.0/mooting/setup.py +167 -0
- mooting-0.1.0/mooting/store.py +986 -0
- mooting-0.1.0/mooting/supervisor.py +799 -0
- mooting-0.1.0/mooting/tui.py +942 -0
- mooting-0.1.0/mooting.egg-info/PKG-INFO +185 -0
- mooting-0.1.0/mooting.egg-info/SOURCES.txt +32 -0
- mooting-0.1.0/mooting.egg-info/dependency_links.txt +1 -0
- mooting-0.1.0/mooting.egg-info/entry_points.txt +2 -0
- mooting-0.1.0/mooting.egg-info/requires.txt +7 -0
- mooting-0.1.0/mooting.egg-info/top_level.txt +1 -0
- mooting-0.1.0/pyproject.toml +50 -0
- mooting-0.1.0/setup.cfg +4 -0
- mooting-0.1.0/tests/test_audit.py +351 -0
- mooting-0.1.0/tests/test_console.py +107 -0
- mooting-0.1.0/tests/test_council.py +691 -0
- mooting-0.1.0/tests/test_tui.py +1157 -0
- mooting-0.1.0/tests/test_work.py +285 -0
mooting-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 jyunming
|
|
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.
|
mooting-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: mooting
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: A council where agent CLIs from different vendors deliberate, and a human decides.
|
|
5
|
+
Author: jyunming
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://jyunming.github.io/mooting/
|
|
8
|
+
Project-URL: Documentation, https://jyunming.github.io/mooting/docs/
|
|
9
|
+
Project-URL: Source, https://github.com/jyunming/mooting
|
|
10
|
+
Project-URL: Issues, https://github.com/jyunming/mooting/issues
|
|
11
|
+
Keywords: ai,agents,cli,mcp,multi-agent,claude-code,codex
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Environment :: Console
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Topic :: Software Development
|
|
18
|
+
Requires-Python: >=3.10
|
|
19
|
+
Description-Content-Type: text/markdown
|
|
20
|
+
License-File: LICENSE
|
|
21
|
+
Requires-Dist: mcp>=1.2
|
|
22
|
+
Requires-Dist: prompt_toolkit>=3.0
|
|
23
|
+
Requires-Dist: textual>=1.0
|
|
24
|
+
Provides-Extra: dev
|
|
25
|
+
Requires-Dist: pytest>=8; extra == "dev"
|
|
26
|
+
Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
|
|
27
|
+
Dynamic: license-file
|
|
28
|
+
|
|
29
|
+
<h1 align="center">Mooting</h1>
|
|
30
|
+
|
|
31
|
+
<p align="center">
|
|
32
|
+
<em>Your coding agents, arguing on the record — and you decide.</em>
|
|
33
|
+
</p>
|
|
34
|
+
|
|
35
|
+
<p align="center">
|
|
36
|
+
<a href="https://github.com/jyunming/mooting/actions/workflows/tests.yml"><img alt="tests" src="https://github.com/jyunming/mooting/actions/workflows/tests.yml/badge.svg"></a>
|
|
37
|
+
<a href="LICENSE"><img alt="MIT" src="https://img.shields.io/badge/license-MIT-blue.svg"></a>
|
|
38
|
+
<img alt="python" src="https://img.shields.io/badge/python-3.10%2B-blue.svg">
|
|
39
|
+
</p>
|
|
40
|
+
|
|
41
|
+
<p align="center">
|
|
42
|
+
<a href="https://jyunming.github.io/mooting/"><strong>mooting →</strong></a>
|
|
43
|
+
</p>
|
|
44
|
+
|
|
45
|
+
<p align="center">
|
|
46
|
+
<img alt="A Mooting session" src="docs/assets/session.svg" width="820">
|
|
47
|
+
</p>
|
|
48
|
+
|
|
49
|
+
<p align="center">
|
|
50
|
+
<a href="#install">Install</a> ·
|
|
51
|
+
<a href="docs/COMMANDS.md">Commands</a> ·
|
|
52
|
+
<a href="docs/ARCHITECTURE.md">Architecture</a> ·
|
|
53
|
+
<a href="docs/DRIVERS.md">Driver notes</a>
|
|
54
|
+
</p>
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
Claude Code, Codex, Copilot CLI and Antigravity each keep their own
|
|
59
|
+
subscription, their own context and their own strengths. Mooting gives them one
|
|
60
|
+
shared board and a turn-taking loop, so *"get a second opinion from the model that
|
|
61
|
+
read the sources"* stops being four terminal windows and a lot of copy-paste.
|
|
62
|
+
|
|
63
|
+
It never calls a model, holds an API key, or sees a token. It drives the
|
|
64
|
+
first-party CLIs you already pay for.
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
mooting tui
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
> /new the workflow optimization in agentic AI development
|
|
72
|
+
> we run four CLIs by hand across separate windows and merge by hand
|
|
73
|
+
> /run
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Three seats argue. You interject, ask one of them directly with `@codex …`, and
|
|
77
|
+
rule on what they propose. Then:
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
> /conclude examples before invariants; humans review oracles, not diffs
|
|
81
|
+
wrote what-is-the-best-optimized-workflow-minutes.md — 2 decisions
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## What it is for
|
|
85
|
+
|
|
86
|
+
**A decision you do not want to make alone.** Independent seats, real
|
|
87
|
+
disagreement, and a record of who objected and why — then a ruling that only you
|
|
88
|
+
can give.
|
|
89
|
+
|
|
90
|
+
**Work that follows from it.** The same topic becomes a team: a manager drafts
|
|
91
|
+
tasks, the plan comes to you as one proposal, and approved work runs in isolated
|
|
92
|
+
git worktrees. Your branch is never touched; merging stays your git action.
|
|
93
|
+
|
|
94
|
+
**A record that outlives the terminal.** `mooting minutes` writes what was asked,
|
|
95
|
+
what was decided and by whom, who objected, what was left unanswered, and — on a
|
|
96
|
+
work topic — a log of every task and what came of it.
|
|
97
|
+
|
|
98
|
+
## Why not one model with a long prompt
|
|
99
|
+
|
|
100
|
+
Because they disagree, and the disagreement is the product. In the session that
|
|
101
|
+
produced this project's own design notes, one seat proposed a criterion for
|
|
102
|
+
agentic workflows and a second seat rejected the premise the first had built on —
|
|
103
|
+
a distinction the first had not considered. That exchange is in the minutes,
|
|
104
|
+
attributable, with the human ruling recorded against it.
|
|
105
|
+
|
|
106
|
+
And because the seats are the CLIs you already pay for. Routing a cheap question
|
|
107
|
+
to a cheap seat and a hard one to an expensive seat is the point; that only works
|
|
108
|
+
if each runs under its own subscription.
|
|
109
|
+
|
|
110
|
+
## Install
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
pip install mooting # once published
|
|
114
|
+
# or, from a clone:
|
|
115
|
+
pip install -e .
|
|
116
|
+
|
|
117
|
+
mooting setup # finds your CLIs, seats them, wires them up, proves it works
|
|
118
|
+
mooting tui
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
`mooting doctor` asserts on **what landed on the board**, not on exit codes. A CLI
|
|
122
|
+
can start, load the server, decline to call it and exit 0 — a return-code check
|
|
123
|
+
goes green while the seat is mute.
|
|
124
|
+
|
|
125
|
+
Windows: use Windows Terminal, PowerShell or cmd for the full-screen session;
|
|
126
|
+
`mooting console` is the line-based fallback for mintty and SSH.
|
|
127
|
+
|
|
128
|
+
## A tour
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
> /new should webhook retries use exponential backoff?
|
|
132
|
+
> the gateway retries every 30s and stampedes on recovery
|
|
133
|
+
> /run
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Seats argue. Type to interject — it also answers anything asked of you. `@codex
|
|
137
|
+
what does the gateway do today?` puts the question to one of them and the others
|
|
138
|
+
wait for the answer. When a seat proposes something concrete, only you can close
|
|
139
|
+
it:
|
|
140
|
+
|
|
141
|
+
```
|
|
142
|
+
> /proposals 3 # the whole thing: body, every vote, every objection
|
|
143
|
+
> /approve 3 agreed — cap at 6 attempts
|
|
144
|
+
> /conclude backoff with jitter, capped
|
|
145
|
+
wrote retries-minutes.md — 1 decision
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Then the same topic can become a team: `/mode work <seat>` and a manager drafts
|
|
149
|
+
tasks, the plan comes to you as one proposal, and approved work runs in isolated
|
|
150
|
+
git worktrees.
|
|
151
|
+
|
|
152
|
+
**[Using it →](https://github.com/jyunming/mooting/blob/main/docs/USING.md)** · **[Every command →](https://github.com/jyunming/mooting/blob/main/docs/COMMANDS.md)**
|
|
153
|
+
|
|
154
|
+
## Status
|
|
155
|
+
|
|
156
|
+
Verified end to end on this machine (2026-08-29):
|
|
157
|
+
|
|
158
|
+
| Seat | Result |
|
|
159
|
+
|---|---|
|
|
160
|
+
| **Claude Code** 2.1.250 | **working** — posts to the board, resumes by our own UUID |
|
|
161
|
+
| **Codex** 0.149.0 | **working** — needs `--approve-for-me` and its prompt on stdin; stateless |
|
|
162
|
+
| **Antigravity** (`agy`) 1.1.20 | **working** — `--mode plan` is genuinely read-only; stateless |
|
|
163
|
+
| **Copilot** 1.0.81 | driver verified against the CLI |
|
|
164
|
+
|
|
165
|
+
Per-CLI flags and the four traps behind them are in
|
|
166
|
+
[`docs/DRIVERS.md`](https://github.com/jyunming/mooting/blob/main/docs/DRIVERS.md). The one worth knowing before you write any
|
|
167
|
+
adapter: **Windows `.CMD` shims cannot carry a multi-line argument**, so a
|
|
168
|
+
multi-line prompt silently drops every flag after it — and the symptom is a CLI
|
|
169
|
+
insisting your MCP server needs approval, not a quoting error.
|
|
170
|
+
|
|
171
|
+
**Not built yet:** a web UI. ACP (`--acp` on Copilot and Antigravity) is
|
|
172
|
+
worth adding for **permission routing** — it hands a seat's approval requests back
|
|
173
|
+
to the supervisor, which is the natural home for "the human decides". It is *not*
|
|
174
|
+
a latency fix: process spawn is ~2% of a turn.
|
|
175
|
+
|
|
176
|
+
## More
|
|
177
|
+
|
|
178
|
+
- **[Using it](https://github.com/jyunming/mooting/blob/main/docs/USING.md)** — the session, mentions, minutes, work mode
|
|
179
|
+
- **[Commands](https://github.com/jyunming/mooting/blob/main/docs/COMMANDS.md)** — every command, in both surfaces
|
|
180
|
+
- **[Why it works this way](https://github.com/jyunming/mooting/blob/main/docs/WHY.md)** — invariants, latency measurements, prior art
|
|
181
|
+
- **[Architecture](https://github.com/jyunming/mooting/blob/main/docs/ARCHITECTURE.md)** — the board, the fences, the driver contract
|
|
182
|
+
- **[Driver notes](https://github.com/jyunming/mooting/blob/main/docs/DRIVERS.md)** — what each CLI actually does, and four traps
|
|
183
|
+
- **[Contributing](https://github.com/jyunming/mooting/blob/main/CONTRIBUTING.md)**
|
|
184
|
+
|
|
185
|
+
MIT.
|
mooting-0.1.0/README.md
ADDED
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
<h1 align="center">Mooting</h1>
|
|
2
|
+
|
|
3
|
+
<p align="center">
|
|
4
|
+
<em>Your coding agents, arguing on the record — and you decide.</em>
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<a href="https://github.com/jyunming/mooting/actions/workflows/tests.yml"><img alt="tests" src="https://github.com/jyunming/mooting/actions/workflows/tests.yml/badge.svg"></a>
|
|
9
|
+
<a href="LICENSE"><img alt="MIT" src="https://img.shields.io/badge/license-MIT-blue.svg"></a>
|
|
10
|
+
<img alt="python" src="https://img.shields.io/badge/python-3.10%2B-blue.svg">
|
|
11
|
+
</p>
|
|
12
|
+
|
|
13
|
+
<p align="center">
|
|
14
|
+
<a href="https://jyunming.github.io/mooting/"><strong>mooting →</strong></a>
|
|
15
|
+
</p>
|
|
16
|
+
|
|
17
|
+
<p align="center">
|
|
18
|
+
<img alt="A Mooting session" src="docs/assets/session.svg" width="820">
|
|
19
|
+
</p>
|
|
20
|
+
|
|
21
|
+
<p align="center">
|
|
22
|
+
<a href="#install">Install</a> ·
|
|
23
|
+
<a href="docs/COMMANDS.md">Commands</a> ·
|
|
24
|
+
<a href="docs/ARCHITECTURE.md">Architecture</a> ·
|
|
25
|
+
<a href="docs/DRIVERS.md">Driver notes</a>
|
|
26
|
+
</p>
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
Claude Code, Codex, Copilot CLI and Antigravity each keep their own
|
|
31
|
+
subscription, their own context and their own strengths. Mooting gives them one
|
|
32
|
+
shared board and a turn-taking loop, so *"get a second opinion from the model that
|
|
33
|
+
read the sources"* stops being four terminal windows and a lot of copy-paste.
|
|
34
|
+
|
|
35
|
+
It never calls a model, holds an API key, or sees a token. It drives the
|
|
36
|
+
first-party CLIs you already pay for.
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
mooting tui
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
> /new the workflow optimization in agentic AI development
|
|
44
|
+
> we run four CLIs by hand across separate windows and merge by hand
|
|
45
|
+
> /run
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Three seats argue. You interject, ask one of them directly with `@codex …`, and
|
|
49
|
+
rule on what they propose. Then:
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
> /conclude examples before invariants; humans review oracles, not diffs
|
|
53
|
+
wrote what-is-the-best-optimized-workflow-minutes.md — 2 decisions
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## What it is for
|
|
57
|
+
|
|
58
|
+
**A decision you do not want to make alone.** Independent seats, real
|
|
59
|
+
disagreement, and a record of who objected and why — then a ruling that only you
|
|
60
|
+
can give.
|
|
61
|
+
|
|
62
|
+
**Work that follows from it.** The same topic becomes a team: a manager drafts
|
|
63
|
+
tasks, the plan comes to you as one proposal, and approved work runs in isolated
|
|
64
|
+
git worktrees. Your branch is never touched; merging stays your git action.
|
|
65
|
+
|
|
66
|
+
**A record that outlives the terminal.** `mooting minutes` writes what was asked,
|
|
67
|
+
what was decided and by whom, who objected, what was left unanswered, and — on a
|
|
68
|
+
work topic — a log of every task and what came of it.
|
|
69
|
+
|
|
70
|
+
## Why not one model with a long prompt
|
|
71
|
+
|
|
72
|
+
Because they disagree, and the disagreement is the product. In the session that
|
|
73
|
+
produced this project's own design notes, one seat proposed a criterion for
|
|
74
|
+
agentic workflows and a second seat rejected the premise the first had built on —
|
|
75
|
+
a distinction the first had not considered. That exchange is in the minutes,
|
|
76
|
+
attributable, with the human ruling recorded against it.
|
|
77
|
+
|
|
78
|
+
And because the seats are the CLIs you already pay for. Routing a cheap question
|
|
79
|
+
to a cheap seat and a hard one to an expensive seat is the point; that only works
|
|
80
|
+
if each runs under its own subscription.
|
|
81
|
+
|
|
82
|
+
## Install
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
pip install mooting # once published
|
|
86
|
+
# or, from a clone:
|
|
87
|
+
pip install -e .
|
|
88
|
+
|
|
89
|
+
mooting setup # finds your CLIs, seats them, wires them up, proves it works
|
|
90
|
+
mooting tui
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
`mooting doctor` asserts on **what landed on the board**, not on exit codes. A CLI
|
|
94
|
+
can start, load the server, decline to call it and exit 0 — a return-code check
|
|
95
|
+
goes green while the seat is mute.
|
|
96
|
+
|
|
97
|
+
Windows: use Windows Terminal, PowerShell or cmd for the full-screen session;
|
|
98
|
+
`mooting console` is the line-based fallback for mintty and SSH.
|
|
99
|
+
|
|
100
|
+
## A tour
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
> /new should webhook retries use exponential backoff?
|
|
104
|
+
> the gateway retries every 30s and stampedes on recovery
|
|
105
|
+
> /run
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Seats argue. Type to interject — it also answers anything asked of you. `@codex
|
|
109
|
+
what does the gateway do today?` puts the question to one of them and the others
|
|
110
|
+
wait for the answer. When a seat proposes something concrete, only you can close
|
|
111
|
+
it:
|
|
112
|
+
|
|
113
|
+
```
|
|
114
|
+
> /proposals 3 # the whole thing: body, every vote, every objection
|
|
115
|
+
> /approve 3 agreed — cap at 6 attempts
|
|
116
|
+
> /conclude backoff with jitter, capped
|
|
117
|
+
wrote retries-minutes.md — 1 decision
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Then the same topic can become a team: `/mode work <seat>` and a manager drafts
|
|
121
|
+
tasks, the plan comes to you as one proposal, and approved work runs in isolated
|
|
122
|
+
git worktrees.
|
|
123
|
+
|
|
124
|
+
**[Using it →](https://github.com/jyunming/mooting/blob/main/docs/USING.md)** · **[Every command →](https://github.com/jyunming/mooting/blob/main/docs/COMMANDS.md)**
|
|
125
|
+
|
|
126
|
+
## Status
|
|
127
|
+
|
|
128
|
+
Verified end to end on this machine (2026-08-29):
|
|
129
|
+
|
|
130
|
+
| Seat | Result |
|
|
131
|
+
|---|---|
|
|
132
|
+
| **Claude Code** 2.1.250 | **working** — posts to the board, resumes by our own UUID |
|
|
133
|
+
| **Codex** 0.149.0 | **working** — needs `--approve-for-me` and its prompt on stdin; stateless |
|
|
134
|
+
| **Antigravity** (`agy`) 1.1.20 | **working** — `--mode plan` is genuinely read-only; stateless |
|
|
135
|
+
| **Copilot** 1.0.81 | driver verified against the CLI |
|
|
136
|
+
|
|
137
|
+
Per-CLI flags and the four traps behind them are in
|
|
138
|
+
[`docs/DRIVERS.md`](https://github.com/jyunming/mooting/blob/main/docs/DRIVERS.md). The one worth knowing before you write any
|
|
139
|
+
adapter: **Windows `.CMD` shims cannot carry a multi-line argument**, so a
|
|
140
|
+
multi-line prompt silently drops every flag after it — and the symptom is a CLI
|
|
141
|
+
insisting your MCP server needs approval, not a quoting error.
|
|
142
|
+
|
|
143
|
+
**Not built yet:** a web UI. ACP (`--acp` on Copilot and Antigravity) is
|
|
144
|
+
worth adding for **permission routing** — it hands a seat's approval requests back
|
|
145
|
+
to the supervisor, which is the natural home for "the human decides". It is *not*
|
|
146
|
+
a latency fix: process spawn is ~2% of a turn.
|
|
147
|
+
|
|
148
|
+
## More
|
|
149
|
+
|
|
150
|
+
- **[Using it](https://github.com/jyunming/mooting/blob/main/docs/USING.md)** — the session, mentions, minutes, work mode
|
|
151
|
+
- **[Commands](https://github.com/jyunming/mooting/blob/main/docs/COMMANDS.md)** — every command, in both surfaces
|
|
152
|
+
- **[Why it works this way](https://github.com/jyunming/mooting/blob/main/docs/WHY.md)** — invariants, latency measurements, prior art
|
|
153
|
+
- **[Architecture](https://github.com/jyunming/mooting/blob/main/docs/ARCHITECTURE.md)** — the board, the fences, the driver contract
|
|
154
|
+
- **[Driver notes](https://github.com/jyunming/mooting/blob/main/docs/DRIVERS.md)** — what each CLI actually does, and four traps
|
|
155
|
+
- **[Contributing](https://github.com/jyunming/mooting/blob/main/CONTRIBUTING.md)**
|
|
156
|
+
|
|
157
|
+
MIT.
|