@agent-native/core 0.146.8 → 0.147.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 (169) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/templates/analytics/.agents/skills/turn-into-app/SKILL.md +18 -6
  3. package/corpus/templates/analytics/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  4. package/corpus/templates/analytics/app/routes/status.$slug.tsx +4 -2
  5. package/corpus/templates/analytics/scripts/first-party-analytics-bigquery-backfill.ts +56 -6
  6. package/corpus/templates/assets/.agents/skills/turn-into-app/SKILL.md +18 -6
  7. package/corpus/templates/assets/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  8. package/corpus/templates/brain/.agents/skills/adding-a-feature/SKILL.md +9 -0
  9. package/corpus/templates/brain/.agents/skills/turn-into-app/SKILL.md +18 -6
  10. package/corpus/templates/brain/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  11. package/corpus/templates/calendar/.agents/skills/turn-into-app/SKILL.md +18 -6
  12. package/corpus/templates/calendar/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  13. package/corpus/templates/chat/.agents/skills/adding-a-feature/SKILL.md +9 -0
  14. package/corpus/templates/chat/.agents/skills/turn-into-app/SKILL.md +18 -6
  15. package/corpus/templates/chat/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  16. package/corpus/templates/clips/.agents/skills/turn-into-app/SKILL.md +18 -6
  17. package/corpus/templates/clips/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  18. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +16 -4
  19. package/corpus/templates/clips/app/routes/share.meeting.$meetingId.tsx +14 -5
  20. package/corpus/templates/clips/package.json +1 -0
  21. package/corpus/templates/clips/react-router.config.ts +7 -0
  22. package/corpus/templates/clips/server/plugins/auth.ts +6 -1
  23. package/corpus/templates/clips/shared/prerendered-public-paths.ts +21 -0
  24. package/corpus/templates/clips/shared/share-meta.ts +8 -3
  25. package/corpus/templates/content/.agents/skills/turn-into-app/SKILL.md +18 -6
  26. package/corpus/templates/content/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  27. package/corpus/templates/crm/.agents/skills/turn-into-app/SKILL.md +18 -6
  28. package/corpus/templates/crm/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  29. package/corpus/templates/design/.agents/skills/turn-into-app/SKILL.md +18 -6
  30. package/corpus/templates/design/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  31. package/corpus/templates/dispatch/.agents/skills/turn-into-app/SKILL.md +18 -6
  32. package/corpus/templates/dispatch/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  33. package/corpus/templates/dispatch/app/chat-first-pages.ts +747 -0
  34. package/corpus/templates/dispatch/app/i18n-data.ts +181 -0
  35. package/corpus/templates/dispatch/app/routes/settings.tsx +62 -1
  36. package/corpus/templates/dispatch/changelog/2026-08-08-chat-first-navigation-keeps-conversations-central-while-open.md +6 -0
  37. package/corpus/templates/factory/.agents/skills/adding-a-feature/SKILL.md +9 -0
  38. package/corpus/templates/factory/.agents/skills/turn-into-app/SKILL.md +18 -6
  39. package/corpus/templates/factory/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  40. package/corpus/templates/factory/app/routes/factory.tsx +108 -76
  41. package/corpus/templates/factory/changelog/2026-08-08-scheduler-health-moves-to-settings.md +6 -0
  42. package/corpus/templates/forms/.agents/skills/turn-into-app/SKILL.md +18 -6
  43. package/corpus/templates/forms/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  44. package/corpus/templates/macros/.agents/skills/turn-into-app/SKILL.md +18 -6
  45. package/corpus/templates/macros/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  46. package/corpus/templates/mail/.agents/skills/turn-into-app/SKILL.md +18 -6
  47. package/corpus/templates/mail/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  48. package/corpus/templates/plan/.agents/skills/adding-a-feature/SKILL.md +9 -0
  49. package/corpus/templates/plan/.agents/skills/turn-into-app/SKILL.md +18 -6
  50. package/corpus/templates/plan/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  51. package/corpus/templates/plan/app/lib/plan-document-title.ts +3 -1
  52. package/corpus/templates/plan/app/root.tsx +1 -0
  53. package/corpus/templates/slides/.agents/skills/turn-into-app/SKILL.md +18 -6
  54. package/corpus/templates/slides/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  55. package/corpus/templates/tasks/.agents/skills/adding-a-feature/SKILL.md +9 -0
  56. package/corpus/templates/tasks/.agents/skills/turn-into-app/SKILL.md +18 -6
  57. package/corpus/templates/tasks/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  58. package/dist/agent/engine/builder-engine.d.ts +11 -1
  59. package/dist/agent/engine/builder-engine.js +11 -4
  60. package/dist/chat-threads/store.d.ts +2 -0
  61. package/dist/chat-threads/store.js +1 -1
  62. package/dist/cli/agent-plugin.d.ts +5 -2
  63. package/dist/cli/agent-plugin.js +17 -9
  64. package/dist/cli/code-agent-executor.js +25 -5
  65. package/dist/cli/code-agent-mcp-config.d.ts +21 -0
  66. package/dist/cli/code-agent-mcp-config.js +103 -0
  67. package/dist/client/NewWorkspaceAppFlow.js +4 -1
  68. package/dist/client/agent-chat/index.d.ts +4 -1
  69. package/dist/client/agent-chat/index.js +4 -1
  70. package/dist/client/agent-page/AgentTabsPage.d.ts +1 -0
  71. package/dist/client/agent-page/AgentTabsPage.js +4 -3
  72. package/dist/client/app-providers.d.ts +3 -1
  73. package/dist/client/app-providers.js +50 -5
  74. package/dist/client/chat/runtime.js +63 -0
  75. package/dist/client/chat-first/agents-pane.d.ts +2 -0
  76. package/dist/client/chat-first/agents-pane.js +6 -0
  77. package/dist/client/chat-first/app-pane.d.ts +2 -0
  78. package/dist/client/chat-first/app-pane.js +6 -0
  79. package/dist/client/chat-first/apps-rail.d.ts +2 -0
  80. package/dist/client/chat-first/apps-rail.js +103 -0
  81. package/dist/client/chat-first/browser-pane.d.ts +2 -0
  82. package/dist/client/chat-first/browser-pane.js +64 -0
  83. package/dist/client/chat-first/chat-history.d.ts +12 -0
  84. package/dist/client/chat-first/chat-history.js +10 -0
  85. package/dist/client/chat-first/copy.d.ts +2 -0
  86. package/dist/client/chat-first/copy.js +117 -0
  87. package/dist/client/chat-first/index.d.ts +13 -0
  88. package/dist/client/chat-first/index.js +12 -0
  89. package/dist/client/chat-first/primary-nav.d.ts +8 -0
  90. package/dist/client/chat-first/primary-nav.js +6 -0
  91. package/dist/client/chat-first/session-watch-pane.d.ts +2 -0
  92. package/dist/client/chat-first/session-watch-pane.js +9 -0
  93. package/dist/client/chat-first/surface-panel.d.ts +9 -0
  94. package/dist/client/chat-first/surface-panel.js +9 -0
  95. package/dist/client/chat-first/surface-tabs.d.ts +9 -0
  96. package/dist/client/chat-first/surface-tabs.js +74 -0
  97. package/dist/client/chat-first/types.d.ts +74 -0
  98. package/dist/client/chat-first/types.js +1 -0
  99. package/dist/client/chat-first-agent-activity.d.ts +11 -0
  100. package/dist/client/chat-first-agent-activity.js +51 -0
  101. package/dist/client/chat-first-surface-panel-toggle.d.ts +5 -0
  102. package/dist/client/chat-first-surface-panel-toggle.js +6 -0
  103. package/dist/client/chat-first.d.ts +208 -0
  104. package/dist/client/chat-first.js +816 -0
  105. package/dist/client/extensions/ExtensionViewer.js +8 -1
  106. package/dist/client/resources/McpIntegrationDialog.js +3 -2
  107. package/dist/client/resources/McpServerDetail.js +6 -11
  108. package/dist/client/resources/index.d.ts +1 -0
  109. package/dist/client/resources/index.js +1 -0
  110. package/dist/client/resources/use-mcp-servers.d.ts +20 -0
  111. package/dist/client/resources/use-mcp-servers.js +82 -46
  112. package/dist/client/settings/index.d.ts +1 -0
  113. package/dist/client/settings/index.js +1 -0
  114. package/dist/collab/awareness.d.ts +2 -2
  115. package/dist/collab/routes.d.ts +1 -1
  116. package/dist/collab/struct-routes.d.ts +1 -1
  117. package/dist/jobs/background-automation-runner.js +19 -2
  118. package/dist/jobs/scheduler-health.d.ts +20 -0
  119. package/dist/jobs/scheduler-health.js +86 -1
  120. package/dist/jobs/scheduler.js +38 -1
  121. package/dist/mcp-client/routes.d.ts +3 -0
  122. package/dist/mcp-client/routes.js +14 -0
  123. package/dist/notifications/routes.d.ts +1 -1
  124. package/dist/observability/routes.d.ts +5 -5
  125. package/dist/progress/routes.d.ts +1 -1
  126. package/dist/provider-api/actions/provider-api.d.ts +2 -2
  127. package/dist/resources/handlers.d.ts +1 -1
  128. package/dist/secrets/routes.d.ts +3 -3
  129. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  130. package/dist/server/agents-bundle.d.ts +2 -0
  131. package/dist/server/agents-bundle.js +31 -2
  132. package/dist/server/credential-provider.d.ts +8 -2
  133. package/dist/server/credential-provider.js +13 -9
  134. package/dist/server/realtime-token.d.ts +1 -1
  135. package/dist/server/transcribe-voice.d.ts +1 -1
  136. package/dist/shared/chat-first-app-creation.d.ts +19 -0
  137. package/dist/shared/chat-first-app-creation.js +75 -0
  138. package/dist/shared/document-title.d.ts +7 -0
  139. package/dist/shared/document-title.js +29 -0
  140. package/dist/shared/index.d.ts +2 -0
  141. package/dist/shared/index.js +2 -0
  142. package/dist/styles/chat-history-list.css +16 -0
  143. package/dist/templates/chat/.agents/skills/adding-a-feature/SKILL.md +9 -0
  144. package/dist/templates/chat/.agents/skills/turn-into-app/SKILL.md +18 -6
  145. package/dist/templates/chat/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  146. package/dist/templates/default/.agents/skills/adding-a-feature/SKILL.md +9 -0
  147. package/dist/templates/default/.agents/skills/turn-into-app/SKILL.md +18 -6
  148. package/dist/templates/default/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  149. package/dist/templates/default/react-router.config.ts +18 -0
  150. package/dist/templates/headless/.agents/skills/turn-into-app/SKILL.md +18 -6
  151. package/dist/templates/headless/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  152. package/dist/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +9 -0
  153. package/dist/templates/workspace-core/.agents/skills/turn-into-app/SKILL.md +18 -6
  154. package/dist/templates/workspace-core/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  155. package/dist/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +7 -0
  156. package/package.json +3 -2
  157. package/src/templates/chat/.agents/skills/adding-a-feature/SKILL.md +9 -0
  158. package/src/templates/chat/.agents/skills/turn-into-app/SKILL.md +18 -6
  159. package/src/templates/chat/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  160. package/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +9 -0
  161. package/src/templates/default/.agents/skills/turn-into-app/SKILL.md +18 -6
  162. package/src/templates/default/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  163. package/src/templates/default/react-router.config.ts +18 -0
  164. package/src/templates/headless/.agents/skills/turn-into-app/SKILL.md +18 -6
  165. package/src/templates/headless/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  166. package/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +9 -0
  167. package/src/templates/workspace-core/.agents/skills/turn-into-app/SKILL.md +18 -6
  168. package/src/templates/workspace-core/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  169. package/src/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +7 -0
