Skip to content

Agent Run Inspector

The three states an agent screen usually omits: the wait before the first token, the trace after something broke with retries costed in the open, and the diff it wants a person to accept.

5 blocks61 lineslucide-reactAdded 10 Sept 2026

What's included

  • app/agent-inspector-page.tsx
  • 5 blocks it is built from, installed with it
  • Needs lucide-react

Works with

  • React
  • Next.js
  • Tailwind CSS
  • TypeScript

npx hoverlab add agent-inspector-page

Or over MCP, from your editor's agent — no account needed.

License

Free to read, copy and install, for personal and non-commercial projects. Shipping it in client work or a paid product needs Pro ($79 once). The source lands in your repo and stops being ours — no attribution, nothing to upgrade.

Was this useful?

Preview

Run inspector

What is running, what it looks like while you wait, what it looks like when it breaks, and what it is asking you to approve.

Quarterly churn review

2 of 5 complete · 1 failed

  • Complete: Pull cancellations for Q3

    2,481 rows from warehouse.subscriptions

    2.7s
  • Complete: Join to account seat counts

    Matched 2,463 of 2,481 — 18 accounts deleted

    1.4s
  • Failed: Fetch exit-survey responses

    CRM returned 429 — rate limited after 40 of 300

  • Running: Score accounts by churn risk

    Running the model over the joined cohort

    62%
  • Queued: Draft the summary

Reading your question

Deploy api-gateway to staging

Paused on step 3 of 5 · 211s · $0.14 spent so far

  1. Read the deploy manifest — Done

    infra/deploy.yaml, 240 lines

  2. Resolve the image tag — Recovered

    Registry timed out; used the digest pinned in the lockfile instead.

    Recovered — what the later steps used came from the fallback, not from the registry.

  3. Apply the migration — Failed

    Blocked. The migration wants a lock the reporting job is holding.

    • Attempt 1Lock not available after 60s60s · $0.04
    • Attempt 2Lock not available after 60s60s · $0.04
    • Attempt 3Lock not available after 60s60s · $0.04
  4. Restart the workers — Waiting

    Not started — blocked by the step above.

  5. Verify the health check — Waiting

    Not started.

Proposed cleanup — 5 records

I filled gaps and corrected classifications from public sources. Row 4 is a guess from billing inactivity; the rest are verified.

Proposed field changes, one row per record, each accepted or rejected individually
RecordFieldChange
Northwind RetailIndustryOtherGrocery & FMCGWebsite and SIC code both say grocery
Vela LogisticsEmployees50-100210LinkedIn headcount, verified against last filing
Harbour FoodsOwnerUnassignedD. OkaforTerritory rule: EMEA mid-market
Pike & SonsStatusActiveChurnedNo invoice in 240 days — low confidence, worth checking
Cobalt InteriorsIndustryRetailDesign & ArchitectureReclassified from site copy

5 of 5 will be written

Suggested action

Reorder 1,400 units of the winter blend now

Demand is tracking 22% above last October and your supplier holds a volume break at 1,200 units. Ordering today lands stock four days before the forecast stockout.

Moderate confidence71%
71%

Based on 3 seasons of sales history. The forecast has not seen a promotion like the one running this month, which is why this is not higher.

Considered and rejected

  • Wait for the October close — Safer, but the reorder lead time is 3 weeks — you would stock out first
  • Order half now, half in November — Loses the volume break; unit cost rises about 9%

The real page, rendered in your current theme — every section below is a live block, not a screenshot.

Built from

All blocks
  1. Live Agent Task ListRun status as rows — done, running, failed, queued — with native progress elements, per-task retry buttons that name their task, and progress announced from one small status region instead of every row.
  2. Working Indicator with Elapsed TimeThe gap before the first token: a shimmer grid, a phase label that advances as the wait lengthens, and a running counter — which is the only honest answer to "is it stuck". The timer is hidden from the live region on purpose.
  3. Failed Run TraceThe trace after something broke: retries counted in the open with what each one cost, a step that was silently worked around drawn in amber rather than green, and the raw error kept apart from the agent’s reading of it.
  4. Proposed Edits Diff TableMachine-proposed row edits accepted one at a time, with before and after in real del/ins elements, a tri-state select-all that actually sets indeterminate, and a running count of what will be written.
  5. Recommendation with Confidence MeterA suggestion scored with a native meter rather than a styled bar, banded in words as well as numbers, and showing what the model rejected — the fastest way a human catches a bad recommendation.

Only want one section? Open it and copy that block instead — browse Agent Reasoning.

Source

app/agent-inspector-page.tsx
/**
 * What the agent is doing, what it did, and what it wants you to accept.
 *
 * `agent-run-page` next door is the happy path: a trace, in order, ending
 * in an answer. This is the screen for the other three states, and they are
 * the states that decide whether anyone trusts the thing.
 *
 * The order is by how much of the user's attention each one is entitled to.
 *
 *   task list        the run, as rows. Ambient. Glanced at.
 *   working          the gap before the first token, which is where people
 *                    decide the product is broken
 *   failure          the trace after something broke, with the retries and
 *                    what each one cost counted in the open
 *   diff review      the machine's proposed edits, accepted one at a time
 *   confidence       how sure it was, as a native meter and in words
 *
 * <AgentWorkingIndicator> is second rather than buried because an empty
 * pane during a thirty-second tool call is indistinguishable from a hang,
 * and "indistinguishable from a hang" is a support ticket. It is the
 * cheapest component on this page and the one that changes the most.
 *
 * The diff review is deliberately after the failure trace. Reviewing
 * proposed changes is the moment a person is asked to take responsibility
 * for the machine's work, and they should reach it having already seen what
 * this system looks like when it is wrong.
 *
 * Confidence is last for the same reason a footnote is last: it qualifies
 * everything above it, and a score at the top of a screen gets read as a
 * grade rather than a caveat.
 */

