Pitchbar agents adapt to the kind of site they live on. When you set up an agent, the system can auto-detect whether you're running an e-commerce store, a documentation site, a SaaS product, a help center, a marketing site, or an internal knowledge base — and load a vertical preset tuned for that context.
Each preset bundles four kinds of defaults:
resources/widget/src/ui/blocks.tsx);
more renderers (code blocks, FAQ accordions, etc.) follow as
the capability list grows.
| Slug | For sites that… | Capabilities (locked in this version) |
|---|---|---|
ecommerce |
Sell products. Pricing, stock, returns, shipping. | product_card, price_inline, shipping_estimate, cart_handoff, order_status, ticket_escalation |
documentation |
Publish technical docs, API references, SDK guides. | code_block, api_reference_card, version_picker, troubleshoot_steps, ticket_escalation |
saas |
Sell software with pricing, features, and signup. | pricing_card, signup_handoff, feature_compare, account_status, ticket_escalation |
help_center |
Run a public support / FAQ surface with article and ticket flows. | ticket_escalation, kb_article_card, sentiment_routing, ticketing |
marketing |
Capture leads, run case studies, do top-of-funnel content. | lead_capture_inline, demo_booking, case_study_card, ticket_escalation |
internal_kb |
Serve an employee wiki, runbooks, or compliance docs. | policy_lookup, team_handoff, auth_aware, ticket_escalation |
generic |
None of the above, or you'll configure everything yourself. | ticket_escalation only — every vertical exposes this so the LLM can always hand off to a human. |
During onboarding (after you paste your website URL) Pitchbar fetches the homepage, scores a handful of structured signals, and picks the highest-scoring vertical. The signals it weighs:
og:type meta tag (e.g. product,
website, article)
@type values (Schema.org entities like
Product, SoftwareApplication,
FAQPage, TechArticle)
generator meta (Shopify, WooCommerce, Docusaurus,
Mintlify, Zendesk, WordPress…)
/products, /docs,
/help, /api)
app. / dashboard.
subdomains for SaaS; .local /
.internal for KB)
<article> tags and
<pre><code> blocks
Each signal carries a weight; the highest-summing vertical wins. If
no vertical clears a confidence floor of 0.25, the
detector falls back to generic and asks you to pick
manually.
Auto-detection is best-effort. JS-heavy SPAs that ship empty SSR
HTML, or auth-walled hosts, fall back to generic —
you can always pick a vertical manually from the radio cards.
Open /app/agents/{id}/vertical from the agent's nav
tiles. You can:
The system prompt fragment is runtime-applied — it isn't
baked into the agent record, so changing the vertical instantly
changes the prompt with no stale text. Capabilities are runtime too:
the widget receives the live list on every /init call.
Starter prompts and launcher label are merged into the agent record
on apply, so you can edit them in Customize without losing your work
next time you re-apply the same vertical.
Each agent has an optional vertical_overrides JSON
column. Set vertical_overrides.capabilities = [...] to
replace the preset's capability list with your own. The widget reads
the override; the LLM still sees the preset's system fragment so
your overrides don't accidentally weaken the prompt contract.
Both endpoints (POST /app/agents/{agent}/vertical/detect
and POST /app/agents/{agent}/vertical/apply) are gated
by AgentPolicy::update — only members of the agent's
workspace can call them. Cross-workspace access returns 403.
vertical_signals caches the most recent detection on
the agent row so the admin UI can show "auto-detected on …"
without re-fetching.
Phase 1 ships the data model, detection, presets, admin UX, and
exposes capabilities to the widget. Phase 2 (tool /
function calling) is partially shipped — the ToolRegistry
in app/Services/Tools/ToolRegistry.php is wired, and
the first tool (EscalateToHumanTool) ships gated to
the ticket_escalation capability. Vertical-specific
tools (product_lookup for e-commerce, etc.) follow as
integrations land. Phase 3 (rich-message renderers in the widget)
is partially shipped — resources/widget/src/ui/blocks.tsx
renders product, pricing, case-study, and escalation blocks the
LLM emits via inline-XML markers; additional renderers follow as
we extend the capability list.