package/corpus/README.md CHANGED
@@ -31,4 +31,4 @@ rg -n "defineAction|useActionQuery" node_modules/@agent-native/core/corpus
31
31
 
32
32
  ## Generated Counts
33
33
 
34
- - template files: 7922
34
+ - template files: 7926
@@ -3,8 +3,9 @@ name: turn-into-app
3
3
  description: >-
4
4
  Turn visible project context, a proven thread, skill, or workflow into a
5
5
  runnable Agent-Native app with simple buttons, visible agent steps, preview,
6
- and deployment handoff. Use when a user invokes `/turn-into-app` or asks to
7
- make a workflow into an app, including from Claude or ChatGPT on the web.
6
+ and deployment handoff. Use when a user invokes `/turn-into-app`,
7
+ `/make-into-app`, or asks to make a workflow into an app, including from
8
+ Claude or ChatGPT on the web.
8
9
  user-invocable: true
9
10
  scope: both
10
11
  metadata:
@@ -38,6 +39,15 @@ The build location depends on the host. Treat this as a hard routing rule:
38
39
  workspace, follow the local implementation steps below. The local agent may
39
40
  scaffold, edit, run, and verify the app there.
40
41
 
42
+ Once the source brief is sufficient to identify a repeatable workflow, the
43
+ handoff is non-interactive. Do not ask the user for visual, product, copy,
44
+ layout, template, integration, or implementation choices that can be resolved
45
+ from the source. Select the source's recommended option; otherwise choose the
46
+ most direct conventional default and record the assumption for later review.
47
+ Only stop for a genuine hard blocker such as missing authorization, a
48
+ destructive external action, an ambiguous target workspace, or no identifiable
49
+ workflow at all.
50
+
41
51
  ## Default behavior
