guesswork 3.0.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.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Curly Mole Labs
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.
@@ -0,0 +1,215 @@
1
+ Metadata-Version: 2.4
2
+ Name: guesswork
3
+ Version: 3.0.0
4
+ Summary: Review the decisions your coding agent made, not just the diff.
5
+ Author: Curly Mole Labs
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/curlymolelabs/guesswork
8
+ Project-URL: Issues, https://github.com/curlymolelabs/guesswork/issues
9
+ Keywords: agents,ai,code-review,decisions,claude-code,vibe-coding
10
+ Classifier: Development Status :: 3 - Alpha
11
+ Classifier: Environment :: Console
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: Operating System :: OS Independent
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Topic :: Software Development :: Quality Assurance
16
+ Requires-Python: >=3.9
17
+ Description-Content-Type: text/markdown
18
+ License-File: LICENSE
19
+ Dynamic: license-file
20
+
21
+ <div align="center">
22
+
23
+ # Guesswork
24
+
25
+ **Review the decisions, not the diff.**
26
+
27
+ Your coding agent makes dozens of product decisions you never asked for.<br>
28
+ Guesswork shows you the risky ones, and you answer them in one line.
29
+
30
+ [![Verify package](https://github.com/curlymolelabs/guesswork/actions/workflows/verify.yml/badge.svg)](https://github.com/curlymolelabs/guesswork/actions/workflows/verify.yml)
31
+ [![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
32
+ [![Claude Code plugin](https://img.shields.io/badge/Claude%20Code-plugin-a5b4fc.svg)](#install-it)
33
+ [![Agent Skills](https://img.shields.io/badge/Agent%20Skills-Codex%20%C2%B7%20Cursor%20%C2%B7%20Gemini-4ade80.svg)](#install-it)
34
+
35
+ <img src="docs/demo.svg" alt="An agent builds team workspaces, records seven decisions, and shows a receipt. The owner replies 1b 2c 3b, and the agent applies the answers and locks the decisions." width="880">
36
+
37
+ </div>
38
+
39
+ ## The problem nobody reviews
40
+
41
+ You asked for "team workspaces with invites and a free trial". Your agent shipped it in four minutes, and along the way it decided:
42
+
43
+ - deleting a workspace erases it forever;
44
+ - the trial charges the card on day 14 without a reminder;
45
+ - every CSV export includes every member's email address;
46
+ - any member can invite anyone.
47
+
48
+ You didn't choose any of that. It's buried in 2,000 lines of diff, and nobody will read it until a customer emails support. **The expensive bugs in agent-written code aren't syntax errors. They're decisions.**
49
+
50
+ Guesswork makes your agent keep receipts:
51
+
52
+ 1. **It records every guess.** Each product decision made without instructions is logged in plain English, with why it was made and what else it could have been.
53
+ 2. **It ranks them by stakes.** Money, data, access, and privacy come first. Wording and layout are only counted.
54
+ 3. **You answer in one line.** Reply `1b 2c 3b`. The agent changes the code and records your answers.
55
+ 4. **It never forgets.** Your answers become locked decisions that every later session, pull request, and CI run respects.
56
+
57
+ ## Try it in 10 seconds
58
+
59
+ No project, no agent, no setup. This creates a fictional app with real guesses, a receipt to answer, and an HTML report:
60
+
61
+ ```bash
62
+ uvx --from git+https://github.com/curlymolelabs/guesswork guesswork demo --open
63
+ ```
64
+
65
+ Use `pipx run --spec git+https://github.com/curlymolelabs/guesswork guesswork demo` if you prefer pipx. Both need Python 3.9 or newer.
66
+
67
+ ## See it work
68
+
69
+ ### 1. Vibe coding a feature
70
+
71
+ You ask for a feature and keep working. At the end of the turn, the agent hands you the receipt from the animation above: the decisions with real stakes, numbered, each with alternatives. Low-stakes guesses such as page sizes are recorded but only counted, so the receipt stays short.
72
+
73
+ Reply `1b 2c 3b`, `all a` to keep everything as built, or `2: something else` in your own words.
74
+
75
+ ### 2. Auditing an app you already built
76
+
77
+ Run `/guesswork:audit` in an existing project. The agent scans for the lines where products usually hide decisions, reads the flows behind them, and turns what it finds into a receipt.
78
+
79
+ <img src="docs/audit.png" alt="guesswork scan output listing money, data, access, privacy, security, notification, and limit decisions found in a small app" width="880">
80
+
81
+ ### 3. Reviewing a pull request
82
+
83
+ The GitHub Action adds the decisions to every pull request, so reviewers read five decisions instead of two thousand lines. It can block merging while high-stakes guesses are still open.
84
+
85
+ <img src="docs/pr-comment.png" alt="A pull request comment listing twelve product decisions with their stakes, status, and files" width="880">
86
+
87
+ ### 4. Remembering across sessions
88
+
89
+ A week later, a new session starts already knowing what you decided. When the agent edits a file that implements one of your decisions, Guesswork reminds it before your choice gets quietly undone.
90
+
91
+ <img src="docs/memory.png" alt="Session start context listing locked decisions, and a reminder shown when the agent edits the billing trial file" width="880">
92
+
93
+ ### 5. Seeing everything at once
94
+
95
+ `guesswork report` writes a dashboard of every decision: what needs you, what's locked, which files hold the most guesses. Click an option to copy the command that records it.
96
+
97
+ <img src="docs/report.png" alt="The Guesswork HTML report showing five decisions that need the owner, locked decisions, and a breakdown by category" width="880">
98
+
99
+ ### 6. Testing what you can't just decide
100
+
101
+ Some guesses are about how users will behave, such as "will teams pay per seat?". Your opinion can't settle those. Reply `3 test` and the bundled [Design Thinking skill](docs/design-thinking.md) designs the smallest test that can.
102
+
103
+ ## Install it
104
+
105
+ ### Claude Code: the full experience
106
+
107
+ ```text
108
+ /plugin marketplace add curlymolelabs/guesswork
109
+ /plugin install guesswork@curlymolelabs
110
+ ```
111
+
112
+ On Claude Code 2.1.275 or later, one step also works: `/plugin install guesswork --marketplace curlymolelabs/guesswork`.
113
+
114
+ Then build something, or run `/guesswork:audit`. To skip permission prompts for the CLI, allow `Bash(guesswork:*)`.
115
+
116
+ ### Codex, Cursor, Gemini CLI, OpenCode, and other Agent Skills clients
117
+
118
+ ```bash
119
+ npx skills add https://github.com/curlymolelabs/guesswork --skill guesswork
120
+ python3 <skill folder>/scripts/guesswork.py init --agents-md
121
+ ```
122
+
123
+ These clients get receipts and memory through the skill and `AGENTS.md`, but not the hooks yet. Hook adapters are [open issues](https://github.com/curlymolelabs/guesswork/issues) if you want to help. See [the client guide](guesswork/references/clients.md).
124
+
125
+ ### The CLI on its own
126
+
127
+ ```bash
128
+ pipx install git+https://github.com/curlymolelabs/guesswork
129
+ ```
130
+
131
+ One Python file, no dependencies, Python 3.9 or newer.
132
+
133
+ ## How it stays out of your way
134
+
135
+ - **It guesses safely.** When the agent must guess, it picks the option that's cheapest to undo: soft delete, private by default, opt-in, a reminder before any charge.
136
+ - **It asks first only when it matters.** The agent stops to ask only when a decision is high stakes and expensive to reverse, such as a payment flow or a data model.
137
+ - **It keeps receipts short.** At most five decisions, ranked by stakes. Everything else is a count.
138
+ - **It nudges at most once.** In Claude Code, the end-of-turn check reminds the agent once per turn, and only when code changed and nothing was recorded. You can change that in `.guesswork/config.json`.
139
+
140
+ ## The ledger is plain files in your repository
141
+
142
+ ```text
143
+ .guesswork/
144
+ |-- config.json
145
+ `-- guesses/
146
+ |-- g-workspace-delete-permanent.json
147
+ `-- g-trial-converts-silently.json
148
+ ```
149
+
150
+ Each guess is one JSON file: the decision, why it was made, its category and stakes, whether it can be undone, the files that implement it, the alternatives, and your answer. One file per guess keeps parallel agents and branches from colliding. Commit the folder with your code, or gitignore it to keep it private. See [the ledger format](guesswork/references/ledger-format.md).
151
+
152
+ Agents are told never to write secrets, credentials, or personal data into the ledger.
153
+
154
+ ## Commands
155
+
156
+ | Command | What it does |
157
+ |---|---|
158
+ | `guesswork demo` | Create a fictional project to try everything in seconds |
159
+ | `guesswork log` | Record guesses from flags or a JSON batch on standard input |
160
+ | `guesswork receipt` | Show the open decisions that need you, numbered for one-line replies |
161
+ | `guesswork decide 1b 2a` | Record answers to the latest receipt, or `g-id=b`, or `--custom "..."` |
162
+ | `guesswork context <files>` | Show the decisions that cover some files |
163
+ | `guesswork scan` | List code lines that often hide product decisions |
164
+ | `guesswork report` | Write the HTML report to `.guesswork/report.html` |
165
+ | `guesswork pr --base origin/main` | Summarize the decisions on a branch in Markdown |
166
+ | `guesswork check --fail-on high` | Exit with an error while open guesses reach a stakes level |
167
+ | `guesswork test <id> --plan "..."` | Mark a guess that needs evidence before anyone decides |
168
+ | `guesswork status` | One-line summary, also usable in a status line |
169
+
170
+ ## Review decisions in pull requests
171
+
172
+ ```yaml
173
+ name: Guesswork
174
+ on: pull_request
175
+ permissions:
176
+ contents: read
177
+ pull-requests: write
178
+ jobs:
179
+ decisions:
180
+ runs-on: ubuntu-latest
181
+ steps:
182
+ - uses: actions/checkout@v7
183
+ with:
184
+ fetch-depth: 0
185
+ - uses: curlymolelabs/guesswork@main
186
+ with:
187
+ comment: "true"
188
+ ```
189
+
190
+ By default the action only reports. Add `fail-on: high` to block merging while a pull request adds open high-stakes guesses. Pin it to a release tag once one exists.
191
+
192
+ ## How it differs from rules files and decision logs
193
+
194
+ - **`CLAUDE.md` and `AGENTS.md`** hold rules you write before the work. Guesswork captures the decisions the agent made during the work, the ones you never anticipated.
195
+ - **Decision logs and ADRs** record what your team decided. Guesswork records what the agent decided for you, then asks you.
196
+ - **Code review** reads the diff. Guesswork reads the decisions.
197
+
198
+ ## What is proven so far
199
+
200
+ | Question | Current answer |
201
+ |---|---|
202
+ | Do the CLI, hooks, receipts, pull request summaries, and report behave as specified? | Yes, covered by unit tests that pass on Linux and Windows in CI |
203
+ | Does the Claude Code plugin pass Claude Code's own validator? | Yes, for both the plugin and the marketplace |
204
+ | Do agents reliably record the decisions they make? | Not measured yet |
205
+ | Do owners answer receipts and keep using them? | Not measured yet |
206
+
207
+ This repository uses Guesswork on itself. Its [`.guesswork/`](.guesswork/README.md) folder holds the real decisions made while building it, and how each one was settled. [PROOF.md](PROOF.md) describes the evidence bar for the behavior claims. The screenshots come from real CLI output on the [fictional example app](examples/fictional-workspace-app/README.md).
208
+
209
+ ## Contribute
210
+
211
+ Hook adapters for Cursor, Codex, and Gemini CLI, plus scan rules for more frameworks, are open as [good first issues](https://github.com/curlymolelabs/guesswork/issues). Read [the contribution guide](CONTRIBUTING.md). Report vulnerabilities through [private security reporting](SECURITY.md).
212
+
213
+ ## License
214
+
215
+ MIT. See [LICENSE](LICENSE).
@@ -0,0 +1,195 @@
1
+ <div align="center">
2
+
3
+ # Guesswork
4
+
5
+ **Review the decisions, not the diff.**
6
+
7
+ Your coding agent makes dozens of product decisions you never asked for.<br>
8
+ Guesswork shows you the risky ones, and you answer them in one line.
9
+
10
+ [![Verify package](https://github.com/curlymolelabs/guesswork/actions/workflows/verify.yml/badge.svg)](https://github.com/curlymolelabs/guesswork/actions/workflows/verify.yml)
11
+ [![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
12
+ [![Claude Code plugin](https://img.shields.io/badge/Claude%20Code-plugin-a5b4fc.svg)](#install-it)
13
+ [![Agent Skills](https://img.shields.io/badge/Agent%20Skills-Codex%20%C2%B7%20Cursor%20%C2%B7%20Gemini-4ade80.svg)](#install-it)
14
+
15
+ <img src="docs/demo.svg" alt="An agent builds team workspaces, records seven decisions, and shows a receipt. The owner replies 1b 2c 3b, and the agent applies the answers and locks the decisions." width="880">
16
+
17
+ </div>
18
+
19
+ ## The problem nobody reviews
20
+
21
+ You asked for "team workspaces with invites and a free trial". Your agent shipped it in four minutes, and along the way it decided:
22
+
23
+ - deleting a workspace erases it forever;
24
+ - the trial charges the card on day 14 without a reminder;
25
+ - every CSV export includes every member's email address;
26
+ - any member can invite anyone.
27
+
28
+ You didn't choose any of that. It's buried in 2,000 lines of diff, and nobody will read it until a customer emails support. **The expensive bugs in agent-written code aren't syntax errors. They're decisions.**
29
+
30
+ Guesswork makes your agent keep receipts:
31
+
32
+ 1. **It records every guess.** Each product decision made without instructions is logged in plain English, with why it was made and what else it could have been.
33
+ 2. **It ranks them by stakes.** Money, data, access, and privacy come first. Wording and layout are only counted.
34
+ 3. **You answer in one line.** Reply `1b 2c 3b`. The agent changes the code and records your answers.
35
+ 4. **It never forgets.** Your answers become locked decisions that every later session, pull request, and CI run respects.
36
+
37
+ ## Try it in 10 seconds
38
+
39
+ No project, no agent, no setup. This creates a fictional app with real guesses, a receipt to answer, and an HTML report:
40
+
41
+ ```bash
42
+ uvx --from git+https://github.com/curlymolelabs/guesswork guesswork demo --open
43
+ ```
44
+
45
+ Use `pipx run --spec git+https://github.com/curlymolelabs/guesswork guesswork demo` if you prefer pipx. Both need Python 3.9 or newer.
46
+
47
+ ## See it work
48
+
49
+ ### 1. Vibe coding a feature
50
+
51
+ You ask for a feature and keep working. At the end of the turn, the agent hands you the receipt from the animation above: the decisions with real stakes, numbered, each with alternatives. Low-stakes guesses such as page sizes are recorded but only counted, so the receipt stays short.
52
+
53
+ Reply `1b 2c 3b`, `all a` to keep everything as built, or `2: something else` in your own words.
54
+
55
+ ### 2. Auditing an app you already built
56
+
57
+ Run `/guesswork:audit` in an existing project. The agent scans for the lines where products usually hide decisions, reads the flows behind them, and turns what it finds into a receipt.
58
+
59
+ <img src="docs/audit.png" alt="guesswork scan output listing money, data, access, privacy, security, notification, and limit decisions found in a small app" width="880">
60
+
61
+ ### 3. Reviewing a pull request
62
+
63
+ The GitHub Action adds the decisions to every pull request, so reviewers read five decisions instead of two thousand lines. It can block merging while high-stakes guesses are still open.
64
+
65
+ <img src="docs/pr-comment.png" alt="A pull request comment listing twelve product decisions with their stakes, status, and files" width="880">
66
+
67
+ ### 4. Remembering across sessions
68
+
69
+ A week later, a new session starts already knowing what you decided. When the agent edits a file that implements one of your decisions, Guesswork reminds it before your choice gets quietly undone.
70
+
71
+ <img src="docs/memory.png" alt="Session start context listing locked decisions, and a reminder shown when the agent edits the billing trial file" width="880">
72
+
73
+ ### 5. Seeing everything at once
74
+
75
+ `guesswork report` writes a dashboard of every decision: what needs you, what's locked, which files hold the most guesses. Click an option to copy the command that records it.
76
+
77
+ <img src="docs/report.png" alt="The Guesswork HTML report showing five decisions that need the owner, locked decisions, and a breakdown by category" width="880">
78
+
79
+ ### 6. Testing what you can't just decide
80
+
81
+ Some guesses are about how users will behave, such as "will teams pay per seat?". Your opinion can't settle those. Reply `3 test` and the bundled [Design Thinking skill](docs/design-thinking.md) designs the smallest test that can.
82
+
83
+ ## Install it
84
+
85
+ ### Claude Code: the full experience
86
+
87
+ ```text
88
+ /plugin marketplace add curlymolelabs/guesswork
89
+ /plugin install guesswork@curlymolelabs
90
+ ```
91
+
92
+ On Claude Code 2.1.275 or later, one step also works: `/plugin install guesswork --marketplace curlymolelabs/guesswork`.
93
+
94
+ Then build something, or run `/guesswork:audit`. To skip permission prompts for the CLI, allow `Bash(guesswork:*)`.
95
+
96
+ ### Codex, Cursor, Gemini CLI, OpenCode, and other Agent Skills clients
97
+
98
+ ```bash
99
+ npx skills add https://github.com/curlymolelabs/guesswork --skill guesswork
100
+ python3 <skill folder>/scripts/guesswork.py init --agents-md
101
+ ```
102
+
103
+ These clients get receipts and memory through the skill and `AGENTS.md`, but not the hooks yet. Hook adapters are [open issues](https://github.com/curlymolelabs/guesswork/issues) if you want to help. See [the client guide](guesswork/references/clients.md).
104
+
105
+ ### The CLI on its own
106
+
107
+ ```bash
108
+ pipx install git+https://github.com/curlymolelabs/guesswork
109
+ ```
110
+
111
+ One Python file, no dependencies, Python 3.9 or newer.
112
+
113
+ ## How it stays out of your way
114
+
115
+ - **It guesses safely.** When the agent must guess, it picks the option that's cheapest to undo: soft delete, private by default, opt-in, a reminder before any charge.
116
+ - **It asks first only when it matters.** The agent stops to ask only when a decision is high stakes and expensive to reverse, such as a payment flow or a data model.
117
+ - **It keeps receipts short.** At most five decisions, ranked by stakes. Everything else is a count.
118
+ - **It nudges at most once.** In Claude Code, the end-of-turn check reminds the agent once per turn, and only when code changed and nothing was recorded. You can change that in `.guesswork/config.json`.
119
+
120
+ ## The ledger is plain files in your repository
121
+
122
+ ```text
123
+ .guesswork/
124
+ |-- config.json
125
+ `-- guesses/
126
+ |-- g-workspace-delete-permanent.json
127
+ `-- g-trial-converts-silently.json
128
+ ```
129
+
130
+ Each guess is one JSON file: the decision, why it was made, its category and stakes, whether it can be undone, the files that implement it, the alternatives, and your answer. One file per guess keeps parallel agents and branches from colliding. Commit the folder with your code, or gitignore it to keep it private. See [the ledger format](guesswork/references/ledger-format.md).
131
+
132
+ Agents are told never to write secrets, credentials, or personal data into the ledger.
133
+
134
+ ## Commands
135
+
136
+ | Command | What it does |
137
+ |---|---|
138
+ | `guesswork demo` | Create a fictional project to try everything in seconds |
139
+ | `guesswork log` | Record guesses from flags or a JSON batch on standard input |
140
+ | `guesswork receipt` | Show the open decisions that need you, numbered for one-line replies |
141
+ | `guesswork decide 1b 2a` | Record answers to the latest receipt, or `g-id=b`, or `--custom "..."` |
142
+ | `guesswork context <files>` | Show the decisions that cover some files |
143
+ | `guesswork scan` | List code lines that often hide product decisions |
144
+ | `guesswork report` | Write the HTML report to `.guesswork/report.html` |
145
+ | `guesswork pr --base origin/main` | Summarize the decisions on a branch in Markdown |
146
+ | `guesswork check --fail-on high` | Exit with an error while open guesses reach a stakes level |
147
+ | `guesswork test <id> --plan "..."` | Mark a guess that needs evidence before anyone decides |
148
+ | `guesswork status` | One-line summary, also usable in a status line |
149
+
150
+ ## Review decisions in pull requests
151
+
152
+ ```yaml
153
+ name: Guesswork
154
+ on: pull_request
155
+ permissions:
156
+ contents: read
157
+ pull-requests: write
158
+ jobs:
159
+ decisions:
160
+ runs-on: ubuntu-latest
161
+ steps:
162
+ - uses: actions/checkout@v7
163
+ with:
164
+ fetch-depth: 0
165
+ - uses: curlymolelabs/guesswork@main
166
+ with:
167
+ comment: "true"
168
+ ```
169
+
170
+ By default the action only reports. Add `fail-on: high` to block merging while a pull request adds open high-stakes guesses. Pin it to a release tag once one exists.
171
+
172
+ ## How it differs from rules files and decision logs
173
+
174
+ - **`CLAUDE.md` and `AGENTS.md`** hold rules you write before the work. Guesswork captures the decisions the agent made during the work, the ones you never anticipated.
175
+ - **Decision logs and ADRs** record what your team decided. Guesswork records what the agent decided for you, then asks you.
176
+ - **Code review** reads the diff. Guesswork reads the decisions.
177
+
178
+ ## What is proven so far
179
+
180
+ | Question | Current answer |
181
+ |---|---|
182
+ | Do the CLI, hooks, receipts, pull request summaries, and report behave as specified? | Yes, covered by unit tests that pass on Linux and Windows in CI |
183
+ | Does the Claude Code plugin pass Claude Code's own validator? | Yes, for both the plugin and the marketplace |
184
+ | Do agents reliably record the decisions they make? | Not measured yet |
185
+ | Do owners answer receipts and keep using them? | Not measured yet |
186
+
187
+ This repository uses Guesswork on itself. Its [`.guesswork/`](.guesswork/README.md) folder holds the real decisions made while building it, and how each one was settled. [PROOF.md](PROOF.md) describes the evidence bar for the behavior claims. The screenshots come from real CLI output on the [fictional example app](examples/fictional-workspace-app/README.md).
188
+
189
+ ## Contribute
190
+
191
+ Hook adapters for Cursor, Codex, and Gemini CLI, plus scan rules for more frameworks, are open as [good first issues](https://github.com/curlymolelabs/guesswork/issues). Read [the contribution guide](CONTRIBUTING.md). Report vulnerabilities through [private security reporting](SECURITY.md).
192
+
193
+ ## License
194
+
195
+ MIT. See [LICENSE](LICENSE).
@@ -0,0 +1,215 @@
1
+ Metadata-Version: 2.4
2
+ Name: guesswork
3
+ Version: 3.0.0
4
+ Summary: Review the decisions your coding agent made, not just the diff.
5
+ Author: Curly Mole Labs
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/curlymolelabs/guesswork
8
+ Project-URL: Issues, https://github.com/curlymolelabs/guesswork/issues
9
+ Keywords: agents,ai,code-review,decisions,claude-code,vibe-coding
10
+ Classifier: Development Status :: 3 - Alpha
11
+ Classifier: Environment :: Console
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: Operating System :: OS Independent
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Topic :: Software Development :: Quality Assurance
16
+ Requires-Python: >=3.9
17
+ Description-Content-Type: text/markdown
18
+ License-File: LICENSE
19
+ Dynamic: license-file
20
+
21
+ <div align="center">
22
+
23
+ # Guesswork
24
+
25
+ **Review the decisions, not the diff.**
26
+
27
+ Your coding agent makes dozens of product decisions you never asked for.<br>
28
+ Guesswork shows you the risky ones, and you answer them in one line.
29
+
30
+ [![Verify package](https://github.com/curlymolelabs/guesswork/actions/workflows/verify.yml/badge.svg)](https://github.com/curlymolelabs/guesswork/actions/workflows/verify.yml)
31
+ [![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
32
+ [![Claude Code plugin](https://img.shields.io/badge/Claude%20Code-plugin-a5b4fc.svg)](#install-it)
33
+ [![Agent Skills](https://img.shields.io/badge/Agent%20Skills-Codex%20%C2%B7%20Cursor%20%C2%B7%20Gemini-4ade80.svg)](#install-it)
34
+
35
+ <img src="docs/demo.svg" alt="An agent builds team workspaces, records seven decisions, and shows a receipt. The owner replies 1b 2c 3b, and the agent applies the answers and locks the decisions." width="880">
36
+
37
+ </div>
38
+
39
+ ## The problem nobody reviews
40
+
41
+ You asked for "team workspaces with invites and a free trial". Your agent shipped it in four minutes, and along the way it decided:
42
+
43
+ - deleting a workspace erases it forever;
44
+ - the trial charges the card on day 14 without a reminder;
45
+ - every CSV export includes every member's email address;
46
+ - any member can invite anyone.
47
+
48
+ You didn't choose any of that. It's buried in 2,000 lines of diff, and nobody will read it until a customer emails support. **The expensive bugs in agent-written code aren't syntax errors. They're decisions.**
49
+
50
+ Guesswork makes your agent keep receipts:
51
+
52
+ 1. **It records every guess.** Each product decision made without instructions is logged in plain English, with why it was made and what else it could have been.
53
+ 2. **It ranks them by stakes.** Money, data, access, and privacy come first. Wording and layout are only counted.
54
+ 3. **You answer in one line.** Reply `1b 2c 3b`. The agent changes the code and records your answers.
55
+ 4. **It never forgets.** Your answers become locked decisions that every later session, pull request, and CI run respects.
56
+
57
+ ## Try it in 10 seconds
58
+
59
+ No project, no agent, no setup. This creates a fictional app with real guesses, a receipt to answer, and an HTML report:
60
+
61
+ ```bash
62
+ uvx --from git+https://github.com/curlymolelabs/guesswork guesswork demo --open
63
+ ```
64
+
65
+ Use `pipx run --spec git+https://github.com/curlymolelabs/guesswork guesswork demo` if you prefer pipx. Both need Python 3.9 or newer.
66
+
67
+ ## See it work
68
+
69
+ ### 1. Vibe coding a feature
70
+
71
+ You ask for a feature and keep working. At the end of the turn, the agent hands you the receipt from the animation above: the decisions with real stakes, numbered, each with alternatives. Low-stakes guesses such as page sizes are recorded but only counted, so the receipt stays short.
72
+
73
+ Reply `1b 2c 3b`, `all a` to keep everything as built, or `2: something else` in your own words.
74
+
75
+ ### 2. Auditing an app you already built
76
+
77
+ Run `/guesswork:audit` in an existing project. The agent scans for the lines where products usually hide decisions, reads the flows behind them, and turns what it finds into a receipt.
78
+
79
+ <img src="docs/audit.png" alt="guesswork scan output listing money, data, access, privacy, security, notification, and limit decisions found in a small app" width="880">
80
+
81
+ ### 3. Reviewing a pull request
82
+
83
+ The GitHub Action adds the decisions to every pull request, so reviewers read five decisions instead of two thousand lines. It can block merging while high-stakes guesses are still open.
84
+
85
+ <img src="docs/pr-comment.png" alt="A pull request comment listing twelve product decisions with their stakes, status, and files" width="880">
86
+
87
+ ### 4. Remembering across sessions
88
+
89
+ A week later, a new session starts already knowing what you decided. When the agent edits a file that implements one of your decisions, Guesswork reminds it before your choice gets quietly undone.
90
+
91
+ <img src="docs/memory.png" alt="Session start context listing locked decisions, and a reminder shown when the agent edits the billing trial file" width="880">
92
+
93
+ ### 5. Seeing everything at once
94
+
95
+ `guesswork report` writes a dashboard of every decision: what needs you, what's locked, which files hold the most guesses. Click an option to copy the command that records it.
96
+
97
+ <img src="docs/report.png" alt="The Guesswork HTML report showing five decisions that need the owner, locked decisions, and a breakdown by category" width="880">
98
+
99
+ ### 6. Testing what you can't just decide
100
+
101
+ Some guesses are about how users will behave, such as "will teams pay per seat?". Your opinion can't settle those. Reply `3 test` and the bundled [Design Thinking skill](docs/design-thinking.md) designs the smallest test that can.
102
+
103
+ ## Install it
104
+
105
+ ### Claude Code: the full experience
106
+
107
+ ```text
108
+ /plugin marketplace add curlymolelabs/guesswork
109
+ /plugin install guesswork@curlymolelabs
110
+ ```
111
+
112
+ On Claude Code 2.1.275 or later, one step also works: `/plugin install guesswork --marketplace curlymolelabs/guesswork`.
113
+
114
+ Then build something, or run `/guesswork:audit`. To skip permission prompts for the CLI, allow `Bash(guesswork:*)`.
115
+
116
+ ### Codex, Cursor, Gemini CLI, OpenCode, and other Agent Skills clients
117
+
118
+ ```bash
119
+ npx skills add https://github.com/curlymolelabs/guesswork --skill guesswork
120
+ python3 <skill folder>/scripts/guesswork.py init --agents-md
121
+ ```
122
+
123
+ These clients get receipts and memory through the skill and `AGENTS.md`, but not the hooks yet. Hook adapters are [open issues](https://github.com/curlymolelabs/guesswork/issues) if you want to help. See [the client guide](guesswork/references/clients.md).
124
+
125
+ ### The CLI on its own
126
+
127
+ ```bash
128
+ pipx install git+https://github.com/curlymolelabs/guesswork
129
+ ```
130
+
131
+ One Python file, no dependencies, Python 3.9 or newer.
132
+
133
+ ## How it stays out of your way
134
+
135
+ - **It guesses safely.** When the agent must guess, it picks the option that's cheapest to undo: soft delete, private by default, opt-in, a reminder before any charge.
136
+ - **It asks first only when it matters.** The agent stops to ask only when a decision is high stakes and expensive to reverse, such as a payment flow or a data model.
137
+ - **It keeps receipts short.** At most five decisions, ranked by stakes. Everything else is a count.
138
+ - **It nudges at most once.** In Claude Code, the end-of-turn check reminds the agent once per turn, and only when code changed and nothing was recorded. You can change that in `.guesswork/config.json`.
139
+
140
+ ## The ledger is plain files in your repository
141
+
142
+ ```text
143
+ .guesswork/
144
+ |-- config.json
145
+ `-- guesses/
146
+ |-- g-workspace-delete-permanent.json
147
+ `-- g-trial-converts-silently.json
148
+ ```
149
+
150
+ Each guess is one JSON file: the decision, why it was made, its category and stakes, whether it can be undone, the files that implement it, the alternatives, and your answer. One file per guess keeps parallel agents and branches from colliding. Commit the folder with your code, or gitignore it to keep it private. See [the ledger format](guesswork/references/ledger-format.md).
151
+
152
+ Agents are told never to write secrets, credentials, or personal data into the ledger.
153
+
154
+ ## Commands
155
+
156
+ | Command | What it does |
157
+ |---|---|
158
+ | `guesswork demo` | Create a fictional project to try everything in seconds |
159
+ | `guesswork log` | Record guesses from flags or a JSON batch on standard input |
160
+ | `guesswork receipt` | Show the open decisions that need you, numbered for one-line replies |
161
+ | `guesswork decide 1b 2a` | Record answers to the latest receipt, or `g-id=b`, or `--custom "..."` |
162
+ | `guesswork context <files>` | Show the decisions that cover some files |
163
+ | `guesswork scan` | List code lines that often hide product decisions |
164
+ | `guesswork report` | Write the HTML report to `.guesswork/report.html` |
165
+ | `guesswork pr --base origin/main` | Summarize the decisions on a branch in Markdown |
166
+ | `guesswork check --fail-on high` | Exit with an error while open guesses reach a stakes level |
167
+ | `guesswork test <id> --plan "..."` | Mark a guess that needs evidence before anyone decides |
168
+ | `guesswork status` | One-line summary, also usable in a status line |
169
+
170
+ ## Review decisions in pull requests
171
+
172
+ ```yaml
173
+ name: Guesswork
174
+ on: pull_request
175
+ permissions:
176
+ contents: read
177
+ pull-requests: write
178
+ jobs:
179
+ decisions:
180
+ runs-on: ubuntu-latest
181
+ steps:
182
+ - uses: actions/checkout@v7
183
+ with:
184
+ fetch-depth: 0
185
+ - uses: curlymolelabs/guesswork@main
186
+ with:
187
+ comment: "true"
188
+ ```
189
+
190
+ By default the action only reports. Add `fail-on: high` to block merging while a pull request adds open high-stakes guesses. Pin it to a release tag once one exists.
191
+
192
+ ## How it differs from rules files and decision logs
193
+
194
+ - **`CLAUDE.md` and `AGENTS.md`** hold rules you write before the work. Guesswork captures the decisions the agent made during the work, the ones you never anticipated.
195
+ - **Decision logs and ADRs** record what your team decided. Guesswork records what the agent decided for you, then asks you.
196
+ - **Code review** reads the diff. Guesswork reads the decisions.
197
+
198
+ ## What is proven so far
199
+
200
+ | Question | Current answer |
201
+ |---|---|
202
+ | Do the CLI, hooks, receipts, pull request summaries, and report behave as specified? | Yes, covered by unit tests that pass on Linux and Windows in CI |
203
+ | Does the Claude Code plugin pass Claude Code's own validator? | Yes, for both the plugin and the marketplace |
204
+ | Do agents reliably record the decisions they make? | Not measured yet |
205
+ | Do owners answer receipts and keep using them? | Not measured yet |
206
+
207
+ This repository uses Guesswork on itself. Its [`.guesswork/`](.guesswork/README.md) folder holds the real decisions made while building it, and how each one was settled. [PROOF.md](PROOF.md) describes the evidence bar for the behavior claims. The screenshots come from real CLI output on the [fictional example app](examples/fictional-workspace-app/README.md).
208
+
209
+ ## Contribute
210
+
211
+ Hook adapters for Cursor, Codex, and Gemini CLI, plus scan rules for more frameworks, are open as [good first issues](https://github.com/curlymolelabs/guesswork/issues). Read [the contribution guide](CONTRIBUTING.md). Report vulnerabilities through [private security reporting](SECURITY.md).
212
+
213
+ ## License
214
+
215
+ MIT. See [LICENSE](LICENSE).
@@ -0,0 +1,14 @@
1
+ LICENSE
2
+ README.md
3
+ pyproject.toml
4
+ guesswork/scripts/guesswork.py
5
+ guesswork/scripts/guesswork.egg-info/PKG-INFO
6
+ guesswork/scripts/guesswork.egg-info/SOURCES.txt
7
+ guesswork/scripts/guesswork.egg-info/dependency_links.txt
8
+ guesswork/scripts/guesswork.egg-info/entry_points.txt
9
+ guesswork/scripts/guesswork.egg-info/top_level.txt
10
+ tests/test_behavior_eval.py
11
+ tests/test_check_decision_record.py
12
+ tests/test_guesswork.py
13
+ tests/test_plugin_package.py
14
+ tests/test_skill_package.py
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ guesswork = guesswork:main