import * as React from 'react'
import { AgentTaskList } from '@/components/agent-task-list'
import { AgentWorkingIndicator } from '@/components/agent-working-indicator'
import { AgentRunFailure } from '@/components/agent-run-failure'
import { AgentDiffReview } from '@/components/agent-diff-review'
import { ConfidenceRecommendation } from '@/components/confidence-recommendation'

export default function AgentInspectorPage() {
  return (
    <main className="min-h-screen bg-background text-foreground">
      <section className="mx-auto w-full max-w-5xl px-6 pb-2 pt-12">
        <h1 className="text-2xl font-bold tracking-tight">Run inspector</h1>
        <p className="mt-1 text-sm text-muted-foreground">
          What is running, what it looks like while you wait, what it looks
          like when it breaks, and what it is asking you to approve.
        </p>
      </section>

      <AgentTaskList />
      <AgentWorkingIndicator />
      <AgentRunFailure />
      <AgentDiffReview />

      {/* A caveat, so it reads as one. */}
      <ConfidenceRecommendation />
    </main>
  )
}

How to use it

  1. 1. Copy each of the 5 blocks above into components/ — each block page has its own copy button.
  2. 2. Drop this file at app/agent-inspector-page.tsx. The imports already point at @/components/…, so they resolve with no edits.
  3. 3. Delete the sections you do not want. Every block takes props, so the copy changes without the layout moving.

For AI

The component, its props, the design tokens it expects and the command that installs it — as one prompt. Paste it into Claude, Cursor, v0 or ChatGPT and what they build around it will match the rest of the catalog instead of inventing its own system.

See the prompt

More App Screens

Open the full page for this page

Dashboard Overview

The screen an app opens on: shell, header, KPI row, chart and activity feed — numbers first, shape second, changes last.

App Screens5 blocks47 lines
Open the full page for this page

AI Assistant Screen

An agent working inside a real app: a transcript down the middle — reasoning, answer, then the one card that can act — with what it may read and what it noticed demoted to a rail.

App Screens7 blocks110 lines
Open the full page for this page

Project Board

A kanban board inside the app shell, with tabs that admit the board is one view among several and a header whose primary action is creating work.

App Screens3 blocks42 lines
Open the full page for this page

Customer List Screen

The canonical CRUD list — header, toolbar, sortable table and pagination framed as one panel instead of three stacked cards.

App Screens5 blocks37 lines
Open the full page for this page

Onboarding

A wizard for the session someone finishes and a checklist for the one they do not, with the only genuinely blocking step in front of both.

App Screens3 blocks45 lines
Open the full page for this page

Search Results

Built around the state a search page is in most of the time — empty — so recent queries lead and the facets sit in a sidebar that survives growing to twelve.

App Screens4 blocks47 lines
Open the full page for this page

Agent Run Detail

One run opened up in the order you would debug it — intent, actions, the retries that are invisible in both, then cost.

App Screens4 blocks49 lines
Open the full page for this page

Approvals Inbox

The queue, the same queue sorted by how long things have waited, and the policy that decided both — with the policy last so it is not scrolled past forever.

App Screens3 blocks45 lines
Open the full page for this page

Assistant Chat

The blank thread answered with real starter prompts, the model picker with the three numbers the choice turns on, and the four surfaces a session grows into — attachments, branches, canvas, threads.

App Screens6 blocks68 lines
Open the full page for this page

Retrieval Console

Why the answer said what it said: what is connected, how stale it is, what the query was allowed to see, what fitted in the window and what fell out — plus the failed-search state a debugging tool is most needed in.

App Screens7 blocks66 lines
Open the full page for this page

AI Editor

Five ways to reach a model without the cursor leaving the sentence — slash menu, inline completion, selection toolbar, action menu, property inspector — and the two surfaces that say where the answer came from.

App Screens7 blocks64 lines
Open the full page for this page

Records Table

A table after real people have used it — columns reordered from the keyboard, a selection bar that asks page-or-all, subtotals that survive collapsing, cells edited in place, and the empty state its own filters produced.

App Screens8 blocks71 lines
Open the full page for this page

Analytics

The saved view and the comparison window first, because every figure below depends on both — then six charts, none of which load a charting library.

App Screens8 blocks68 lines
Open the full page for this page

Alerting

Thresholds with how often each has actually fired, what that produced, where it went — and the digest settings that exist because of the answer.

App Screens5 blocks54 lines
Open the full page for this page

Import Data

The flow between an empty product and a useful one, in the order it goes wrong: sample data offered with equal weight, a file, a URL, the column mapping everything stalls on, and an upload that survives the connection dropping.

App Screens7 blocks64 lines
Open the full page for this page

Account Setup

A profile form where the role options state what they actually change, the avatar crop works from the keyboard, and a navigation guard names the fields it is about to throw away.

App Screens4 blocks53 lines
Open the full page for this page

App Shell

The furniture that is on every screen and belongs to none — navbar, mobile drawer, command palette, shortcut sheet, header search, scope switcher, and the two shapes a detail view takes without losing the list.

App Screens8 blocks68 lines
Open the full page for this page

Workspace Activity

Backwards from now and forwards from it on one screen — a day-grouped timeline, a month grid where a busy Tuesday never changes the row height, and the state both are in on day one.

App Screens3 blocks51 lines
Open the full page for this page

First Run

What the product looks like while onboarding happens: a tour step anchored to the control it explains, the skeletons of the slowest load it will ever do, and the checklist that outlives both.

App Screens3 blocks50 lines