@noodleseed/agent-kit 0.82.0 → 0.84.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 (52) hide show
  1. package/manifest.json +279 -279
  2. package/package.json +1 -1
  3. package/skills/claude-code/SKILL.md +1 -1
  4. package/skills/claude-code/authoring-mcp-servers/SKILL.md +1 -1
  5. package/skills/claude-code/building-mcp-apps/SKILL.md +1 -1
  6. package/skills/claude-code/connecting-apis-to-mcp/SKILL.md +1 -1
  7. package/skills/claude-code/creating-product-agent-guides/SKILL.md +1 -1
  8. package/skills/claude-code/debugging-mcp-delivery/SKILL.md +1 -1
  9. package/skills/claude-code/deploying-mcp-services/SKILL.md +1 -1
  10. package/skills/claude-code/designing-mcp-products/SKILL.md +1 -1
  11. package/skills/claude-code/embedding-mcp-assistants/SKILL.md +1 -1
  12. package/skills/claude-code/examples/acme-discovery/README.md +6 -2
  13. package/skills/claude-code/examples/acme-discovery/src/server.ts +2 -8
  14. package/skills/claude-code/examples/acme-discovery/test/server.test.ts +1 -0
  15. package/skills/claude-code/examples/food-ordering/README.md +1 -0
  16. package/skills/claude-code/examples/food-ordering/src/server.ts +12 -0
  17. package/skills/claude-code/examples/food-ordering/test/server.test.ts +7 -0
  18. package/skills/claude-code/executing-noodle-plans/SKILL.md +1 -1
  19. package/skills/claude-code/publishing-mcp-integrations/SKILL.md +1 -1
  20. package/skills/claude-code/references/authoring-workflow.md +10 -1
  21. package/skills/claude-code/references/connect-an-api.md +31 -1
  22. package/skills/claude-code/references/embedded-assistant.md +6 -7
  23. package/skills/claude-code/references/sdk-surface.md +4 -2
  24. package/skills/claude-code/references/widgets-and-apps.md +1 -1
  25. package/skills/claude-code/reporting-noodle-feedback/SKILL.md +1 -1
  26. package/skills/claude-code/verifying-mcp-delivery/SKILL.md +1 -1
  27. package/skills/claude-code/wrapping-existing-applications/SKILL.md +1 -1
  28. package/skills/codex/SKILL.md +1 -1
  29. package/skills/codex/authoring-mcp-servers/SKILL.md +1 -1
  30. package/skills/codex/building-mcp-apps/SKILL.md +1 -1
  31. package/skills/codex/connecting-apis-to-mcp/SKILL.md +1 -1
  32. package/skills/codex/creating-product-agent-guides/SKILL.md +1 -1
  33. package/skills/codex/debugging-mcp-delivery/SKILL.md +1 -1
  34. package/skills/codex/deploying-mcp-services/SKILL.md +1 -1
  35. package/skills/codex/designing-mcp-products/SKILL.md +1 -1
  36. package/skills/codex/embedding-mcp-assistants/SKILL.md +1 -1
  37. package/skills/codex/examples/acme-discovery/README.md +6 -2
  38. package/skills/codex/examples/acme-discovery/src/server.ts +2 -8
  39. package/skills/codex/examples/acme-discovery/test/server.test.ts +1 -0
  40. package/skills/codex/examples/food-ordering/README.md +1 -0
  41. package/skills/codex/examples/food-ordering/src/server.ts +12 -0
  42. package/skills/codex/examples/food-ordering/test/server.test.ts +7 -0
  43. package/skills/codex/executing-noodle-plans/SKILL.md +1 -1
  44. package/skills/codex/publishing-mcp-integrations/SKILL.md +1 -1
  45. package/skills/codex/references/authoring-workflow.md +10 -1
  46. package/skills/codex/references/connect-an-api.md +31 -1
  47. package/skills/codex/references/embedded-assistant.md +6 -7
  48. package/skills/codex/references/sdk-surface.md +4 -2
  49. package/skills/codex/references/widgets-and-apps.md +1 -1
  50. package/skills/codex/reporting-noodle-feedback/SKILL.md +1 -1
  51. package/skills/codex/verifying-mcp-delivery/SKILL.md +1 -1
  52. package/skills/codex/wrapping-existing-applications/SKILL.md +1 -1