42
52
 
43
53
  For a local code-agent runtime this is an end-to-end build skill, not a request
@@ -104,14 +114,16 @@ before creating the app. Read the host-provided context in this order:
104
114
  Record the brief with these headings before handoff: source and provenance,
105
115
  project goal, configuration and constraints, knowledge sources, repeatable
106
116
  workflow, inputs and outputs, judgment and review points, representative runs,
107
- integrations and permissions, and unknowns. This is the compact contract for
117
+ integrations and permissions, and unknowns and assumptions. This is the compact contract for
108
118
  the app. It keeps the new app useful without pretending that hidden Project
109
119
  history was imported. See [the fresh Project reference](references/fresh-project.md)
110
120
  for the host setup and brief template.
111
121
 
112
- If the visible Project context has no concrete repeatable job, ask for one
113
- focused clarification or a representative artifact. Do not fall back to a
114
- generic “what app do you want to make?” builder.
122
+ If the visible Project context has no concrete repeatable job and no primary
123
+ goal can be inferred, ask for one focused clarification or a representative
124
+ artifact. Otherwise use the project's primary goal and source conventions; do
125
+ not ask a questionnaire and do not fall back to a generic “what app do you
126
+ want to make?” builder.
115
127
 
116
128
  ## Source selection guard
117
129
 
@@ -36,7 +36,7 @@ Inputs and outputs:
36
36
  Judgment and review points:
37
37
  Representative runs: none, or 1-3 selected examples
38
38
  Integrations and permissions:
39
- Unknowns and follow-up:
39
+ Unknowns and assumptions:
40
40
  ```
41
41
 
42
42
  Keep source references bounded. Prefer a file name, URL, resource ID, or short
@@ -69,6 +69,13 @@ do not fall back to a local sandbox build. Claude Code and Codex Code are the
69
69
  local-agent exception and may follow the implementation steps in the main
70
70
  skill.
71
71
 
72
+ The brief is an implementation authorization, not a questionnaire. After a
73
+ repeatable workflow is identifiable, choose any source-recommended option
74
+ automatically. For unresolved non-blocking choices, use the most direct
75
+ conventional default, record it under assumptions, and continue. Ask only when
76
+ there is no identifiable workflow, no authorized target workspace, or a
77
+ destructive/credential boundary genuinely prevents the handoff.
78
+
72
79
  In a new Project chat, say:
73
80
 
74
81
  ```text
@@ -1,4 +1,5 @@
1
1
  import { useActionQuery } from "@agent-native/core/client/hooks";
2
+ import { normalizeDocumentTitle } from "@agent-native/core/shared";
2
3
  import { IconActivity } from "@tabler/icons-react";
3
4
  import { useMemo } from "react";
4
5
  import { data, useLoaderData, useParams } from "react-router";
@@ -43,15 +44,16 @@ export const meta: MetaFunction<typeof loader> = ({ loaderData }) => {
43
44
  { name: "robots", content: "noindex" },
44
45
  ];
45
46
  }
47
+ const pageTitle = normalizeDocumentTitle(page.title, "Status page");
46
48
  const description =
47
49
  page.description ||
48
50
  (page.overall === "operational"
49
51
  ? "All systems operational."
50
52
  : "Current service status.");
51
53
  return [
52
- { title: `${page.title} · Status` },
54
+ { title: `${pageTitle} · Status` },
53
55
  { name: "description", content: description },
54
- { property: "og:title", content: `${page.title} · Status` },
56
+ { property: "og:title", content: `${pageTitle} · Status` },
55
57
  { property: "og:description", content: description },
56
58
  { property: "og:type", content: "website" },
57
59
  ];
