Prompt (marketing + docs): note that MCP clients load servers at startup, so the user likely needs to restart their client or open a new chat before Executor tools appear, and recommend Executor Cloud as the fastest path. Marketing: complete the scaffolded PostHog wiring (gated on PUBLIC_POSTHOG_KEY, first-party proxied, autocapture and pageviews off) and capture a marketing_setup_prompt_copied event when the prompt is copied.
Unified · Split
| @@ -28,7 +28,7 @@ Help me set up Executor and get my first connection working. · 27 unmodified lines | |||
| 28 | 28 | ||
| 29 | Executor is an open source integration layer for AI agents: one place to configure every integration (MCP servers, OpenAPI specs, GraphQL APIs) and connect to them over MCP. | 29 | Executor is an open source integration layer for AI agents: one place to configure every integration (MCP servers, OpenAPI specs, GraphQL APIs) and connect to them over MCP. |
| 30 | 30 | ||
| 31 | Start by helping me pick the right form to run it in. Chat with me about it rather than jumping straight to a yes/no question, and recommend one. All forms expose the same functionality, just packaged differently: | 31 | Start by helping me pick the right form to run it in. Chat with me about it rather than jumping straight to a yes/no question, and recommend one. If I just want the fastest path, suggest Executor Cloud (free tier, nothing to install). All forms expose the same functionality, just packaged differently: |
| 32 | 32 | ||
| 33 | Local (everything stays on my machine): | 33 | Local (everything stays on my machine): |
| 34 | - Desktop app: a native app for Mac, Windows, and Linux. Best for a regular desktop environment. | 34 | - Desktop app: a native app for Mac, Windows, and Linux. Best for a regular desktop environment. |
| @@ -50,8 +50,8 @@ Terms you'll come across: · 15 unmodified lines | |||
| 50 | 50 | ||
| 51 | Once you know which form I want: | 51 | Once you know which form I want: |
| 52 | 1. Walk me through installing it. | 52 | 1. Walk me through installing it. |
| 53 | 2. Connect Executor to you over MCP. | 53 | 2. Connect Executor to you over MCP. Most MCP clients only load servers at startup, so after adding it I may need to restart the client or open a new chat before the Executor tools appear. Tell me if that's needed and wait for me to do it before continuing. |
| 54 | 3. Help me add my first integration and get one tool working end to end. | 54 | 3. Once the tools are available, help me add my first integration and get one tool working end to end. |
| 55 | 55 | ||
| 56 | Docs: https://executor.sh/docs | 56 | Docs: https://executor.sh/docs |
| 57 | Source (and the place to start if something breaks): https://github.com/RhysSullivan/executor | 57 | Source (and the place to start if something breaks): https://github.com/RhysSullivan/executor |
| @@ -45,5 +45,31 @@ const canonical = new URL(Astro.url.pathname, Astro.site ?? Astro.url).toString( · 44 unmodified lines | |||
| 45 | </head> | 45 | </head> |
| 46 | <body class="antialiased"> | 46 | <body class="antialiased"> |
| 47 | <slot /> | 47 | <slot /> |
| 48 | <script> | ||
| 49 | // Gated PostHog init. Runs only when PUBLIC_POSTHOG_KEY is set in the | ||
| 50 | // deploy env, so it's a no-op in dev / unconfigured builds (and the SDK | ||
| 51 | // isn't even shipped, thanks to the dynamic import). Events are proxied | ||
| 52 | // first-party through src/middleware.ts to survive adblockers. | ||
| 53 | // autocapture and pageviews are off on purpose: we only send the explicit | ||
| 54 | // events the page fires (e.g. the "Set up with your agent" copy). Flip | ||
| 55 | // capture_pageview on if you want a denominator for conversion. | ||
| 56 | const phKey = import.meta.env.PUBLIC_POSTHOG_KEY; | ||
| 57 | if (phKey) { | ||
| 58 | const phPath = (import.meta.env.PUBLIC_ANALYTICS_PATH ?? "a").replace( | ||
| 59 | /^\/+|\/+$/g, | ||
| 60 | "", | ||
| 61 | ); | ||
| 62 | void import("posthog-js").then(({ default: posthog }) => { | ||
| 63 | posthog.init(phKey, { | ||
| 64 | api_host: `${window.location.origin}/api/${phPath}`, | ||
| 65 | ui_host: import.meta.env.PUBLIC_POSTHOG_HOST ?? "https://us.posthog.com", | ||
| 66 | autocapture: false, | ||
| 67 | capture_pageview: false, | ||
| 68 | persistence: "localStorage", | ||
| 69 | }); | ||
| 70 | Object.assign(window, { posthog }); | ||
| 71 | }); | ||
| 72 | } | ||
| 73 | </script> | ||
| 48 | </body> | 74 | </body> |
| 49 | </html> | 75 | </html> |
| @@ -12,7 +12,7 @@ const setupPrompt = `Help me set up Executor and get my first connection working · 11 unmodified lines | |||
| 12 | 12 | ||
| 13 | Executor is an open source integration layer for AI agents: one place to configure every integration (MCP servers, OpenAPI specs, GraphQL APIs) and connect to them over MCP. | 13 | Executor is an open source integration layer for AI agents: one place to configure every integration (MCP servers, OpenAPI specs, GraphQL APIs) and connect to them over MCP. |
| 14 | 14 | ||
| 15 | Start by helping me pick the right form to run it in. Chat with me about it rather than jumping straight to a yes/no question, and recommend one. All forms expose the same functionality, just packaged differently: | 15 | Start by helping me pick the right form to run it in. Chat with me about it rather than jumping straight to a yes/no question, and recommend one. If I just want the fastest path, suggest Executor Cloud (free tier, nothing to install). All forms expose the same functionality, just packaged differently: |
| 16 | 16 | ||
| 17 | Local (everything stays on my machine): | 17 | Local (everything stays on my machine): |
| 18 | - Desktop app: a native app for Mac, Windows, and Linux. Best for a regular desktop environment. | 18 | - Desktop app: a native app for Mac, Windows, and Linux. Best for a regular desktop environment. |
| @@ -34,8 +34,8 @@ Terms you'll come across: · 15 unmodified lines | |||
| 34 | 34 | ||
| 35 | Once you know which form I want: | 35 | Once you know which form I want: |
| 36 | 1. Walk me through installing it. | 36 | 1. Walk me through installing it. |
| 37 | 2. Connect Executor to you over MCP. | 37 | 2. Connect Executor to you over MCP. Most MCP clients only load servers at startup, so after adding it I may need to restart the client or open a new chat before the Executor tools appear. Tell me if that's needed and wait for me to do it before continuing. |
| 38 | 3. Help me add my first integration and get one tool working end to end. | 38 | 3. Once the tools are available, help me add my first integration and get one tool working end to end. |
| 39 | 39 | ||
| 40 | Docs: https://executor.sh/docs | 40 | Docs: https://executor.sh/docs |
| 41 | Source (and the place to start if something breaks): https://github.com/RhysSullivan/executor`; | 41 | Source (and the place to start if something breaks): https://github.com/RhysSullivan/executor`; |
| @@ -204,6 +204,7 @@ Source (and the place to start if something breaks): https://github.com/RhysSull · 162 unmodified lines | |||
| 204 | type="button" | 204 | type="button" |
| 205 | class="btn-secondary copy-btn" | 205 | class="btn-secondary copy-btn" |
| 206 | data-copy={setupPrompt} | 206 | data-copy={setupPrompt} |
| 207 | data-event="marketing_setup_prompt_copied" | ||
| 207 | > | 208 | > |
| 208 | Set up with your agent | 209 | Set up with your agent |
| 209 | <span class="copy-icons" aria-hidden="true"> | 210 | <span class="copy-icons" aria-hidden="true"> |
| @@ -439,6 +440,16 @@ Source (and the place to start if something breaks): https://github.com/RhysSull · 229 unmodified lines | |||
| 439 | try { | 440 | try { |
| 440 | await navigator.clipboard.writeText(text); | 441 | await navigator.clipboard.writeText(text); |
| 441 | btn.dataset.copied = "true"; | 442 | btn.dataset.copied = "true"; |
| 443 | const event = btn.dataset.event; | ||
| 444 | if (event) { | ||
| 445 | ( | ||
| 446 | window as unknown as { | ||
| 447 | posthog?: { | ||
| 448 | capture: (e: string, p?: Record<string, unknown>) => void; | ||
| 449 | }; | ||
| 450 | } | ||
| 451 | ).posthog?.capture(event, { surface: "marketing_hero" }); | ||
| 452 | } | ||
| 442 | } catch { | 453 | } catch { |
| 443 | btn.dataset.copied = "false"; | 454 | btn.dataset.copied = "false"; |
| 444 | } | 455 | } |