diff --git a/ui/src/components/GroupBadge.tsx b/ui/src/components/GroupBadge.tsx
new file mode 100644
index 00000000..82fae8de
--- /dev/null
+++ b/ui/src/components/GroupBadge.tsx
@@ -0,0 +1,82 @@
+import { X, Loader2 } from "lucide-react";
+import { Badge } from "@/components/ui/badge";
+import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip";
+import { cn } from "@/lib/utils";
+
+type GroupBadgeProps = {
+ name: string;
+ isBuiltin: boolean;
+ skillCount?: number;
+ description?: string | null;
+ onRemove?: () => void;
+ removing?: boolean;
+};
+
+export function GroupBadge({
+ name,
+ isBuiltin,
+ skillCount,
+ description: _description,
+ onRemove,
+ removing = false,
+}: GroupBadgeProps) {
+ const tooltipText = isBuiltin
+ ? `${name} · built-in${skillCount != null ? ` · ${skillCount} skills` : ""}`
+ : `${name}${skillCount != null ? ` · ${skillCount} skills` : ""}`;
+
+ if (isBuiltin) {
+ return (
+
+
+
+ {name}
+
+
+ {tooltipText}
+
+ );
+ }
+
+ return (
+
+
+
+ {name}
+ {onRemove && (
+
+ )}
+
+
+ {tooltipText}
+
+ );
+}