Your AI agent keeps a tiny YAML map of the app it's building — pages, APIs, tasks, env, systems. vibehud renders that map as a live panel and validates it against your real routes, so the map can't silently lie.
› one file your agent keeps honest — renderedvalidatedpingedrememberedshipped
Set up vibehud in this project, then keep it updated. 1. npm install vibehud 2. Add transpilePackages: ['vibehud'] to next.config. 3. Create app/vibehud/page.tsx: import { VibehudPage } from 'vibehud/next' export const dynamic = 'force-dynamic' export default function Page() { return <VibehudPage /> } 4. Create agent-map.md at the repo root describing THIS app — yaml block with pages, apis, systems, env NAMES (never values), tasks. Spec: node_modules/vibehud/spec/FORMAT.md 5. Copy node_modules/vibehud/templates/AGENTS.md into my agent instructions (AGENTS.md / CLAUDE.md / .cursor/rules) so every future session updates the map in the same turn as any change. Then tell me to open /vibehud.
Not a code visualizer. Not a diagram generator. Your agent declares what it's building in one markdown file; vibehud draws it and checks the declarations against the filesystem. Three parts:
One agent-map.md at your repo root. Prose for humans, a YAML block for machines. The agent updates it in the same turn as every change.
A drop-in React page at /vibehud, dev-only. Page map, API lane, systems, env chips, kanban — auto-refreshing every 2 seconds while the agent works.
Declared pages vs. real routes. Declared APIs vs. real handlers — pinged live. Declared env names vs. .env.example and what's actually set. Drift is one glance.
The prompt at the top does all of this for you — your agent wires everything up. Doing it by hand is four steps:
npm install vibehud
One dependency (yaml). Ships as source; React 18+.
// next.config.mjs export default { transpilePackages: ['vibehud'], }
Next.js app directory is the one supported framework at launch.
// app/vibehud/page.tsx import { VibehudPage } from 'vibehud/next' export const dynamic = 'force-dynamic' export default function Page() { return <VibehudPage /> }
Renders nothing in production unless you explicitly enable it.
# AGENTS.md (shipped template) Update agent-map.md in the same turn as: - new/renamed/deleted routes → pages - new API handlers → apis + methods - new env NAMES (never values) → env - work started/finished → tasks
Copy the shipped AGENTS.md into your repo. That's the persistence trick — every future session re-reads it and keeps the map fresh.
All of it dev-only by default, all of it driven by one YAML block.
Declared vs. real — pages and APIs. Missing and undeclared routes, named.
route.ts handlers scanned, GET/POST/… extracted from exports.
Each declared API is pinged live. Responding, 5xx, 404, unreachable.
Names vs. .env.example vs. what's actually set. Values never leave the server.
Git-powered recap: pages added, tasks done, drift introduced or fixed.
Click any node: what it's made of, its connections, its tasks, its notes.
Type to filter; select to dim everything but a node and its neighbors.
Drift found → one click copies the exact instruction to hand your agent.