본문으로 건너뛰기
cccskills
무료GitHub에 공개

kortix-ui

Build React interfaces for Kortix using @kortix/ui components. The skill covers forms, dialogs, notifications, and chat views, with shared styling rules, brand customization through CSS variables, and checks for types, controls, and responsive layouts.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

원문원문 설명 보기

Build React UI with @kortix/ui, the Kortix component library and the whole Kortix session experience as modules (session workspace, thread, composer, side panel, files, file viewer, terminal, project sidebar and home, customize pages): Kortix Apps, white-label hosts, custom dashboards on @kortix/sdk and apps/web. Load before you write a component, a page, a chat or session view, a custom dashboard or App, or a className in a React host that renders Kortix UI, or when you theme Kortix components for another brand. Covers setup, the module map, which component to compose, banned primitives, tokens, the dashboard guide, white-label theming and the verify steps.

연동 도구X (Twitter)
설치 방법 보기

이럴 때 유용합니다

  • Building forms and dialogs with existing components
  • Adding a chat view with SessionThread
  • Adapting component colors and logos to another brand
  • Checking light, dark, and mobile layouts

포함된 파일(4)

  • SKILL.md14.9 KB
  • references/custom-dashboard.md21.3 KB
  • references/modules.md23.1 KB
  • references/theming.md5.9 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

@kortix/ui

@kortix/ui is the one React component library for every Kortix surface: apps/web, Kortix Apps, the white-label demo and SDK customer apps. Components are Tailwind v4 class strings that read CSS variables. Docs: https://kortix.com/docs/sdk/ui. Live catalog: https://kortix.com/design-system.

Install: npm i @kortix/ui @kortix/sdk, the same version of each (peers: references/custom-dashboard.md). Module entries and @kortix/ui/theme need 0.14.4+. Inside kortix-ai/suna: "workspace:*". Never copy component source.

