一键导入
mission-control-ui
Skill for using the standardized UI components in Mission Control dashboard. Use these components instead of duplicating patterns.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Skill for using the standardized UI components in Mission Control dashboard. Use these components instead of duplicating patterns.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Keeps a wiki for your code that updates itself — reads your git history and docs so you can ask questions about your codebase. Use when the user asks about codebase documentation, architectural decisions, commit history, changelog generation, or maintaining a wiki for their project.
Open-source memory infrastructure for pi agents. Provides peer representations, reasoning, context assembly, dreaming, and hybrid memory (global + project-scoped) capabilities. Use when tracking user preferences, maintaining context across sessions, building peer mental models, or enabling persistent agent memory.
Generic git↔GitHub sync tools. Push/pull subdirectories (subtree) or standalone repos, manage issues/PRs, and work with git worktrees. Works for any org, any directory structure.
Chat UI building blocks for React/Next.js from ui.inference.sh. Components: container, messages, input, typing indicators, avatars. Capabilities: chat interfaces, message lists, input handling, streaming. Use for: building custom chat UIs, messaging interfaces, AI assistants. Triggers: chat ui, chat component, message list, chat input, shadcn chat, react chat, chat interface, messaging ui, conversation ui, chat building blocks
0xKobold's core programming philosophy. Use when writing code, reviewing PRs, or making architectural decisions. Covers DRY, KISS, functional programming, and NASA's 10 coding rules for safety-critical code.
Curated registry of high-quality agent skills and tools. Use for discovering and installing capabilities for AI agents.
| name | mission-control-ui |
| description | Skill for using the standardized UI components in Mission Control dashboard. Use these components instead of duplicating patterns. |
Skill for using the standardized UI components in Mission Control dashboard.
The @/components/ui-lib directory contains reusable React components for building consistent dashboard views. Always use these components instead of duplicating patterns.
packages/mission-control/src/components/ui-lib/
├── index.ts # Exports all components
├── page-header.tsx # Title + description + badges
├── stat-card.tsx # Single stat with icon
├── stat-grid.tsx # Grid of stat cards
├── category-nav.tsx # Category navigation sidebar
├── item-list.tsx # Scrollable list with items
├── search-bar.tsx # Search input with button
├── empty-state.tsx # Empty data placeholder
├── timestamp.tsx # Formatted timestamp
├── badge-list.tsx # List of badges
├── loading-state.tsx # Loading spinner
└── content-card.tsx # Card with title and icon
import { PageHeader } from "@/components/ui-lib";
<PageHeader
title="Perennial Memory"
description="Long-term semantic storage"
badges={[
{ label: "memories", value: 42 },
{ label: "size", value: "1.2 MB" }
]}
/>
import { StatGrid } from "@/components/ui-lib";
import { Cpu, MemoryStick, Thermometer } from "lucide-react";
<StatGrid
columns={3}
stats={[
{ label: "CPU", value: "45%", icon: Cpu, iconColor: "text-green-400" },
{ label: "Memory", value: "6.2 GB", icon: MemoryStick },
{ label: "Temp", value: "52°C", icon: Thermometer },
]}
/>
import { CategoryNav } from "@/components/ui-lib";
import { Folder } from "lucide-react";
<CategoryNav
title="Categories"
icon={Folder}
categories={[
{ name: "learning", count: 25 },
{ name: "decision", count: 6 },
]}
selected={selectedCategory}
onSelect={setSelectedCategory}
allLabel="Recent"
allCount={42}
/>
import { ItemList } from "@/components/ui-lib";
import { Database } from "lucide-react";
import { Timestamp, BadgeList } from "@/components/ui-lib";
<ItemList
title="Recent Memories"
icon={Database}
badge={42}
items={memories}
maxHeight="h-[500px]"
onSelect={(mem) => console.log(mem)}
renderItem={(mem) => (
<div>
<Timestamp timestamp={mem.timestamp} />
<p className="text-sm line-clamp-3">{mem.content}</p>
<BadgeList items={mem.tags} max={3} />
</div>
)}
/>
import { SearchBar } from "@/components/ui-lib";
<SearchBar
placeholder="Search memories..."
onSearch={(query) => performSearch(query)}
/>
import { Timestamp } from "@/components/ui-lib";
<Timestamp timestamp="2026-03-17T02:32:34.465Z" />
<Timestamp timestamp={new Date()} format="relative" />
<Timestamp timestamp={null} /> {/* Shows "Invalid date" */}
import { BadgeList } from "@/components/ui-lib";
<BadgeList
items={["success", "api", "auth"]}
colorMap={{ error: "bg-red-500/20 text-red-400" }}
max={3}
/>
import { EmptyState } from "@/components/ui-lib";
import { Inbox } from "lucide-react";
<EmptyState
icon={Inbox}
title="No memories found"
description="Try adjusting your search query"
/>
import { LoadingState } from "@/components/ui-lib";
<LoadingState message="Loading memories..." />
import { ContentCard } from "@/components/ui-lib";
import { Settings } from "lucide-react";
<ContentCard
title="Alert Rules"
icon={Settings}
badge={rules.length}
>
{/* Card content */}
</ContentCard>
@/components/ui-lib - Never copy component logic| Component | Key Props | Purpose |
|---|---|---|
| PageHeader | title, description, badges | Page title section |
| StatCard | label, value, icon | Single metric card |
| StatGrid | stats[], columns | Grid of metrics |
| CategoryNav | categories[], selected, onSelect | Category sidebar |
| ItemList | items[], renderItem | Scrollable list |
| SearchBar | placeholder, onSearch | Search input |
| EmptyState | title, description, action | No data placeholder |
| Timestamp | timestamp, format | Date formatting |
| BadgeList | items[], max, colorMap | Tag badges |
| LoadingState | message | Loading spinner |
| ContentCard | title, icon, children | Card container |
Create new components ONLY when:
Add new components to ui-lib/index.ts exports.