@noodleseed/agent-kit 0.17.0 → 0.19.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.
Files changed (46) hide show
  1. package/manifest.json +45 -45
  2. package/package.json +1 -1
  3. package/skills/claude-code/SKILL.md +1 -1
  4. package/skills/claude-code/examples/acme-bistro/README.md +1 -1
  5. package/skills/claude-code/examples/acme-bistro/design/UX-Document.md +4 -4
  6. package/skills/claude-code/examples/acme-bistro/design/api-contract.md +3 -3
  7. package/skills/claude-code/examples/acme-bistro/design/wireframe.html +3 -3
  8. package/skills/claude-code/examples/acme-bistro/src/server.ts +8 -6
  9. package/skills/claude-code/examples/acme-discovery/README.md +1 -1
  10. package/skills/claude-code/examples/acme-discovery/design/UX-Document.md +3 -3
  11. package/skills/claude-code/examples/acme-discovery/design/wireframe.html +2 -2
  12. package/skills/claude-code/examples/acme-discovery/src/server.ts +6 -5
  13. package/skills/claude-code/examples/acme-tasks/README.md +27 -1
  14. package/skills/claude-code/examples/acme-tasks/design/UX-Document.md +2 -2
  15. package/skills/claude-code/examples/acme-tasks/design/wireframe.html +6 -6
  16. package/skills/claude-code/examples/acme-tasks/src/server.ts +6 -5
  17. package/skills/claude-code/examples/food-ordering/src/server.ts +27 -37
  18. package/skills/claude-code/references/authoring-workflow.md +5 -0
  19. package/skills/claude-code/references/cli-commands.md +1 -0
  20. package/skills/claude-code/references/compile-errors.md +2 -2
  21. package/skills/claude-code/references/experience-design.md +1 -1
  22. package/skills/claude-code/references/sdk-surface.md +10 -10
  23. package/skills/claude-code/references/troubleshooting.md +2 -2
  24. package/skills/claude-code/references/widgets-and-apps.md +10 -8
  25. package/skills/codex/SKILL.md +1 -1
  26. package/skills/codex/examples/acme-bistro/README.md +1 -1
  27. package/skills/codex/examples/acme-bistro/design/UX-Document.md +4 -4
  28. package/skills/codex/examples/acme-bistro/design/api-contract.md +3 -3
  29. package/skills/codex/examples/acme-bistro/design/wireframe.html +3 -3
  30. package/skills/codex/examples/acme-bistro/src/server.ts +8 -6
  31. package/skills/codex/examples/acme-discovery/README.md +1 -1
  32. package/skills/codex/examples/acme-discovery/design/UX-Document.md +3 -3
  33. package/skills/codex/examples/acme-discovery/design/wireframe.html +2 -2
  34. package/skills/codex/examples/acme-discovery/src/server.ts +6 -5
  35. package/skills/codex/examples/acme-tasks/README.md +27 -1
  36. package/skills/codex/examples/acme-tasks/design/UX-Document.md +2 -2
  37. package/skills/codex/examples/acme-tasks/design/wireframe.html +6 -6
  38. package/skills/codex/examples/acme-tasks/src/server.ts +6 -5
  39. package/skills/codex/examples/food-ordering/src/server.ts +27 -37
  40. package/skills/codex/references/authoring-workflow.md +5 -0
  41. package/skills/codex/references/cli-commands.md +1 -0
  42. package/skills/codex/references/compile-errors.md +2 -2
  43. package/skills/codex/references/experience-design.md +1 -1
  44. package/skills/codex/references/sdk-surface.md +10 -10
  45. package/skills/codex/references/troubleshooting.md +2 -2
  46. package/skills/codex/references/widgets-and-apps.md +10 -8
