better-grill 0.3.0 → 0.4.0
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.
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +64 -40
- package/package.json +2 -1
- package/skills/better-grill-base/SKILL.md +12 -3
- package/skills/better-grill-base/dist/cli.js +46 -19
- package/skills/better-grill-base/dist/server.js +32 -32
- package/skills/better-grill-base/dist/web/assets/fonts-CJmUTqBe.js +2 -0
- package/skills/better-grill-base/dist/web/assets/index-B5A56OtT.css +2 -0
- package/skills/better-grill-base/dist/web/assets/index-DQsP0Vpp.js +86 -0
- package/skills/better-grill-base/dist/web/index.html +2 -2
- package/skills/better-grill-base/visualize.md +112 -0
- package/skills/better-grill-base/dist/web/assets/index-404t474v.js +0 -39
- package/skills/better-grill-base/dist/web/assets/index-BRvWCEEd.css +0 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "better-grill",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Run grill sessions in a local browser UI instead of the terminal: rounds of questions with options and a recommendation, a discussion thread per question, driven by your open Claude Code session.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Jakub Stastny",
|
package/README.md
CHANGED
|
@@ -1,74 +1,98 @@
|
|
|
1
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="https://raw.githubusercontent.com/devbaj-stastny-jakub/better-grill/main/.github/assets/hero.png" alt="better grill, the UI for the grilling skill: grilling without the terminal mess. Rounds of questions, Claude's pick on each, a discussion thread per question.">
|
|
3
|
+
</p>
|
|
2
4
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
5
|
+
<p align="center">
|
|
6
|
+
<a href="https://www.npmjs.com/package/better-grill"><img src="https://img.shields.io/npm/v/better-grill?color=f97316" alt="npm"></a>
|
|
7
|
+
<a href="LICENSE"><img src="https://img.shields.io/npm/l/better-grill?color=f97316" alt="license"></a>
|
|
8
|
+
<a href="https://nodejs.org"><img src="https://img.shields.io/node/v/better-grill?color=f97316" alt="node"></a>
|
|
9
|
+
</p>
|
|
6
10
|
|
|
7
|
-
|
|
11
|
+
<p align="center"><b>Matt Pocock's <a href="https://github.com/mattpocock/skills"><code>grilling</code></a> skill, in a real UI.<br>Rounds, discussions, one clean send, and no mess in your terminal.</b></p>
|
|
8
12
|
|
|
9
|
-
|
|
13
|
+
---
|
|
10
14
|
|
|
11
|
-
|
|
15
|
+
## Two ways to grill
|
|
12
16
|
|
|
13
|
-
|
|
17
|
+
<table>
|
|
18
|
+
<tr>
|
|
19
|
+
<td width="50%" valign="top">
|
|
14
20
|
|
|
15
|
-
|
|
16
|
-
- **A discussion thread per question.** Push back on one question without derailing the rest; Claude can reword, resolve, drop or add questions from the talk.
|
|
17
|
-
- **Answer at your own pace.** Lock in questions in any order, change your mind, then send the whole round at once.
|
|
18
|
-
- **Runs on your Claude Code session.** Uses your existing subscription. No API key, no hosted service.
|
|
21
|
+
**Grill a plan**
|
|
19
22
|
|
|
20
|
-
|
|
23
|
+
```
|
|
24
|
+
/better-grill:better-grill <plan>
|
|
25
|
+
```
|
|
21
26
|
|
|
22
|
-
|
|
23
|
-
- [Node.js](https://nodejs.org) 20 or newer on your `PATH`
|
|
24
|
-
- The `grilling` skill from [mattpocock/skills](https://github.com/mattpocock/skills). better-grill brings the UI; `grilling` brings the method.
|
|
25
|
-
- For the docs variant, also `domain-modeling` from the same repo.
|
|
27
|
+
Claude grills your plan round by round until every decision is settled, then sums them up.
|
|
26
28
|
|
|
27
|
-
|
|
29
|
+
</td>
|
|
30
|
+
<td width="50%" valign="top">
|
|
28
31
|
|
|
29
|
-
|
|
32
|
+
**Grill with docs**
|
|
30
33
|
|
|
31
34
|
```
|
|
32
|
-
/
|
|
33
|
-
/plugin install better-grill@better-grill
|
|
35
|
+
/better-grill:better-grill-docs <plan>
|
|
34
36
|
```
|
|
35
37
|
|
|
36
|
-
|
|
38
|
+
The same grill, and Claude keeps a glossary (`CONTEXT.md`) and ADRs up to date as decisions settle, like `grill-with-docs`.
|
|
39
|
+
|
|
40
|
+
</td>
|
|
41
|
+
</tr>
|
|
42
|
+
</table>
|
|
37
43
|
|
|
38
|
-
|
|
44
|
+
For example:
|
|
39
45
|
|
|
40
46
|
```
|
|
41
|
-
/better-grill:better-grill
|
|
47
|
+
/better-grill:better-grill a CLI that syncs my dotfiles across machines
|
|
42
48
|
```
|
|
43
49
|
|
|
44
|
-
|
|
50
|
+
Your browser opens on the session, and Claude's first round of questions lands there.
|
|
51
|
+
|
|
52
|
+
## Install
|
|
53
|
+
|
|
54
|
+
In Claude Code:
|
|
45
55
|
|
|
46
56
|
```
|
|
47
|
-
/
|
|
57
|
+
/plugin marketplace add devbaj-stastny-jakub/better-grill
|
|
58
|
+
/plugin install better-grill@better-grill
|
|
48
59
|
```
|
|
49
60
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
4. When every question is locked in, **Send to Claude**. The next round builds on your answers.
|
|
54
|
-
5. When nothing is left open, Claude posts a summary of every decision. Confirm it, or say what's wrong and the grilling continues.
|
|
61
|
+
You also need [Node.js](https://nodejs.org) 20+ and the [`grilling`](https://github.com/mattpocock/skills) skill; the docs variant also uses `domain-modeling` from the same repo. better grill brings the UI, the skills bring the method.
|
|
62
|
+
|
|
63
|
+
## What you get
|
|
55
64
|
|
|
56
|
-

|
|
57
66
|
|
|
58
|
-
|
|
67
|
+
<table>
|
|
68
|
+
<tr>
|
|
69
|
+
<td width="33%" valign="top"><b>One question at a time</b><br>Rounds step through their questions, with Claude's context, trade-offs and tables.</td>
|
|
70
|
+
<td width="33%" valign="top"><b>Claude's pick on each</b><br>Take it, choose another option, write your own answer, add a note, or paste a screenshot.</td>
|
|
71
|
+
<td width="33%" valign="top"><b>A thread per question</b><br>Push back on one question; Claude rewords, resolves, drops or adds questions.</td>
|
|
72
|
+
</tr>
|
|
73
|
+
<tr>
|
|
74
|
+
<td width="33%" valign="top"><b>Lock in, then send</b><br>Answer in any order, change your mind, send the round when it's settled.</td>
|
|
75
|
+
<td width="33%" valign="top"><b>A summary at the end</b><br>Every decision in one place. Confirm it, or keep grilling.</td>
|
|
76
|
+
<td width="33%" valign="top"><b>Keyboard first</b><br><kbd>↑</kbd> <kbd>↓</kbd> walk the options, <kbd>Enter</kbd> locks in, <kbd>D</kbd> opens the discussion, <kbd>V</kbd> shows the visualization, <kbd>[</kbd> folds the sidebar.</td>
|
|
77
|
+
</tr>
|
|
78
|
+
<tr>
|
|
79
|
+
<td colspan="3" valign="top"><b>Visualize any question</b><br>Press Visualize and Claude turns the question into an interactive page, right in the app, so it's easier to understand. Keep answering while it works.</td>
|
|
80
|
+
</tr>
|
|
81
|
+
</table>
|
|
59
82
|
|
|
60
|
-
##
|
|
83
|
+
## Built into Claude Code
|
|
61
84
|
|
|
62
|
-
-
|
|
63
|
-
-
|
|
64
|
-
- The
|
|
65
|
-
-
|
|
85
|
+
- **Part of the session you're in.** One command from your current Claude Code session. No accounts, no API keys, nothing to set up.
|
|
86
|
+
- **Live, both ways.** Your answers reach Claude the moment you send them, and its replies in a discussion show up as soon as it writes them.
|
|
87
|
+
- **Claude knows your project.** The grill runs in the same conversation, so Claude asks with your code and everything you've discussed in mind.
|
|
88
|
+
- **Your terminal stays quiet.** The whole grill happens in the browser; the terminal just shows Claude at work.
|
|
89
|
+
- **Several grills at once.** Every Claude Code session gets its own grill in its own tab.
|
|
66
90
|
|
|
67
|
-
|
|
91
|
+
Curious about the internals? [ARCHITECTURE.md](ARCHITECTURE.md).
|
|
68
92
|
|
|
69
93
|
## Contributing
|
|
70
94
|
|
|
71
|
-
Issues and pull requests welcome. Dev setup: [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
95
|
+
Issues and pull requests welcome. Dev setup, demo and screenshots: [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
72
96
|
|
|
73
97
|
## License
|
|
74
98
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "better-grill",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Grill sessions for Claude Code, in your browser instead of the terminal.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai",
|
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
"skills/better-grill/SKILL.md",
|
|
34
34
|
"skills/better-grill-docs/SKILL.md",
|
|
35
35
|
"skills/better-grill-base/SKILL.md",
|
|
36
|
+
"skills/better-grill-base/visualize.md",
|
|
36
37
|
"skills/better-grill-base/dist"
|
|
37
38
|
],
|
|
38
39
|
"scripts": {
|
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
name: better-grill-base
|
|
3
3
|
description: Internal. Shared instructions loaded by the better-grill and better-grill-docs skills. Do not invoke directly.
|
|
4
4
|
user-invocable: false
|
|
5
|
-
allowed-tools:
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- Bash(node "${CLAUDE_SKILL_DIR}/dist/cli.js" *)
|
|
7
|
+
- Read(~/.better-grill/images/**)
|
|
6
8
|
---
|
|
7
9
|
|
|
8
10
|
# Better Grill
|
|
@@ -90,13 +92,15 @@ Output:
|
|
|
90
92
|
{
|
|
91
93
|
"events": [
|
|
92
94
|
{ "type": "answer", "questionId": "Q2", "title": "…", "choices": ["Label"], "text": "note or own answer", "revised": false, "by": "user" },
|
|
93
|
-
{ "type": "chat", "questionId": "Q3", "title": "…", "text": "
|
|
95
|
+
{ "type": "chat", "questionId": "Q3", "title": "…", "text": "on [Image 1] the header is too big", "images": ["/Users/…/.better-grill/images/62950-a1b2c3/img1.png"] }
|
|
94
96
|
],
|
|
95
97
|
"open": [{ "id": "Q3", "title": "…" }]
|
|
96
98
|
}
|
|
97
99
|
```
|
|
98
100
|
|
|
99
|
-
`open` lists questions still unanswered after these events. A wait that returns only `chat` events means the round is still in progress: handle
|
|
101
|
+
`open` lists questions still unanswered after these events. A wait that returns only `chat` or `visualize` events means the round is still in progress: handle them, then wait again.
|
|
102
|
+
|
|
103
|
+
`images` (on `answer` and `chat`, only when present) lists absolute paths of images the user pasted or dropped in: screenshots, sketches, diagrams. The user places each image inside their text, where it shows up as `[Image N]`: `[Image 1]` is `images[0]`, `[Image 2]` is `images[1]`, and so on. Read every image with the Read tool before you act on the event; they are part of what the user said, and the text around each marker tells you what it is about. When you reply about one, name it the same way ("in Image 2, …"). The files are deleted when the bridge stops.
|
|
100
104
|
|
|
101
105
|
## 5. Handle events
|
|
102
106
|
|
|
@@ -112,6 +116,11 @@ Output:
|
|
|
112
116
|
```
|
|
113
117
|
|
|
114
118
|
Keep replies conversational and short. Then act on what the talk settled (next section). Never tell the user to go lock in an answer the two of you already agreed on.
|
|
119
|
+
- **visualize** (`{ "type": "visualize", "questionId": "Q3", "title": "…", "note": "focus on the failure case" }`): the user pressed Visualize and wants the question visualized as an interactive page, shown in the UI. That takes a while, so hand it to a background sub-agent (Agent tool, `run_in_background: true`) and carry on with the grill. Give it this prompt, with the handle and id filled in:
|
|
120
|
+
|
|
121
|
+
> Run `node "${CLAUDE_SKILL_DIR}/dist/cli.js" visualize -s SESSION Q3 --brief`. It prints how to build the visualization, the question and the command that posts the page. Follow it exactly, post the page, and reply with one line.
|
|
122
|
+
|
|
123
|
+
Without sub-agents, run that brief yourself once the other events are handled. Don't reply in the thread about it: the UI shows the progress and the result. `note` is what the user wants to see; the brief includes it.
|
|
115
124
|
- **summary_confirmed / summary_rejected / ended**: see step 6.
|
|
116
125
|
|
|
117
126
|
## 5b. Shape questions from the discussion
|