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.
- guesswork-3.0.0/LICENSE +21 -0
- guesswork-3.0.0/PKG-INFO +215 -0
- guesswork-3.0.0/README.md +195 -0
- guesswork-3.0.0/guesswork/scripts/guesswork.egg-info/PKG-INFO +215 -0
- guesswork-3.0.0/guesswork/scripts/guesswork.egg-info/SOURCES.txt +14 -0
- guesswork-3.0.0/guesswork/scripts/guesswork.egg-info/dependency_links.txt +1 -0
- guesswork-3.0.0/guesswork/scripts/guesswork.egg-info/entry_points.txt +2 -0
- guesswork-3.0.0/guesswork/scripts/guesswork.egg-info/top_level.txt +1 -0
- guesswork-3.0.0/guesswork/scripts/guesswork.py +2358 -0
- guesswork-3.0.0/pyproject.toml +33 -0
- guesswork-3.0.0/setup.cfg +4 -0
- guesswork-3.0.0/tests/test_behavior_eval.py +140 -0
- guesswork-3.0.0/tests/test_check_decision_record.py +104 -0
- guesswork-3.0.0/tests/test_guesswork.py +497 -0
- guesswork-3.0.0/tests/test_plugin_package.py +171 -0
- guesswork-3.0.0/tests/test_skill_package.py +136 -0
guesswork-3.0.0/LICENSE
ADDED
|
@@ -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.
|
guesswork-3.0.0/PKG-INFO
ADDED
|
@@ -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
|
+
[](https://github.com/curlymolelabs/guesswork/actions/workflows/verify.yml)
|
|
31
|
+
[](LICENSE)
|
|
32
|
+
[](#install-it)
|
|
33
|
+
[](#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
|
+
[](https://github.com/curlymolelabs/guesswork/actions/workflows/verify.yml)
|
|
11
|
+
[](LICENSE)
|
|
12
|
+
[](#install-it)
|
|
13
|
+
[](#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
|
+
[](https://github.com/curlymolelabs/guesswork/actions/workflows/verify.yml)
|
|
31
|
+
[](LICENSE)
|
|
32
|
+
[](#install-it)
|
|
33
|
+
[](#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 @@
|
|
|
1
|
+
|