package/manifest.json CHANGED
@@ -1,19 +1,19 @@
1
1
  {
2
- "packageVersion": "0.17.0",
2
+ "packageVersion": "0.19.0",
3
3
  "files": [
4
4
  {
5
5
  "path": "skills/codex/SKILL.md",
6
- "sha256": "5f24dd83ca00ad0b078de17f0a978b28ee17b17678ab103a0151f550444e1c47",
6
+ "sha256": "590f306f725fbc64e576fbcba6dad4bb4b163bb2cbfc799cad04adac7645a77f",
7
7
  "agentTarget": "codex"
8
8
  },
9
9
  {
10
10
  "path": "skills/codex/references/sdk-surface.md",
11
- "sha256": "7275aedfb2338040f1b9f989765179ce970d1b25c77066b3d3f4f4e2fe39f7cc",
11
+ "sha256": "f19560c3232558eb692dc4ff0cee74850ebca9029f95272233e734aa3854faba",
12
12
  "agentTarget": "codex"
13
13
  },
14
14
  {
15
15
  "path": "skills/codex/references/cli-commands.md",
16
- "sha256": "c50bf5ec6f43bd9fb7115ea9c9eb8de33c93e123f3e2d396785fe75ba094d40d",
16
+ "sha256": "3a6df9f9a1311843d929c06698a87695fe8e4197d4c6ca64b2768c2990386557",
17
17
  "agentTarget": "codex"
18
18
  },
19
19
  {
@@ -23,12 +23,12 @@
23
23
  },
24
24
  {
25
25
  "path": "skills/codex/references/compile-errors.md",
26
- "sha256": "22692f2fda9c7d8ef0aa54e58148d22cf740bf722ceb79a942f6f146009a6bda",
26
+ "sha256": "de43b81d6b9c1a065aa1905fdb469e518e50e80bf34306964593e608649f6868",
27
27
  "agentTarget": "codex"
28
28
  },
29
29
  {
30
30
  "path": "skills/codex/references/authoring-workflow.md",
31
- "sha256": "bf59d1550ce72fa188e50e74b7d586be49a0e5473501ee3b83a5f41687ac5163",
31
+ "sha256": "b078cfc3481824ed09a7445346a793a89387b0a07de500f7bb5343487ec62e58",
32
32
  "agentTarget": "codex"
33
33
  },
34
34
  {
@@ -38,12 +38,12 @@
38
38
  },
39
39
  {
40
40
  "path": "skills/codex/references/experience-design.md",
41
- "sha256": "f07ed621eb1e8cdfa08abd10d5a6331c7e9d8198da422b8b4ad54d23475b2d4d",
41
+ "sha256": "40c5d7081f4c81cca5a7a2cfabe2e0fa8818eaabfd0214539765b70b6750d3cb",
42
42
  "agentTarget": "codex"
43
43
  },
44
44
  {
45
45
  "path": "skills/codex/references/widgets-and-apps.md",
46
- "sha256": "dea06536f780f0bb6d26dc63a6f1f35e2d6eb97f7a9c1c8574ed7377ccfe37a8",
46
+ "sha256": "853125c2bd73fcb136c3237bc4aa08faeeba8b8cc0d1ef2d0a168d4e7623ec68",
47
47
  "agentTarget": "codex"
48
48
  },
49
49
  {
@@ -53,7 +53,7 @@
53
53
  },
54
54
  {
55
55
  "path": "skills/codex/references/troubleshooting.md",
56
- "sha256": "b08dc48e72fa186fc953cf7052bfb7500b4586a772a1f4c54ff1e53a29f21eb2",
56
+ "sha256": "0fac5c07a9707ffeb88860905f351c58b567dcae1337ea9ac044cf5df8c8afef",
57
57
  "agentTarget": "codex"
58
58
  },
59
59
  {
@@ -78,22 +78,22 @@
78
78
  },
79
79
  {
80
80
  "path": "skills/codex/examples/acme-bistro/README.md",
81
- "sha256": "ad617758f117adbe5b3384c0e199c9c2d9ead856490ee4f29635436effc601aa",
81
+ "sha256": "d94f67f7518208cba14920c26ed8aaa1546b496d96e55645e85b5d75a1a64127",
82
82
  "agentTarget": "codex"
83
83
  },
84
84
  {
85
85
  "path": "skills/codex/examples/acme-bistro/design/UX-Document.md",
86
- "sha256": "11b83135ffa7291ccf3d1253e260bb1c47b406291a8999c3c072ae7884cf3df0",
86
+ "sha256": "b4627bbd31764f2432a408efdad3ffeba138ac5bac3ac483afbd97d33f0c37f3",
87
87
  "agentTarget": "codex"
88
88
  },
89
89
  {
90
90
  "path": "skills/codex/examples/acme-bistro/design/api-contract.md",
91
- "sha256": "41dace6414ebecc0926f3f3caedd43bb5dc2734c777ad93462bea72f6d55de34",
91
+ "sha256": "52b3a77db550ceb4126f0c3742b23606414a6b75f532f41f56c12d907949e744",
92
92
  "agentTarget": "codex"
93
93
  },
94
94
  {
95
95
  "path": "skills/codex/examples/acme-bistro/design/wireframe.html",
96
- "sha256": "1fe4c8327bcc91118fcc66d5e073f78a3816fe6ca01cbf544bc17888e27beb8b",
96
+ "sha256": "25bb48e8f2634b6c7fc0a773ca2d5c4678f11f813e96784ac4cf99cb34b84d49",
97
97
  "agentTarget": "codex"
98
98
  },
99
99
  {
@@ -113,7 +113,7 @@
113
113
  },
114
114
  {
115
115
  "path": "skills/codex/examples/acme-bistro/src/server.ts",
116
- "sha256": "9599427833eefc27fcdc0eb83c26134e1a8b61f6998802e66dd6c8176c105112",
116
+ "sha256": "3f707b40fdf84ab2e8738367a2e0cccaf075a07aa945801ffb3a534f98ee1dcd",
117
117
  "agentTarget": "codex"
118
118
  },
119
119
  {
@@ -138,17 +138,17 @@
138
138
  },
139
139
  {
140
140
  "path": "skills/codex/examples/acme-discovery/README.md",
141
- "sha256": "1ca6e3aeee967715936eeb68be05793a10bf78ecfa80050322883828310288aa",
141
+ "sha256": "c909d5d18a0889b44ce63cb9e02c969243be1bba85454f1181c64809b1160b97",
142
142
  "agentTarget": "codex"
143
143
  },
144
144
  {
145
145
  "path": "skills/codex/examples/acme-discovery/design/UX-Document.md",
146
- "sha256": "36d16c09f6593c0b3f55f6d657335635b8c7ef9f2cf00761ae0d866a855ec5a8",
146
+ "sha256": "186be2e58210f7dc76a3305b5b7b47357236586a8f5648c3a88f5367933dfa56",
147
147
  "agentTarget": "codex"
148
148
  },
149
149
  {
150
150
  "path": "skills/codex/examples/acme-discovery/design/wireframe.html",
151
- "sha256": "43a1d14693856d81af4c8976abd0102d640b649b984ba27bac1526e800c9ba51",
151
+ "sha256": "6b1098c755c0a4bb8d477cec40b6dbf34e12e236dc6b1a7b438ff069bd84ea18",
152
152
  "agentTarget": "codex"
153
153
  },
154
154
  {
@@ -168,7 +168,7 @@
168
168
  },
169
169
  {
170
170
  "path": "skills/codex/examples/acme-discovery/src/server.ts",
171
- "sha256": "b013868ef61c9a2eb41ad963d41cc7ea321e3c1692bcb67f11b0f70c5c7d322b",
171
+ "sha256": "3a8d1285b375b6e650db95033af0f1cb0c8f5468a6a454e4cbcc8aaae7f6ff9d",
172
172
  "agentTarget": "codex"
173
173
  },
174
174
  {
@@ -193,17 +193,17 @@
193
193
  },
194
194
  {
195
195
  "path": "skills/codex/examples/acme-tasks/README.md",
196
- "sha256": "82dcfc5151744e6f043d0bf3eb36e6ca116da52ce5d7c5a787f97fc05347618d",
196
+ "sha256": "f97b264bd7c696ffd8ddbba846cdcd8c2e1b0940738e94d057654b5e42d14d1a",
197
197
  "agentTarget": "codex"
198
198
  },
199
199
  {
200
200
  "path": "skills/codex/examples/acme-tasks/design/UX-Document.md",
201
- "sha256": "85fbcaf80877257ac80d81497f154b3c0633f515fbadd6682a6f1783aae82111",
201
+ "sha256": "9eb6fda14200bb7a2f67a2b2bb8b2e0b7914c98a7da8e272dc2707110f0ef027",
202
202
  "agentTarget": "codex"
203
203
  },
204
204
  {
205
205
  "path": "skills/codex/examples/acme-tasks/design/wireframe.html",
206
- "sha256": "f5f486122e3cef6528c601b343b65ae1aefe066c4048c0e1ad5f80a3a421d303",
206
+ "sha256": "be5a9803eaaff93ee0ceb8afadc5dedf1df0c0712fc32b226c441b6d310af39e",
207
207
  "agentTarget": "codex"
208
208
  },
209
209
  {
@@ -223,7 +223,7 @@
223
223
  },
224
224
  {
225
225
  "path": "skills/codex/examples/acme-tasks/src/server.ts",
226
- "sha256": "a83668cf5226faca41ac2ada928c44c27d488f9d3cdc3b6ab08dde15ab7aabda",
226
+ "sha256": "3876daf95af0e55d245e641b5e91a7cdd40bdccb6a4f0bd50c65a462ac98d37d",
227
227
  "agentTarget": "codex"
228
228
  },
229
229
  {
@@ -268,7 +268,7 @@
268
268
  },
269
269
  {
270
270
  "path": "skills/codex/examples/food-ordering/src/server.ts",
271
- "sha256": "491e7e7e8289d4295d09ca2a5f7035f00a06e1d9f3349c406397f90a966269df",
271
+ "sha256": "1b1329c99af4798072b69979f1f0861c3b3587b237df46d3cf7b923060f134cb",
272
272
  "agentTarget": "codex"
273
273
  },
274
274
  {
@@ -348,17 +348,17 @@
348
348
  },
349
349
  {
350
350
  "path": "skills/claude-code/SKILL.md",
351
- "sha256": "24cdedbf4db8484b6e06823037b5b8fd0ef7ee39a57eb0fd135d167196fea3ff",
351
+ "sha256": "09ceee39251194a1528986cc7df57970218e865646779ce01e98872ccadfaffd",
352
352
  "agentTarget": "claude-code"
353
353
  },
354
354
  {
355
355
  "path": "skills/claude-code/references/sdk-surface.md",
356
- "sha256": "7275aedfb2338040f1b9f989765179ce970d1b25c77066b3d3f4f4e2fe39f7cc",
356
+ "sha256": "f19560c3232558eb692dc4ff0cee74850ebca9029f95272233e734aa3854faba",
357
357
  "agentTarget": "claude-code"
358
358
  },
359
359
  {
360
360
  "path": "skills/claude-code/references/cli-commands.md",
361
- "sha256": "c50bf5ec6f43bd9fb7115ea9c9eb8de33c93e123f3e2d396785fe75ba094d40d",
361
+ "sha256": "3a6df9f9a1311843d929c06698a87695fe8e4197d4c6ca64b2768c2990386557",
362
362
  "agentTarget": "claude-code"
363
363
  },
364
364
  {
@@ -368,12 +368,12 @@
368
368
  },
369
369
  {
370
370
  "path": "skills/claude-code/references/compile-errors.md",
371
- "sha256": "22692f2fda9c7d8ef0aa54e58148d22cf740bf722ceb79a942f6f146009a6bda",
371
+ "sha256": "de43b81d6b9c1a065aa1905fdb469e518e50e80bf34306964593e608649f6868",
372
372
  "agentTarget": "claude-code"
373
373
  },
374
374
  {
375
375
  "path": "skills/claude-code/references/authoring-workflow.md",
376
- "sha256": "bf59d1550ce72fa188e50e74b7d586be49a0e5473501ee3b83a5f41687ac5163",
376
+ "sha256": "b078cfc3481824ed09a7445346a793a89387b0a07de500f7bb5343487ec62e58",
377
377
  "agentTarget": "claude-code"
378
378
  },
379
379
  {
@@ -383,12 +383,12 @@
383
383
  },
384
384
  {
385
385
  "path": "skills/claude-code/references/experience-design.md",
386
- "sha256": "f07ed621eb1e8cdfa08abd10d5a6331c7e9d8198da422b8b4ad54d23475b2d4d",
386
+ "sha256": "40c5d7081f4c81cca5a7a2cfabe2e0fa8818eaabfd0214539765b70b6750d3cb",
387
387
  "agentTarget": "claude-code"
388
388
  },
389
389
  {
390
390
  "path": "skills/claude-code/references/widgets-and-apps.md",
391
- "sha256": "dea06536f780f0bb6d26dc63a6f1f35e2d6eb97f7a9c1c8574ed7377ccfe37a8",
391
+ "sha256": "853125c2bd73fcb136c3237bc4aa08faeeba8b8cc0d1ef2d0a168d4e7623ec68",
392
392
  "agentTarget": "claude-code"
393
393
  },
394
394
  {
@@ -398,7 +398,7 @@
398
398
  },
399
399
  {
400
400
  "path": "skills/claude-code/references/troubleshooting.md",
401
- "sha256": "b08dc48e72fa186fc953cf7052bfb7500b4586a772a1f4c54ff1e53a29f21eb2",
401
+ "sha256": "0fac5c07a9707ffeb88860905f351c58b567dcae1337ea9ac044cf5df8c8afef",
402
402
  "agentTarget": "claude-code"
403
403
  },
404
404
  {
@@ -423,22 +423,22 @@
423
423
  },
424
424
  {
425
425
  "path": "skills/claude-code/examples/acme-bistro/README.md",
426
- "sha256": "ad617758f117adbe5b3384c0e199c9c2d9ead856490ee4f29635436effc601aa",
426
+ "sha256": "d94f67f7518208cba14920c26ed8aaa1546b496d96e55645e85b5d75a1a64127",
427
427
  "agentTarget": "claude-code"
428
428
  },
429
429
  {
430
430
  "path": "skills/claude-code/examples/acme-bistro/design/UX-Document.md",
431
- "sha256": "11b83135ffa7291ccf3d1253e260bb1c47b406291a8999c3c072ae7884cf3df0",
431
+ "sha256": "b4627bbd31764f2432a408efdad3ffeba138ac5bac3ac483afbd97d33f0c37f3",
432
432
  "agentTarget": "claude-code"
433
433
  },
434
434
  {
435
435
  "path": "skills/claude-code/examples/acme-bistro/design/api-contract.md",
436
- "sha256": "41dace6414ebecc0926f3f3caedd43bb5dc2734c777ad93462bea72f6d55de34",
436
+ "sha256": "52b3a77db550ceb4126f0c3742b23606414a6b75f532f41f56c12d907949e744",
437
437
  "agentTarget": "claude-code"
438
438
  },
439
439
  {
440
440
  "path": "skills/claude-code/examples/acme-bistro/design/wireframe.html",
441
- "sha256": "1fe4c8327bcc91118fcc66d5e073f78a3816fe6ca01cbf544bc17888e27beb8b",
441
+ "sha256": "25bb48e8f2634b6c7fc0a773ca2d5c4678f11f813e96784ac4cf99cb34b84d49",
442
442
  "agentTarget": "claude-code"
443
443
  },
444
444
  {
@@ -458,7 +458,7 @@
458
458
  },
459
459
  {
460
460
  "path": "skills/claude-code/examples/acme-bistro/src/server.ts",
461
- "sha256": "9599427833eefc27fcdc0eb83c26134e1a8b61f6998802e66dd6c8176c105112",
461
+ "sha256": "3f707b40fdf84ab2e8738367a2e0cccaf075a07aa945801ffb3a534f98ee1dcd",
462
462
  "agentTarget": "claude-code"
463
463
  },
464
464
  {
@@ -483,17 +483,17 @@
483
483
  },
484
484
  {
485
485
  "path": "skills/claude-code/examples/acme-discovery/README.md",
486
- "sha256": "1ca6e3aeee967715936eeb68be05793a10bf78ecfa80050322883828310288aa",
486
+ "sha256": "c909d5d18a0889b44ce63cb9e02c969243be1bba85454f1181c64809b1160b97",
487
487
  "agentTarget": "claude-code"
488
488
  },
489
489
  {
490
490
  "path": "skills/claude-code/examples/acme-discovery/design/UX-Document.md",
491
- "sha256": "36d16c09f6593c0b3f55f6d657335635b8c7ef9f2cf00761ae0d866a855ec5a8",
491
+ "sha256": "186be2e58210f7dc76a3305b5b7b47357236586a8f5648c3a88f5367933dfa56",
492
492
  "agentTarget": "claude-code"
493
493
  },
494
494
  {
495
495
  "path": "skills/claude-code/examples/acme-discovery/design/wireframe.html",
496
- "sha256": "43a1d14693856d81af4c8976abd0102d640b649b984ba27bac1526e800c9ba51",
496
+ "sha256": "6b1098c755c0a4bb8d477cec40b6dbf34e12e236dc6b1a7b438ff069bd84ea18",
497
497
  "agentTarget": "claude-code"
498
498
  },
499
499
  {
@@ -513,7 +513,7 @@
513
513
  },
514
514
  {
515
515
  "path": "skills/claude-code/examples/acme-discovery/src/server.ts",
516
- "sha256": "b013868ef61c9a2eb41ad963d41cc7ea321e3c1692bcb67f11b0f70c5c7d322b",
516
+ "sha256": "3a8d1285b375b6e650db95033af0f1cb0c8f5468a6a454e4cbcc8aaae7f6ff9d",
517
517
  "agentTarget": "claude-code"
518
518
  },
519
519
  {
@@ -538,17 +538,17 @@
538
538
  },
539
539
  {
540
540
  "path": "skills/claude-code/examples/acme-tasks/README.md",
541
- "sha256": "82dcfc5151744e6f043d0bf3eb36e6ca116da52ce5d7c5a787f97fc05347618d",
541
+ "sha256": "f97b264bd7c696ffd8ddbba846cdcd8c2e1b0940738e94d057654b5e42d14d1a",
542
542
  "agentTarget": "claude-code"
543
543
  },
544
544
  {
545
545
  "path": "skills/claude-code/examples/acme-tasks/design/UX-Document.md",
546
- "sha256": "85fbcaf80877257ac80d81497f154b3c0633f515fbadd6682a6f1783aae82111",
546
+ "sha256": "9eb6fda14200bb7a2f67a2b2bb8b2e0b7914c98a7da8e272dc2707110f0ef027",
547
547
  "agentTarget": "claude-code"
548
548
  },
549
549
  {
550
550
  "path": "skills/claude-code/examples/acme-tasks/design/wireframe.html",
551
- "sha256": "f5f486122e3cef6528c601b343b65ae1aefe066c4048c0e1ad5f80a3a421d303",
551
+ "sha256": "be5a9803eaaff93ee0ceb8afadc5dedf1df0c0712fc32b226c441b6d310af39e",
552
552
  "agentTarget": "claude-code"
553
553
  },
554
554
  {
@@ -568,7 +568,7 @@
568
568
  },
569
569
  {
570
570
  "path": "skills/claude-code/examples/acme-tasks/src/server.ts",
571
- "sha256": "a83668cf5226faca41ac2ada928c44c27d488f9d3cdc3b6ab08dde15ab7aabda",
571
+ "sha256": "3876daf95af0e55d245e641b5e91a7cdd40bdccb6a4f0bd50c65a462ac98d37d",
572
572
  "agentTarget": "claude-code"
573
573
  },
574
574
  {
@@ -613,7 +613,7 @@
613
613
  },
614
614
  {
615
615
  "path": "skills/claude-code/examples/food-ordering/src/server.ts",
616
- "sha256": "491e7e7e8289d4295d09ca2a5f7035f00a06e1d9f3349c406397f90a966269df",
616
+ "sha256": "1b1329c99af4798072b69979f1f0861c3b3587b237df46d3cf7b923060f134cb",
617
617
  "agentTarget": "claude-code"
618
618
  },
619
619
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@noodleseed/agent-kit",
3
- "version": "0.17.0",
3
+ "version": "0.19.0",
4
4
  "private": false,
5
5
  "description": "Self-checking, self-updating agent skills for the Noodle Seed CLI. Authored in this repo by @noodle-borg/agent-kit; this is the published, independently-versioned canonical skills artifact the CLI fetches and verifies.",
6
6
  "license": "Apache-2.0",
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: noodle-seed
3
3
  description: Use when building, validating, testing, deploying, or operating a local or hosted Noodle Seed MCP server or app authored in TypeScript with the noodle CLI.
4
- version: 0.17.0
4
+ version: 0.19.0
5
5
  hash: b4952708b1c38f55
6
6
  ---
7
7
 
@@ -3,7 +3,7 @@
3
3
  A Noodle MCP App for **Acme Bistro**, a fictional restaurant. It is the flagship for the **end-to-end
4
4
  transaction** pattern: the customer browses the menu and builds the order *in chat*, and the order
5
5
  completes in chat — only **payment** hands off, via a signed checkout deep link (the card never touches
6
- the app). It pairs a `toolWithWidget` menu/cart with `toolForWidget` cart helpers and a model-visible
6
+ the app). It pairs a view-backed `tool` menu/cart with app-only `tool` cart helpers and a model-visible
7
7
  `create_checkout` tool backed by `handoff.allowedDomains`.
8
8
 
9
9
  Capability slot: **end-to-end in-chat transaction + payment-only handoff**, plus a worked **design-first**
@@ -204,7 +204,7 @@ APP: [tool: create_checkout {customer:"Guest",
204
204
 
205
205
  ## 5. UI Widget Specifications
206
206
 
207
- > The widget is authored as a Noodle Seed React `view` (`toolWithWidget` → `MenuCart`), styled with **vanilla CSS cascade layers** so it inherits the host's light/dark theme and adapts to ChatGPT's surface. Compliance is verified with `noodle check --target chatgpt`.
207
+ > The widget is authored as a Noodle Seed React `view` (`tool` → `MenuCart`), styled with **vanilla CSS cascade layers** so it inherits the host's light/dark theme and adapts to ChatGPT's surface. Compliance is verified with `noodle check --target chatgpt`.
208
208
 
209
209
  ### 5.1 Design System Compliance
210
210
 
@@ -250,20 +250,20 @@ Modes deliberately **not** used: no Carousel (a single flat menu doesn't need on
250
250
 
251
251
  ## 6. Tool Definitions (App Backend)
252
252
 
253
- ### ★ Tool 1: `show_menu` — `toolWithWidget`
253
+ ### ★ Tool 1: `show_menu` — `tool`
254
254
  **Input:** `{ customer?: string = "Guest" }`
255
255
  **Output:** `{ status, customer, items[] }` where each item is `{ id, name, price, kind }`.
256
256
  **Renders:** the `MenuCart` widget.
257
257
  **Annotations:** read-only.
258
258
  **Triggers:** any menu / ordering intent ("show me Acme's menu", "order from Acme").
259
259
 
260
- ### Tool 2: `add_to_cart` — `toolForWidget`
260
+ ### Tool 2: `add_to_cart` — `tool`
261
261
  **Input:** `{ customer?, item: <menu id> = "stone_pizza", quantity?: int ≥1 = 1, notes?: string }`
262
262
  **Output:** `{ status, item, quantity, notes }`.
263
263
  **Annotations:** local write (non-destructive).
264
264
  **Triggers:** natural-language additions ("add two margheritas", "and a lemon tart"). Widget-facing helper — reflects NL selections into the visible cart.
265
265
 
266
- ### Tool 3: `remove_from_cart` — `toolForWidget`
266
+ ### Tool 3: `remove_from_cart` — `tool`
267
267
  **Input:** `{ customer?, item: <menu id> = "stone_pizza" }`
268
268
  **Output:** `{ status, item }`.
269
269
  **Annotations:** local write (non-destructive).
@@ -8,9 +8,9 @@ The app maps to four tools:
8
8
 
9
9
  | Tool | Kind | Job |
10
10
  |------|------|-----|
11
- | `show_menu` | `toolWithWidget` (read-only) | Return the menu + render the `MenuCart` widget |
12
- | `add_to_cart` | `toolForWidget` (local write) | Reflect a natural-language addition into the visible cart |
13
- | `remove_from_cart` | `toolForWidget` (local write) | Remove one unit of an item |
11
+ | `show_menu` | `tool` (read-only) | Return the menu + render the `MenuCart` widget |
12
+ | `add_to_cart` | `tool` (local write) | Reflect a natural-language addition into the visible cart |
13
+ | `remove_from_cart` | `tool` (local write) | Remove one unit of an item |
14
14
  | `create_checkout` | model-visible `tool` (open-link) | Mint the signed, expiring payment link |
15
15
 
16
16
  Menu item IDs are the stable enum: `stone_pizza`, `roast_bowl`, `house_salad`, `lemon_tart`, `sparkling`.
@@ -496,13 +496,13 @@
496
496
  <div class="api-panel-header">Browse &amp; Build (Steps 1–3)</div>
497
497
  <div class="api-step">
498
498
  <div class="api-step-label">Step 1 — Show the menu</div>
499
- <div class="api-endpoint"><span class="kind read">READ</span><span class="path">show_menu</span><span class="desc">— toolWithWidget. Returns the 5-item menu and renders MenuCart.</span></div>
499
+ <div class="api-endpoint"><span class="kind read">READ</span><span class="path">show_menu</span><span class="desc">— tool + view. Returns the 5-item menu and renders MenuCart.</span></div>
500
500
  <div class="api-note"><strong>Design intent:</strong> the menu is small and static, so it ships in one read — no pagination, no follow-up call. The <code>items[]</code> array is the model's only source of dish names and prices.</div>
501
501
  </div>
502
502
  <div class="api-step">
503
503
  <div class="api-step-label">Steps 2–3 — Build &amp; edit the cart</div>
504
- <div class="api-endpoint"><span class="kind write">WRITE</span><span class="path">add_to_cart</span><span class="desc">— toolForWidget. Reflects a natural-language addition (item + quantity) into the visible cart.</span></div>
505
- <div class="api-endpoint"><span class="kind write">WRITE</span><span class="path">remove_from_cart</span><span class="desc">— toolForWidget. Removes one unit; the widget's − button calls the same tool.</span></div>
504
+ <div class="api-endpoint"><span class="kind write">WRITE</span><span class="path">add_to_cart</span><span class="desc">— tool + app visibility. Reflects a natural-language addition (item + quantity) into the visible cart.</span></div>
505
+ <div class="api-endpoint"><span class="kind write">WRITE</span><span class="path">remove_from_cart</span><span class="desc">— tool + app visibility. Removes one unit; the widget's − button calls the same tool.</span></div>
506
506
  <div class="api-note"><strong>Natural-language parsing:</strong> "two margheritas and a lemon tart" becomes <code>add_to_cart{item:"stone_pizza",quantity:2}</code> + <code>add_to_cart{item:"lemon_tart",quantity:1}</code> — the model fills the fields; no UI round-trip. The running total is summed live in the widget (React), not in a tool.</div>
507
507
  </div>
508
508
  </div>
@@ -1,4 +1,4 @@
1
- import { annotations, server, tool, toolForWidget, toolWithWidget, z } from '@noodleseed/one';
1
+ import { annotations, server, tool, z } from '@noodleseed/one';
2
2
 
3
3
  // Acme Bistro is a fictional restaurant. This app is deliberately END-TO-END: the customer browses the
4
4
  // menu and builds the order in chat, and the order completes in chat — only *payment* hands off, via a
@@ -52,7 +52,7 @@ export default server(
52
52
  },
53
53
  },
54
54
  [
55
- toolWithWidget('show_menu', {
55
+ tool('show_menu', {
56
56
  description: 'Show the Acme Bistro menu and render the ordering widget.',
57
57
  annotations: readOnly,
58
58
  input: z.object({ customer: z.string().default('Guest') }),
@@ -66,8 +66,8 @@ export default server(
66
66
  customer: input.customer,
67
67
  items: menu,
68
68
  }),
69
- widgetTitle: 'Order at Acme Bistro',
70
- widgetDescription: 'Browse the menu, build an order in chat, and hand off to pay.',
69
+ viewTitle: 'Order at Acme Bistro',
70
+ viewDescription: 'Browse the menu, build an order in chat, and hand off to pay.',
71
71
  invoking: 'Loading the menu…',
72
72
  invoked: 'Menu ready',
73
73
  domain: 'https://order.acme.example',
@@ -82,7 +82,8 @@ export default server(
82
82
  },
83
83
  }),
84
84
  // Widget-only cart edits — the model fills the item from natural language ("add two margheritas").
85
- toolForWidget('add_to_cart', {
85
+ tool('add_to_cart', {
86
+ visibility: ['app'],
86
87
  description: 'Add a menu item to the Acme Bistro order from the widget.',
87
88
  annotations: localWrite,
88
89
  input: z.object({
@@ -104,7 +105,8 @@ export default server(
104
105
  notes: input.notes,
105
106
  }),
106
107
  }),
107
- toolForWidget('remove_from_cart', {
108
+ tool('remove_from_cart', {
109
+ visibility: ['app'],
108
110
  description: 'Remove a menu item from the Acme Bistro order.',
109
111
  annotations: localWrite,
110
112
  input: z.object({
@@ -3,7 +3,7 @@
3
3
  A Noodle MCP App for **Acme Getaways**, a fictional travel brand. It is the flagship for the
4
4
  **top-of-funnel discovery → handoff** pattern: discovery and configuration happen inside ChatGPT; the
5
5
  booking/transaction happens off-app on Acme's own site, reached through a signed, attributable handoff
6
- deep link. It pairs a `toolWithWidget` discovery carousel with a model-visible `create_handoff` tool and
6
+ deep link. It pairs a `tool` discovery carousel with a model-visible `create_handoff` tool and
7
7
  server-level `handoff.allowedDomains`.
8
8
 
9
9
  Capability slots: top-of-funnel funnel discipline, discovery carousel widget, `create_handoff` deep-link
@@ -202,7 +202,7 @@ Inside the widget, **Continue on Acme** calls `create_handoff(destination="coral
202
202
 
203
203
  ## 5. UI Widget Specifications (OpenAI Apps SDK Compliant)
204
204
 
205
- > The app has **one** widget, `DiscoveryCarousel`, authored as a React `view` on the `discover_getaways` `toolWithWidget`. It follows the OpenAI Apps SDK UI Guidelines (system fonts, monochrome outlined icons, WCAG AA, ≤2 actions per card, no nested scroll). Styling uses Noodle Seed's server-level `branding` tokens and CSS cascade layers — not app-specific global CSS. Acme's accent teal is restricted to the primary CTA, the logo mark, and the "Shortlisted" state only.
205
+ > The app has **one** widget, `DiscoveryCarousel`, authored as a React `view` on the `discover_getaways` `tool`. It follows the OpenAI Apps SDK UI Guidelines (system fonts, monochrome outlined icons, WCAG AA, ≤2 actions per card, no nested scroll). Styling uses Noodle Seed's server-level `branding` tokens and CSS cascade layers — not app-specific global CSS. Acme's accent teal is restricted to the primary CTA, the logo mark, and the "Shortlisted" state only.
206
206
 
207
207
  ### 5.1 Design System Compliance
208
208
 
@@ -378,8 +378,8 @@ The demo's arc: *a vague mood → four real, priced, reasoned getaways → one s
378
378
  ```
379
379
  ChatGPT ──tool calls──► Noodle Seed runtime (server 'acme_discovery')
380
380
  │ app-owned curated catalog (static data)
381
- ├──► discover_getaways (toolWithWidget → DiscoveryCarousel)
382
- ├──► shortlist_getaway (toolForWidget, local write)
381
+ ├──► discover_getaways (tool → DiscoveryCarousel)
382
+ ├──► shortlist_getaway (tool, local write)
383
383
  ├──► create_handoff (open-link → signed Acme deep link)
384
384
  └──► React view bundle (DiscoveryCarousel, branding tokens, CSP)
385
385
 
@@ -585,14 +585,14 @@
585
585
  <div class="api-step">
586
586
  <div class="an">1</div>
587
587
  <div class="ac">
588
- <div class="tool">discover_getaways<span class="kind">toolWithWidget</span></div>
588
+ <div class="tool">discover_getaways<span class="kind">tool + view</span></div>
589
589
  <div class="api-note">In <code>{ vibe, month, travelers }</code> → out <code>{ status, vibe, month, travelers, options[] }</code> and renders <code>DiscoveryCarousel</code>. Returns the <strong>full curated catalog verbatim</strong> (4 destinations); the model narrates fit. Host status: "Finding getaways…" → "Getaways ready". <code>read-only</code>.</div>
590
590
  </div>
591
591
  </div>
592
592
  <div class="api-step">
593
593
  <div class="an">2</div>
594
594
  <div class="ac">
595
- <div class="tool">shortlist_getaway<span class="kind">toolForWidget</span></div>
595
+ <div class="tool">shortlist_getaway<span class="kind">tool + app visibility</span></div>
596
596
  <div class="api-note">In <code>{ destination, note }</code> → out <code>{ status, destination, note }</code>. Called from inside the carousel when a card's <strong>Shortlist</strong> is tapped; updates widget view-state. <code>local-action</code>, non-destructive — not a booking.</div>
597
597
  </div>
598
598
  </div>
@@ -1,4 +1,4 @@
1
- import { annotations, server, tool, toolForWidget, toolWithWidget, z } from '@noodleseed/one';
1
+ import { annotations, server, tool, z } from '@noodleseed/one';
2
2
 
3
3
  // Acme Getaways is a fictional travel brand. This app is deliberately top-of-funnel: discovery and
4
4
  // configuration happen inside ChatGPT; the booking/transaction happens off-app on Acme's own site,
@@ -115,7 +115,7 @@ export default server(
115
115
  },
116
116
  },
117
117
  [
118
- toolWithWidget('discover_getaways', {
118
+ tool('discover_getaways', {
119
119
  description:
120
120
  'Suggest Acme Getaways destinations for a vibe and month and render a discovery carousel.',
121
121
  annotations: readOnly,
@@ -136,7 +136,7 @@ export default server(
136
136
  travelers: input.travelers,
137
137
  options: catalog,
138
138
  }),
139
- widgetTitle: 'Discover getaways',
139
+ viewTitle: 'Discover getaways',
140
140
  // ChatGPT host status copy (openai/toolInvocation/*) — required for widget-opening tools.
141
141
  invoking: 'Finding getaways…',
142
142
  invoked: 'Getaways ready',
@@ -145,7 +145,7 @@ export default server(
145
145
  component: 'discovery-carousel',
146
146
  entry: './views/discovery-carousel.tsx',
147
147
  },
148
- widgetDescription:
148
+ viewDescription:
149
149
  'A top-of-funnel discovery carousel: pick a destination, then hand off to Acme to book.',
150
150
  csp: {
151
151
  connectDomains: ['https://acme.example'],
@@ -180,7 +180,8 @@ export default server(
180
180
  handoffUrl: `https://book.acme.example/plan?dest=${input.destination}&month=${input.month}&pax=${input.travelers}&src=chatgpt`,
181
181
  }),
182
182
  }),
183
- toolForWidget('shortlist_getaway', {
183
+ tool('shortlist_getaway', {
184
+ visibility: ['app'],
184
185
  description: 'Record the traveler’s shortlisted destination from the discovery widget.',
185
186
  annotations: localWrite,
186
187
  input: z.object({
@@ -7,7 +7,7 @@ in one `TaskList` widget. It shows the "identify and prioritize the flows first,
7
7
  the `noodle-seed` skill's `references/experience-design.md` teaches.
8
8
 
9
9
  Capability slots: prioritized multi-flow app design, a two-way (read + write) in-chat pattern, a task-list
10
- widget with `toolForWidget` helpers, and a worked **design-first** artifact (the flow spec + wireframe
10
+ widget with `tool` helpers, and a worked **design-first** artifact (the flow spec + wireframe
11
11
  below). A real deployment would connect the user's account with the end-user auth pattern — see
12
12
  [`../customer-auth/README.md`](../customer-auth/README.md); this example seeds a list so the focus stays
13
13
  on the flows.
@@ -76,5 +76,31 @@ noodle deploy --access owner-only
76
76
  noodle open
77
77
  ```
78
78
 
79
+ ## Optional in-product assistant
80
+
81
+ The same task tools can also sit inside Acme's authenticated web app. Add an `assistant` option to this
82
+ server without creating a second tool set:
83
+
84
+ ```ts
85
+ assistant: embeddedAssistant({
86
+ model: openAICompatible({
87
+ baseUrl: variable('ASSISTANT_MODEL_BASE_URL'),
88
+ model: variable('ASSISTANT_MODEL'),
89
+ apiKey: secret('ASSISTANT_MODEL_API_KEY'),
90
+ }),
91
+ allowedOrigins: ['https://tasks.example.com'],
92
+ layout: { mode: 'floating', position: 'bottom-right' },
93
+ labels: { welcomeHeading: 'How can I help with Acme Tasks?' },
94
+ }),
95
+ ```
96
+
97
+ The assistant automatically inherits this server's existing `branding` block, so its name, accent,
98
+ light/dark surfaces, density, and radius match the `TaskList` widget without a second brand declaration.
99
+
100
+ The customer backend exchanges its authenticated user through `@noodleseed/assistant/server`; the browser
101
+ uses the Web Component or React wrapper and never receives the embed client or model secret. Validate with
102
+ `noodle check --target embedded-assistant`, then create the backend credential with
103
+ `noodle assistant clients create` after deployment.
104
+
79
105
  This example has no connector secrets and does not include tokens, caller-key mechanisms, or
80
106
  `.env.noodle` values. All tasks are fictional seed data.
@@ -155,7 +155,7 @@ All tools are atomic, model-fillable from natural language, and each returns a s
155
155
  **★ `list_today`** *(read-only · renders `TaskList`)*
156
156
  - **Input:** `{ focus: string = "today" }`
157
157
  - **Output:** `{ status, focus, tasks: [{ id, title, priority, done }] }`
158
- - **Notes:** `toolWithWidget` — the one tool that opens the widget. Host status copy: invoking "Loading your tasks…", invoked "Tasks ready".
158
+ - **Notes:** `tool` — the one tool that opens the widget. Host status copy: invoking "Loading your tasks…", invoked "Tasks ready".
159
159
 
160
160
  **★ `add_task`** *(local write, non-destructive · model-visible)*
161
161
  - **Input:** `{ title: string, priority: "high"|"medium"|"low" = "medium" }`
@@ -170,7 +170,7 @@ All tools are atomic, model-fillable from natural language, and each returns a s
170
170
  **`set_priority`** *(local write, non-destructive · widget-only)*
171
171
  - **Input:** `{ task: string (id), priority: "high"|"medium"|"low" }`
172
172
  - **Output:** `{ status, task, priority }`
173
- - **Notes:** `toolForWidget` — hidden from the model; the `<select>` in `TaskList` is its only caller, keeping the model's tool surface to the three it should reason about.
173
+ - **Notes:** `tool` — hidden from the model; the `<select>` in `TaskList` is its only caller, keeping the model's tool surface to the three it should reason about.
174
174
 
175
175
  ---
176
176