1. Set up once

  1. Styles. A Tailwind v4 host: @import 'tailwindcss'; @import '@kortix/ui/tailwind.css'; in its main CSS, plus the optional peers tw-animate-css, tailwind-scrollbar, tailwind-scrollbar-hide. A host without Tailwind imports @kortix/ui/styles.css once: every class the package uses, none of yours.
  2. Fonts. @kortix/ui/fonts.css (Roobert) is for Kortix-owned surfaces only. A white-label host never imports it.
  3. Mount once at the root: QueryClientProvider, UiProvider (link, navigation: your router, observesHistory: true under Next.js; components: host slots, a missing slot hides its control; config: managedModelsEnabled, connectorsEnabled, terminalEnabled, cliConnectEnabled, publicSharesEnabled, commandPaletteShortcut, settingsShortcut, accountApiEnabled; resolvePreviewUrl; useBrand: your marks; i18n, strings, image, useViewerId: without it no sender name or "Stopped by" shows), IconProvider (@kortix/ui/icon-provider), one <Toaster /> (@kortix/ui/toast). setUiTelemetry (@kortix/ui) once at module load. Dark mode is dark on <html>. SDK billingEnabled stays off (Kortix's app only).
  4. Ids, never route params. SessionThread, SessionWorkspace and ProjectHome mount SessionIdsProvider and the SDK project scope themselves. A block outside them: KortixProjectProvider (@kortix/sdk/react) and SessionIdsProvider (projectId, sessionId) around it. Links follow setUiRoutes (@kortix/ui): map each page you do not serve to null.
  5. Import by subpath: import { Modal } from '@kortix/ui/modal'. The root @kortix/ui (section 7) needs no @kortix/sdk.

2. Compose before you create

JobComposeSubpath
Dialog or sheetModal, ModalContent, ModalHeader, ModalTitle, ModalBody, ModalFootermodal
Destructive actionConfirmDialog before the mutation, never a single clickconfirm-dialog
Tooltip on an icon buttonHint label="…"hint
Toast after a mutationsuccessToast, errorToast, infoToast, warningToast, loadingToasttoast
Status chip; count beside a labelBadge size="sm"; CountBadge (waiting, reminder, conflict, neutral)badge, count-badge
Inline alertInfoBanner tone="…" title="…"info-banner
Pending spinnerLoading (default export)loading
Expand and collapseDisclosure, DisclosureTrigger, DisclosureContentdisclosure
Form field; search fieldField, FieldLabel, FieldGroup, FieldDescription with Input, Textarea, Select; InputGroupSearchfield, input-group
Panel; buttons side by sideCard and its slots, or bg-popover rounded-md border px-4 py-5; ButtonGroupcard, button-group
Tabs and filtersTabs, TabsList, TabsListCompacttabs
Menu, picker, paletteDropdownMenu, Popover, Commanddropdown-menu, popover, command
Table and empty listTable; Empty with one muted linetable, empty

A new primitive is the last step: tokens only, a small API, and a section on /design-system.

3. Banned

NeverUse
Dialog / DialogContent in feature codeModal
Tooltip primitives in feature codeHint
toast() from sonner, toast.success()the toast helpers and <Toaster />, all from @kortix/ui/toast; a host needs no sonner import
An icon with animate-spin, CircleNotchIcon, SpinnerIconLoading
A hand-rolled chip <span> or a colored bannerBadge, InfoBanner
SectionCard, List / ListRowCard, <ul className="space-y-2"> rows
lucide-react or another icon set@phosphor-icons/react, *Icon names, no weight prop (only weight="fill" for solid status glyphs)
A fork or a restyled copy of a componentthe component as it ships; theme with tokens (section 6)

4. Tokens only

  • Colors are semantic utilities (bg-background, bg-card, bg-muted, text-muted-foreground, border-border, bg-primary, text-destructive). Never a hex, rgb(), oklch() or a palette class (text-emerald-600).
  • --spacing is 0.23rem, 8% tighter than stock Tailwind: a 16px mockup gap is gap-4, never gap-[16px].
  • rounded-md for panels and fields; elevation only on overlays. Hover is transition-colors duration-fast; no motion over 300 ms.

5. Status tones

One meaning per hue. StatusTone (@kortix/ui/status): success, warning, destructive, info, neutral, for InfoBanner tone, StatusBadge, STATUS_DOT; Badge variants map the same, muted for neutral. Tinted icon tile: bg-kortix-green/15 (or -orange, -blue) with the icon in the full hue.

6. White-label

Theme with @kortix/ui/theme, never by forking a component: themeToCss(theme) in a <style> for the app, <ThemeScope theme> for one subtree (its overlays portal into it). KortixTheme fields are all optional: light / dark colors (blue accent, ring focus, border, muted, foreground, background, primary, any --custom), radius, borderWidth, fonts.sans / fonts.mono, spacing, text, lineHeights, shadows, durations, easing, vars. Pass the organization's marks to UiProvider useBrand. Every key, default and limit: references/theming.md.

7. Components

Import fromNames
@kortix/ui (adapters)cn, UiProvider, defaultUiStrings, useUiStrings, useUiLink, useUiImage, useUiBrand, UiStrings, UiStringsInput, UiLinkProps, UiLinkComponent, UiImageProps, UiImageComponent, UiBrand, UseUiBrand, useIsDark, useUiRouter, useUiShallowNavigate, UiShallowNavigate, useUiPathname, useUiSearchParams, useUiParams, defaultUiNavigation, UiNavigation, UiRouter, UiRouteParams, UiSearchParams, useUiViewerId, useUiHostConfig, defaultUiHostConfig, UiHostConfig, SessionIdsProvider, useSessionIds, UiSessionIds
@kortix/ui (actions, display)Button, buttonVariants, ButtonProps, Badge, badgeVariants, Card, CardAction, CardButton, CardContent, CardDescription, CardEyebrow, CardFeature, CardFooter, CardGroup, CardHeader, CardImage, CardMedia, CardTitle, CardButtonProps, CardButtonSize, CardButtonVariant, CardGroupProps, CardLogo, CardProps, Separator, Skeleton
@kortix/ui (forms)Input, inputFocusClasses, inputInvalidClasses, inputSurfaceClasses, inputTransitionClasses, InputProps, useAutosizeTextArea, Textarea, AutosizeTextAreaRef, AutosizeTextAreaProps, Label, Checkbox, CheckboxProps, CheckboxVariant, Switch, SwitchProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, SelectTriggerProps
@kortix/ui (overlays)Modal, ModalBody, ModalClose, ModalContent, ModalContentInner, ModalDescription, ModalFooter, ModalHeader, ModalOverlay, ModalPortal, ModalTitle, ModalTrigger, Hint, HintProps, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger
@kortix/ui (primitives, not for feature code: section 3)Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger
@kortix/ui (navigation)FilterBar, FilterBarItem, Tabs, TabsContent, TabsList, TabsListCompact, TabsTrigger, TabsTriggerCompact, tabsTriggerHeightVariants, tabsTriggerPaddingVariants, tabsTriggerTextVariants, TabsListType, TabsSize, TabsTriggerSize, TabsTriggerVariant, TabsUnderlineSize
@kortix/ui (conversation)Bubble, BubbleContent, BubbleGroup, BubbleReactions, bubbleVariants, Message, MessageAvatar, MessageContent, MessageFooter, MessageGroup, MessageHeader, Marker, MarkerContent, MarkerIcon, markerVariants
@kortix/ui (hooks, helpers)UiLink, UiImage, useUiViewer, UiViewer, UiHostComponents, UiPreviewUrlResolver, UiPreviewRequest, useDebounce, useIsMobile, useMediaQuery, useSlashFocus, lazyClient, spring, floatingZ, dialogContentZ, dialogOverlayZ, useDialogDepth, hasOpenFloatingLayer, hasOpenNestedDialog, DEFAULT_ICON_WEIGHT, ICON_WEIGHTS, SHIPPED_ICON_WEIGHTS, faviconUrlForHostname, setUiTelemetry, setUiHostEnv, setUiRoutes, uiRoutes, defaultUiRoutes, UiRoutes
@kortix/ui/themeKortixTheme, themeToCss, themeToCssVars, ThemeScope, ThemeScopeProps, THEME_COLOR_VARS, ThemeColor, ThemeColors, ThemeCssVars, ThemeTextStep, ThemeShadowStep, ThemeDurationStep, ThemeEasing, WALLPAPERS, DEFAULT_WALLPAPER_ID, getWallpaperById, Wallpaper
@kortix/ui/session (whole thread)SessionThread, SessionThreadProps
@kortix/ui/session (blocks)UserMessage, ThrottledMarkdown, UnifiedMarkdown, UnifiedMarkdownProps, ToolPartRenderer, SessionChatInput, SessionChatInputProps, AgentSelector, ModelSelector, ModelSelectorProps, SessionPermissionPrompt, QuestionPrompt, QuestionPromptHandle, TurnErrorDisplay, SessionBusyIndicator, SessionStartingLoader
@kortix/ui/session (tool rows, pickers)ToolRegistry, ToolProps, ToolComponent, BasicTool, BasicToolProps, GenericTool; for a form outside a session: ModelSelector, AgentSelector

Every other primitive is one subpath per file: @kortix/ui/<file name> (@kortix/ui/dot-matrix/<name> for the dot matrices). Also: lib/telemetry (UiTelemetryRegister: declaration-merge event), error-boundary (ErrorBoundary, ErrorBoundaryFallback).

8. Modules

One entry per module. Its curated names are the public API (semver). Every name, prop and a compiling example: references/modules.md.

EntryWhat it isMinimal mount
@kortix/ui/workspaceProject screens: SessionWorkspace (thread + side panel), ProjectHome, ProjectSessionList, ProjectFilesView<SessionWorkspace session={useSession(p, s)} />; the list inside SidebarProvider
@kortix/ui/sessionThe conversation: SessionThread, turns, ToolRegistry, prompts, pickers<SessionThread session={useSession(p, s)} />
@kortix/ui/composerThe composer, its chrome, the send pipeline<ComposerChatInput projectId onSend /> in the project scope
@kortix/ui/session-panelThe side panel: ActionPanel, SessionFiles, SessionChanges, SessionAuditSessionPanelProvider (runtime sessionId, projectId, projectSessionId)
@kortix/ui/filesProject files (git repo), sandbox files, FilePreviewHostProjectFilesView (workspace); <FilePreviewHost /> once on a page without a side panel
@kortix/ui/file-viewerAny file kind: pdf, docx, xlsx, csv, pptx, zip, images, code<FileViewer content fileName />; FileContentRenderer in FileSourceProvider
@kortix/ui/terminal, @kortix/ui/browserThe session shell; the sandbox browserthe runtime ids of a mounted useSession
@kortix/ui/markdown, @kortix/ui/genuiMarkdown with code, math, links; GenUI blocks<UnifiedMarkdown content trust="agent" />
@kortix/ui/diff, @kortix/ui/changesOne diff; a change list<DiffView before after />
@kortix/ui/appsApp frames, the frame pool, the App view modelnone
@kortix/ui/access, @kortix/ui/customizeSharing and roles; project configuration pages<ConnectorsPage projectId />
@kortix/ui/theme, @kortix/ui/i18n, @kortix/ui/iconsTheme; useTranslations, useLocale (next-intl signatures); glyphsnone

Deep paths (@kortix/ui/internal/*, @kortix/ui/<module>/<path>) have no semver: only Kortix's own apps import them (scripts/deep-exports.json).

9. Recipes

import { useSession } from '@kortix/sdk/react';
import { SessionWorkspace } from '@kortix/ui/workspace';
export function Session({ projectId, sessionId }: { projectId: string; sessionId: string }) {
  return <SessionWorkspace session={useSession(projectId, sessionId)} />;
}
  • The parent sets the height (also of ProjectFilesView). Install @tanstack/react-query, @openuidev/lang-core@0.3.1 and zod with it. SessionThread (@kortix/ui/session) is the thread alone; with no side panel, file and preview opens show in a dialog.
  • A custom tool row: ToolRegistry.register('<tool name>', Row); Row gets ToolProps, draws BasicTool.
  • A whole dashboard or App (client, router adapters, sidebar, project home, session, files, theme, tool row, App sign-in): references/custom-dashboard.md. Never a raw fetch: the SDK has the call, or gets it.

10. Verify

  1. tsc --noEmit adds no error. Run the page in light and dark, at 720 × 480 and a phone width; click every control.
  2. Your diff has no hex, rgb(, -[ spacing bracket, lucide-react, toast( or animate-spin. Kortix-internal: .agents/skills/kortix-brand/scripts/audit.sh <paths> is clean. White-label: a new --kortix-blue reaches a checked Switch.

11. Kortix-internal work

In kortix-ai/suna, kortix-brand (values, voice) and kortix-design-system (which component) in .agents/skills/ win over this file. apps/web imports @kortix/ui like any host and keeps no re-export shims: edit the component in packages/ui/src/.

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

Review Slack access requests against Okta role and team information, then prepare narrowly scoped GitHub or AWS IAM permissions. Apply changes only after an eligible person's approval and record the grant, reasoning, approver, and timestamp.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Reviewing GitHub repository access requests from Slack
  • Preparing AWS IAM permissions for a specific task
  • Routing sensitive access requests for additional review
kortix-ai/suna2만2026년 10월 21일 업데이트

Research companies and people before outreach or meetings. Combines business profiles, recent news, hiring signals, and key contacts into a sourced brief with talking points and suggested questions, adding relationship history when CRM data is connected.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Research a prospective customer before outreach
  • Prepare background information for meeting attendees
  • Compare a competitor's products and positioning
kortix-ai/suna2만2026년 10월 21일 업데이트

Review daily Google Ads and Meta Ads results for budget pacing, declining performance, and unusual activity. Get prioritized findings with supporting numbers and concrete recommendations for a marketing team to assess and carry out.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Checking whether campaign budgets are being spent on schedule
  • Investigating rising acquisition costs or falling ad returns
  • Finding ads and keywords that spend without converting
kortix-ai/suna2만2026년 10월 21일 업데이트

Automate website tasks such as navigating pages, filling forms, clicking buttons, taking screenshots, and extracting data. The skill also supports web app testing, with specialized guides for Electron desktop apps, Slack, and cloud browsers.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Automate form entry and page navigation
  • Capture screenshots and extract page data
  • Explore web apps for bugs
kortix-ai/suna2만2026년 10월 21일 업데이트

Process emailed vendor invoices by extracting details, comparing them with purchase orders and invoice history, and recording duplicates, overcharges, or missing orders. Summarize results in Slack for human review; payment approval and execution remain with people.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Checking incoming invoices against purchase orders
  • Finding duplicate invoices and likely resends
  • Reviewing unit prices and remaining order balances
kortix-ai/suna2만2026년 10월 21일 업데이트

billing

무료

Guide changes to Kortix billing code, admin controls, and pricing screens. Explain how plans, trials, enterprise contracts, and access exceptions should work, where pricing is defined, and which audited routes must handle account changes.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Update billing logic and its specification together
  • Review how trials and enterprise contracts are handled
  • Find the code that defines prices and allowances
kortix-ai/suna2만2026년 10월 21일 업데이트

kortix-ai의 스킬 모두 보기

이 스킬의 문제 신고