@noodleseed/agent-kit 0.78.0 → 0.79.1

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 (44) hide show
  1. package/manifest.json +271 -271
  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/customer-auth/README.md +17 -0
  13. package/skills/claude-code/examples/customer-auth/src/server.ts +55 -0
  14. package/skills/claude-code/examples/customer-auth/test/server.test.ts +17 -0
  15. package/skills/claude-code/examples/hello/src/server.ts +2 -0
  16. package/skills/claude-code/executing-noodle-plans/SKILL.md +1 -1
  17. package/skills/claude-code/publishing-mcp-integrations/SKILL.md +1 -1
  18. package/skills/claude-code/references/authoring-workflow.md +1 -1
  19. package/skills/claude-code/references/embedded-assistant.md +9 -0
  20. package/skills/claude-code/references/product-agent-guides.md +6 -2
  21. package/skills/claude-code/reporting-noodle-feedback/SKILL.md +1 -1
  22. package/skills/claude-code/verifying-mcp-delivery/SKILL.md +1 -1
  23. package/skills/claude-code/wrapping-existing-applications/SKILL.md +1 -1
  24. package/skills/codex/SKILL.md +1 -1
  25. package/skills/codex/authoring-mcp-servers/SKILL.md +1 -1
  26. package/skills/codex/building-mcp-apps/SKILL.md +1 -1
  27. package/skills/codex/connecting-apis-to-mcp/SKILL.md +1 -1
  28. package/skills/codex/creating-product-agent-guides/SKILL.md +1 -1
  29. package/skills/codex/debugging-mcp-delivery/SKILL.md +1 -1
  30. package/skills/codex/deploying-mcp-services/SKILL.md +1 -1
  31. package/skills/codex/designing-mcp-products/SKILL.md +1 -1
  32. package/skills/codex/embedding-mcp-assistants/SKILL.md +1 -1
  33. package/skills/codex/examples/customer-auth/README.md +17 -0
  34. package/skills/codex/examples/customer-auth/src/server.ts +55 -0
  35. package/skills/codex/examples/customer-auth/test/server.test.ts +17 -0
  36. package/skills/codex/examples/hello/src/server.ts +2 -0
  37. package/skills/codex/executing-noodle-plans/SKILL.md +1 -1
  38. package/skills/codex/publishing-mcp-integrations/SKILL.md +1 -1
  39. package/skills/codex/references/authoring-workflow.md +1 -1
  40. package/skills/codex/references/embedded-assistant.md +9 -0
  41. package/skills/codex/references/product-agent-guides.md +6 -2
  42. package/skills/codex/reporting-noodle-feedback/SKILL.md +1 -1
  43. package/skills/codex/verifying-mcp-delivery/SKILL.md +1 -1
  44. package/skills/codex/wrapping-existing-applications/SKILL.md +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@noodleseed/agent-kit",
3
- "version": "0.78.0",
3
+ "version": "0.79.1",
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",
@@ -3,7 +3,7 @@ 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
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.78.0 hash:13ddce01769caae4 -->
6
+ <!-- noodle-skill version:0.79.1 hash:13ddce01769caae4 -->
7
7
 
8
8
  # Noodle Seed
9
9
 
@@ -3,7 +3,7 @@ name: authoring-mcp-servers
3
3
  description: "Use when creating or extending a headless Noodle Seed MCP server, tool, resource, prompt, or typed model-facing capability."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.78.0 hash:11523cb33b9473c0 -->
6
+ <!-- noodle-skill version:0.79.1 hash:11523cb33b9473c0 -->
7
7
 
8
8
  # authoring-mcp-servers
9
9
 
@@ -3,7 +3,7 @@ name: building-mcp-apps
3
3
  description: "Use when a Noodle Seed MCP App, widget, interactive card, visual interaction, or host-visible UI is the primary requested outcome."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.78.0 hash:9fd67d4d24328e15 -->
6
+ <!-- noodle-skill version:0.79.1 hash:9fd67d4d24328e15 -->
7
7
 
8
8
  # building-mcp-apps
9
9
 
