The AI-native customer support platform.
Kai and your team, one workspace. Answer customers, investigate bugs and review fixes in one workspace. Your team stays in control.
Kai and your team, one workspace. Answer customers, investigate bugs and review fixes in one workspace. Your team stays in control.
Each agent has one job. Your team sets direction and reviews what ships.
Answers customers
Replies from your help center, snippets, websites and files. Escalates to a teammate or Kai Resolve when a question needs more.
Investigates hard tickets
Reads the session, logs and code read-only, returns a verdict with evidence and starts coding tasks for confirmed bugs.
Builds the fix
Plans the change, edits the code, runs the tests and opens a pull request linked to the ticket. Engineers review and merge.
Plans
Feature request triage and prioritization from your feature requests. Available on Pro.
@@ -42,7 +42,15 @@ NotificationsDrawer const { items } = useNotifications();− useEffect(() => { if (open) refetch(); });+ const socket = useNotificationSocket();+ useEffect(() => {+ if (!open) return;+ return socket.on('notification:new',+ (n) => setItems((p) => [n, ...p]));+ }, [open, socket]); return <Drawer open={open}>
@@ -8,6 +8,18 @@ useNotificationSocket const socket = useSocket();+ const on = useCallback((evt, fn) => {+ socket.on(evt, fn);+ return () => socket.off(evt, fn);+ }, [socket]);− return socket;+ return { on };
@@ -0,0 +1,4 @@+ it('appends a pushed notification',+ async () => {+ render(<NotificationsDrawer open />);+ socket.emit('notification:new', n);+ expect(await findByText(n.title))+ .toBeVisible();
sendSurveyPush returns early without a contact email, but delivery only needs the session's subscription. Remove the guard and add a regression test.