@@ -80,6 +80,13 @@ describe('food-ordering example', () => {
80
80
  expect(JSON.stringify(tools.get('open_ordering'))).toContain('${context.ambient.serviceArea}');
81
81
  expect(JSON.stringify(tools.get('open_ordering'))).toContain('${context.location.latitude}');
82
82
  expect(JSON.stringify(tools.get('open_ordering'))).toContain('${context.location.longitude}');
83
+ expect(tools.get('open_ordering')?.annotations).toMatchObject({
84
+ 'x-noodleseed-model-latest-message-includes-any': expect.arrayContaining([
85
+ 'order',
86
+ 'menu',
87
+ 'checkout',
88
+ ]),
89
+ });
83
90
  expect(JSON.stringify(tools.get('sync_cart'))).toContain('revision');
84
91
  expect(tools.get('sync_cart')?.annotations?.confirm).toBe(false);
85
92
  expect(tools.get('prepare_checkout')?.annotations?.confirm).toBe(false);
@@ -3,7 +3,7 @@ name: executing-noodle-plans
3
3
  description: "Use when the user asks to execute an approved, decision-complete implementation plan for a Noodle Seed project task by task with test-first changes, review, recovery, and final verification."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.82.0 hash:6a9f132ddb79352e -->
6
+ <!-- noodle-skill version:0.84.0 hash:6a9f132ddb79352e -->
7
7
 
8
8
  # Execute a Noodle Seed implementation plan
9
9
 
@@ -3,7 +3,7 @@ name: publishing-mcp-integrations
3
3
  description: "Use when preparing, reviewing, or submitting a Noodle Seed MCP integration to a host or app directory."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.82.0 hash:efffbf82007f935d -->
6
+ <!-- noodle-skill version:0.84.0 hash:efffbf82007f935d -->
7
7
 
8
8
  # publishing-mcp-integrations
9
9
 
@@ -23,7 +23,8 @@
23
23
 
24
24
  1. **Website scrape** — if the user gives a URL, scrape it for surface hints (products, services, hours, contact, pricing). Stop there: the URL does not reveal CRM, booking systems, custom APIs, auth model, eligibility rules, quoting logic, or approval flows. Those live in the business systems and the owner’s head — ask.
25
25
  2. **OpenAPI import** — `noodle import openapi <file>` emits a starter `server.ts` from a spec. Use it when the user provides an OpenAPI document.
26
- 3. **User interview** — Noodle does not interview; you do. Cover custom APIs/integrations, eligibility rules, quoting/approval logic, and private schemas (SQL DDL or JSON samples for custom `connector` declarations). Ask for concrete examples and sample payloads; do not guess a schema from a URL or invent endpoints.
26
+ 3. **Upstream MCP import** — `noodle import mcp <url> --name <slug> --output <dir>` discovers `tools/list` once, validates and freezes tool schemas into TypeScript, and writes a secret-free drift snapshot. Upstream annotations are untrusted, so generated tools remain destructive confirmed actions until an author verifies and narrows them. Use `--header-env <header>=<ENV_NAME>` for import-only auth and `--check` for classified, non-mutating drift detection. Runtime never performs discovery.
27
+ 4. **User interview** — Noodle does not interview; you do. Cover custom APIs/integrations, eligibility rules, quoting/approval logic, and private schemas (SQL DDL or JSON samples for custom `connector` declarations). Ask for concrete examples and sample payloads; do not guess a schema from a URL or invent endpoints.
27
28
 
28
29
  ## Fit check
29
30
 
@@ -42,10 +43,18 @@ Author in `server.ts`, then `noodle validate` → fix cited errors (see `compile
42
43
  Declare connectors as data, not imperative code:
43
44
 
44
45
  - **HTTP**: `connector("id").version("1.0.0").http({ baseUrl, allowedOrigins, auth, operations })` with per-operation `request`/`response` mapping using `${args...}` / `${response...}` expressions.
46
+ - **MCP**: `connector("id").version("1.0.0").mcp({ endpoint, allowedOrigins, auth?, operations })` where each operation freezes the separate upstream `tool` wire name plus input/output schema. Import with `noodle import mcp`; do not hand-copy a live surface or call `tools/list` at runtime.
45
47
  - **Compute**: `connector("id").version("1.0.0").compute(name, { input, output, calls?, run })` — a self-contained, sandboxed function (no imports/closure capture) that may call allowlisted operations via `callOperation`.
46
48
 
47
49
  Tools record connector calls into a flow; recording is not execution. Do not branch on runtime outputs with native `if` — use declarative `when(...)` conditions.
48
50
 
51
+ MCP connectors are curated backing operations, never transparent proxies. Publish ordinary Noodle tools
52
+ with stable intent-shaped names, descriptions, annotations, authored schemas, confirmation, visibility,
53
+ and optional React `view`. Normalize a text-only upstream result through compute before rendering when the
54
+ view needs a richer stable output. Upstream resources, prompts, `_meta`, annotations, widgets, and CSP are
55
+ not imported or forwarded. The runtime opens one guarded session for one operation, uses only a broker-minted
56
+ credential, and closes it; it does not act as an agent for upstream sampling, roots, or elicitation.
57
+
49
58
  HTTP connector auth variants: `bearer` (`{ kind: "bearer", secret: secret("API_TOKEN") }`), `apiKey` (`{ kind: "apiKey", header: "X-API-Key", secret: secret("API_KEY") }`), `clientCredentials`, `delegatedOAuth`, `delegatedSessionCookie`, and `delegatedTokenExchange` (per-user calls to your own API — see "Delegated downstream auth" below). Use managed `secret(...)` / `variable(...)` refs for all values that differ by org/app/env.
50
59
 
51
60
  When one connector needs independently selectable accounts, declare catalog `credentialProfiles` plus each operation’s accepted `credentials.profiles`, then bind each `server.use` alias with `bind(connector, { profile, connection: connection("logical_id", managedSecret(secret("NAME"), { scopes, audience })) })`. The alias is the stable account boundary; never put provider account ids, labels, or credential values in it. `gmailConnector()` is the curated Gmail catalog helper; reuse it under independent aliases and accept canonical `accounts` arrays in tools (one account for writes, or an explicitly ordered supported combination for reads). See the bundled `gmail-multi-account` flagship. Bound managed secrets are supported by hosted execution. For deployed-server access to Google APIs, use `googleWorkloadIdentity({ provider: variable("GOOGLE_WIF_PROVIDER"), access: { kind: "direct" } })`, or add `serviceAccountImpersonation` with a managed service-account email. This is keyless Google Workload Identity Federation: exact Google scopes/audience come from the catalog operation, while `noodle auth google prepare|status|doctor|revoke` owns operator lifecycle. See the bundled `google-bigquery` flagship. `externalExchange()` is runnable only when the deployment operator injects an exact HTTPS provider endpoint/origin/audience and durable shared subject-pin store through service ports; Noodle sends a short-lived platform-signed deployment workload assertion and accepts only a bounded bearer response. Provider implementations must consume assertion replay ids through durable shared atomic storage across instances and restarts. There is intentionally no hosted enrollment or provider CRUD surface yet. The provider wire contract is public, but its conformance kit is workspace/source-only and is not an installable npm package. Bound `clientCredentials(...)` remains fail-closed until its provider slice lands.
@@ -11,6 +11,7 @@ Connect a real API to a focused MCP product using managed credentials, mappings
11
11
  - Secure the key first
12
12
  - Probe the live API
13
13
  - Model the connector from the observed shape
14
+ - Import and curate an upstream MCP server
14
15
  - Return a list
15
16
  - Create, update, delete
16
17
  - Design intent tools
@@ -22,7 +23,7 @@ Connect a real API to a focused MCP product using managed credentials, mappings
22
23
 
23
24
  ## Use when
24
25
 
25
- - The user provides credentials, a reachable API, or an OpenAPI document and wants real MCP behavior backed by it.
26
+ - The user provides credentials, a reachable API, an OpenAPI document, or an upstream MCP endpoint and wants real MCP behavior backed by it.
26
27
  - Existing connector behavior compiles but still needs proof against the actual service and data shape.
27
28
 
28
29
  ## Do not use when
@@ -80,6 +81,35 @@ Encode the API as an HTTP connector, mapping only the fields you actually saw in
80
81
  The full connector shape, every `auth.kind`, and compute connectors are in
81
82
  `references/authoring-workflow.md`.
82
83
 
84
+ ### Import and curate an upstream MCP server
85
+
86
+ Use an explicit import to discover the upstream tool surface once and generate TypeScript:
87
+
88
+ ```sh
89
+ noodle import mcp https://store.example/api/mcp --name store --output store-app
90
+ # When import discovery needs a credential, read it only from the environment:
91
+ noodle import mcp https://store.example/api/mcp --name store \
92
+ --header-env Authorization=STORE_MCP_TOKEN
93
+ ```
94
+
95
+ The importer freezes upstream tool names and normalized schemas into `.mcp({ operations })`; it never
96
+ persists the import credential. Runtime calls only those declared operations and never runs `tools/list`.
97
+ MCP annotations are untrusted hints, so every generated tool starts as a destructive confirmed action.
98
+ Verify real behavior and deliberately narrow proven reads before accepting the generated source. Use
99
+ `noodle import mcp <url> --output <dir> --check` in CI to detect upstream additions, removals, or schema
100
+ changes without mutating source; its review labels drift additive, breaking, or metadata-only.
101
+
102
+ Treat the imported connector operation as a backing-system contract, not the public tool design. Publish
103
+ ordinary intent-shaped `tool(...)` capabilities with stable names and narrower schemas, normalize text or
104
+ large upstream output through compute, and attach a normal Noodle React `view` when UI helps. Upstream
105
+ `_meta`, resources, prompts, annotations, widgets, and CSP are never forwarded. A Noodle-owned widget may
106
+ therefore enrich a headless upstream tool without trusting upstream executable UI.
107
+
108
+ Managed endpoints require an exact managed origin allowlist. Configure each deployment with
109
+ `variable(...)` and `secret(...)`; inbound MCP/OAuth bearer tokens are never reusable upstream credentials.
110
+ The first release supports no auth, bearer, API key, and client credentials through the broker. Do not
111
+ invent a delegated-user OAuth shortcut for an upstream MCP server.
112
+
83
113
  ### Return a list
84
114
 
85
115
  Most real tools return a variable-length list (search results, a user’s tasks). Bind the **whole array** — a single `${response.path}` returns the referenced value verbatim, arrays included:
@@ -29,7 +29,8 @@ Keep every credential and identity layer separate:
29
29
  | Owner | Values | Destination |
30
30
  | --- | --- | --- |
31
31
  | Noodle operator | Login, selected org/app/env | Plugin-managed CLI profile and explicit target; never the SaaS runtime |
32
- | Noodle deployment | `ASSISTANT_MODEL_BASE_URL`, `ASSISTANT_MODEL`, `ASSISTANT_MODEL_API_KEY` | `noodle variables set` / `noodle secrets set`; never the SaaS environment |
32
+ | Noodle-managed model | No authored provider, model id, URL, or key | Hosted operator state; available only when Noodle has enrolled the exact org/app/env |
33
+ | Operator-provided model | `ASSISTANT_MODEL_BASE_URL`, `ASSISTANT_MODEL`, `ASSISTANT_MODEL_API_KEY` | `noodle variables set` / `noodle secrets set`; never the SaaS environment |
33
34
  | Connector/delegated exchange | Connector credentials and any customer-owned token-exchange client | Noodle managed configuration plus the matching customer backend secret manager |
34
35
  | SaaS backend | `NOODLE_SERVICE_URL`, `NOODLE_ASSISTANT_CLIENT_ID`, `NOODLE_ASSISTANT_CLIENT_SECRET`, `PUBLIC_APP_ORIGIN` | Backend-only environment or secret manager; never browser code or public-prefixed variables |
35
36
  | Browser | Short-lived assistant session only | In memory; never a client secret, model key, connector credential, or raw application session |
@@ -48,11 +49,7 @@ Use the same server tools in the embed; do not create a second tool set. Declare
48
49
  branding: { name: "Acme", accent: "#3157D5" },
49
50
  context: { defaults: { locale: "en-GB", timeZone: "Europe/London" } },
50
51
  assistant: embeddedAssistant({
51
- model: openAICompatible({
52
- baseUrl: variable("ASSISTANT_MODEL_BASE_URL"),
53
- model: variable("ASSISTANT_MODEL"),
54
- apiKey: secret("ASSISTANT_MODEL_API_KEY"),
55
- }),
52
+ model: noodleManaged(),
56
53
  access: authenticatedWebsite({
57
54
  origins: ["http://localhost:3000", "https://app.example.com"],
58
55
  }),
@@ -60,6 +57,8 @@ assistant: embeddedAssistant({
60
57
  }),
61
58
  ```
62
59
 
60
+ `noodleManaged()` is the zero-configuration Cloud path: the public artifact contains only `{ kind: "noodle-managed" }`. It never exposes a provider or model identifier, and it fails closed unless Noodle has enrolled that exact deployment target. For a customer- or self-hosted model, replace it with `openAICompatible({ baseUrl: variable("ASSISTANT_MODEL_BASE_URL"), model: variable("ASSISTANT_MODEL"), apiKey: secret("ASSISTANT_MODEL_API_KEY") })`; that remains the portable BYO path.
61
+
63
62
  Origins are exact: scheme, host, and optional port, with no path, trailing slash, or wildcard. Production origins must be HTTPS; plain HTTP is accepted only for loopback development origins (`http://localhost:<port>`, `http://127.0.0.1:<port>`). `noodle dev` serves the MCP project, not the embedding SaaS. For a public surface it also prints a process-local Embed ID and script; mount that script on the separately running loopback website to test anonymous mint, chat, widgets, and confirmation. The local ID is ephemeral, while a hosted deploy provisions the stable ID behind durable admission counters.
64
63
 
65
64
  ## Product workflow guidance
@@ -166,7 +165,7 @@ Local MCP authoring and tests need no account, but an external browser embed nee
166
165
  noodle deploy --org <org> --app <app> --env <env>
167
166
  ```
168
167
 
169
- Deploy preflights the complete target before upload. In an interactive terminal it collects all missing model variables and secrets, then continues. In a non-interactive run it reports every missing name and safe `noodle variables set ... --from-env` / `noodle secrets set ... --from-env` action; perform every action and repeat the same deploy command. Values never appear in the preflight report or resume state. Do not put these model values in the embedding SaaS environment. A production deployment may omit a local origin; include a loopback origin only when local browser integration is required.
168
+ Deploy preflights the complete target before upload. `noodleManaged()` has no customer model variables or secrets; enrollment is hosted operator state and an unenrolled target fails closed at serving time. `openAICompatible()` preflight collects or reports every missing model variable and secret with safe `noodle variables set ... --from-env` / `noodle secrets set ... --from-env` actions. Values never appear in the preflight report or resume state. Do not put BYO model values in the embedding SaaS environment. A production deployment may omit a local origin; include a loopback origin only when local browser integration is required.
170
169
 
171
170
  ## Access modes and customer auth
172
171
 
@@ -65,6 +65,7 @@ Platform helper connectors are explicit subpath imports from `@noodleseed/one/pl
65
65
  - `knowledge`
66
66
  - `managedSecret`
67
67
  - `meilisearch`
68
+ - `noodleManaged`
68
69
  - `openAICompatible`
69
70
  - `publicWebsite`
70
71
  - `site`
@@ -73,7 +74,7 @@ Platform helper connectors are explicit subpath imports from `@noodleseed/one/pl
73
74
  ## Authoring signatures
74
75
 
75
76
  - `server(name, options, definitions)` — `options` commonly includes `title`, `version`, `instructions`, `agentGuide`, `distribution`, `branding`, `auth`, `use`, `provides`, `state`, and `handoff`; `definitions` is the array of tools/resources/prompts.
76
- - `tool(name, { description, input, output, annotations?, visibility?, view?, fulfil })` — `input`/`output` are Zod schemas; `fulfil({ input, connectors, user })` returns data matching `output`. Add `view: { component, entry }` for a React widget; use `visibility: ["app"]` for an app-only helper.
77
+ - `tool(name, { description, input, output, annotations?, visibility?, modelVisibility?, view?, fulfil })` — `input`/`output` are Zod schemas; `fulfil({ input, connectors, user })` returns data matching `output`. Add `view: { component, entry }` for a React widget; use `visibility: ["app"]` for an app-only helper. Use `modelVisibility.latestMessageIncludesAny` only for normalized literal explicit-intent discovery; it does not authorize execution.
77
78
  - Keep tool input names application-owned and meaningful; `__noodleIntent` is reserved for an optional serve-time operator analytics adapter and never reaches `fulfil`.
78
79
  - `resource(name, { uri, description?, mimeType?, fulfil })` and `prompt(name, { description?, arguments?, fulfil })` expose MCP resources/prompts.
79
80
  - View metadata (`viewTitle`, `viewDescription`, `csp`, `domain`, `permissions`) belongs on the tool that renders it; `asset("./path")` packages local files.
@@ -145,7 +146,7 @@ prompt('summarize_ticket', {
145
146
 
146
147
  ### Non-trivial tool: ctx connectors, annotations, visibility, async
147
148
 
148
- `ctx` is `{ input, user, connectors }`. Bind connectors with `use` on the server, then call one inside `fulfil` to record a step. `annotations.readOnly()` declares a closed-world safe read. TypeScript action helpers enforce confirmation only with `{ confirm: true }`; omitted or `false` executes directly, and action/destructive/open-world hints alone never enable the gate. For stateless hosts that cannot present Noodle confirmation, set `interactions: { confirmationFallback: 'host' }` in the `server` options to explicitly trust native host write approval; omission remains fail-closed and the fallback never supplies missing `ctx.elicit` input. `visibility` defaults to `['model', 'app']` — set `['app']` to hide a helper from the model. `fulfil` may be `async` (the compiler awaits it while recording).
149
+ `ctx` is `{ input, user, connectors }`. Bind connectors with `use` on the server, then call one inside `fulfil` to record a step. `annotations.readOnly()` declares a closed-world safe read. TypeScript action helpers enforce confirmation only with `{ confirm: true }`; omitted or `false` executes directly, and action/destructive/open-world hints alone never enable the gate. For stateless hosts that cannot present Noodle confirmation, set `interactions: { confirmationFallback: 'host' }` in the `server` options to explicitly trust native host write approval; omission remains fail-closed and the fallback never supplies missing `ctx.elicit` input. `visibility` defaults to `['model', 'app']` — set `['app']` to hide a helper from the model. For a narrow explicit-intent tool, `modelVisibility: { latestMessageIncludesAny: [...] }` deterministically limits model discovery to a latest user message containing one of the normalized literal phrases; it is not authorization. `fulfil` may be `async` (the compiler awaits it while recording).
149
150
 
150
151
  ```ts
151
152
  import { annotations, connector, server, tool, z } from '@noodleseed/one';
@@ -176,6 +177,7 @@ export default server('support', { title: 'Support', version: '1.0.0', use: { cr
176
177
  output: z.object({ subject: z.string(), status: z.string() }),
177
178
  annotations: annotations.readOnly(), // read-only hint for hosts
178
179
  visibility: ['model', 'app'], // default; use ['app'] to hide the tool from the model
180
+ modelVisibility: { latestMessageIncludesAny: ['show ticket', 'open ticket'] },
179
181
  // ctx is { input, user, connectors }. A connector call records one flow step (a Ref) —
180
182
  // recording is not execution, so never branch on the result with native if (use when).
181
183
  fulfil: ({ input, connectors }) => {
@@ -12,7 +12,7 @@
12
12
 
13
13
  ## Tools and views
14
14
 
15
- Use `tool(name, { description, input, output, fulfil, view })` for a model-visible tool that renders a widget, and the same `tool(name, { ..., visibility: ["app"] })` for an app-only helper hidden from the model. A `view` is `{ component: "name", entry: "./views/name.tsx" }` — a React component the compiler bundles at validate/deploy time.
15
+ Use `tool(name, { description, input, output, fulfil, view })` for a model-visible tool that renders a widget, and the same `tool(name, { ..., visibility: ["app"] })` for an app-only helper hidden from the model. When a view is valid only for narrow explicit intent, add `modelVisibility: { latestMessageIncludesAny: ["open the form", ...] }`; Noodle normalizes and matches those literal phrases against the latest user message before model discovery and fails closed on malformed data. This is relevance filtering, never authorization. A `view` is `{ component: "name", entry: "./views/name.tsx" }` — a React component the compiler bundles at validate/deploy time.
16
16
 
17
17
  ## Noodle Design default
18
18
 
@@ -3,7 +3,7 @@ name: reporting-noodle-feedback
3
3
  description: "Use when a Noodle Seed bug, misleading instruction, missing capability, or concrete product improvement should be proposed to the user."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.82.0 hash:0f404109f4845683 -->
6
+ <!-- noodle-skill version:0.84.0 hash:0f404109f4845683 -->
7
7
 
8
8
  # reporting-noodle-feedback
9
9
 
@@ -3,7 +3,7 @@ name: verifying-mcp-delivery
3
3
  description: "Use when proving a Noodle Seed MCP project works at a named compile, local, connector, App, host, deployment, or production evidence level."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.82.0 hash:6ef6ef551e26b78e -->
6
+ <!-- noodle-skill version:0.84.0 hash:6ef6ef551e26b78e -->
7
7
 
8
8
  # verifying-mcp-delivery
9
9
 
@@ -3,7 +3,7 @@ name: wrapping-existing-applications
3
3
  description: "Use when an existing application has no stable usable API and needs a read-only, identity-first Noodle Seed integration plan before implementation."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.82.0 hash:eccc3c158dcafba8 -->
6
+ <!-- noodle-skill version:0.84.0 hash:eccc3c158dcafba8 -->
7
7
 
8
8
  # wrapping-existing-applications
9
9