@@ -3,7 +3,7 @@ name: connecting-apis-to-mcp
3
3
  description: "Use when all four API-evidence inputs exist—and only then: API base URL, authentication scheme, representative safe read, and observed response."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.78.0 hash:21bbd3ec441ffd30 -->
6
+ <!-- noodle-skill version:0.79.1 hash:21bbd3ec441ffd30 -->
7
7
 
8
8
  # connecting-apis-to-mcp
9
9
 
@@ -3,7 +3,7 @@ name: creating-product-agent-guides
3
3
  description: "Use when a Noodle Seed MCP server needs a new or revised product agent guide, App Package skill, or explicit product-skill regeneration."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.78.0 hash:0fa48a82fe836cf0 -->
6
+ <!-- noodle-skill version:0.79.1 hash:0fa48a82fe836cf0 -->
7
7
 
8
8
  # creating-product-agent-guides
9
9
 
@@ -3,7 +3,7 @@ name: debugging-mcp-delivery
3
3
  description: "Use when an existing Noodle Seed MCP project has a concrete validation, runtime, connector, App, host, deployment, or production failure."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.78.0 hash:aa715bae12041d7c -->
6
+ <!-- noodle-skill version:0.79.1 hash:aa715bae12041d7c -->
7
7
 
8
8
  # debugging-mcp-delivery
9
9
 
@@ -3,7 +3,7 @@ name: deploying-mcp-services
3
3
  description: "Use when the user explicitly requests a Noodle Seed hosted link, configuration write, deployment, access change, rollback, or connection write."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.78.0 hash:93e735b7ffb45df1 -->
6
+ <!-- noodle-skill version:0.79.1 hash:93e735b7ffb45df1 -->
7
7
 
8
8
  # deploying-mcp-services
9
9
 
@@ -3,7 +3,7 @@ name: designing-mcp-products
3
3
  description: "Use when a Noodle Seed MCP product idea needs conversational fit, user benefit, scope, interaction, or evidence design before implementation."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.78.0 hash:78a6f181b61f92f1 -->
6
+ <!-- noodle-skill version:0.79.1 hash:78a6f181b61f92f1 -->
7
7
 
8
8
  # designing-mcp-products
9
9
 
@@ -3,7 +3,7 @@ name: embedding-mcp-assistants
3
3
  description: "Use when embedding a Noodle assistant into an existing SaaS or web application with browser, identity, session, and credential boundaries."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.78.0 hash:cc54a67f21c0ecdb -->
6
+ <!-- noodle-skill version:0.79.1 hash:cc54a67f21c0ecdb -->
7
7
 
8
8
  # embedding-mcp-assistants
9
9
 
@@ -23,6 +23,23 @@ The tools chain: `list_my_organizations` surfaces the `org_id`s the customer can
23
23
  `list_org_apps` takes one of those ids, and `archive_org_app` accepts the selected app id. Tool code remains
24
24
  independent of the selected origin.
25
25
 
26
+ The server also declares one typed `agentGuide` for those product workflows. The deployed embedded assistant
27
+ uses it automatically: each turn keeps only complete workflows supported by the verified session's roles,
28
+ scopes, and model-visible tools. An organization member can receive organization/app review guidance, while
29
+ only an administrator with `org_apps:write` receives the complete archive workflow and its confirmation
30
+ boundary. The guide stays server-side, so the Web Component, React renderer, headless hook, and public client
31
+ need no new option and receive no raw skill content. See
32
+ [using a product guide at runtime](https://docs.noodleseed.dev/docs/guides/product-agent-guides#use-the-guide-at-runtime)
33
+ for the public behavior guide.
34
+
35
+ A skill-aware external agent connected directly to the same tenant MCP URL receives the same
36
+ complete-workflow filtering through the modern draft MCP Skills extension. Members and administrators may
37
+ therefore receive different `SKILL.md` and MCP-surface bytes, each with matching caller-specific digests.
38
+ This reuses the configured customer OAuth boundary; it does not require a second skill installation or auth
39
+ system, and it is not a claim that every external host currently implements the draft extension. The
40
+ same [runtime guide](https://docs.noodleseed.dev/docs/guides/product-agent-guides#use-the-guide-at-runtime)
41
+ explains this preview boundary.
42
+
26
43
  ## Declare the customer endpoint
27
44
 
28
45
  `customerEndpoint` names one private routing authority and bounds the origins an IdP may select:
@@ -70,6 +70,60 @@ const noodleseedApi = connector('noodleseed_app_api')
70
70
  },
71
71
  });
