{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "loopkit",
  "homepage": "https://loopkitui.com",
  "items": [
    {
      "name": "approval-card",
      "type": "registry:component",
      "title": "Approval Card",
      "description": "A request card with risk level, context chips, a diff preview and a countdown. Approve or reject with a click or a key, and a stamp lands on the card.",
      "meta": {
        "tier": "free"
      }
    },
    {
      "name": "mode-switch",
      "type": "registry:component",
      "title": "Mode Switch",
      "description": "A three-way autonomy switch with a sliding pill and a one-line explanation of what each mode means for the agent.",
      "meta": {
        "tier": "free"
      }
    },
    {
      "name": "cost-meter",
      "type": "registry:component",
      "title": "Cost Meter",
      "description": "Live token and dollar counter for a run, with a budget bar, an 80% warning line and a spend sparkline.",
      "meta": {
        "tier": "free"
      }
    },
    {
      "name": "tool-call-viewer",
      "type": "registry:component",
      "title": "Tool Call Viewer",
      "description": "A collapsible card for one tool or MCP call: name, server, status, latency, and highlighted JSON for args and result.",
      "meta": {
        "tier": "free"
      }
    },
    {
      "name": "run-timeline",
      "type": "registry:component",
      "title": "Run Timeline",
      "description": "A vertical timeline of plan, tool, approval and message steps, with a progress rail that fills as the run moves.",
      "meta": {
        "tier": "pro"
      }
    },
    {
      "name": "agent-chat",
      "type": "registry:component",
      "title": "Agent Chat",
      "description": "A chat panel where the agent's tool calls show inline as dashed chips before the streamed answer. Ships with a scripted demo; plug your stream into `onSend`.",
      "meta": {
        "tier": "pro"
      }
    },
    {
      "name": "audit-log",
      "type": "registry:component",
      "title": "Audit Log",
      "description": "Every entry is signed with HMAC-SHA256 over its content and the previous signature. Change one row and verification breaks from that row on. Real Web Crypto, not a mock.",
      "meta": {
        "tier": "pro"
      }
    },
    {
      "name": "policy-prompt",
      "type": "registry:component",
      "title": "Policy Prompt",
      "description": "A permission dialog that lists what the agent wants to read, write, run or reach, lets the user untick items, and asks for how long.",
      "meta": {
        "tier": "pro"
      }
    },
    {
      "name": "task-board",
      "type": "registry:component",
      "title": "Task Board",
      "description": "A four-column queue where cards glide between columns as agents pick up work, finish it, and wait for review.",
      "meta": {
        "tier": "pro"
      }
    },
    {
      "name": "swarm-map",
      "type": "registry:component",
      "title": "Swarm Map",
      "description": "An orchestrator in the middle, agents around it, and message packets flying along the links: tasks out, results back, and orange ones when an agent needs a human.",
      "meta": {
        "tier": "pro"
      }
    },
    {
      "name": "knowledge-graph",
      "type": "registry:component",
      "title": "Knowledge Graph",
      "description": "A small force-directed graph of people, docs, concepts and systems. Drag nodes, hover to light up neighbours and edge labels, click to focus.",
      "meta": {
        "tier": "pro"
      }
    },
    {
      "name": "voice-input",
      "type": "registry:component",
      "title": "Voice Input",
      "description": "A mic button with a live waveform from the Web Audio analyser and a transcript line. Demo mode fakes a voice so it works without a microphone.",
      "meta": {
        "tier": "pro"
      }
    },
    {
      "name": "agent-status",
      "type": "registry:component",
      "title": "Agent Status",
      "description": "An avatar stack of agents with status rings (idle, thinking, working, needs you, error), counts by state, and a detail line on hover.",
      "meta": {
        "tier": "free"
      }
    },
    {
      "name": "handoff-banner",
      "type": "registry:component",
      "title": "Handoff Banner",
      "description": "A banner for when an agent hands a conversation to a person: the reason, what it already did, an SLA timer, and Take over / Send back.",
      "meta": {
        "tier": "free"
      }
    },
    {
      "name": "diff-review",
      "type": "registry:component",
      "title": "Diff Review",
      "description": "A code review panel for agent changes: file list with status dots, per-hunk Keep / Drop, the agent's reason under each hunk, and a submit that waits until every hunk is decided.",
      "meta": {
        "tier": "pro"
      }
    },
    {
      "name": "eval-card",
      "type": "registry:component",
      "title": "Eval Card",
      "description": "An evaluation score card: overall ring with a pass mark, per-metric bars with baseline ticks and deltas, and pass/fail.",
      "meta": {
        "tier": "pro"
      }
    },
    {
      "name": "memory-inspector",
      "type": "registry:component",
      "title": "Memory Inspector",
      "description": "A list of the agent's long-term memories (facts, preferences, episodes) with source, age and confidence, plus search, filters, pin and forget with undo.",
      "meta": {
        "tier": "pro"
      }
    },
    {
      "name": "budget-guard",
      "type": "registry:component",
      "title": "Budget Guard",
      "description": "A token-bucket rate limiter and daily spend cap in one panel: bucket cells drain and refill, a load histogram, and a clear Flowing / Throttling / Stopped state.",
      "meta": {
        "tier": "pro"
      }
    },
    {
      "name": "plan-stepper",
      "type": "registry:component",
      "title": "Plan Stepper",
      "description": "A checklist the agent works through. Mid-run it can propose an edit: the old step is struck out, the new one shown in green with the reason, and the run pauses until you accept or keep the original.",
      "meta": {
        "tier": "pro"
      }
    },
    {
      "name": "approval-inbox",
      "type": "registry:component",
      "title": "Approval Inbox",
      "description": "A notification inbox for approvals: new requests slide in, risk dots, unread state, a high-risk filter, bulk select, and Gmail-style j/k/x/a/r keys.",
      "meta": {
        "tier": "pro"
      }
    },
    {
      "name": "hero-mesh-gradient",
      "type": "registry:component",
      "title": "Hero Mesh Gradient",
      "description": "A full-width landing hero with a soft animated mesh-gradient backdrop (drifting blurred colour blobs on a 2D canvas) under a kinetic, word-by-word headline and two CTAs.",
      "meta": {
        "tier": "free"
      }
    }
  ]
}
