grilling-workbench 0.2.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Grilling Workbench contributors
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.
package/README.md ADDED
@@ -0,0 +1,111 @@
1
+ # Grilling Workbench
2
+
3
+ Local question forms for project interviews in an embedded browser. The agent
4
+ writes questions, the user submits the entire form, and a waiting socket delivers
5
+ the saved answers back to the agent. Reasoning and clarification stay in the
6
+ existing chat. No model API, external assets, or production dependencies.
7
+
8
+ Once installed, the skill applies whenever the agent interviews the user. Calling
9
+ an interview skill such as `grill-me` is enough; the user does not need to request
10
+ a browser form or enable a separate project preference.
11
+
12
+ **Run with `npx`; no project dependency is required.** Node.js 22 or later is required.
13
+ The supported deployment is a browser and agent on the same computer; no public
14
+ server or idle-chat wakeup service is included.
15
+
16
+ ## Install in a project
17
+
18
+ From the project where you want to use the workbench:
19
+
20
+ ```sh
21
+ npx --yes grilling-workbench@0.2.0 install-skill
22
+ ```
23
+
24
+ The installer creates `.agents/skills/grilling-workbench` and refuses to overwrite
25
+ an existing skill. Codex detects new skills automatically; restart it if the skill
26
+ does not appear. Explicit `$grilling-workbench` invocation can verify installation;
27
+ normal interview use should select it automatically. npm caches the application;
28
+ the skill and interview sessions remain in your project. Use the same pinned
29
+ version for setup and every command in a round.
30
+
31
+ Source: [PavingLayer/grilling-workbench](https://github.com/PavingLayer/grilling-workbench).
32
+ Package: [grilling-workbench on npm](https://www.npmjs.com/package/grilling-workbench).
33
+ License: [MIT](LICENSE).
34
+
35
+ The [deployment guide](docs/deployment.md) covers non-Node projects, session
36
+ storage, updates, shutdown, backups, and recovery. The [integration guide](docs/integration.md)
37
+ explains skill discovery and project configuration alongside Matt Pocock's skills.
38
+
39
+ ## Agent workflow
40
+
41
+ ```sh
42
+ npx --yes grilling-workbench@0.2.0 init --session .workbench/topic-r01 --questions /absolute/path/round.json
43
+ npx --yes grilling-workbench@0.2.0 serve --session .workbench/topic-r01
44
+ ```
45
+
46
+ Keep the server process running. In a second persistent process, **before showing
47
+ the URL returned by serve**:
48
+
49
+ ```sh
50
+ npx --yes grilling-workbench@0.2.0 wait --session .workbench/topic-r01
51
+ ```
52
+
53
+ Keep the agent turn waiting on that process. The listener blocks on TCP and exits
54
+ with the complete immutable submission. Read it in the current chat, then run
55
+ `ack SUBMISSION_ID --session .workbench/topic-r01` and continue the conversation.
56
+ No extra user click or paste is needed. The socket alone cannot start a turn in an
57
+ idle host chat; an active tool wait is required.
58
+
59
+ Read the complete [agent protocol](skills/grilling-workbench/references/agent-protocol.md)
60
+ and [question format](skills/grilling-workbench/references/questions.md) before
61
+ using the tool. One directory belongs to one chat round. New rounds use new
62
+ directories; reconnects use the original exact directory.
63
+
64
+ ## Answering a form
65
+
66
+ Navigate between questions using the sidebar, or the question picker on narrow
67
+ screens. The footer keeps navigation and submission actions visible. Each question
68
+ shows its full wording, options, benefits, and trade-offs. Recommendations are
69
+ labels; every question starts unanswered.
70
+
71
+ Choices and notes save as drafts while you work. Drafts survive navigation,
72
+ reloads, and question updates. If a question's meaning changes, the app retains
73
+ your earlier answer and asks you to revisit the new wording. Save failures offer
74
+ retry and recovery options.
75
+
76
+ **Submit form** sends the entire round in one click, including edits still being
77
+ saved. Questions left blank are reported as `not_answered`. Each submission keeps
78
+ the exact question versions and answers; retries reuse its identity to prevent
79
+ duplicates. Drafts become submitted outcomes only when you click Submit.
80
+
81
+ After saving, the server delivers the submission to the waiting agent over a
82
+ socket. Unacknowledged forms replay after a reconnect, and the page shows when the
83
+ agent records receipt. The interview skill interprets answers and maintains the
84
+ project's decision records.
85
+
86
+ Use chat or native browser annotations to discuss questions and options. The
87
+ agent can explain or revise them while your draft remains in the form.
88
+
89
+ ## Development and evidence
90
+
91
+ `npm run dev` starts the reading-room demo at
92
+ [localhost:4310](http://127.0.0.1:4310/), using `data/questions.json` and
93
+ `.workbench/session.json`. Use separate CLI sessions for your interviews.
94
+
95
+ To develop from a source checkout:
96
+
97
+ ```sh
98
+ npm ci
99
+ npm run check
100
+ npm test
101
+ npm run test:package
102
+ ```
103
+
104
+ The pure state model has generated action-history tests plus HTTP, persistence,
105
+ socket, and runtime integration tests. The package smoke test installs the actual
106
+ archive offline and through `npx` in unrelated directories and exercises the executable,
107
+ skill installation, concurrent isolated sessions, full submission, receipt,
108
+ definition updates, and restart. CI runs those commands for Node 22 and 24.
109
+
110
+ The [validation note](docs/validation.md) records the automated and browser
111
+ checks, the delivery guarantees they establish, and the remaining validation gaps.
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ import { main } from '../src/cli.js';
3
+
4
+ try { await main(); }
5
+ catch (error) { console.error(error.message); process.exitCode = 1; }
@@ -0,0 +1,44 @@
1
+ {
2
+ "id": "reading-room-demo",
3
+ "title": "A neighborhood reading room",
4
+ "description": "A sample interview about a shared space for books, conversation, and quiet time. These are demonstration answers, not project decisions.",
5
+ "navigationLabels": {
6
+ "atmosphere": "Atmosphere",
7
+ "activities": "Activities",
8
+ "success": "Success"
9
+ },
10
+ "questions": [
11
+ {
12
+ "id": "atmosphere",
13
+ "revision": 1,
14
+ "title": "What should the room feel like on an ordinary afternoon?",
15
+ "context": "Imagine someone walking in with an hour to spare. Choose the experience we should design around first.",
16
+ "type": "single",
17
+ "options": [
18
+ { "id": "quiet", "label": "A quiet place to settle in", "description": "Comfortable seats, individual reading spots, and a shared expectation of quiet. People can be together without needing to join in.", "benefit": "A dependable retreat for reading and focused work.", "tradeoff": "Spontaneous conversations need a separate space or time.", "recommended": true },
19
+ { "id": "social", "label": "A place to meet over books", "description": "A large shared table and an easygoing atmosphere where conversations are welcome. Reading becomes a way to get to know neighbors.", "benefit": "Makes it easier for newcomers to connect with people.", "tradeoff": "Noise and interruptions can make longer reading sessions difficult." },
20
+ { "id": "mixed", "label": "A little of both, in separate zones", "description": "A quiet reading area alongside a smaller conversation area, with furniture and signs making the difference clear.", "benefit": "Accommodates different moods and reasons for visiting.", "tradeoff": "Needs more space and careful attention to sound carrying between zones." }
21
+ ]
22
+ },
23
+ {
24
+ "id": "activities",
25
+ "revision": 1,
26
+ "title": "Which activities belong in the first month?",
27
+ "context": "Select any activities worth trying. We can start with a small program and learn from who turns up.",
28
+ "type": "multiple",
29
+ "options": [
30
+ { "id": "open-reading", "label": "Open reading afternoons", "description": "Regular drop-in hours with no program or booking. Visitors bring a book or browse the shelves.", "benefit": "Easy to run and welcoming to people with different schedules.", "tradeoff": "People may need another reason to make their first visit.", "recommended": true },
31
+ { "id": "book-circle", "label": "A monthly book circle", "description": "One book, a small group, and a hosted discussion. Announce the book early so people have time to read.", "benefit": "Gives returning visitors a shared interest and a familiar rhythm.", "tradeoff": "Reading the book in advance asks for a bigger commitment." },
32
+ { "id": "skill-swap", "label": "Neighbor-led skill sharing", "description": "Short informal sessions such as mending, drawing, or writing, led by people from the neighborhood.", "benefit": "Brings in people who might not join a reading group.", "tradeoff": "Requires finding hosts, preparing materials, and rearranging the room." }
33
+ ]
34
+ },
35
+ {
36
+ "id": "success",
37
+ "revision": 1,
38
+ "title": "After three months, what would make this feel worthwhile?",
39
+ "context": "Describe one or two things you would hope to notice. A small, specific sign is more useful than a perfect target.",
40
+ "type": "text",
41
+ "options": []
42
+ }
43
+ ]
44
+ }
@@ -0,0 +1,48 @@
1
+ # Agent submission delivery
2
+
3
+ The canonical operating instructions ship with the installable skill:
4
+ [agent protocol](../skills/grilling-workbench/references/agent-protocol.md).
5
+ Read that protocol before presenting a form. It covers preparation, the active
6
+ socket wait, receipt, continuation, definition updates, and recovery.
7
+
8
+ ## Transport contract
9
+
10
+ CLI servers expose HTTP and TCP only on loopback. `serve --session DIR` writes a
11
+ private `runtime.json` descriptor with protocol version 1, actual ports, process
12
+ identity, and a random per-run token. `wait --session DIR` reads that descriptor
13
+ and connects to the matching socket. Applications should use the CLI rather than
14
+ reimplement the transport.
15
+
16
+ For transport implementers, messages are UTF-8 newline-delimited JSON. The client
17
+ first sends `{ "type": "subscribe", "protocolVersion": 1, "token": "..." }`.
18
+ Authentication must complete within five seconds and 4096 characters. The server
19
+ attaches a live listener before replaying saved unacknowledged submissions, with
20
+ per-connection ID deduplication, then sends `{ "type": "ready" }`. A replayed or
21
+ live submission may precede ready. Errors use `{ "type": "error", "error": "..." }`
22
+ and close the connection.
23
+
24
+ After a whole-form snapshot has been written, the server sends
25
+ `{ "type": "submission", "submission": {...} }`. Draft edits never emit that
26
+ event. The snapshot contains `scope: "form"`, its ID/time, questionnaire identity,
27
+ title/description, and every exact question version, answer, and outcome. The CLI
28
+ returns the first event and closes its socket; it never records receipt itself.
29
+
30
+ `ack ID --session DIR` records receipt after the agent reads the snapshot.
31
+ Acknowledgment is durable and idempotent; concurrent writers are excluded by a
32
+ lock. Reconnect replays unacknowledged submissions. There is no server polling,
33
+ heartbeat automation, or clipboard handoff.
34
+
35
+ ## What delivery proves
36
+
37
+ A socket event proves the server saved the whole form. A receipt proves the agent
38
+ read that snapshot into its context. Neither proves that later reasoning finished,
39
+ a decision ticket closed, or a chat reply was rendered. Delivery is at least once
40
+ until receipt; downstream work must account for its submission ID.
41
+
42
+ The receiving agent must keep an active tool call waiting on the listener process.
43
+ No verified idle-chat event bridge is included. The browser correctly shows
44
+ waiting until receipt, including if the agent was interrupted. Installing the
45
+ skill does not create a host capability that is absent.
46
+
47
+ The [validation note](validation.md) records the checks for active delivery,
48
+ replay, receipts, and restart, along with the limits of that evidence.
@@ -0,0 +1,186 @@
1
+ # Local deployment
2
+
3
+ Version 0.2.0 ships on public npm with a CLI, static browser files,
4
+ a demo questionnaire, operational docs, and the integration skill. It needs Node
5
+ 22+ and no production dependencies or build service. Linux with Node 22.22.2 was
6
+ verified locally. CI is configured for Node 22 and 24 on Linux; other operating
7
+ systems have not been release-tested.
8
+
9
+ ## Distribution and installation
10
+
11
+ Run this from any project, including a non-Node project:
12
+
13
+ ```sh
14
+ npx --yes grilling-workbench@0.2.0 install-skill
15
+ npx --yes grilling-workbench@0.2.0 --version
16
+ ```
17
+
18
+ npm fetches the application into its execution cache. Only the installed skill
19
+ and the sessions you create live in the consuming project; no project dependency
20
+ or global installation is required. Keep `@0.2.0` on every command so the skill,
21
+ server, and listener use the same release. npm needs registry access on first use;
22
+ use an explicit archive installation when reliable offline availability matters.
23
+
24
+ Source and releases are maintained at
25
+ [PavingLayer/grilling-workbench](https://github.com/PavingLayer/grilling-workbench).
26
+ The public npm package is
27
+ [grilling-workbench](https://www.npmjs.com/package/grilling-workbench).
28
+
29
+ If you prefer a project dependency:
30
+
31
+ ```sh
32
+ npm install --save-dev --save-exact grilling-workbench@0.2.0
33
+ npx --no grilling-workbench install-skill
34
+ ```
35
+
36
+ Or explicitly install the executable globally:
37
+
38
+ ```sh
39
+ npm install --global grilling-workbench@0.2.0
40
+ grilling-workbench --version
41
+ ```
42
+
43
+ Run the setup command from each project that should discover it.
44
+ The default target is `.agents/skills/grilling-workbench`. `--target DIR` supports
45
+ another host's skill directory. This command copies the bundled skill; it does
46
+ not edit AGENTS.md, install upstream skills, or overwrite existing skills.
47
+
48
+ ### Offline archives and maintainer releases
49
+
50
+ From a clean source checkout:
51
+
52
+ ```sh
53
+ npm ci
54
+ npm run check
55
+ npm test
56
+ npm run test:package
57
+ mkdir -p dist
58
+ npm pack --pack-destination dist
59
+ ```
60
+
61
+ The result is `dist/grilling-workbench-0.2.0.tgz`. The explicit package allowlist
62
+ excludes sessions, receipts, development dependencies, and tests. The package
63
+ tests exercise both an offline project installation and `npx` execution from an
64
+ isolated cache, including full form delivery, updates, shutdown, and restart.
65
+ Building the archive does not publish it.
66
+
67
+ Offline consumers can install the archive as a project dependency or globally:
68
+
69
+ ```sh
70
+ npm install --offline --save-dev /absolute/path/grilling-workbench-0.2.0.tgz
71
+ npx --no grilling-workbench install-skill
72
+ ```
73
+
74
+ Configure the agent to use that installed executable at the matching version;
75
+ the bundled skill defaults to the version-pinned `npx` registry command.
76
+
77
+ Maintainers publish the checked archive to npm and attach the same file to its
78
+ GitHub release. After the source commit is pushed and GitHub checks pass:
79
+
80
+ ```sh
81
+ npm publish ./dist/grilling-workbench-0.2.0.tgz --access public
82
+ ```
83
+
84
+ Publication requires an authenticated npm account with publishing access. For
85
+ later releases, increment the package version and update the pinned commands in
86
+ the docs and bundled skill before running these checks. Never overwrite a
87
+ published version or run mixed versions within a round.
88
+
89
+ ## Session lifecycle
90
+
91
+ Every CLI operation except validation and skill installation requires an explicit
92
+ `--session DIR`. Relative paths resolve from the current working directory. Use
93
+ an absolute path when resuming from another directory. `init` refuses any existing
94
+ directory, so it cannot reset a previous form accidentally.
95
+
96
+ ```sh
97
+ npx --yes grilling-workbench@0.2.0 init --session .workbench/topic-r01 --questions /absolute/path/round.json
98
+ npx --yes grilling-workbench@0.2.0 serve --session .workbench/topic-r01
99
+ ```
100
+
101
+ Both servers bind exclusively to `127.0.0.1`. By default the OS assigns free HTTP
102
+ and TCP ports; use the URL returned by `serve`, not guessed port numbers. Explicit
103
+ `--port 4310 --signal-port 4311` is available when stable ports are useful. Invalid
104
+ ports and collisions fail with a nonzero exit code. Readiness follows validation,
105
+ initial storage, and successful binding of both listeners.
106
+
107
+ `serve` remains in the foreground. The agent should retain its process handle and
108
+ start `wait` in another persistent process. Ctrl+C or SIGTERM shuts down the
109
+ server, waits for queued state operations, disconnects listeners, and removes
110
+ runtime metadata and its lock. The questions, answers, and receipts remain.
111
+
112
+ `status --session DIR` makes one health request and checks the runtime identity;
113
+ `pending --session DIR` reads saved unacknowledged submissions once. Neither is a
114
+ scheduled monitor. Follow the [agent protocol](../skills/grilling-workbench/references/agent-protocol.md)
115
+ for socket waits, exact-ID receipts, and interrupted conversations.
116
+
117
+ ## Stored files and ownership
118
+
119
+ | File inside the session | Purpose |
120
+ | --- | --- |
121
+ | `config.json` | Versioned session configuration. |
122
+ | `questions.json` | Session-owned definitions copied by init; use update to replace atomically. |
123
+ | `session.json` | Versioned state, drafts, request deduplication, and immutable submissions. |
124
+ | `chat-receipts.json` | Submission IDs read by the agent and receipt times. |
125
+ | `runtime.json` | Ephemeral process identity, ports, and random socket credential. |
126
+ | `server.lock` | Exclusive server ownership; PID and start time for recovery. |
127
+ | `receipt.lock` | Short-lived acknowledgment writer ownership. |
128
+ | `.gitignore` | Keeps runtime content out of ordinary Git additions. |
129
+
130
+ Files are written with mode 0600 and newly created session directories with 0700
131
+ on systems honoring POSIX permissions. Existing parent permissions are not changed.
132
+ Keep sessions on a local disk; network filesystems and multiple machines sharing
133
+ one session are unsupported. One server owns a session. Concurrent acknowledgment
134
+ writers fail instead of losing another writer's receipt; retry sequentially.
135
+
136
+ The browser serves a fixed file allowlist, rejects unrelated Host/Origin headers,
137
+ and escapes question text. The TCP subscriber supplies a per-run random token
138
+ read from the session descriptor; a stale or wrong session is rejected. No token
139
+ is printed in normal CLI output or sent to the browser. This is a single-user
140
+ local tool, not a multi-tenant service: other trusted processes on the same
141
+ computer can access its local HTTP API. Do not expose either port through a public
142
+ proxy. There is no remote authentication or TLS deployment mode.
143
+
144
+ ## Update and recovery
145
+
146
+ Use `update --session DIR --questions FILE` to validate and atomically replace the
147
+ current definitions. Keep the form ID. The browser checks ordinary definition and
148
+ receipt refreshes every 2.5 seconds while local saves are settled; **agent completion
149
+ uses TCP events, not this refresh interval**. The [question format](../skills/grilling-workbench/references/questions.md)
150
+ describes changed-answer handling and size limits.
151
+
152
+ For package upgrades, stop the server, back up its session directory, select the
153
+ new exact package version, compare its bundled skill with the installed copy, and
154
+ restart `serve` at that version against the same directory. Update a local or
155
+ global installation explicitly if you use one. To inspect a skill upgrade without overwriting
156
+ customizations, use `install-skill --target /path/to/new-empty-directory` and merge
157
+ changes deliberately. State schema 1 is retained in 0.2.0; unsupported state
158
+ versions and corrupt files fail without resetting answers.
159
+
160
+ Back up `config.json`, `questions.json`, `session.json`, and `chat-receipts.json`
161
+ with the server and receipt writer stopped. Restore those files into a private
162
+ session directory, then start serve. Do not restore `runtime.json` or lock files;
163
+ those describe processes, not answers. Atomic replacement and file synchronization
164
+ protect against interrupted writes; backups remain necessary for device loss or
165
+ filesystem failure. Power-loss durability across every filesystem is not guaranteed.
166
+
167
+ A forced kill can leave a lock. Read its PID/start time and verify that its owner
168
+ has exited using the operating system's process inspection. Only then remove
169
+ that specific stale lock (and stale runtime descriptor for a server lock) and
170
+ restart/retry. Never remove a live owner's lock. The program deliberately does not
171
+ steal locks based only on age or a potentially reused PID. If ownership cannot be
172
+ established, keep the files and resolve it before restarting.
173
+
174
+ A failed browser save leaves unsaved work in the open tab, with retry and recovery
175
+ export. Closing the tab loses memory that never reached storage. A failed receipt
176
+ keeps the submission available for replay. A crash after receipt can leave
177
+ unfinished downstream work; the immutable submission and chat/handoff record
178
+ support recovery, but exactly-once replies are not guaranteed.
179
+
180
+ ## Source checkout demo
181
+
182
+ `npm run dev` serves the demo from `data/questions.json` and saves its answers in
183
+ `.workbench/session.json`. `PORT` and `SIGNAL_PORT` override its defaults 4310 and
184
+ 4311 independently. The source-checkout helper `node src/monitor.js wait` reads
185
+ the demo's runtime descriptor; `pending` and `ack ID` use the same demo directory.
186
+ Use the CLI's initialized sessions for project interviews.
@@ -0,0 +1,145 @@
1
+ # Use the workbench with your interview skills
2
+
3
+ The workbench lets you answer interview rounds in a browser while reasoning and
4
+ follow-up stay in the same chat. Once installed, it should be selected whenever
5
+ the agent interviews you. You can simply say “grill me” or invoke your usual
6
+ interview skill; you do not need to request a browser form.
7
+
8
+ ## Set up the project once
9
+
10
+ You need Node.js 22 or later, and an agent that can open a browser and keep a local
11
+ command running while waiting for your answers. The browser, workbench server,
12
+ and agent must run on the same computer.
13
+
14
+ From the project where you want to use it:
15
+
16
+ ```sh
17
+ npx --yes grilling-workbench@0.2.0 install-skill
18
+ ```
19
+
20
+ This fetches the application into npm's cache and installs the instructions that
21
+ teach the agent when and how to use it. It creates `.agents/skills/grilling-workbench`
22
+ and preserves any existing skill at that path. No `package.json`, project
23
+ dependency, or global installation is required, including in non-Node projects.
24
+ The skill uses the same pinned package version for subsequent commands.
25
+
26
+ For offline installation, source development, or upgrades, use the
27
+ [deployment guide](deployment.md). Keep your existing interview skills installed;
28
+ Matt Pocock's repository has its own [installation instructions](https://github.com/mattpocock/skills).
29
+
30
+ ## Start your usual interview
31
+
32
+ For example, invoke `grill-me` or say:
33
+
34
+ > Grill me about the checkout design.
35
+
36
+ The expected flow is:
37
+
38
+ 1. The interview skill chooses the next round of questions.
39
+ 2. The agent starts a workbench session, connects its submission listener, and
40
+ opens the form in the browser.
41
+ 3. You answer, revisit questions as needed, and click **Submit form** once.
42
+ 4. The agent receives the complete submitted round and continues the same chat.
43
+
44
+ There is no separate review step or manual copy/paste. You may leave a question
45
+ blank: submission reports that as `not_answered`, so the agent knows you chose
46
+ not to answer it. That does not settle the underlying decision.
47
+
48
+ For explanations or changes to a question, use chat or the browser's native
49
+ Annotate/Quick Annotate features. The agent can revise the form while preserving
50
+ your draft. The app itself only handles answering and submitting questions.
51
+
52
+ The agent must remain actively waiting on the listener to continue immediately.
53
+ This package does not start new turns in an idle chat. Agents should read the
54
+ [operating protocol](../skills/grilling-workbench/references/agent-protocol.md)
55
+ before presenting questions; it covers the listener, receipts, and interruptions.
56
+ The [question format](../skills/grilling-workbench/references/questions.md) is the
57
+ reference for authoring or updating a round.
58
+
59
+ ## How it fits the existing workflow
60
+
61
+ The workbench handles question presentation and answer delivery. Your chosen skill
62
+ still decides what to ask, interprets the answers, updates project records, and
63
+ determines when the interview is complete.
64
+
65
+ | Workflow | How to combine it with the workbench |
66
+ | --- | --- |
67
+ | [`grilling`](https://github.com/mattpocock/skills/blob/3cca18b368ae95cdbdebbff572ccafa662551015/skills/productivity/grilling/SKILL.md) / `grill-me` | Use one form for the current round of independent questions. Questions that depend on unresolved answers belong in a later round. |
68
+ | [`grill-with-docs`](https://github.com/mattpocock/skills/blob/3cca18b368ae95cdbdebbff572ccafa662551015/skills/engineering/grill-with-docs/SKILL.md) | Use the same form interface while the existing interview and domain-modeling skills maintain the project documents. |
69
+ | [`wayfinder`](https://github.com/mattpocock/skills/blob/3cca18b368ae95cdbdebbff572ccafa662551015/skills/engineering/wayfinder/SKILL.md) | Use forms during interviews about the current decision ticket. Keep the map, ticket ownership, dependencies, and resolution records in Wayfinder. |
70
+ | [`setup-matt-pocock-skills`](https://github.com/mattpocock/skills/blob/3cca18b368ae95cdbdebbff572ccafa662551015/skills/engineering/setup-matt-pocock-skills/SKILL.md) | Keep the tracker and domain-document configuration it establishes. Installing the workbench does not replace that configuration or invoke setup. |
71
+
72
+ A submitted form supplies answers; it does not automatically close tickets or
73
+ approve further work. Keep canonical decisions in the configured documents or
74
+ tracker, using submission and question IDs for attribution. Raw session files
75
+ remain private by default.
76
+
77
+ These integration recommendations were reviewed against upstream revision
78
+ `3cca18b368ae95cdbdebbff572ccafa662551015` on September 5, 2026. Check the actual
79
+ installed skills when upgrading; there is no need to patch their bodies to use
80
+ the workbench.
81
+
82
+ ## If the agent does not use the workbench
83
+
84
+ First check whether `grilling-workbench` appears in the agent's available skills.
85
+ In Codex, that list combines applicable project skills, user skills, administrator
86
+ and system skills, and enabled plugin skills. It does not automatically include
87
+ local skills from unrelated projects. Our installer adds the workbench at the
88
+ current project's `.agents/skills/grilling-workbench` path.
89
+
90
+ Codex normally detects new skills automatically. If it is missing, restart Codex
91
+ and check the installed path. If it appears more than once, inspect the source
92
+ paths for duplicate user/project installations. [Codex skill discovery](https://learn.chatgpt.com/docs/build-skills#where-codex-loads-local-skills)
93
+
94
+ If the skill is listed but not selected during an interview, explicitly invoke
95
+ `$grilling-workbench` once to check that it can run. This is a troubleshooting step,
96
+ not the expected everyday workflow. Automatic selection depends on the agent
97
+ matching the interview to the skill description; it is not an application hook.
98
+ [How Codex selects skills](https://learn.chatgpt.com/docs/build-skills#how-chatgpt-and-codex-use-skills)
99
+
100
+ A short project instruction can reinforce the trigger. Merge this into the
101
+ project's existing AGENTS.md or equivalent instruction file, preserving its other
102
+ rules. It is optional; the skill already defines the interview trigger.
103
+
104
+ ```markdown
105
+ Whenever interviewing the user, use the grilling-workbench skill at
106
+ `.agents/skills/grilling-workbench/SKILL.md`. Apply it alongside the current
107
+ interview workflow, including grill-me, without requiring a request for a browser
108
+ form. The command is `npx --yes grilling-workbench@0.2.0`.
109
+
110
+ Read the skill's operating protocol before presenting questions. Keep reasoning,
111
+ clarification, and decision records in the existing workflow. Respect an explicit
112
+ user request for another interface.
113
+ ```
114
+
115
+ The installer does not edit project instructions automatically. Adjust the command
116
+ in the snippet if you explicitly configure a local or global installation.
117
+
118
+ ## Check answer delivery in your agent
119
+
120
+ Try a throwaway two-question round. Answer one question, leave the other blank,
121
+ and submit. The agent should receive both outcomes and continue without another
122
+ chat message. Its listener should already be waiting before the form opens.
123
+
124
+ If the page stays on “Waiting for the agent,” inspect the listener process and
125
+ follow the [reconnection and receipt instructions](../skills/grilling-workbench/references/agent-protocol.md#definitions-and-interruptions).
126
+ Do not replace the listener with repeated status checks or ask the user to paste
127
+ answers. If the agent application cannot maintain an active tool wait, that
128
+ integration needs support before immediate continuation can work.
129
+
130
+ The package tests verify installation, socket delivery, receipts, and recovery.
131
+ Automatic skill selection in a fresh agent installation still needs this real
132
+ workflow check. Test ordinary interview requests without mentioning the browser;
133
+ explanations about an existing option should continue in chat.
134
+
135
+ ## Share it with another project
136
+
137
+ Share [PavingLayer/grilling-workbench](https://github.com/PavingLayer/grilling-workbench)
138
+ and repeat the one-command setup above. npm includes the matching application and
139
+ skill; browser and command-execution tools must be supplied by the agent host.
140
+
141
+ The repository also exposes `skills/grilling-workbench/SKILL.md` in a layout
142
+ recognized by the [Skills CLI](https://github.com/vercel-labs/skills#skill-discovery).
143
+ The npm `install-skill` command is the primary setup path because it bundles the
144
+ skill with the same exact application release. Offline users can instead share
145
+ the release archive; see [distribution and installation](deployment.md#distribution-and-installation).
@@ -0,0 +1,85 @@
1
+ # Validation and known limits
2
+
3
+ This records what has been checked for the implemented workbench. For normal use,
4
+ start with the [integration guide](integration.md); for installation and recovery,
5
+ use the [deployment guide](deployment.md).
6
+
7
+ ## Automated checks
8
+
9
+ The 0.2.0 release checks passed locally on Linux with Node.js 22.22.2 on September
10
+ 6, 2026 (UTC): syntax validation, 18 automated tests, and both installed-package
11
+ and `npx` smoke tests. CI runs the same checks on Node 22 and 24; see
12
+ [GitHub Actions](https://github.com/PavingLayer/grilling-workbench/actions/workflows/verify.yml)
13
+ for the hosted results associated with a release commit.
14
+
15
+ The automated tests cover:
16
+
17
+ - Unanswered defaults, recommendation labels, and 1,000 generated action histories
18
+ checked against an independent model. The default seed is `20260905`;
19
+ `FC_SEED` and `FC_PATH` reproduce other generated cases.
20
+ - Complete immutable submission snapshots, including submitted blanks; rejection
21
+ of partial forms and stale snapshots; and idempotent retries.
22
+ - Draft preservation through definition changes, conflicts, failed writes, and
23
+ restart. Corrupt saved data is retained rather than reset.
24
+ - Socket completion only after persistence. Tests deliberately hold the storage
25
+ write open, then check delivery, reconnect replay, and receipt failure recovery.
26
+ - Session ownership, listener credentials, startup failure cleanup, port reuse,
27
+ and rejection of unrelated web origins and private-file requests.
28
+
29
+ The package smoke test packs the actual release and exercises it twice: installed
30
+ offline in an unrelated project, and through `npx` from an isolated cache in a
31
+ project without package files or dependencies. Both modes verify skill
32
+ installation without overwriting an existing copy, two isolated sessions, served
33
+ browser assets, whole-form delivery, acknowledgments, definition updates, restart,
34
+ and the source-checkout demo entrypoint. The `npx` test uses the local archive,
35
+ so registry publication and a fresh registry download are separate release checks.
36
+
37
+ ## Embedded-browser checks
38
+
39
+ The implemented interface has been checked in the embedded browser for:
40
+
41
+ - A 20-question form at 808×1139, with independently scrolling navigation and
42
+ question content, a visible footer, and no horizontal overflow.
43
+ - Narrow layouts at 390×844 and 320×740, with the question picker, footer actions,
44
+ draft persistence after reload, and submission history available.
45
+ - Direct submission while draft saves are deliberately delayed. Submit remains
46
+ enabled while typing and sends the latest text without a review step.
47
+ - Submission containing one answer and two blanks, received over TCP with both
48
+ `not_answered` outcomes. Recording receipt updates the page's delivery status.
49
+ - Definition refresh, preserved draft text, recoverable save failures, and restart.
50
+
51
+ Native browser annotations were received in chat during UI iteration. After the
52
+ 0.2.0 runtime upgrade, the existing preview still displayed the user's submitted
53
+ answers; its saved state and receipt files matched their pre-upgrade backups.
54
+
55
+ ## Limits of this evidence
56
+
57
+ An actively waiting listener receives submissions immediately. The package does
58
+ not provide an idle-chat wakeup bridge. One user submission was captured over TCP
59
+ while the agent was idle, then read only after another chat message; that is not
60
+ evidence of automatic continuation in an idle chat.
61
+
62
+ The skill now directs agents to use the workbench for all interviews. Metadata
63
+ validation checks its structure; it does not prove that every model will select
64
+ it correctly. Automatic discovery and continuation in a fresh agent installation
65
+ still need the [target-agent checks](integration.md#check-answer-delivery-in-your-agent).
66
+
67
+ Screen-reader testing and a dedicated option-targeted annotation/clarification
68
+ round trip remain outstanding. Other operating systems, network filesystems,
69
+ device loss, and power-loss durability have not been release-tested. Exactly-once
70
+ chat replies across crashes are not guaranteed; the agent protocol documents
71
+ receipt and downstream-work recovery separately.
72
+
73
+ ## Run the checks
74
+
75
+ From the source repository:
76
+
77
+ ```sh
78
+ npm ci
79
+ npm run check
80
+ npm test
81
+ npm run test:package
82
+ ```
83
+
84
+ Integration tests require permission to bind local HTTP and TCP sockets. Browser
85
+ and target-agent checks are separate from these automated commands.