72
72
 
73
+ const CUSTOMER_AUTH_AGENT_GUIDE = {
74
+ description:
75
+ 'Use the signed-in customer context to discover organizations, review their Noodle Seed apps, and archive a selected app when authorized.',
76
+ useWhen: [
77
+ 'A signed-in customer asks which organizations or apps they can access.',
78
+ 'An organization administrator asks to archive one selected app.',
79
+ ],
80
+ workflows: [
81
+ {
82
+ id: 'find_organizations',
83
+ title: 'Find the customer organizations',
84
+ intent: 'Ground later organization-scoped work in the verified customer membership.',
85
+ steps: [
86
+ {
87
+ capability: { kind: 'tool', name: 'list_my_organizations' },
88
+ guidance: 'Use an organization identifier returned by this read in later steps.',
89
+ },
90
+ ],
91
+ },
92
+ {
93
+ id: 'review_organization_apps',
94
+ title: 'Review apps in one organization',
95
+ steps: [
96
+ { capability: { kind: 'tool', name: 'list_my_organizations' } },
97
+ {
98
+ capability: { kind: 'tool', name: 'list_org_apps' },
99
+ guidance: 'List apps only for an organization returned for the signed-in customer.',
100
+ },
101
+ ],
102
+ },
103
+ {
104
+ id: 'archive_organization_app',
105
+ title: 'Archive one organization app',
106
+ steps: [
107
+ { capability: { kind: 'tool', name: 'list_my_organizations' } },
108
+ { capability: { kind: 'tool', name: 'list_org_apps' } },
109
+ {
110
+ capability: { kind: 'tool', name: 'archive_org_app' },
111
+ guidance: 'Archive only the exact app the customer selected after confirmation.',
112
+ },
113
+ ],
114
+ },
115
+ ],
116
+ boundaries: [
117
+ 'Never infer an organization or app identifier that was not returned for the signed-in customer.',
118
+ 'Never claim an app was archived until the confirmed action succeeds.',
119
+ ],
120
+ examples: [
121
+ { prompt: 'Which organizations can I access?', workflow: 'find_organizations' },
122
+ { prompt: 'Show me the apps in this organization.', workflow: 'review_organization_apps' },
123
+ { prompt: 'Archive the app I selected.', workflow: 'archive_organization_app' },
124
+ ],
125
+ } as const;
126
+
73
127
  export default server(
74
128
  'noodleseed_customer_auth',
75
129
  {
@@ -87,6 +141,7 @@ export default server(
87
141
  },
88
142
  },
89
143
  use: { app_api: noodleseedApi },
144
+ agentGuide: CUSTOMER_AUTH_AGENT_GUIDE,
90
145
  interactions: { confirmationFallback: 'host' },
91
146
  auth: customerAuth.oidc({
92
147
  issuer: 'https://id.noodleseed.dev',
@@ -42,6 +42,23 @@ describe('customer-auth example', () => {
42
42
  },
43
43
  });
44
44
  expect(manifest.server.interactions).toEqual({ confirmationFallback: 'host' });
45
+ expect(manifest.server.agentGuide?.workflows.map((workflow) => workflow.id)).toEqual([
46
+ 'find_organizations',
47
+ 'review_organization_apps',
48
+ 'archive_organization_app',
49
+ ]);
50
+ expect(
51
+ manifest.server.agentGuide?.workflows.find(
52
+ (workflow) => workflow.id === 'archive_organization_app',
53
+ )?.steps,
54
+ ).toEqual([
55
+ { capability: { kind: 'tool', name: 'list_my_organizations' } },
56
+ { capability: { kind: 'tool', name: 'list_org_apps' } },
57
+ {
58
+ capability: { kind: 'tool', name: 'archive_org_app' },
59
+ guidance: 'Archive only the exact app the customer selected after confirmation.',
60
+ },
61
+ ]);
45
62
  const catalog = app.toConnectorCatalog();
46
63
  expect(catalog?.connectors).toHaveLength(1);
47
64
  expect(catalog?.connectors[0]?.http).toMatchObject({
@@ -1,5 +1,7 @@
1
1
  import { annotations, server, tool, z } from '@noodleseed/one';
2
2
 
3
+ // Customer apps stay on the public SDK; @noodle-borg/* packages are runtime implementation details.
4
+
3
5
  export default server(
4
6
  'hello',
5
7
  {
@@ -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.78.0 hash:6a9f132ddb79352e -->
6
+ <!-- noodle-skill version:0.79.1 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.78.0 hash:efffbf82007f935d -->
6
+ <!-- noodle-skill version:0.79.1 hash:efffbf82007f935d -->
7
7
 
8
8
  # publishing-mcp-integrations
9
9
 
@@ -431,4 +431,4 @@ The managed crawler and managed index are the defaults and need no configuration
431
431
 
432
432
  ## Boundaries
433
433
 
434
- Do not hand-author manifest JSON/YAML, runtime artifacts, connector IR, or hosted asset metadata. Do not read or copy secrets, bearer tokens, refresh tokens, static access keys, `.env`, `.env.noodle`, or `~/.noodle/config.json`. Hosted access is identity-based — do not add static data-plane credential paths.
434
+ Import public app authoring only from `@noodleseed/one` (and its documented `/react` or `/platform` subpaths). Packages and subpaths under `@noodle-borg/*` are runtime implementation details, including `/portable` boundaries, and must never appear in customer `server.ts` code. Do not hand-author manifest JSON/YAML, runtime artifacts, connector IR, or hosted asset metadata. Do not read or copy secrets, bearer tokens, refresh tokens, static access keys, `.env`, `.env.noodle`, or `~/.noodle/config.json`. Hosted access is identity-based — do not add static data-plane credential paths.
@@ -5,6 +5,7 @@
5
5
  - Architecture
6
6
  - Choose the host experience
7
7
  - Author and validate
8
+ - Product workflow guidance
8
9
  - Customize the presentation
9
10
  - Configure and deploy
10
11
  - Access modes and customer auth
@@ -61,6 +62,14 @@ assistant: embeddedAssistant({
61
62
 
62
63
  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.
63
64
 
65
+ ## Product workflow guidance
66
+
67
+ Decide whether the product needs `agentGuide` even when the builder does not name it. Multiple permission-gated capabilities, ordered multi-tool work, product-specific grounding, and consequential boundaries are strong signals. Keep `server.instructions` concise and global; put workflow triggers, ordering, and permission-specific prose in the guide. Global guide description, use cases, and boundaries must be safe for every exposed assistant surface.
68
+
69
+ After deployment, the embedded assistant automatically projects the typed guide into compact server-side model context on every turn. It keeps only complete workflows supported by that session surface and by the exact model-visible tools allowed for the backend-verified roles and scopes. A member and an administrator can therefore receive different workflow guidance from the same deployment. Mixed anonymous sessions retain only the explicitly selected surface and sign-in workflows; the next turn is reprojected after successful elevation.
70
+
71
+ No renderer prop, browser package field, or second skill installation is required. The managed Web Component, React component, headless hook, and public client all share the same server-side turn path. Raw guide content and generated skill files never enter session responses or browser events. Missing, incompatible, empty, or oversize guidance is omitted without changing the tool surface or breaking an otherwise valid turn.
72
+
64
73
  ### Surfaces: one assistant, every front door
65
74
 
66
75
  A product usually has more than one front door — a marketing site and a signed-in app. One assistant (one brand, one model, one UI) projects onto both; pass `access` an array and each surface owns its own origins and allowlist:
@@ -20,7 +20,7 @@ Make the judgment from the user’s stated outcome and grounded product evidence
20
20
 
21
21
  Noodle workflow skills teach a coding agent how to build and operate Noodle projects. The generated app product skill is team-local guidance for using one product. A marketplace plugin is a separate host distribution bundle.
22
22
 
23
- A host-neutral distribution metadata and archive framework now exists, but per-app marketplace plugin generation is not available until a target adapter lands, and customer-agent distribution is not available. If the user asks for either, explain the boundary and stop at the proven local App Package, product-skill, and metadata work. Do not claim a target bundle, submission, hosted distribution, or customer-agent projection.
23
+ Host-neutral distribution metadata, available target adapters, local exports, and deployment-bound archives are separate projections from the guide; use the live command catalog for exact target availability, and never claim that an export submitted or published itself. The deployed embedded assistant automatically consumes a compact authorization-aware guide projection. A direct external agent connected to the tenant MCP URL can discover the deployment skill through the modern draft MCP Skills extension when its host supports that extension; this is protocol delivery, not evidence of host support or marketplace installation.
24
24
 
25
25
  ## Creation workflow
26
26
 
@@ -38,7 +38,11 @@ The guide contains `description`, `useWhen`, named `workflows`, optional `bounda
38
38
 
39
39
  Keep identifiers within 200 characters and prose within 4,000 characters. A guide has at most 32 `useWhen` entries, 32 workflows, 64 steps per workflow, 64 boundaries, and 64 examples. The compiler rejects an App Package whose bounded derived MCP surface would still exceed its artifact ceiling.
40
40
 
41
- Use `server.instructions` for a concise live MCP-session primer. Noodle-owned workflow skills teach how to build and operate Noodle projects; a product guide teaches agents how to use this one deployed product. Compilation validates references and produces an App Package sibling while the RuntimeArtifact deliberately omits guide prose.
41
+ Use `server.instructions` for concise global behavior that applies to every turn and caller. Put product workflow ordering, triggers, and workflow-specific permission guidance in `agentGuide`; global description, `useWhen`, and boundaries must be safe for every assistant surface. Noodle-owned workflow skills teach how to build and operate Noodle projects; a product guide teaches agents how to use this one deployed product. Compilation validates references and produces an App Package sibling while the RuntimeArtifact deliberately omits guide prose.
42
+
43
+ For a deployed embedded assistant, Noodle automatically derives bounded server-side model guidance from that App Package. Each turn retains only complete workflows supported by the session surface and the exact model-visible tools allowed for the verified roles and scopes. All managed, React, headless, and public-client renderers benefit without a new browser option; raw guide and skill files never enter the browser response. An unavailable or oversize projection is omitted without widening tools or failing the turn.
44
+
45
+ For a direct modern MCP connection, use the deployment tenant MCP URL and its existing OAuth flow; do not install a second skill or create another auth integration. `skills/list`, `skills/get`, and the related `resources/read` files are rebuilt from the same deployment package for the verified caller. Only complete workflows backed by currently authorized, model-visible tools and available resources or prompts survive; app-only helpers and forbidden tools stay out of both the workflow body and MCP-surface reference. The response is private with zero freshness, and each file has a caller-specific SHA-256 digest. A role or scope change can therefore change the next response and its digest, allowing a supporting host to require fresh approval. Legacy MCP clients and modern hosts without Skills support continue to use the ordinary capability surface.
42
46
 
43
47
  ## Local lifecycle
44
48
 
@@ -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.78.0 hash:0f404109f4845683 -->
6
+ <!-- noodle-skill version:0.79.1 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.78.0 hash:6ef6ef551e26b78e -->
6
+ <!-- noodle-skill version:0.79.1 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.78.0 hash:eccc3c158dcafba8 -->
6
+ <!-- noodle-skill version:0.79.1 hash:eccc3c158dcafba8 -->
7
7
 
8
8
  # wrapping-existing-applications
9
9
 
@@ -3,7 +3,7 @@ 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
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.78.0 hash:13ddce01769caae4 -->
6
+ <!-- noodle-skill version:0.79.1 hash:13ddce01769caae4 -->
7
7
 
8
8
  # Noodle Seed
9
9
 
@@ -3,7 +3,7 @@ name: authoring-mcp-servers
3
3
  description: "Use when creating or extending a headless Noodle Seed MCP server, tool, resource, prompt, or typed model-facing capability."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.78.0 hash:11523cb33b9473c0 -->
6
+ <!-- noodle-skill version:0.79.1 hash:11523cb33b9473c0 -->
7
7
 
8
8
  # authoring-mcp-servers
9
9
 
@@ -3,7 +3,7 @@ name: building-mcp-apps
3
3
  description: "Use when a Noodle Seed MCP App, widget, interactive card, visual interaction, or host-visible UI is the primary requested outcome."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.78.0 hash:9fd67d4d24328e15 -->
6
+ <!-- noodle-skill version:0.79.1 hash:9fd67d4d24328e15 -->
7
7
 
8
8
  # building-mcp-apps
9
9
 
@@ -3,7 +3,7 @@ name: connecting-apis-to-mcp
3
3
  description: "Use when all four API-evidence inputs exist—and only then: API base URL, authentication scheme, representative safe read, and observed response."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.78.0 hash:21bbd3ec441ffd30 -->
6
+ <!-- noodle-skill version:0.79.1 hash:21bbd3ec441ffd30 -->
7
7
 
8
8
  # connecting-apis-to-mcp
9
9
 
@@ -3,7 +3,7 @@ name: creating-product-agent-guides
3
3
  description: "Use when a Noodle Seed MCP server needs a new or revised product agent guide, App Package skill, or explicit product-skill regeneration."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.78.0 hash:0fa48a82fe836cf0 -->
6
+ <!-- noodle-skill version:0.79.1 hash:0fa48a82fe836cf0 -->
7
7
 
8
8
  # creating-product-agent-guides
9
9
 
@@ -3,7 +3,7 @@ name: debugging-mcp-delivery
3
3
  description: "Use when an existing Noodle Seed MCP project has a concrete validation, runtime, connector, App, host, deployment, or production failure."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.78.0 hash:aa715bae12041d7c -->
6
+ <!-- noodle-skill version:0.79.1 hash:aa715bae12041d7c -->
7
7
 
8
8
  # debugging-mcp-delivery
9
9
 
@@ -3,7 +3,7 @@ name: deploying-mcp-services
3
3
  description: "Use when the user explicitly requests a Noodle Seed hosted link, configuration write, deployment, access change, rollback, or connection write."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.78.0 hash:93e735b7ffb45df1 -->
6
+ <!-- noodle-skill version:0.79.1 hash:93e735b7ffb45df1 -->
7
7
 
8
8
  # deploying-mcp-services
9
9
 
@@ -3,7 +3,7 @@ name: designing-mcp-products
3
3
  description: "Use when a Noodle Seed MCP product idea needs conversational fit, user benefit, scope, interaction, or evidence design before implementation."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.78.0 hash:78a6f181b61f92f1 -->
6
+ <!-- noodle-skill version:0.79.1 hash:78a6f181b61f92f1 -->
7
7
 
8
8
  # designing-mcp-products
9
9
 
@@ -3,7 +3,7 @@ name: embedding-mcp-assistants
3
3
  description: "Use when embedding a Noodle assistant into an existing SaaS or web application with browser, identity, session, and credential boundaries."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.78.0 hash:cc54a67f21c0ecdb -->
6
+ <!-- noodle-skill version:0.79.1 hash:cc54a67f21c0ecdb -->
7
7
 
8
8
  # embedding-mcp-assistants
9
9
 
@@ -23,6 +23,23 @@ The tools chain: `list_my_organizations` surfaces the `org_id`s the customer can
23
23
  `list_org_apps` takes one of those ids, and `archive_org_app` accepts the selected app id. Tool code remains
24
24
  independent of the selected origin.
25
25
 
26
+ The server also declares one typed `agentGuide` for those product workflows. The deployed embedded assistant
27
+ uses it automatically: each turn keeps only complete workflows supported by the verified session's roles,
28
+ scopes, and model-visible tools. An organization member can receive organization/app review guidance, while
29
+ only an administrator with `org_apps:write` receives the complete archive workflow and its confirmation
30
+ boundary. The guide stays server-side, so the Web Component, React renderer, headless hook, and public client
31
+ need no new option and receive no raw skill content. See
32
+ [using a product guide at runtime](https://docs.noodleseed.dev/docs/guides/product-agent-guides#use-the-guide-at-runtime)
33
+ for the public behavior guide.
34
+
35
+ A skill-aware external agent connected directly to the same tenant MCP URL receives the same
36
+ complete-workflow filtering through the modern draft MCP Skills extension. Members and administrators may
37
+ therefore receive different `SKILL.md` and MCP-surface bytes, each with matching caller-specific digests.
38
+ This reuses the configured customer OAuth boundary; it does not require a second skill installation or auth
39
+ system, and it is not a claim that every external host currently implements the draft extension. The
40
+ same [runtime guide](https://docs.noodleseed.dev/docs/guides/product-agent-guides#use-the-guide-at-runtime)
41
+ explains this preview boundary.
42
+
26
43
  ## Declare the customer endpoint
27
44
 
28
45
  `customerEndpoint` names one private routing authority and bounds the origins an IdP may select:
@@ -70,6 +70,60 @@ const noodleseedApi = connector('noodleseed_app_api')
70
70
  },
71
71
  });
72
72
 
73
+ const CUSTOMER_AUTH_AGENT_GUIDE = {
74
+ description:
75
+ 'Use the signed-in customer context to discover organizations, review their Noodle Seed apps, and archive a selected app when authorized.',
76
+ useWhen: [
77
+ 'A signed-in customer asks which organizations or apps they can access.',
78
+ 'An organization administrator asks to archive one selected app.',
79
+ ],
80
+ workflows: [
81
+ {
82
+ id: 'find_organizations',
83
+ title: 'Find the customer organizations',
84
+ intent: 'Ground later organization-scoped work in the verified customer membership.',
85
+ steps: [
86
+ {
87
+ capability: { kind: 'tool', name: 'list_my_organizations' },
88
+ guidance: 'Use an organization identifier returned by this read in later steps.',
89
+ },
90
+ ],
91
+ },
92
+ {
93
+ id: 'review_organization_apps',
94
+ title: 'Review apps in one organization',
95
+ steps: [
96
+ { capability: { kind: 'tool', name: 'list_my_organizations' } },
97
+ {
98
+ capability: { kind: 'tool', name: 'list_org_apps' },
99
+ guidance: 'List apps only for an organization returned for the signed-in customer.',
100
+ },
101
+ ],
102
+ },
103
+ {
104
+ id: 'archive_organization_app',
105
+ title: 'Archive one organization app',
106
+ steps: [
107
+ { capability: { kind: 'tool', name: 'list_my_organizations' } },
108
+ { capability: { kind: 'tool', name: 'list_org_apps' } },
109
+ {
110
+ capability: { kind: 'tool', name: 'archive_org_app' },
111
+ guidance: 'Archive only the exact app the customer selected after confirmation.',
112
+ },
113
+ ],
114
+ },
115
+ ],
116
+ boundaries: [
117
+ 'Never infer an organization or app identifier that was not returned for the signed-in customer.',
118
+ 'Never claim an app was archived until the confirmed action succeeds.',
119
+ ],
120
+ examples: [
121
+ { prompt: 'Which organizations can I access?', workflow: 'find_organizations' },
122
+ { prompt: 'Show me the apps in this organization.', workflow: 'review_organization_apps' },
123
+ { prompt: 'Archive the app I selected.', workflow: 'archive_organization_app' },
124
+ ],
125
+ } as const;
126
+
73
127
  export default server(
74
128
  'noodleseed_customer_auth',
75
129
  {
@@ -87,6 +141,7 @@ export default server(
87
141
  },
88
142
  },
89
143
  use: { app_api: noodleseedApi },
144
+ agentGuide: CUSTOMER_AUTH_AGENT_GUIDE,
90
145
  interactions: { confirmationFallback: 'host' },
91
146
  auth: customerAuth.oidc({
92
147
  issuer: 'https://id.noodleseed.dev',
@@ -42,6 +42,23 @@ describe('customer-auth example', () => {
42
42
  },
43
43
  });
44
44
  expect(manifest.server.interactions).toEqual({ confirmationFallback: 'host' });
45
+ expect(manifest.server.agentGuide?.workflows.map((workflow) => workflow.id)).toEqual([
46
+ 'find_organizations',
47
+ 'review_organization_apps',
48
+ 'archive_organization_app',
49
+ ]);
50
+ expect(
51
+ manifest.server.agentGuide?.workflows.find(
52
+ (workflow) => workflow.id === 'archive_organization_app',
53
+ )?.steps,
54
+ ).toEqual([
55
+ { capability: { kind: 'tool', name: 'list_my_organizations' } },
56
+ { capability: { kind: 'tool', name: 'list_org_apps' } },
57
+ {
58
+ capability: { kind: 'tool', name: 'archive_org_app' },
59
+ guidance: 'Archive only the exact app the customer selected after confirmation.',
60
+ },
61
+ ]);
45
62
  const catalog = app.toConnectorCatalog();
46
63
  expect(catalog?.connectors).toHaveLength(1);
47
64
  expect(catalog?.connectors[0]?.http).toMatchObject({
@@ -1,5 +1,7 @@
1
1
  import { annotations, server, tool, z } from '@noodleseed/one';
2
2
 
3
+ // Customer apps stay on the public SDK; @noodle-borg/* packages are runtime implementation details.
4
+
3
5
  export default server(
4
6
  'hello',
5
7
  {
@@ -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.78.0 hash:6a9f132ddb79352e -->
6
+ <!-- noodle-skill version:0.79.1 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.78.0 hash:efffbf82007f935d -->
6
+ <!-- noodle-skill version:0.79.1 hash:efffbf82007f935d -->
7
7
 
8
8
  # publishing-mcp-integrations
9
9
 
@@ -431,4 +431,4 @@ The managed crawler and managed index are the defaults and need no configuration
431
431
 
432
432
  ## Boundaries
433
433
 
434
- Do not hand-author manifest JSON/YAML, runtime artifacts, connector IR, or hosted asset metadata. Do not read or copy secrets, bearer tokens, refresh tokens, static access keys, `.env`, `.env.noodle`, or `~/.noodle/config.json`. Hosted access is identity-based — do not add static data-plane credential paths.
434
+ Import public app authoring only from `@noodleseed/one` (and its documented `/react` or `/platform` subpaths). Packages and subpaths under `@noodle-borg/*` are runtime implementation details, including `/portable` boundaries, and must never appear in customer `server.ts` code. Do not hand-author manifest JSON/YAML, runtime artifacts, connector IR, or hosted asset metadata. Do not read or copy secrets, bearer tokens, refresh tokens, static access keys, `.env`, `.env.noodle`, or `~/.noodle/config.json`. Hosted access is identity-based — do not add static data-plane credential paths.
@@ -5,6 +5,7 @@
5
5
  - Architecture
6
6
  - Choose the host experience
7
7
  - Author and validate
8
+ - Product workflow guidance
8
9
  - Customize the presentation
9
10
  - Configure and deploy
10
11
  - Access modes and customer auth
@@ -61,6 +62,14 @@ assistant: embeddedAssistant({
61
62
 
62
63
  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.
63
64
 
65
+ ## Product workflow guidance
66
+
67
+ Decide whether the product needs `agentGuide` even when the builder does not name it. Multiple permission-gated capabilities, ordered multi-tool work, product-specific grounding, and consequential boundaries are strong signals. Keep `server.instructions` concise and global; put workflow triggers, ordering, and permission-specific prose in the guide. Global guide description, use cases, and boundaries must be safe for every exposed assistant surface.
68
+
69
+ After deployment, the embedded assistant automatically projects the typed guide into compact server-side model context on every turn. It keeps only complete workflows supported by that session surface and by the exact model-visible tools allowed for the backend-verified roles and scopes. A member and an administrator can therefore receive different workflow guidance from the same deployment. Mixed anonymous sessions retain only the explicitly selected surface and sign-in workflows; the next turn is reprojected after successful elevation.
70
+
71
+ No renderer prop, browser package field, or second skill installation is required. The managed Web Component, React component, headless hook, and public client all share the same server-side turn path. Raw guide content and generated skill files never enter session responses or browser events. Missing, incompatible, empty, or oversize guidance is omitted without changing the tool surface or breaking an otherwise valid turn.
72
+
64
73
  ### Surfaces: one assistant, every front door
65
74
 
66
75
  A product usually has more than one front door — a marketing site and a signed-in app. One assistant (one brand, one model, one UI) projects onto both; pass `access` an array and each surface owns its own origins and allowlist: