+ {skillContent}
+
+ )
+}
diff --git a/web/src/shared/components/landing-quick-start.tsx b/web/src/shared/components/landing-quick-start.tsx
new file mode 100644
index 00000000..2d737230
--- /dev/null
+++ b/web/src/shared/components/landing-quick-start.tsx
@@ -0,0 +1,136 @@
+import { useState } from 'react'
+import { useTranslation } from 'react-i18next'
+import { Bot, Check, Copy, UserRound } from 'lucide-react'
+
+type LandingQuickStartTabId = 'agent' | 'human'
+
+interface LandingQuickStartTab {
+ id: LandingQuickStartTabId
+ label: string
+ description: string
+ command: string
+}
+
+function CompactCopyButton({ text }: { text: string }) {
+ const { t } = useTranslation()
+ const [copied, setCopied] = useState(false)
+
+ const handleCopy = async () => {
+ try {
+ await navigator.clipboard.writeText(text)
+ setCopied(true)
+ window.setTimeout(() => setCopied(false), 2000)
+ } catch (err) {
+ console.error('Failed to copy:', err)
+ }
+ }
+
+ const label = copied ? (t('copyButton.copied') || 'Copied') : (t('copyButton.copy') || 'Copy')
+
+ return (
+
+ )
+}
+
+export function LandingQuickStartSection() {
+ const { t } = useTranslation()
+ const [activeTab, setActiveTab] = useState+ {t('landing.quickStart.description', { defaultValue: t('landing.quickStart.subtitle') })} +
++ {currentTab.description} +
+ +
+ {currentTab.command}
+
+