@@ -37,6 +37,7 @@ const DEFAULT_MAX_BATCHES = 1_000;
37
37
  const MAX_MAX_BATCHES = 10_000;
38
38
  const DEFAULT_CHECKPOINT_PATH = ".analytics-first-party-bigquery-backfill.json";
39
39
  const QUERY_TIMEOUT_MS = 30_000;
40
+ const MAX_HYDRATION_IDS = 500;
40
41
  const JOB_TABLE = "analytics_bigquery_backfill_jobs";
41
42
  const FINALIZE_ALLOW_ENV =
42
43
  "AGENT_NATIVE_ANALYTICS_BIGQUERY_BACKFILL_FINALIZE_ALLOW";
@@ -212,7 +213,7 @@ export function buildHighWaterMarkQuery(spec: BranchSpec): DbQuery {
212
213
  };
213
214
  }
214
215
 
215
- export function buildPageQuery(
216
+ export function buildPageKeyQuery(
216
217
  spec: BranchSpec,
217
218
  state: BranchCheckpoint,
218
219
  batchSize: number,
@@ -237,7 +238,7 @@ export function buildPageQuery(
237
238
  }
238
239
  args.push(batchSize);
239
240
  return {
240
- sql: `SELECT ${PROJECTED_COLUMNS}
241
+ sql: `SELECT received_at, id
241
242
  FROM analytics_events
242
243
  WHERE ${spec.predicate}
243
244
  AND (received_at < ? OR (received_at = ? AND id <= ?))${cursorClause}
@@ -249,6 +250,22 @@ export function buildPageQuery(
249
250
  };
250
251
  }
251
252
 
253
+ export function buildHydrationQuery(ids: string[]): DbQuery {
254
+ if (!ids.length || ids.length > MAX_HYDRATION_IDS) {
255
+ throw new Error(
256
+ `BigQuery backfill hydration requires 1-${MAX_HYDRATION_IDS} ids`,
257
+ );
258
+ }
259
+ return {
260
+ sql: `SELECT ${PROJECTED_COLUMNS}
261
+ FROM analytics_events
262
+ WHERE id IN (${ids.map(() => "?").join(", ")})`,
263
+ args: ids,
264
+ timeoutMs: QUERY_TIMEOUT_MS,
265
+ maxAttempts: 1,
266
+ };
267
+ }
268
+
252
269
  function cursorFromRow(row: unknown, description: string): BackfillCursor {
253
270
  if (!row || typeof row !== "object") {
254
271
  throw new Error(`${description} is not an object`);
@@ -370,6 +387,38 @@ function compareCursors(left: BackfillCursor, right: BackfillCursor): number {
370
387
  );
371
388
  }
372
389
 
390
+ async function hydratePageRows(
391
+ keyRows: Array<Record<string, unknown>>,
392
+ db: DbExecutor,
393
+ ): Promise<Array<Record<string, unknown>>> {
394
+ const rowsById = new Map<string, Record<string, unknown>>();
395
+ for (let offset = 0; offset < keyRows.length; offset += MAX_HYDRATION_IDS) {
396
+ const ids = keyRows
397
+ .slice(offset, offset + MAX_HYDRATION_IDS)
398
+ .map((row, index) => {
399
+ const cursor = cursorFromRow(row, `backfill key row ${offset + index}`);
400
+ return cursor.id;
401
+ });
402
+ const result = await db.execute(buildHydrationQuery(ids));
403
+ for (const row of result.rows as Array<Record<string, unknown>>) {
404
+ const id = row.id;
405
+ if (typeof id !== "string" || !id) {
406
+ throw new Error("Backfill hydration row is missing id");
407
+ }
408
+ rowsById.set(id, row);
409
+ }
410
+ }
411
+
412
+ return keyRows.map((keyRow, index) => {
413
+ const { id } = cursorFromRow(keyRow, `backfill key row ${index}`);
414
+ const row = rowsById.get(id);
415
+ if (!row) {
416
+ throw new Error(`Backfill row ${id} disappeared during hydration`);
417
+ }
418
+ return row;
419
+ });
420
+ }
421
+
373
422
  export async function assertSourceAtCheckpoint(
374
423
  scope: DedicatedBackfillOptions["scope"],
375
424
  checkpoint: DedicatedBackfillCheckpoint,
@@ -506,15 +555,16 @@ export async function runDedicatedBackfill(
506
555
  stop = true;
507
556
  break;
508
557
  }
509
- const result = await dependencies.db.execute(
510
- buildPageQuery(spec, state, options.batchSize),
558
+ const keyResult = await dependencies.db.execute(
559
+ buildPageKeyQuery(spec, state, options.batchSize),
511
560
  );
512
- const rows = result.rows as Array<Record<string, unknown>>;
513
- if (!rows.length) {
561
+ const keyRows = keyResult.rows as Array<Record<string, unknown>>;
562
+ if (!keyRows.length) {
514
563
  await refreshBranchCutoff(spec, state, checkpoint, dependencies, now);
515
564
  if (state.complete) break;
516
565
  continue;
517
566
  }
567
+ const rows = await hydratePageRows(keyRows, dependencies.db);
518
568
 
519
569
  const copied = await dependencies.upload(rows);
520
570
  if (copied !== rows.length) {
@@ -3,8 +3,9 @@ name: turn-into-app
3
3
  description: >-
4
4
  Turn visible project context, a proven thread, skill, or workflow into a
5
5
  runnable Agent-Native app with simple buttons, visible agent steps, preview,
6
- and deployment handoff. Use when a user invokes `/turn-into-app` or asks to
7
- make a workflow into an app, including from Claude or ChatGPT on the web.
6
+ and deployment handoff. Use when a user invokes `/turn-into-app`,
7
+ `/make-into-app`, or asks to make a workflow into an app, including from
8
+ Claude or ChatGPT on the web.
8
9
  user-invocable: true
9
10
  scope: both
10
11
  metadata:
@@ -38,6 +39,15 @@ The build location depends on the host. Treat this as a hard routing rule:
38
39
  workspace, follow the local implementation steps below. The local agent may
39
40
  scaffold, edit, run, and verify the app there.
40
41
 
42
+ Once the source brief is sufficient to identify a repeatable workflow, the
43
+ handoff is non-interactive. Do not ask the user for visual, product, copy,
44
+ layout, template, integration, or implementation choices that can be resolved
45
+ from the source. Select the source's recommended option; otherwise choose the
46
+ most direct conventional default and record the assumption for later review.
47
+ Only stop for a genuine hard blocker such as missing authorization, a
48
+ destructive external action, an ambiguous target workspace, or no identifiable
49
+ workflow at all.
50
+
41
51
  ## Default behavior
42
52
 
43
53
  For a local code-agent runtime this is an end-to-end build skill, not a request
@@ -104,14 +114,16 @@ before creating the app. Read the host-provided context in this order:
104
114
  Record the brief with these headings before handoff: source and provenance,
105
115
  project goal, configuration and constraints, knowledge sources, repeatable
106
116
  workflow, inputs and outputs, judgment and review points, representative runs,
107
- integrations and permissions, and unknowns. This is the compact contract for
117
+ integrations and permissions, and unknowns and assumptions. This is the compact contract for
108
118
  the app. It keeps the new app useful without pretending that hidden Project
109
119
  history was imported. See [the fresh Project reference](references/fresh-project.md)
110
120
  for the host setup and brief template.
111
121
 
112
- If the visible Project context has no concrete repeatable job, ask for one
113
- focused clarification or a representative artifact. Do not fall back to a
114
- generic “what app do you want to make?” builder.
122
+ If the visible Project context has no concrete repeatable job and no primary
123
+ goal can be inferred, ask for one focused clarification or a representative
124
+ artifact. Otherwise use the project's primary goal and source conventions; do
125
+ not ask a questionnaire and do not fall back to a generic “what app do you
126
+ want to make?” builder.
115
127
 
116
128
  ## Source selection guard
117
129
 
@@ -36,7 +36,7 @@ Inputs and outputs:
36
36
  Judgment and review points:
37
37
  Representative runs: none, or 1-3 selected examples
38
38
  Integrations and permissions:
39
- Unknowns and follow-up:
39
+ Unknowns and assumptions:
40
40
  ```
41
41
 
42
42
  Keep source references bounded. Prefer a file name, URL, resource ID, or short
@@ -69,6 +69,13 @@ do not fall back to a local sandbox build. Claude Code and Codex Code are the
69
69
  local-agent exception and may follow the implementation steps in the main
70
70
  skill.
71
71
 
72
+ The brief is an implementation authorization, not a questionnaire. After a
73
+ repeatable workflow is identifiable, choose any source-recommended option
74
+ automatically. For unresolved non-blocking choices, use the most direct
75
+ conventional default, record it under assumptions, and continue. Ask only when
76
+ there is no identifiable workflow, no authorized target workspace, or a
77
+ destructive/credential boundary genuinely prevents the handoff.
78
+
72
79
  In a new Project chat, say:
73
80
 
74
81
  ```text
@@ -81,6 +81,13 @@ or other file-like payloads, design the upload path in the same change:
81
81
  provider upload first, then URL/id/blob handle in SQL. Do not add base64/binary
82
82
  columns or stuff files into `application_state`.
83
83
 
84
+ If the feature adds a server-side dependency carrying a native binary or heavy
85
+ runtime — headless browser, ffmpeg, image/video processing, ML runtime — read
86
+ the `performance` skill §9 before adding it. A deployed app has one `/*` page
87
+ function that every visitor's cache miss wakes, and it ships whatever the server
88
+ bundle depends on. Run that work from a background function or a job so the page
89
+ function never carries the weight.
90
+
84
91
  **If the action produces or lists a navigable resource**, add a `link` builder that returns `{ url: buildDeepLink({ app, view, params }), label }`. External coding agents and MCP hosts (Claude / ChatGPT / Claude Code / Cowork / Codex, over MCP/A2A) then surface an "Open in … →" deep link that drops the user back into the running UI focused on the record — for free. If a compatible MCP host should render an inline review/edit surface, also add `mcpApp` with `embedApp()` so the action embeds the real React app route instead of a one-off HTML UI. The `link` builder and `mcpApp` metadata must be pure and synchronous (no I/O). Any external-agent read/ingest action must be `http: { method: "GET" }` + `readOnly: true` + `publicAgent: { expose: true, readOnly: true, requiresAuth: true }`. See the `external-agents` skill.
85
92
 
86
93
  ### 3. Skills / Instructions
@@ -195,4 +202,6 @@ TL;DR: declare the vocabulary once with `defineAppRoles({ appId, roles, defaultR
195
202
  - **create-skill** — How to create skills for new patterns (area 3 in detail)
196
203
  - **storing-data** — Where to store the feature's data
197
204
  - **real-time-sync** — How the UI stays in sync when the agent writes data
205
+ - **performance** — Query/load cost, and (§9) cold-start artifact size when a
206
+ feature adds a server-side dependency
198
207
  - **internationalization** — How to update localized UI copy and catalogs
@@ -3,8 +3,9 @@ name: turn-into-app
3
3
  description: >-
4
4
  Turn visible project context, a proven thread, skill, or workflow into a
5
5
  runnable Agent-Native app with simple buttons, visible agent steps, preview,
6
- and deployment handoff. Use when a user invokes `/turn-into-app` or asks to
7
- make a workflow into an app, including from Claude or ChatGPT on the web.
6
+ and deployment handoff. Use when a user invokes `/turn-into-app`,
7
+ `/make-into-app`, or asks to make a workflow into an app, including from
8
+ Claude or ChatGPT on the web.
8
9
  user-invocable: true
9
10
  scope: both
10
11
  metadata:
@@ -38,6 +39,15 @@ The build location depends on the host. Treat this as a hard routing rule:
38
39
  workspace, follow the local implementation steps below. The local agent may
39
40
  scaffold, edit, run, and verify the app there.
40
41
 
42
+ Once the source brief is sufficient to identify a repeatable workflow, the
43
+ handoff is non-interactive. Do not ask the user for visual, product, copy,
44
+ layout, template, integration, or implementation choices that can be resolved
45
+ from the source. Select the source's recommended option; otherwise choose the
46
+ most direct conventional default and record the assumption for later review.
47
+ Only stop for a genuine hard blocker such as missing authorization, a
48
+ destructive external action, an ambiguous target workspace, or no identifiable
49
+ workflow at all.
50
+
41
51
  ## Default behavior
42
52
 
43
53
  For a local code-agent runtime this is an end-to-end build skill, not a request
@@ -104,14 +114,16 @@ before creating the app. Read the host-provided context in this order:
104
114
  Record the brief with these headings before handoff: source and provenance,
105
115
  project goal, configuration and constraints, knowledge sources, repeatable
106
116
  workflow, inputs and outputs, judgment and review points, representative runs,
107
- integrations and permissions, and unknowns. This is the compact contract for
117
+ integrations and permissions, and unknowns and assumptions. This is the compact contract for
108
118
  the app. It keeps the new app useful without pretending that hidden Project
109
119
  history was imported. See [the fresh Project reference](references/fresh-project.md)
110
120
  for the host setup and brief template.
111
121
 
112
- If the visible Project context has no concrete repeatable job, ask for one
113
- focused clarification or a representative artifact. Do not fall back to a
114
- generic “what app do you want to make?” builder.
122
+ If the visible Project context has no concrete repeatable job and no primary
123
+ goal can be inferred, ask for one focused clarification or a representative
124
+ artifact. Otherwise use the project's primary goal and source conventions; do
125
+ not ask a questionnaire and do not fall back to a generic “what app do you
126
+ want to make?” builder.
115
127
 
116
128
  ## Source selection guard
117
129
 
@@ -36,7 +36,7 @@ Inputs and outputs:
36
36
  Judgment and review points:
37
37
  Representative runs: none, or 1-3 selected examples
38
38
  Integrations and permissions:
39
- Unknowns and follow-up:
39
+ Unknowns and assumptions:
40
40
  ```
41
41
 
42
42
  Keep source references bounded. Prefer a file name, URL, resource ID, or short
@@ -69,6 +69,13 @@ do not fall back to a local sandbox build. Claude Code and Codex Code are the
69
69
  local-agent exception and may follow the implementation steps in the main
70
70
  skill.
71
71
 
72
+ The brief is an implementation authorization, not a questionnaire. After a
73
+ repeatable workflow is identifiable, choose any source-recommended option
74
+ automatically. For unresolved non-blocking choices, use the most direct
75
+ conventional default, record it under assumptions, and continue. Ask only when
76
+ there is no identifiable workflow, no authorized target workspace, or a
77
+ destructive/credential boundary genuinely prevents the handoff.
78
+
72
79
  In a new Project chat, say:
73
80
 
74
81
  ```text
@@ -3,8 +3,9 @@ name: turn-into-app
3
3
  description: >-
4
4
  Turn visible project context, a proven thread, skill, or workflow into a
5
5
  runnable Agent-Native app with simple buttons, visible agent steps, preview,
6
- and deployment handoff. Use when a user invokes `/turn-into-app` or asks to
7
- make a workflow into an app, including from Claude or ChatGPT on the web.
6
+ and deployment handoff. Use when a user invokes `/turn-into-app`,
7
+ `/make-into-app`, or asks to make a workflow into an app, including from
8
+ Claude or ChatGPT on the web.
8
9
  user-invocable: true
9
10
  scope: both
10
11
  metadata:
@@ -38,6 +39,15 @@ The build location depends on the host. Treat this as a hard routing rule:
38
39
  workspace, follow the local implementation steps below. The local agent may
39
40
  scaffold, edit, run, and verify the app there.
40
41
 
42
+ Once the source brief is sufficient to identify a repeatable workflow, the
43
+ handoff is non-interactive. Do not ask the user for visual, product, copy,
44
+ layout, template, integration, or implementation choices that can be resolved
45
+ from the source. Select the source's recommended option; otherwise choose the
46
+ most direct conventional default and record the assumption for later review.
47
+ Only stop for a genuine hard blocker such as missing authorization, a
48
+ destructive external action, an ambiguous target workspace, or no identifiable
49
+ workflow at all.
50
+
41
51
  ## Default behavior
42
52
 
43
53
  For a local code-agent runtime this is an end-to-end build skill, not a request
@@ -104,14 +114,16 @@ before creating the app. Read the host-provided context in this order:
104
114
  Record the brief with these headings before handoff: source and provenance,
105
115
  project goal, configuration and constraints, knowledge sources, repeatable
106
116
  workflow, inputs and outputs, judgment and review points, representative runs,
107
- integrations and permissions, and unknowns. This is the compact contract for
117
+ integrations and permissions, and unknowns and assumptions. This is the compact contract for
108
118
  the app. It keeps the new app useful without pretending that hidden Project
109
119
  history was imported. See [the fresh Project reference](references/fresh-project.md)
110
120
  for the host setup and brief template.
111
121
 
112
- If the visible Project context has no concrete repeatable job, ask for one
113
- focused clarification or a representative artifact. Do not fall back to a
114
- generic “what app do you want to make?” builder.
122
+ If the visible Project context has no concrete repeatable job and no primary
123
+ goal can be inferred, ask for one focused clarification or a representative
124
+ artifact. Otherwise use the project's primary goal and source conventions; do
125
+ not ask a questionnaire and do not fall back to a generic “what app do you
126
+ want to make?” builder.
115
127
 
116
128
  ## Source selection guard
117
129
 
@@ -36,7 +36,7 @@ Inputs and outputs:
36
36
  Judgment and review points:
37
37
  Representative runs: none, or 1-3 selected examples
38
38
  Integrations and permissions:
39
- Unknowns and follow-up:
39
+ Unknowns and assumptions:
40
40
  ```
41
41
 
42
42
  Keep source references bounded. Prefer a file name, URL, resource ID, or short
@@ -69,6 +69,13 @@ do not fall back to a local sandbox build. Claude Code and Codex Code are the
69
69
  local-agent exception and may follow the implementation steps in the main
70
70
  skill.
71
71
 
72
+ The brief is an implementation authorization, not a questionnaire. After a
73
+ repeatable workflow is identifiable, choose any source-recommended option
74
+ automatically. For unresolved non-blocking choices, use the most direct
75
+ conventional default, record it under assumptions, and continue. Ask only when
76
+ there is no identifiable workflow, no authorized target workspace, or a
77
+ destructive/credential boundary genuinely prevents the handoff.
78
+
72
79
  In a new Project chat, say:
73
80
 
74
81
  ```text
@@ -81,6 +81,13 @@ or other file-like payloads, design the upload path in the same change:
81
81
  provider upload first, then URL/id/blob handle in SQL. Do not add base64/binary
82
82
  columns or stuff files into `application_state`.
83
83
 
84
+ If the feature adds a server-side dependency carrying a native binary or heavy
85
+ runtime — headless browser, ffmpeg, image/video processing, ML runtime — read
86
+ the `performance` skill §9 before adding it. A deployed app has one `/*` page
87
+ function that every visitor's cache miss wakes, and it ships whatever the server
88
+ bundle depends on. Run that work from a background function or a job so the page
89
+ function never carries the weight.
90
+
84
91
  **If the action produces or lists a navigable resource**, add a `link` builder that returns `{ url: buildDeepLink({ app, view, params }), label }`. External coding agents and MCP hosts (Claude / ChatGPT / Claude Code / Cowork / Codex, over MCP/A2A) then surface an "Open in … →" deep link that drops the user back into the running UI focused on the record — for free. If a compatible MCP host should render an inline review/edit surface, also add `mcpApp` with `embedApp()` so the action embeds the real React app route instead of a one-off HTML UI. The `link` builder and `mcpApp` metadata must be pure and synchronous (no I/O). Any external-agent read/ingest action must be `http: { method: "GET" }` + `readOnly: true` + `publicAgent: { expose: true, readOnly: true, requiresAuth: true }`. See the `external-agents` skill.
85
92
 
86
93
  ### 3. Skills / Instructions
@@ -195,4 +202,6 @@ TL;DR: declare the vocabulary once with `defineAppRoles({ appId, roles, defaultR
195
202
  - **create-skill** — How to create skills for new patterns (area 3 in detail)
196
203
  - **storing-data** — Where to store the feature's data
197
204
  - **real-time-sync** — How the UI stays in sync when the agent writes data
205
+ - **performance** — Query/load cost, and (§9) cold-start artifact size when a
206
+ feature adds a server-side dependency
198
207
  - **internationalization** — How to update localized UI copy and catalogs
@@ -3,8 +3,9 @@ name: turn-into-app
3
3
  description: >-
4
4
  Turn visible project context, a proven thread, skill, or workflow into a
5
5
  runnable Agent-Native app with simple buttons, visible agent steps, preview,
6
- and deployment handoff. Use when a user invokes `/turn-into-app` or asks to
7
- make a workflow into an app, including from Claude or ChatGPT on the web.
6
+ and deployment handoff. Use when a user invokes `/turn-into-app`,
7
+ `/make-into-app`, or asks to make a workflow into an app, including from
8
+ Claude or ChatGPT on the web.
8
9
  user-invocable: true
9
10
  scope: both
10
11
  metadata:
@@ -38,6 +39,15 @@ The build location depends on the host. Treat this as a hard routing rule:
38
39
  workspace, follow the local implementation steps below. The local agent may
39
40
  scaffold, edit, run, and verify the app there.
40
41
 
42
+ Once the source brief is sufficient to identify a repeatable workflow, the
43
+ handoff is non-interactive. Do not ask the user for visual, product, copy,
44
+ layout, template, integration, or implementation choices that can be resolved
45
+ from the source. Select the source's recommended option; otherwise choose the
46
+ most direct conventional default and record the assumption for later review.
47
+ Only stop for a genuine hard blocker such as missing authorization, a
48
+ destructive external action, an ambiguous target workspace, or no identifiable
49
+ workflow at all.
50
+
41
51
  ## Default behavior
42
52
 
43
53
  For a local code-agent runtime this is an end-to-end build skill, not a request
@@ -104,14 +114,16 @@ before creating the app. Read the host-provided context in this order:
104
114
  Record the brief with these headings before handoff: source and provenance,
105
115
  project goal, configuration and constraints, knowledge sources, repeatable
106
116
  workflow, inputs and outputs, judgment and review points, representative runs,
107
- integrations and permissions, and unknowns. This is the compact contract for
117
+ integrations and permissions, and unknowns and assumptions. This is the compact contract for
108
118
  the app. It keeps the new app useful without pretending that hidden Project
109
119
  history was imported. See [the fresh Project reference](references/fresh-project.md)
110
120
  for the host setup and brief template.
111
121
 
112
- If the visible Project context has no concrete repeatable job, ask for one
113
- focused clarification or a representative artifact. Do not fall back to a
114
- generic “what app do you want to make?” builder.
122
+ If the visible Project context has no concrete repeatable job and no primary
123
+ goal can be inferred, ask for one focused clarification or a representative
124
+ artifact. Otherwise use the project's primary goal and source conventions; do
125
+ not ask a questionnaire and do not fall back to a generic “what app do you
126
+ want to make?” builder.
115
127
 
116
128
  ## Source selection guard
117
129
 
@@ -36,7 +36,7 @@ Inputs and outputs:
36
36
  Judgment and review points:
37
37
  Representative runs: none, or 1-3 selected examples
38
38
  Integrations and permissions:
39
- Unknowns and follow-up:
39
+ Unknowns and assumptions:
40
40
  ```
41
41
 
42
42
  Keep source references bounded. Prefer a file name, URL, resource ID, or short
@@ -69,6 +69,13 @@ do not fall back to a local sandbox build. Claude Code and Codex Code are the
69
69
  local-agent exception and may follow the implementation steps in the main
70
70
  skill.
71
71
 
72
+ The brief is an implementation authorization, not a questionnaire. After a
73
+ repeatable workflow is identifiable, choose any source-recommended option
74
+ automatically. For unresolved non-blocking choices, use the most direct
75
+ conventional default, record it under assumptions, and continue. Ask only when
76
+ there is no identifiable workflow, no authorized target workspace, or a
77
+ destructive/credential boundary genuinely prevents the handoff.
78
+
72
79
  In a new Project chat, say:
73
80
 
74
81
  ```text
@@ -3,8 +3,9 @@ name: turn-into-app
3
3
  description: >-
4
4
  Turn visible project context, a proven thread, skill, or workflow into a
5
5
  runnable Agent-Native app with simple buttons, visible agent steps, preview,
6
- and deployment handoff. Use when a user invokes `/turn-into-app` or asks to
7
- make a workflow into an app, including from Claude or ChatGPT on the web.
6
+ and deployment handoff. Use when a user invokes `/turn-into-app`,
7
+ `/make-into-app`, or asks to make a workflow into an app, including from
8
+ Claude or ChatGPT on the web.
8
9
  user-invocable: true
9
10
  scope: both
10
11
  metadata:
@@ -38,6 +39,15 @@ The build location depends on the host. Treat this as a hard routing rule:
38
39
  workspace, follow the local implementation steps below. The local agent may
39
40
  scaffold, edit, run, and verify the app there.
40
41
 
42
+ Once the source brief is sufficient to identify a repeatable workflow, the
43
+ handoff is non-interactive. Do not ask the user for visual, product, copy,
44
+ layout, template, integration, or implementation choices that can be resolved
45
+ from the source. Select the source's recommended option; otherwise choose the
46
+ most direct conventional default and record the assumption for later review.
47
+ Only stop for a genuine hard blocker such as missing authorization, a
48
+ destructive external action, an ambiguous target workspace, or no identifiable
49
+ workflow at all.
50
+
41
51
  ## Default behavior
42
52
 
43
53
  For a local code-agent runtime this is an end-to-end build skill, not a request
@@ -104,14 +114,16 @@ before creating the app. Read the host-provided context in this order:
104
114
  Record the brief with these headings before handoff: source and provenance,
105
115
  project goal, configuration and constraints, knowledge sources, repeatable
106
116
  workflow, inputs and outputs, judgment and review points, representative runs,
107
- integrations and permissions, and unknowns. This is the compact contract for
117
+ integrations and permissions, and unknowns and assumptions. This is the compact contract for
108
118
  the app. It keeps the new app useful without pretending that hidden Project
109
119
  history was imported. See [the fresh Project reference](references/fresh-project.md)
110
120
  for the host setup and brief template.
111
121
 
112
- If the visible Project context has no concrete repeatable job, ask for one
113
- focused clarification or a representative artifact. Do not fall back to a
114
- generic “what app do you want to make?” builder.
122
+ If the visible Project context has no concrete repeatable job and no primary
123
+ goal can be inferred, ask for one focused clarification or a representative
124
+ artifact. Otherwise use the project's primary goal and source conventions; do
125
+ not ask a questionnaire and do not fall back to a generic “what app do you
126
+ want to make?” builder.
115
127
 
116
128
  ## Source selection guard
117
129
 
@@ -36,7 +36,7 @@ Inputs and outputs:
36
36
  Judgment and review points:
37
37
  Representative runs: none, or 1-3 selected examples
38
38
  Integrations and permissions:
39
- Unknowns and follow-up:
39
+ Unknowns and assumptions:
40
40
  ```
41
41
 
42
42
  Keep source references bounded. Prefer a file name, URL, resource ID, or short
@@ -69,6 +69,13 @@ do not fall back to a local sandbox build. Claude Code and Codex Code are the
69
69
  local-agent exception and may follow the implementation steps in the main
70
70
  skill.
71
71
 
72
+ The brief is an implementation authorization, not a questionnaire. After a
73
+ repeatable workflow is identifiable, choose any source-recommended option
74
+ automatically. For unresolved non-blocking choices, use the most direct
75
+ conventional default, record it under assumptions, and continue. Ask only when
76
+ there is no identifiable workflow, no authorized target workspace, or a
77
+ destructive/credential boundary genuinely prevents the handoff.
78
+
72
79
  In a new Project chat, say:
73
80
 
74
81
  ```text