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 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 &rarr;</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.
@@ -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 &rarr;</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.
@@ -0,0 +1,3 @@
1
+ """Mooting: a council where agent CLIs from different vendors deliberate, and a human decides."""
2
+
3
+ __version__ = "0.0.1"