@agent-native/core 0.7.13 → 0.7.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/a2a/client.d.ts +44 -1
- package/dist/a2a/client.d.ts.map +1 -1
- package/dist/a2a/client.js +88 -11
- package/dist/a2a/client.js.map +1 -1
- package/dist/a2a/handlers.d.ts +10 -0
- package/dist/a2a/handlers.d.ts.map +1 -1
- package/dist/a2a/handlers.js +287 -62
- package/dist/a2a/handlers.js.map +1 -1
- package/dist/a2a/server.d.ts.map +1 -1
- package/dist/a2a/server.js +95 -17
- package/dist/a2a/server.js.map +1 -1
- package/dist/a2a/task-store.d.ts +11 -1
- package/dist/a2a/task-store.d.ts.map +1 -1
- package/dist/a2a/task-store.js +38 -2
- package/dist/a2a/task-store.js.map +1 -1
- package/dist/agent/engine/builder-engine.d.ts +1 -1
- package/dist/agent/engine/builder-engine.d.ts.map +1 -1
- package/dist/agent/engine/builder-engine.js +7 -25
- package/dist/agent/engine/builder-engine.js.map +1 -1
- package/dist/agent/engine/builtin.js +1 -1
- package/dist/agent/engine/builtin.js.map +1 -1
- package/dist/chat-threads/store.d.ts +3 -0
- package/dist/chat-threads/store.d.ts.map +1 -1
- package/dist/chat-threads/store.js +32 -0
- package/dist/chat-threads/store.js.map +1 -1
- package/dist/cli/templates-meta.d.ts.map +1 -1
- package/dist/cli/templates-meta.js +11 -0
- package/dist/cli/templates-meta.js.map +1 -1
- package/dist/client/AgentPanel.d.ts +3 -1
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +21 -10
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AgentTaskCard.d.ts.map +1 -1
- package/dist/client/AgentTaskCard.js +2 -0
- package/dist/client/AgentTaskCard.js.map +1 -1
- package/dist/client/AssistantChat.d.ts +2 -0
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +111 -75
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/ErrorBoundary.d.ts +1 -3
- package/dist/client/ErrorBoundary.d.ts.map +1 -1
- package/dist/client/ErrorBoundary.js +37 -9
- package/dist/client/ErrorBoundary.js.map +1 -1
- package/dist/client/FeedbackButton.d.ts.map +1 -1
- package/dist/client/FeedbackButton.js +4 -3
- package/dist/client/FeedbackButton.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +145 -49
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/agent-chat.d.ts +11 -0
- package/dist/client/agent-chat.d.ts.map +1 -1
- package/dist/client/agent-chat.js +1 -1
- package/dist/client/agent-chat.js.map +1 -1
- package/dist/client/components/AgentPresenceChip.d.ts +12 -0
- package/dist/client/components/AgentPresenceChip.d.ts.map +1 -0
- package/dist/client/components/AgentPresenceChip.js +42 -0
- package/dist/client/components/AgentPresenceChip.js.map +1 -0
- package/dist/client/components/PresenceBar.d.ts +17 -0
- package/dist/client/components/PresenceBar.d.ts.map +1 -0
- package/dist/client/components/PresenceBar.js +118 -0
- package/dist/client/components/PresenceBar.js.map +1 -0
- package/dist/client/composer/ComposerPlusMenu.d.ts +6 -1
- package/dist/client/composer/ComposerPlusMenu.d.ts.map +1 -1
- package/dist/client/composer/ComposerPlusMenu.js +22 -83
- package/dist/client/composer/ComposerPlusMenu.js.map +1 -1
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/client/composer/TiptapComposer.js +237 -16
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/composer/types.d.ts +1 -0
- package/dist/client/composer/types.d.ts.map +1 -1
- package/dist/client/composer/useVoiceDictation.d.ts +2 -0
- package/dist/client/composer/useVoiceDictation.d.ts.map +1 -1
- package/dist/client/composer/useVoiceDictation.js +85 -10
- package/dist/client/composer/useVoiceDictation.js.map +1 -1
- package/dist/client/index.d.ts +3 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +5 -0
- package/dist/client/index.js.map +1 -1
- package/dist/client/org/RequireActiveOrg.d.ts.map +1 -1
- package/dist/client/org/RequireActiveOrg.js +15 -10
- package/dist/client/org/RequireActiveOrg.js.map +1 -1
- package/dist/client/org/TeamPage.d.ts.map +1 -1
- package/dist/client/org/TeamPage.js +125 -4
- package/dist/client/org/TeamPage.js.map +1 -1
- package/dist/client/org/hooks.d.ts +30 -0
- package/dist/client/org/hooks.d.ts.map +1 -1
- package/dist/client/org/hooks.js +65 -0
- package/dist/client/org/hooks.js.map +1 -1
- package/dist/client/org/index.d.ts +2 -2
- package/dist/client/org/index.d.ts.map +1 -1
- package/dist/client/org/index.js +1 -1
- package/dist/client/org/index.js.map +1 -1
- package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
- package/dist/client/resources/ResourcesPanel.js +5 -1
- package/dist/client/resources/ResourcesPanel.js.map +1 -1
- package/dist/client/settings/AutomationsSection.d.ts.map +1 -1
- package/dist/client/settings/AutomationsSection.js +1 -0
- package/dist/client/settings/AutomationsSection.js.map +1 -1
- package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
- package/dist/client/settings/SettingsPanel.js +24 -11
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/client/sse-event-processor.d.ts.map +1 -1
- package/dist/client/sse-event-processor.js +10 -0
- package/dist/client/sse-event-processor.js.map +1 -1
- package/dist/client/tools/ToolEditor.d.ts +5 -0
- package/dist/client/tools/ToolEditor.d.ts.map +1 -0
- package/dist/client/tools/ToolEditor.js +98 -0
- package/dist/client/tools/ToolEditor.js.map +1 -0
- package/dist/client/tools/ToolViewer.d.ts +5 -0
- package/dist/client/tools/ToolViewer.d.ts.map +1 -0
- package/dist/client/tools/ToolViewer.js +309 -0
- package/dist/client/tools/ToolViewer.js.map +1 -0
- package/dist/client/tools/ToolViewerPage.d.ts +2 -0
- package/dist/client/tools/ToolViewerPage.d.ts.map +1 -0
- package/dist/client/tools/ToolViewerPage.js +23 -0
- package/dist/client/tools/ToolViewerPage.js.map +1 -0
- package/dist/client/tools/ToolsListPage.d.ts +2 -0
- package/dist/client/tools/ToolsListPage.d.ts.map +1 -0
- package/dist/client/tools/ToolsListPage.js +72 -0
- package/dist/client/tools/ToolsListPage.js.map +1 -0
- package/dist/client/tools/ToolsSidebarSection.d.ts +2 -0
- package/dist/client/tools/ToolsSidebarSection.d.ts.map +1 -0
- package/dist/client/tools/ToolsSidebarSection.js +188 -0
- package/dist/client/tools/ToolsSidebarSection.js.map +1 -0
- package/dist/client/tools/index.d.ts +6 -0
- package/dist/client/tools/index.d.ts.map +1 -0
- package/dist/client/tools/index.js +6 -0
- package/dist/client/tools/index.js.map +1 -0
- package/dist/client/use-chat-threads.d.ts +1 -0
- package/dist/client/use-chat-threads.d.ts.map +1 -1
- package/dist/client/use-chat-threads.js +29 -0
- package/dist/client/use-chat-threads.js.map +1 -1
- package/dist/client/use-db-sync.js +6 -6
- package/dist/client/use-db-sync.js.map +1 -1
- package/dist/collab/agent-identity.d.ts +15 -0
- package/dist/collab/agent-identity.d.ts.map +1 -0
- package/dist/collab/agent-identity.js +14 -0
- package/dist/collab/agent-identity.js.map +1 -0
- package/dist/collab/agent-presence.d.ts +59 -0
- package/dist/collab/agent-presence.d.ts.map +1 -0
- package/dist/collab/agent-presence.js +165 -0
- package/dist/collab/agent-presence.js.map +1 -0
- package/dist/collab/awareness.d.ts +7 -0
- package/dist/collab/awareness.d.ts.map +1 -1
- package/dist/collab/awareness.js +2 -2
- package/dist/collab/awareness.js.map +1 -1
- package/dist/collab/client-struct.d.ts +43 -0
- package/dist/collab/client-struct.d.ts.map +1 -0
- package/dist/collab/client-struct.js +272 -0
- package/dist/collab/client-struct.js.map +1 -0
- package/dist/collab/client.d.ts +2 -0
- package/dist/collab/client.d.ts.map +1 -1
- package/dist/collab/client.js +15 -1
- package/dist/collab/client.js.map +1 -1
- package/dist/collab/index.d.ts +6 -1
- package/dist/collab/index.d.ts.map +1 -1
- package/dist/collab/index.js +11 -1
- package/dist/collab/index.js.map +1 -1
- package/dist/collab/json-to-yjs.d.ts +72 -0
- package/dist/collab/json-to-yjs.d.ts.map +1 -0
- package/dist/collab/json-to-yjs.js +456 -0
- package/dist/collab/json-to-yjs.js.map +1 -0
- package/dist/collab/struct-routes.d.ts +52 -0
- package/dist/collab/struct-routes.d.ts.map +1 -0
- package/dist/collab/struct-routes.js +74 -0
- package/dist/collab/struct-routes.js.map +1 -0
- package/dist/collab/ydoc-manager.d.ts +19 -0
- package/dist/collab/ydoc-manager.d.ts.map +1 -1
- package/dist/collab/ydoc-manager.js +49 -0
- package/dist/collab/ydoc-manager.js.map +1 -1
- package/dist/deploy/build.js +1 -1
- package/dist/file-upload/builder.d.ts.map +1 -1
- package/dist/file-upload/builder.js +2 -1
- package/dist/file-upload/builder.js.map +1 -1
- package/dist/integrations/adapters/email.d.ts +17 -0
- package/dist/integrations/adapters/email.d.ts.map +1 -0
- package/dist/integrations/adapters/email.js +620 -0
- package/dist/integrations/adapters/email.js.map +1 -0
- package/dist/integrations/adapters/telegram.d.ts.map +1 -1
- package/dist/integrations/adapters/telegram.js +19 -3
- package/dist/integrations/adapters/telegram.js.map +1 -1
- package/dist/integrations/index.d.ts +1 -0
- package/dist/integrations/index.d.ts.map +1 -1
- package/dist/integrations/index.js +1 -0
- package/dist/integrations/index.js.map +1 -1
- package/dist/integrations/internal-token.d.ts +18 -0
- package/dist/integrations/internal-token.d.ts.map +1 -0
- package/dist/integrations/internal-token.js +86 -0
- package/dist/integrations/internal-token.js.map +1 -0
- package/dist/integrations/pending-tasks-retry-job.d.ts +15 -0
- package/dist/integrations/pending-tasks-retry-job.d.ts.map +1 -0
- package/dist/integrations/pending-tasks-retry-job.js +199 -0
- package/dist/integrations/pending-tasks-retry-job.js.map +1 -0
- package/dist/integrations/pending-tasks-store.d.ts +40 -0
- package/dist/integrations/pending-tasks-store.d.ts.map +1 -0
- package/dist/integrations/pending-tasks-store.js +151 -0
- package/dist/integrations/pending-tasks-store.js.map +1 -0
- package/dist/integrations/plugin.d.ts.map +1 -1
- package/dist/integrations/plugin.js +151 -9
- package/dist/integrations/plugin.js.map +1 -1
- package/dist/integrations/task-queue-stats.d.ts +22 -0
- package/dist/integrations/task-queue-stats.d.ts.map +1 -0
- package/dist/integrations/task-queue-stats.js +117 -0
- package/dist/integrations/task-queue-stats.js.map +1 -0
- package/dist/integrations/types.d.ts +2 -0
- package/dist/integrations/types.d.ts.map +1 -1
- package/dist/integrations/webhook-handler.d.ts +23 -4
- package/dist/integrations/webhook-handler.d.ts.map +1 -1
- package/dist/integrations/webhook-handler.js +217 -59
- package/dist/integrations/webhook-handler.js.map +1 -1
- package/dist/mcp-client/manager.d.ts +3 -0
- package/dist/mcp-client/manager.d.ts.map +1 -1
- package/dist/mcp-client/manager.js +5 -0
- package/dist/mcp-client/manager.js.map +1 -1
- package/dist/oauth-tokens/google-refresh.d.ts.map +1 -1
- package/dist/oauth-tokens/google-refresh.js +6 -0
- package/dist/oauth-tokens/google-refresh.js.map +1 -1
- package/dist/onboarding/default-steps.d.ts.map +1 -1
- package/dist/onboarding/default-steps.js +10 -3
- package/dist/onboarding/default-steps.js.map +1 -1
- package/dist/org/context.d.ts +35 -0
- package/dist/org/context.d.ts.map +1 -1
- package/dist/org/context.js +136 -0
- package/dist/org/context.js.map +1 -1
- package/dist/org/handlers.d.ts +76 -0
- package/dist/org/handlers.d.ts.map +1 -1
- package/dist/org/handlers.js +411 -2
- package/dist/org/handlers.js.map +1 -1
- package/dist/org/index.d.ts +2 -2
- package/dist/org/index.d.ts.map +1 -1
- package/dist/org/index.js +2 -2
- package/dist/org/index.js.map +1 -1
- package/dist/org/migrations.d.ts.map +1 -1
- package/dist/org/migrations.js +8 -0
- package/dist/org/migrations.js.map +1 -1
- package/dist/org/plugin.d.ts +6 -0
- package/dist/org/plugin.d.ts.map +1 -1
- package/dist/org/plugin.js +71 -7
- package/dist/org/plugin.js.map +1 -1
- package/dist/org/schema.d.ts +38 -0
- package/dist/org/schema.d.ts.map +1 -1
- package/dist/org/schema.js +2 -0
- package/dist/org/schema.js.map +1 -1
- package/dist/org/types.d.ts +7 -0
- package/dist/org/types.d.ts.map +1 -1
- package/dist/scripts/call-agent.d.ts.map +1 -1
- package/dist/scripts/call-agent.js +90 -18
- package/dist/scripts/call-agent.js.map +1 -1
- package/dist/scripts/db/index.d.ts.map +1 -1
- package/dist/scripts/db/index.js +2 -0
- package/dist/scripts/db/index.js.map +1 -1
- package/dist/scripts/db/migrate-user-api-keys.d.ts +24 -0
- package/dist/scripts/db/migrate-user-api-keys.d.ts.map +1 -0
- package/dist/scripts/db/migrate-user-api-keys.js +224 -0
- package/dist/scripts/db/migrate-user-api-keys.js.map +1 -0
- package/dist/scripts/db/wipe-leaked-builder-keys.d.ts +27 -0
- package/dist/scripts/db/wipe-leaked-builder-keys.d.ts.map +1 -0
- package/dist/scripts/db/wipe-leaked-builder-keys.js +163 -0
- package/dist/scripts/db/wipe-leaked-builder-keys.js.map +1 -0
- package/dist/secrets/register-framework-secrets.d.ts +5 -0
- package/dist/secrets/register-framework-secrets.d.ts.map +1 -1
- package/dist/secrets/register-framework-secrets.js +7 -44
- package/dist/secrets/register-framework-secrets.js.map +1 -1
- package/dist/secrets/substitution.d.ts.map +1 -1
- package/dist/secrets/substitution.js +14 -2
- package/dist/secrets/substitution.js.map +1 -1
- package/dist/server/action-discovery.d.ts.map +1 -1
- package/dist/server/action-discovery.js +39 -0
- package/dist/server/action-discovery.js.map +1 -1
- package/dist/server/action-routes.js +1 -1
- package/dist/server/action-routes.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +192 -45
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/auth.d.ts +14 -0
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +232 -17
- package/dist/server/auth.js.map +1 -1
- package/dist/server/builder-browser.d.ts +1 -1
- package/dist/server/builder-browser.d.ts.map +1 -1
- package/dist/server/builder-browser.js +12 -12
- package/dist/server/builder-browser.js.map +1 -1
- package/dist/server/collab-plugin.d.ts +4 -0
- package/dist/server/collab-plugin.d.ts.map +1 -1
- package/dist/server/collab-plugin.js +30 -4
- package/dist/server/collab-plugin.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +106 -100
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/credential-provider.d.ts +43 -2
- package/dist/server/credential-provider.d.ts.map +1 -1
- package/dist/server/credential-provider.js +115 -2
- package/dist/server/credential-provider.js.map +1 -1
- package/dist/server/design-token-utils.d.ts +132 -0
- package/dist/server/design-token-utils.d.ts.map +1 -0
- package/dist/server/design-token-utils.js +714 -0
- package/dist/server/design-token-utils.js.map +1 -0
- package/dist/server/email.d.ts +10 -0
- package/dist/server/email.d.ts.map +1 -1
- package/dist/server/email.js +63 -16
- package/dist/server/email.js.map +1 -1
- package/dist/server/framework-request-handler.d.ts.map +1 -1
- package/dist/server/framework-request-handler.js +38 -3
- package/dist/server/framework-request-handler.js.map +1 -1
- package/dist/server/google-oauth.d.ts +18 -1
- package/dist/server/google-oauth.d.ts.map +1 -1
- package/dist/server/google-oauth.js +21 -4
- package/dist/server/google-oauth.js.map +1 -1
- package/dist/server/index.d.ts +3 -3
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +3 -3
- package/dist/server/index.js.map +1 -1
- package/dist/server/onboarding-html.d.ts.map +1 -1
- package/dist/server/onboarding-html.js +14 -1
- package/dist/server/onboarding-html.js.map +1 -1
- package/dist/server/transcribe-voice.d.ts.map +1 -1
- package/dist/server/transcribe-voice.js +89 -24
- package/dist/server/transcribe-voice.js.map +1 -1
- package/dist/sharing/schema.d.ts +1 -1
- package/dist/styles/agent-native.css +5 -0
- package/dist/templates/default/app/root.tsx +50 -13
- package/dist/templates/default/react-router.config.ts +3 -0
- package/dist/terminal/terminal-plugin.d.ts.map +1 -1
- package/dist/terminal/terminal-plugin.js +23 -3
- package/dist/terminal/terminal-plugin.js.map +1 -1
- package/dist/tools/actions.d.ts +3 -0
- package/dist/tools/actions.d.ts.map +1 -0
- package/dist/tools/actions.js +140 -0
- package/dist/tools/actions.js.map +1 -0
- package/dist/tools/fetch-tool.js +1 -1
- package/dist/tools/fetch-tool.js.map +1 -1
- package/dist/tools/html-shell.d.ts +2 -0
- package/dist/tools/html-shell.d.ts.map +1 -0
- package/dist/tools/html-shell.js +387 -0
- package/dist/tools/html-shell.js.map +1 -0
- package/dist/tools/routes.d.ts +2 -0
- package/dist/tools/routes.d.ts.map +1 -0
- package/dist/tools/routes.js +576 -0
- package/dist/tools/routes.js.map +1 -0
- package/dist/tools/schema.d.ts +575 -0
- package/dist/tools/schema.d.ts.map +1 -0
- package/dist/tools/schema.js +112 -0
- package/dist/tools/schema.js.map +1 -0
- package/dist/tools/store.d.ts +40 -0
- package/dist/tools/store.d.ts.map +1 -0
- package/dist/tools/store.js +190 -0
- package/dist/tools/store.js.map +1 -0
- package/dist/tools/theme.d.ts +2 -0
- package/dist/tools/theme.d.ts.map +1 -0
- package/dist/tools/theme.js +67 -0
- package/dist/tools/theme.js.map +1 -0
- package/dist/transcription/builder-transcription.d.ts.map +1 -1
- package/dist/transcription/builder-transcription.js +26 -14
- package/dist/transcription/builder-transcription.js.map +1 -1
- package/dist/vite/action-types-plugin.d.ts.map +1 -1
- package/dist/vite/action-types-plugin.js +10 -2
- package/dist/vite/action-types-plugin.js.map +1 -1
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +26 -6
- package/dist/vite/client.js.map +1 -1
- package/docs/content/a2a-protocol.md +2 -2
- package/docs/content/authentication.md +51 -0
- package/docs/content/cloneable-saas.md +59 -62
- package/docs/content/faq.md +73 -43
- package/docs/content/getting-started.md +37 -61
- package/docs/content/mcp-clients.md +14 -1
- package/docs/content/messaging.md +284 -0
- package/docs/content/pure-agent-apps.md +55 -28
- package/docs/content/template-calendar.md +61 -56
- package/docs/content/template-clips.md +22 -18
- package/docs/content/template-content.md +36 -26
- package/docs/content/template-dispatch.md +2 -1
- package/docs/content/template-forms.md +13 -11
- package/docs/content/template-slides.md +43 -31
- package/docs/content/template-video.md +49 -22
- package/docs/content/tools.md +107 -0
- package/docs/content/what-is-agent-native.md +89 -105
- package/package.json +4 -1
- package/src/templates/default/app/root.tsx +50 -13
- package/src/templates/default/react-router.config.ts +3 -0
- package/docs/content/integrations.md +0 -198
|
@@ -139,6 +139,57 @@ function MyComponent() {
|
|
|
139
139
|
}
|
|
140
140
|
```
|
|
141
141
|
|
|
142
|
+
## Sign-In with Return URL {#sign-in-return-url}
|
|
143
|
+
|
|
144
|
+
Templates with **public pages** (share links, embeds, marketing pages) often need an in-page CTA that asks anonymous viewers to sign in and brings them back to the page they were on. The framework provides a single entry point for this:
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
/_agent-native/sign-in?return=<same-origin-path>
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
When an anonymous viewer hits this URL, the framework's login page is served. After a successful sign-in (any flow — token, email/password, or Google OAuth), the viewer is 302'd to `return`.
|
|
151
|
+
|
|
152
|
+
The `return` parameter is validated as a **same-origin path**. Network-path references (`//evil.com/...`), absolute URLs, `data:` / `javascript:` schemes, and embedded control characters all fall back to `/`. The validated path is reconstructed from the URL parser, not echoed back from the input.
|
|
153
|
+
|
|
154
|
+
**From a React component:**
|
|
155
|
+
|
|
156
|
+
```tsx
|
|
157
|
+
import { Button } from "@/components/ui/button";
|
|
158
|
+
|
|
159
|
+
function SignInCta() {
|
|
160
|
+
const onClick = () => {
|
|
161
|
+
const ret = window.location.pathname + window.location.search;
|
|
162
|
+
window.location.href =
|
|
163
|
+
"/_agent-native/sign-in?return=" + encodeURIComponent(ret);
|
|
164
|
+
};
|
|
165
|
+
return <Button onClick={onClick}>Sign in</Button>;
|
|
166
|
+
}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Bookmarked private paths
|
|
170
|
+
|
|
171
|
+
When an anonymous user navigates directly to a private path like `/dashboard`, the framework already serves the login page at that URL — after successful sign-in, the page reloads and the user lands on `/dashboard`. No special handling needed; this works for token, email/password, **and** Google OAuth.
|
|
172
|
+
|
|
173
|
+
### Behind the scenes: Google OAuth
|
|
174
|
+
|
|
175
|
+
Both flows (the explicit `/_agent-native/sign-in` entrypoint and the bookmarked-path case) thread the return URL through the OAuth state. The state is HMAC-signed, so it can't be forged in transit. On the callback, the return URL is re-validated as same-origin before the redirect — so a leaked signing key still can't be turned into an open-redirect oracle.
|
|
176
|
+
|
|
177
|
+
If your template wraps `/_agent-native/google/auth-url` directly (e.g. mail and calendar templates do, to widen scopes), accept a `?return=<path>` query and forward it as the sixth argument to `encodeOAuthState`:
|
|
178
|
+
|
|
179
|
+
```typescript
|
|
180
|
+
const returnUrl = getQuery(event).return;
|
|
181
|
+
const state = encodeOAuthState(
|
|
182
|
+
redirectUri,
|
|
183
|
+
undefined,
|
|
184
|
+
desktop,
|
|
185
|
+
false,
|
|
186
|
+
undefined,
|
|
187
|
+
typeof returnUrl === "string" ? returnUrl : undefined,
|
|
188
|
+
);
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
The default `/_agent-native/google/auth-url` route does this automatically — only override if your template needs custom OAuth handling.
|
|
192
|
+
|
|
142
193
|
## Environment Variables {#environment-variables}
|
|
143
194
|
|
|
144
195
|
| Variable | Purpose |
|
|
@@ -1,98 +1,95 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: "Cloneable SaaS"
|
|
3
|
-
description: "
|
|
3
|
+
description: "Fork a working SaaS product and make it yours — agent included."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Cloneable SaaS
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Want to ship your own AI-powered analytics tool? Mail client? Forms builder? Pick a template, and you've got a working SaaS in minutes — agent, database, auth, and deploy pipeline already wired up.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
Most templates give you a blank scaffold and a long TODO list. Agent-native flips that. Each template is a **complete, SaaS-grade product** — already runnable on day one, already shippable, and entirely yours to customize, brand, and deploy.
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
We call them **cloneable SaaS**, not templates. You're not starting from scratch. You're forking a finished product.
|
|
13
13
|
|
|
14
|
-
##
|
|
14
|
+
## Templates available {#catalog}
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
Each one is a real app you could use today, and the launching pad for your own version of it.
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
| Template | What it is |
|
|
19
|
+
| -------------- | --------------------------------------------------------------------------------------------------------- |
|
|
20
|
+
| **Mail** | An agent-native Superhuman. Inbox, labels, AI triage, keyboard-first, drafts and sends through the agent. |
|
|
21
|
+
| **Calendar** | An agent-native Google Calendar. Events, sync, public booking links, agent-driven scheduling. |
|
|
22
|
+
| **Content** | An agent-native Notion / Google Docs. Markdown + Tiptap editor, Notion sync, real-time multi-user collab. |
|
|
23
|
+
| **Slides** | An agent-native Google Slides. React-based decks the agent generates and edits directly. |
|
|
24
|
+
| **Video** | An agent-native video editor on Remotion. Prompt for a cut, the agent assembles it. |
|
|
25
|
+
| **Analytics** | An agent-native Amplitude/Mixpanel. Connect data sources, prompt for charts, pin to dashboards. |
|
|
26
|
+
| **Forms** | An agent-native Typeform. Build, share, and collect; the agent handles schema and submission analysis. |
|
|
27
|
+
| **Issues** | An agent-native Jira. Projects, issues, priorities, with the agent as your project manager. |
|
|
28
|
+
| **Recruiting** | An agent-native Greenhouse. Candidate pipelines, scoring, outreach drafts. |
|
|
29
|
+
| **Dispatch** | The workspace control plane: shared secrets, cross-app integrations, Slack/Telegram, scheduled jobs. |
|
|
30
|
+
| **Starter** | The minimal scaffold. Agent chat plus the architecture, nothing else. Build something new. |
|
|
19
31
|
|
|
20
|
-
|
|
32
|
+
More are in active development: **Clips** (screen recording + transcription), **Calls** (Gong-style conversation intelligence), and **Scheduling** (a standalone scheduling app).
|
|
21
33
|
|
|
22
|
-
|
|
34
|
+
See the full catalog under [Templates](/templates), or jump straight to one — for example, [Dispatch](/docs/template-dispatch) is a great place to start if you want a workspace-style app.
|
|
23
35
|
|
|
24
|
-
|
|
36
|
+
## What you get out of the box {#what-you-get}
|
|
25
37
|
|
|
26
|
-
|
|
27
|
-
| -------------- | --------------------------------------------------------------------------------------------------------------- |
|
|
28
|
-
| **Mail** | An agent-native Superhuman. Inbox, labels, AI triage, keyboard-first, with an agent that can draft and send. |
|
|
29
|
-
| **Calendar** | An agent-native Google Calendar. Events, sync, public booking links, agent-driven scheduling. |
|
|
30
|
-
| **Content** | An agent-native Notion / Google Docs. Markdown + Tiptap editor, Notion sync, multi-user real-time collab. |
|
|
31
|
-
| **Slides** | An agent-native Google Slides. React-based decks the agent generates and edits directly. |
|
|
32
|
-
| **Video** | An agent-native video editor built on Remotion. Prompt for a cut, the agent assembles it. |
|
|
33
|
-
| **Analytics** | An agent-native Amplitude/Mixpanel. Connect data sources, prompt for charts, pin to dashboards. |
|
|
34
|
-
| **Forms** | An agent-native Typeform. Build, share, and collect; agent handles the schema and analysis of submissions. |
|
|
35
|
-
| **Issues** | An agent-native Jira. Projects, issues, priorities, with the agent as your project manager. |
|
|
36
|
-
| **Recruiting** | An agent-native Greenhouse. Candidate pipelines, scoring, outreach drafts. |
|
|
37
|
-
| **Dispatch** | The **workspace control plane**: central secrets vault, cross-app integrations, Slack/Telegram, scheduled jobs. |
|
|
38
|
-
| **Starter** | The minimal scaffold. Agent chat + the six-rules architecture wired up, nothing else. Build from scratch. |
|
|
38
|
+
Every cloneable SaaS ships with the parts that normally take months to build:
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
- **A working agent** — already wired into the app, already able to take actions on your data, already context-aware about what you're looking at. See [Messaging the agent](/docs/messaging) for how it works.
|
|
41
|
+
- **Auth** — sign in, sessions, organizations, multi-tenant isolation. Already done.
|
|
42
|
+
- **A database** — every template has its schema, queries, and migrations ready to go. Bring your own SQL database (Postgres, SQLite, Turso, D1) — the framework adapts.
|
|
43
|
+
- **A real-time UI** — the screen stays in sync with what the agent does. Click "draft an email" in chat, watch the draft appear in your inbox immediately.
|
|
44
|
+
- **Deploy-ready** — push to Netlify, Vercel, Cloudflare, AWS, or anywhere else that runs Node. No vendor lock-in.
|
|
45
|
+
- **Branding hooks** — name, colors, logo, copy are all easy to change.
|
|
41
46
|
|
|
42
|
-
|
|
47
|
+
This isn't a theoretical claim. The framework's author runs his actual inbox on the Mail template, his actual calendar on the Calendar template, and his actual analytics on the Analytics template. Templates are daily-driver software.
|
|
43
48
|
|
|
44
|
-
|
|
49
|
+
## What you do {#what-you-do}
|
|
45
50
|
|
|
46
|
-
|
|
51
|
+
The path from "I want my own SaaS" to "I have my own SaaS" is short:
|
|
47
52
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
The CLI shows a multi-select picker. Pick one app (standalone) or several (workspace — apps share auth, brand, agent config, and database). Each picked template is scaffolded into `apps/<name>/` with every file you need. See [Getting Started](/docs) for the full flow or [Multi-App Workspace](/docs/multi-app-workspace) for the workspace story.
|
|
53
|
-
|
|
54
|
-
### 2. Use it immediately
|
|
55
|
-
|
|
56
|
-
Every template is runnable the moment it scaffolds. Fill in `.env` (mostly `ANTHROPIC_API_KEY` and `DATABASE_URL`), `pnpm install`, `pnpm dev`, and it works. No "TODO: implement login," no placeholder routes.
|
|
53
|
+
1. **Pick a template.** Use the CLI picker, or browse the docs and pick one to start from.
|
|
54
|
+
2. **Brand it.** Change the name, colors, logo, and copy. Most templates expose this in a single config file.
|
|
55
|
+
3. **Customize it.** Ask the agent to add the column you need, change how the inbox groups, connect to your internal API, add a new view. The agent edits the code; you review the diff.
|
|
56
|
+
4. **Ship it.** Run the deploy command. You now have your own production SaaS at your own domain.
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
Steps 2–4 typically take days, not months. Step 3 is open-ended — your forked SaaS evolves over time, in plain English, by talking to the agent.
|
|
59
59
|
|
|
60
|
-
|
|
60
|
+
## Why this is practical {#why}
|
|
61
61
|
|
|
62
|
-
|
|
63
|
-
- "Add a `leadScore` column to contacts and compute it from the last email." _The agent adds the Drizzle column, runs a migration, writes the scoring action._
|
|
64
|
-
- "Connect this to our internal HR API." _The agent writes the integration._
|
|
62
|
+
A traditional fork-the-codebase model breaks down at scale: every user maintaining their own inbox sounds like a maintenance nightmare. Two framework decisions make it work:
|
|
65
63
|
|
|
66
|
-
|
|
64
|
+
1. **The agent does the maintenance.** You don't write code to add a column or wire a new integration — you ask the agent. So "your own forked inbox" is a feature, not a burden.
|
|
65
|
+
2. **Per-user customization without per-user code.** Skills, memory, instructions, connected MCP servers, and sub-agents all live in SQL. Every user gets their own customization layer; the shared codebase hosts all of them at once.
|
|
67
66
|
|
|
68
|
-
|
|
67
|
+
The result: Claude-Code-level flexibility for each user, with normal SaaS deployment economics.
|
|
69
68
|
|
|
70
|
-
|
|
69
|
+
## Don't want to fork? {#hosted}
|
|
71
70
|
|
|
72
|
-
|
|
71
|
+
You don't have to. Every template is also available as a hosted app on `agent-native.com` — `mail.agent-native.com`, `calendar.agent-native.com`, and so on. Use the hosted version for free or paid; fork only when you want to change something the hosted version doesn't expose.
|
|
73
72
|
|
|
74
|
-
|
|
73
|
+
## Building on this
|
|
75
74
|
|
|
76
|
-
|
|
75
|
+
- [**Getting Started**](/docs/getting-started) — clone your first template and run it locally
|
|
76
|
+
- [**Messaging the agent**](/docs/messaging) — how users (and you) talk to the agent that ships with each template
|
|
77
|
+
- [**Multi-App Workspace**](/docs/multi-app-workspace) — bundle several cloneable-SaaS apps into one workspace that shares auth, brand, and agent
|
|
78
|
+
- [**Dispatch**](/docs/template-dispatch) — the workspace control plane template
|
|
79
|
+
- [**Creating Templates**](/docs/creating-templates) — author and publish your own cloneable SaaS
|
|
77
80
|
|
|
78
|
-
|
|
81
|
+
### For developers {#dev-details}
|
|
79
82
|
|
|
80
|
-
|
|
83
|
+
If you're scaffolding now, the CLI command is:
|
|
81
84
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
2. **The workspace is SQL, not files.** Every user gets their own customization layer (skills, memory, instructions, connected MCP servers, sub-agents) without a dev-box. The shared codebase hosts all of them at once. See [Workspace](/docs/workspace).
|
|
86
|
-
|
|
87
|
-
Combined, you get Claude-Code-level flexibility per user, with SaaS-grade deployment economics.
|
|
85
|
+
```bash
|
|
86
|
+
pnpm dlx @agent-native/core create my-platform
|
|
87
|
+
```
|
|
88
88
|
|
|
89
|
-
|
|
89
|
+
You'll get a multi-select picker. Pick one app (standalone) or several (workspace — apps share auth, brand, agent config, and database). Each picked template is scaffolded into `apps/<name>/` with every file you need.
|
|
90
90
|
|
|
91
|
-
|
|
91
|
+
Fill in `.env` (mostly `ANTHROPIC_API_KEY` and `DATABASE_URL`), `pnpm install`, `pnpm dev`, and it works. No "TODO: implement login," no placeholder routes.
|
|
92
92
|
|
|
93
|
-
|
|
93
|
+
Deploy targets: any Nitro-compatible host (Node, Cloudflare, Netlify, Vercel, Deno, Lambda, Bun) and any Drizzle-compatible SQL database (SQLite, Postgres, Turso, D1, Supabase, Neon). For workspaces, `agent-native deploy` builds every app at once and ships them behind a single origin. See [Deployment](/docs/deployment).
|
|
94
94
|
|
|
95
|
-
|
|
96
|
-
- [**Key Concepts**](/docs/key-concepts) — the architecture that makes this work
|
|
97
|
-
- [**Deployment**](/docs/deployment) — ship your forked app
|
|
98
|
-
- [**Creating Templates**](/docs/creating-templates) — author and publish a new cloneable SaaS
|
|
95
|
+
To author and publish your own cloneable SaaS, see [Creating Templates](/docs/creating-templates).
|
package/docs/content/faq.md
CHANGED
|
@@ -1,73 +1,92 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: "FAQ"
|
|
3
|
-
description: "
|
|
3
|
+
description: "Common questions about agent-native — what it is, who it's for, what you can build, and how it works."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# FAQ
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Common questions about agent-native, organized from "I'm just looking" to "I'm wiring up auth right now."
|
|
9
9
|
|
|
10
|
-
##
|
|
10
|
+
## The basics {#general}
|
|
11
11
|
|
|
12
12
|
### What is agent-native? {#what-is-agent-native}
|
|
13
13
|
|
|
14
14
|
Agent-native is a framework for building apps where the AI agent and the UI are equal partners. They share the same database, the same state, and they always stay in sync. Everything the UI can do, the agent can do — and vice versa. See [What Is Agent-Native?](/docs/what-is-agent-native) for the full explanation.
|
|
15
15
|
|
|
16
|
+
### Who is this for? {#who-is-this-for}
|
|
17
|
+
|
|
18
|
+
Anyone who wants to ship an AI-powered product without spending a year building the boring parts. That includes:
|
|
19
|
+
|
|
20
|
+
- **Founders and PMs** who want to fork a working SaaS and make it their own — see [Cloneable SaaS](/docs/cloneable-saas).
|
|
21
|
+
- **Operators** who want a [pure-agent app](/docs/pure-agent-apps) — an agent that does work in the background with a minimal management UI.
|
|
22
|
+
- **Developers** building agent-driven products from scratch and want auth, multi-tenancy, real-time sync, and an architecture that won't break when AI is the primary user.
|
|
23
|
+
|
|
16
24
|
### How is this different from adding AI to an existing app? {#how-is-this-different}
|
|
17
25
|
|
|
18
26
|
Most apps bolt AI on as an afterthought — an autocomplete here, a chat sidebar there. The AI can't actually _do_ things in the app. In an agent-native app, the agent is a first-class citizen. It can create emails, schedule events, build forms, generate slides, and modify the app's own code. The architecture is designed for this from the ground up.
|
|
19
27
|
|
|
20
|
-
###
|
|
28
|
+
### Is it open source? {#is-this-open-source}
|
|
21
29
|
|
|
22
|
-
|
|
30
|
+
Yes. The framework and all templates are open source. You can run everything locally, self-host, or use Builder.io's cloud for managed hosting, collaboration, and team features.
|
|
23
31
|
|
|
24
|
-
###
|
|
32
|
+
### How much does it cost? {#how-much}
|
|
25
33
|
|
|
26
|
-
|
|
34
|
+
The framework itself is free. The two costs you'll see in practice:
|
|
27
35
|
|
|
28
|
-
|
|
36
|
+
- **AI usage.** You bring your own API key (Anthropic, OpenAI, etc.) and pay the model provider directly. There's no markup from us.
|
|
37
|
+
- **Hosting.** Whatever your host charges. Most templates run fine on free tiers (Netlify, Vercel, Cloudflare) for small workloads.
|
|
29
38
|
|
|
30
|
-
|
|
39
|
+
If you'd rather not manage any of this, the hosted version on `agent-native.com` (operated by Builder.io) bundles inference and hosting into a per-seat plan.
|
|
31
40
|
|
|
32
|
-
|
|
41
|
+
### Can I host this myself? {#can-i-self-host}
|
|
33
42
|
|
|
34
|
-
|
|
35
|
-
- **Cursor** — reads .cursorrules (symlinked from AGENTS.md)
|
|
36
|
-
- **Windsurf** — reads .windsurfrules (symlinked from AGENTS.md)
|
|
37
|
-
- **Codex, Gemini, and others** — work via the embedded agent panel
|
|
38
|
-
- **Builder.io** — cloud-hosted agent with visual editing and collaboration
|
|
43
|
+
Yes. Pick any host that runs Node — Netlify, Vercel, Cloudflare, AWS, Deno Deploy, your own server — and any SQL database (Postgres, SQLite, Turso, D1). The framework is built to be portable. See [Deployment](/docs/deployment).
|
|
39
44
|
|
|
40
|
-
###
|
|
45
|
+
### What AI models does it support? {#what-models}
|
|
41
46
|
|
|
42
|
-
|
|
47
|
+
Anthropic Claude, OpenAI (GPT-5 family), Google Gemini, and any provider that speaks the OpenAI API shape (including local models via Ollama). You configure the model in settings; switching is a config change, not a code rewrite. The framework's heaviest tested path is Claude, so that's the default recommendation.
|
|
43
48
|
|
|
44
|
-
###
|
|
49
|
+
### Do I need to know AI/ML? {#do-i-need-to-know-ai}
|
|
45
50
|
|
|
46
|
-
|
|
51
|
+
No. You don't train models, fine-tune, or deal with embeddings. You build a regular web app — and on the hosted version, you barely build anything at all. The framework handles the agent integration: routing messages, running actions, syncing state.
|
|
47
52
|
|
|
48
53
|
### Can I migrate an existing app to agent-native? {#can-i-use-existing-code}
|
|
49
54
|
|
|
50
55
|
You can, but agent-native works best when built from the ground up. The architecture — shared database, polling sync, actions, application state — needs to be integrated throughout. Starting from a template and customizing it is the recommended path. Think of it like the shift from desktop-first to mobile-first: you _can_ retrofit, but building native is better.
|
|
51
56
|
|
|
52
|
-
##
|
|
57
|
+
## Templates and what you can build {#templates}
|
|
53
58
|
|
|
54
|
-
###
|
|
59
|
+
### What templates are available? {#what-templates-are-available}
|
|
55
60
|
|
|
56
|
-
|
|
61
|
+
The framework ships with production-ready templates you can use as daily drivers:
|
|
57
62
|
|
|
58
|
-
|
|
63
|
+
- **[Mail](/templates/mail)** — full-featured email client (like Superhuman)
|
|
64
|
+
- **[Calendar](/templates/calendar)** — Google Calendar + Calendly-style booking links
|
|
65
|
+
- **[Content](/templates/content)** — Notion-style documents
|
|
66
|
+
- **[Slides](/templates/slides)** — presentation builder
|
|
67
|
+
- **[Video](/templates/video)** — video composition with Remotion
|
|
68
|
+
- **[Analytics](/templates/analytics)** — data platform (like Amplitude/Mixpanel)
|
|
69
|
+
- **[Forms](/templates/forms)**, **[Issues](/templates/issues)**, **[Recruiting](/templates/recruiting)**, and the **[Dispatch](/docs/template-dispatch)** workspace control plane.
|
|
59
70
|
|
|
60
|
-
|
|
71
|
+
Each template is a complete app with UI, agent actions, database schema, and AI instructions. See [Cloneable SaaS](/docs/cloneable-saas) for the full picture, or all [Templates](/templates).
|
|
61
72
|
|
|
62
|
-
###
|
|
73
|
+
### Can I customize templates? {#can-i-customize-templates}
|
|
63
74
|
|
|
64
|
-
|
|
75
|
+
That's the whole point. Fork a template and customize it by asking the agent. "Add a priority field to forms." "Connect to our Salesforce instance." "Change the color scheme to match our brand." The agent modifies the code, and your app evolves over time.
|
|
76
|
+
|
|
77
|
+
### Can I build something the templates don't cover? {#build-from-scratch}
|
|
78
|
+
|
|
79
|
+
Yes. Run `npx @agent-native/core create my-app` without picking a template — you get the framework scaffolding (frontend, backend, agent panel, database) but no domain-specific code. See [Getting Started](/docs/getting-started). For agent-first products with no traditional UI, see [Pure-Agent Apps](/docs/pure-agent-apps).
|
|
65
80
|
|
|
66
|
-
## Agent
|
|
81
|
+
## Agent capabilities {#agent-capabilities}
|
|
67
82
|
|
|
68
83
|
### Can the agent really modify the app's own code? {#can-the-agent-modify-code}
|
|
69
84
|
|
|
70
|
-
Yes, and it's a feature. The agent can safely edit components, routes, styles, and actions. You ask "add a cohort analysis chart" and the agent builds it. You ask "connect to our Stripe account" and the agent writes the integration.
|
|
85
|
+
Yes, and it's a feature. The agent can safely edit components, routes, styles, and actions. You ask "add a cohort analysis chart" and the agent builds it. You ask "connect to our Stripe account" and the agent writes the integration. Everything is normal Git-tracked code, so bad changes are easy to revert.
|
|
86
|
+
|
|
87
|
+
### Can users talk to the agent from outside the app? {#external-channels}
|
|
88
|
+
|
|
89
|
+
Yes. The same agent runs in your web UI, in Slack, in Telegram, over email, and from other agents (via [A2A](/docs/a2a-protocol)). It's the same agent with the same memory and the same actions, just reached through different channels. See [Messaging the agent](/docs/messaging).
|
|
71
90
|
|
|
72
91
|
### Can agents talk to each other? {#can-agents-talk-to-each-other}
|
|
73
92
|
|
|
@@ -75,27 +94,38 @@ Yes, via the [A2A (Agent-to-Agent) protocol](/docs/a2a-protocol). Every agent-na
|
|
|
75
94
|
|
|
76
95
|
### What can the agent see in the app? {#what-can-the-agent-see}
|
|
77
96
|
|
|
78
|
-
The agent always knows what the user is currently viewing. The UI writes navigation state to the database on every route change — which view is open, which item is selected. The agent reads this
|
|
97
|
+
The agent always knows what the user is currently viewing. The UI writes navigation state to the database on every route change — which view is open, which item is selected. The agent reads this before taking action. If an email is open, the agent knows which email. If a slide is selected, the agent knows which slide. See [Context Awareness](/docs/context-awareness).
|
|
79
98
|
|
|
80
|
-
##
|
|
99
|
+
## Development questions {#development}
|
|
81
100
|
|
|
82
|
-
###
|
|
101
|
+
### Which AI coding tools work with agent-native? {#which-ai-tools-work}
|
|
83
102
|
|
|
84
|
-
The framework
|
|
103
|
+
Any AI coding tool that reads project instructions. The framework uses AGENTS.md as the universal standard and auto-creates symlinks for specific tools:
|
|
85
104
|
|
|
86
|
-
- **
|
|
87
|
-
- **
|
|
88
|
-
- **
|
|
89
|
-
- **
|
|
90
|
-
- **
|
|
91
|
-
- **[Analytics](/templates/analytics)** — data platform (like Amplitude/Mixpanel)
|
|
105
|
+
- **Claude Code** — reads CLAUDE.md (symlinked from AGENTS.md)
|
|
106
|
+
- **Cursor** — reads .cursorrules (symlinked from AGENTS.md)
|
|
107
|
+
- **Windsurf** — reads .windsurfrules (symlinked from AGENTS.md)
|
|
108
|
+
- **Codex, Gemini, and others** — work via the embedded agent panel
|
|
109
|
+
- **Builder.io** — cloud-hosted agent with visual editing and collaboration
|
|
92
110
|
|
|
93
|
-
|
|
111
|
+
### Can I use my own database? {#can-i-use-my-own-database}
|
|
94
112
|
|
|
95
|
-
|
|
113
|
+
Yes. Set `DATABASE_URL` and the framework auto-detects it. Supported databases include SQLite, Postgres (Neon, Supabase, plain), Turso (libSQL), and Cloudflare D1. All SQL is dialect-agnostic via Drizzle ORM — the same code works everywhere.
|
|
96
114
|
|
|
97
|
-
|
|
115
|
+
### Where can I deploy? {#where-can-i-deploy}
|
|
116
|
+
|
|
117
|
+
Anywhere. The server runs on Nitro, which compiles to any deployment target: Node.js, Cloudflare Workers/Pages, Netlify, Vercel, Deno Deploy, AWS Lambda, and Bun. You can also use Builder.io's hosting for managed deployments. See the [Deployment guide](/docs/deployment).
|
|
118
|
+
|
|
119
|
+
## Architecture {#architecture}
|
|
120
|
+
|
|
121
|
+
### Why polling instead of WebSockets? {#why-polling-not-websockets}
|
|
98
122
|
|
|
99
|
-
|
|
123
|
+
Polling works in every deployment environment — including serverless, edge, and container platforms where persistent connections aren't available. The framework polls every 2 seconds using a lightweight version counter. When changes are detected, React Query caches are invalidated and components re-render. It's simple, reliable, and universal. SSE is also supported as an alternative.
|
|
124
|
+
|
|
125
|
+
### Why can't the UI call an LLM directly? {#why-no-inline-llm-calls}
|
|
126
|
+
|
|
127
|
+
AI is non-deterministic — you need conversation flow to give feedback and iterate, not one-shot buttons. The agent has your full codebase, instructions, skills, and conversation history. An inline LLM call has none of that. Plus, routing everything through the agent means the app can be driven from Slack, Telegram, or another agent via [A2A](/docs/a2a-protocol) — not just the UI.
|
|
128
|
+
|
|
129
|
+
### Why is this a framework and not a library? {#why-framework-not-library}
|
|
100
130
|
|
|
101
|
-
|
|
131
|
+
The shared database, polling sync, actions system, and application state all need to work together as a cohesive architecture. A library could give you pieces, but agent-native requires that the agent and UI are wired together from the ground up. Multiple agents need to be able to communicate, the UI needs to react to agent changes instantly, and the agent needs to understand what the user is looking at. That's an architecture, not a utility.
|
|
@@ -5,37 +5,51 @@ description: "Pick a template, create your app, and start customizing it with AI
|
|
|
5
5
|
|
|
6
6
|
# Getting Started
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
By the end of this page, you'll have a working app — Mail, Calendar, Forms, or any other template — running with an AI agent built into the sidebar that can drive every part of it.
|
|
9
9
|
|
|
10
|
-
##
|
|
10
|
+
## Who is this for? {#who-is-this-for}
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
There are two ways to use agent-native, depending on how hands-on you want to be:
|
|
13
|
+
|
|
14
|
+
- **You want to use a hosted version.** Try a template right now at [agent-native.com/templates](/templates). Each template is a live, hosted app — you sign in, start using it, and the agent is already there. No install, no setup. You can stop reading this page and head straight to the [template gallery](/templates).
|
|
15
|
+
- **You want to run locally or customize it.** You'll clone a template, run it on your machine, and shape it however you want — branding, features, integrations. The rest of this page is for you. You'll need [Node.js](https://nodejs.org) and [pnpm](https://pnpm.io) installed.
|
|
15
16
|
|
|
16
|
-
|
|
17
|
+
Not sure which path? If you've never written code, the hosted version is for you. If you have a developer or AI coding tool ready, the local path gives you total control.
|
|
18
|
+
|
|
19
|
+
## First run {#create-your-app}
|
|
20
|
+
|
|
21
|
+
Three commands and you're up:
|
|
17
22
|
|
|
18
23
|
```bash
|
|
24
|
+
npx @agent-native/core create my-platform
|
|
19
25
|
cd my-platform
|
|
20
|
-
pnpm install
|
|
21
|
-
pnpm dev
|
|
26
|
+
pnpm install && pnpm dev
|
|
22
27
|
```
|
|
23
28
|
|
|
24
|
-
|
|
29
|
+
The `create` command shows a multi-select picker — pick one template or several (Mail + Calendar + Forms, for example) and they all scaffold into one workspace sharing auth, brand, and agent config.
|
|
25
30
|
|
|
26
|
-
|
|
31
|
+
Open the URL the dev server prints (usually `http://localhost:3000`).
|
|
27
32
|
|
|
28
|
-
|
|
29
|
-
npx @agent-native/core create my-app --standalone --template mail
|
|
30
|
-
```
|
|
33
|
+
## What just happened? {#what-just-happened}
|
|
31
34
|
|
|
32
|
-
|
|
35
|
+
You now have a real, full-featured app running on your machine. Open it in the browser and try it:
|
|
33
36
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
+
- Click around the UI like you would any SaaS product.
|
|
38
|
+
- Open the agent panel on the right side. Type something like "show me my settings" or "create a new entry called Welcome." Watch the agent click through the app on your behalf.
|
|
39
|
+
- Anything you do by clicking, the agent can do by reading and writing the same database. Anything the agent does shows up in the UI immediately.
|
|
40
|
+
|
|
41
|
+
That parity between agent and UI is the whole point — see [What Is Agent-Native?](/docs/what-is-agent-native) for the bigger picture.
|
|
42
|
+
|
|
43
|
+
## What's next {#whats-next}
|
|
44
|
+
|
|
45
|
+
From here, use any AI coding tool (Claude Code, Cursor, Windsurf, Builder.io) to customize the app. The agent instructions in `AGENTS.md` are already set up so any tool understands the codebase.
|
|
37
46
|
|
|
38
|
-
|
|
47
|
+
Common next steps:
|
|
48
|
+
|
|
49
|
+
- **Add another app to the same workspace** — run `agent-native add-app` from inside the workspace folder. See [Multi-App Workspace](/docs/multi-app-workspace) for sharing auth, components, and credentials across apps.
|
|
50
|
+
- **Single app instead of a monorepo?** Pass `--standalone` when creating: `npx @agent-native/core create my-app --standalone --template mail`.
|
|
51
|
+
- **Build a brand-new template from scratch** — see [Creating Templates](/docs/creating-templates) for the full Vite, Tailwind, and TypeScript setup.
|
|
52
|
+
- **Understand the architecture** — see [Key Concepts](/docs/key-concepts) for how SQL, actions, polling sync, and context awareness fit together.
|
|
39
53
|
|
|
40
54
|
## Templates {#templates}
|
|
41
55
|
|
|
@@ -55,7 +69,7 @@ Each template is a complete app with UI, agent actions, database schema, and AI
|
|
|
55
69
|
|
|
56
70
|
Browse the [template gallery](/templates) for live demos, or see [Cloneable SaaS](/docs/cloneable-saas) for the full list and the clone → customize → deploy flow.
|
|
57
71
|
|
|
58
|
-
## Project
|
|
72
|
+
## Project structure {#project-structure}
|
|
59
73
|
|
|
60
74
|
Every agent-native app — whether from a template or from scratch — follows the same structure:
|
|
61
75
|
|
|
@@ -67,53 +81,15 @@ my-app/
|
|
|
67
81
|
.agents/ # Agent instructions and skills
|
|
68
82
|
```
|
|
69
83
|
|
|
70
|
-
Templates add domain-specific code on top
|
|
71
|
-
|
|
72
|
-
## Configuration {#configuration}
|
|
73
|
-
|
|
74
|
-
Templates come pre-configured. If you're starting from scratch, here are the config files:
|
|
75
|
-
|
|
76
|
-
```ts
|
|
77
|
-
// vite.config.ts
|
|
78
|
-
import { defineConfig } from "@agent-native/core/vite";
|
|
79
|
-
export default defineConfig();
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
```json
|
|
83
|
-
// tsconfig.json
|
|
84
|
-
{ "extends": "@agent-native/core/tsconfig.base.json" }
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
```css
|
|
88
|
-
/* app/global.css — Tailwind v4 (CSS-first, no tailwind.config.ts needed) */
|
|
89
|
-
@import "tailwindcss";
|
|
90
|
-
@import "@agent-native/core/styles/agent-native.css";
|
|
91
|
-
|
|
92
|
-
@source "./**/*.{ts,tsx}";
|
|
93
|
-
|
|
94
|
-
:root {
|
|
95
|
-
--background: 0 0% 100%;
|
|
96
|
-
--foreground: 220 10% 10%;
|
|
97
|
-
/* ...rest of your shadcn-style tokens */
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
.dark {
|
|
101
|
-
--background: 220 6% 6%;
|
|
102
|
-
--foreground: 0 0% 90%;
|
|
103
|
-
/* ... */
|
|
104
|
-
}
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
The framework auto-injects `@tailwindcss/vite` from `defineConfig()`.
|
|
108
|
-
No `tailwind.config.ts`, `postcss.config.js`, or vite changes needed.
|
|
84
|
+
Templates add domain-specific code on top: database schemas in `server/db/`, API routes in `server/routes/api/`, and actions in `actions/`. Building from scratch? See [Creating Templates](/docs/creating-templates) for `vite.config.ts`, `tsconfig.json`, and Tailwind setup.
|
|
109
85
|
|
|
110
|
-
## Architecture
|
|
86
|
+
## Architecture principles {#architecture-principles}
|
|
111
87
|
|
|
112
|
-
These principles apply to all agent-native apps.
|
|
88
|
+
These principles apply to all agent-native apps. Skim them now, revisit them when you're customizing.
|
|
113
89
|
|
|
114
90
|
1. **Agent + UI are equal partners** — Everything the UI can do, the agent can do, and vice versa. They share the same database and always stay in sync. You don't think about "the agent" and "the app" separately — you think about them together.
|
|
115
91
|
2. **Context-aware** — The agent always knows what you're looking at. If an email is open, it knows which one. If you select text and hit Cmd+I, it can act on just that selection.
|
|
116
|
-
3. **Skills-driven** — Core
|
|
92
|
+
3. **Skills-driven** — Core functionality has written instructions so the agent doesn't explore from scratch every time. New features update all four areas: UI, actions, skills/instructions, and application state.
|
|
117
93
|
4. **Inter-agent communication** — Agents can discover and call each other via the A2A protocol. Tag your analytics agent from the mail app to pull data into a draft.
|
|
118
94
|
5. **Fully portable** — Any SQL database Drizzle supports, any hosting backend Nitro supports, any AI coding tool. These are non-negotiable.
|
|
119
95
|
6. **Fork and customize** — Apps you clone and evolve. The agent can modify the app's own code — components, routes, styles, actions — so it gets better over time.
|
|
@@ -77,7 +77,20 @@ This means users who've installed the claude-in-chrome extension get browser con
|
|
|
77
77
|
|
|
78
78
|
## Remote MCP servers via the settings UI {#remote-via-ui}
|
|
79
79
|
|
|
80
|
-
|
|
80
|
+
MCP (Model Context Protocol) servers give your agent new abilities — like connecting to Zapier, Cloudflare, Composio, or your company's internal tools. Once connected, the agent can use those tools just like its built-in ones.
|
|
81
|
+
|
|
82
|
+
### How to connect a remote MCP server
|
|
83
|
+
|
|
84
|
+
1. **Server name** — a short label for your own reference (e.g. "zapier", "slack-tools").
|
|
85
|
+
2. **URL** — the HTTPS endpoint the MCP server provider gave you (e.g. `https://mcp.zapier.com/s/abc123/mcp`). This is usually found in the provider's dashboard or integration docs.
|
|
86
|
+
3. **Description** (optional) — a note about what this server does.
|
|
87
|
+
4. **Headers** — authentication credentials the server requires, one per line. Most servers need an `Authorization` header. Example: `Authorization: Bearer sk-your-key-here`. The provider's docs will tell you what to put here.
|
|
88
|
+
|
|
89
|
+
Click **Test** to verify the connection before saving. If it succeeds, you'll see the number of tools available. Click **Connect** to add it.
|
|
90
|
+
|
|
91
|
+
### Personal vs Organization scope
|
|
92
|
+
|
|
93
|
+
Two scopes are supported:
|
|
81
94
|
|
|
82
95
|
- **Personal** — only the signed-in user gets the tools. Stored as a user-scope setting.
|
|
83
96
|
- **Team** — everyone in the active organization gets the tools. Owners and admins can add; members see the list read-only. Stored as an org-scope setting.
|