[{"data":1,"prerenderedAt":1117},["ShallowReactive",2],{"navigation_docs":3,"-cli-agents":529,"-cli-agents-surround":1112},[4,30,80,128,308,440,499],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Start","\u002Fstart","1.start",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fstart\u002Fintroduction","1.start\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Why start with evlog","\u002Fstart\u002Fwhy-evlog","1.start\u002F2.why-evlog","i-lucide-rocket",{"title":20,"path":21,"stem":22,"icon":23},"Installation","\u002Fstart\u002Finstallation","1.start\u002F3.installation","i-lucide-download",{"title":25,"path":26,"stem":27,"icon":28},"Quick Start","\u002Fstart\u002Fquick-start","1.start\u002F4.quick-start","i-lucide-zap",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Learn","\u002Flearn","2.learn",[35,40,45,50,55,60,65,70,75],{"title":36,"path":37,"stem":38,"icon":39},"Overview","\u002Flearn\u002Foverview","2.learn\u002F0.overview","i-lucide-list",{"title":41,"path":42,"stem":43,"icon":44},"Simple Logging","\u002Flearn\u002Fsimple-logging","2.learn\u002F1.simple-logging","i-lucide-terminal",{"title":46,"path":47,"stem":48,"icon":49},"Wide Events","\u002Flearn\u002Fwide-events","2.learn\u002F2.wide-events","i-lucide-layers",{"title":51,"path":52,"stem":53,"icon":54},"Structured Errors","\u002Flearn\u002Fstructured-errors","2.learn\u002F3.structured-errors","i-lucide-shield-alert",{"title":56,"path":57,"stem":58,"icon":59},"Lifecycle","\u002Flearn\u002Flifecycle","2.learn\u002F4.lifecycle","i-lucide-arrow-right-left",{"title":61,"path":62,"stem":63,"icon":64},"Sampling","\u002Flearn\u002Fsampling","2.learn\u002F5.sampling","i-lucide-filter",{"title":66,"path":67,"stem":68,"icon":69},"Auto-Redaction","\u002Flearn\u002Fredaction","2.learn\u002F6.redaction","i-lucide-eye-off",{"title":71,"path":72,"stem":73,"icon":74},"Typed Fields","\u002Flearn\u002Ftyped-fields","2.learn\u002F7.typed-fields","i-simple-icons-typescript",{"title":76,"path":77,"stem":78,"icon":79},"Catalogs","\u002Flearn\u002Fcatalogs","2.learn\u002F8.catalogs","i-lucide-book-open",{"title":81,"path":82,"stem":83,"children":84,"page":29},"CLI","\u002Fcli","3.cli",[85,88,93,98,103,108,113,118,123],{"title":36,"path":86,"stem":87,"icon":44},"\u002Fcli\u002Foverview","3.cli\u002F0.overview",{"title":89,"path":90,"stem":91,"icon":92},"init","\u002Fcli\u002Finit","3.cli\u002F1.init","i-lucide-wand-sparkles",{"title":94,"path":95,"stem":96,"icon":97},"map","\u002Fcli\u002Fmap","3.cli\u002F2.map","i-lucide-radar",{"title":99,"path":100,"stem":101,"icon":102},"Rules","\u002Fcli\u002Frules","3.cli\u002F3.rules","i-lucide-list-checks",{"title":104,"path":105,"stem":106,"icon":107},"Scoring","\u002Fcli\u002Fscoring","3.cli\u002F4.scoring","i-lucide-gauge",{"title":109,"path":110,"stem":111,"icon":112},"CI","\u002Fcli\u002Fci","3.cli\u002F5.ci","i-lucide-git-pull-request",{"title":114,"path":115,"stem":116,"icon":117},"doctor","\u002Fcli\u002Fdoctor","3.cli\u002F6.doctor","i-lucide-stethoscope",{"title":119,"path":120,"stem":121,"icon":122},"telemetry","\u002Fcli\u002Ftelemetry","3.cli\u002F7.telemetry","i-lucide-bar-chart-3",{"title":124,"path":125,"stem":126,"icon":127},"agents","\u002Fcli\u002Fagents","3.cli\u002F8.agents","i-lucide-bot",{"title":129,"path":130,"stem":131,"children":132,"page":29},"Integrate","\u002Fintegrate","4.integrate",[133,137,220],{"title":36,"path":134,"stem":135,"icon":136},"\u002Fintegrate\u002Foverview","4.integrate\u002F0.overview","i-lucide-plug",{"title":138,"path":139,"stem":140,"children":141,"page":29},"Adapters","\u002Fintegrate\u002Fadapters","4.integrate\u002Fadapters",[142,145,175,200],{"title":36,"path":143,"stem":144,"icon":39},"\u002Fintegrate\u002Fadapters\u002Foverview","4.integrate\u002Fadapters\u002F01.overview",{"title":146,"path":147,"stem":148,"children":149,"page":29},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","4.integrate\u002Fadapters\u002Fcloud",[150,155,160,165,170],{"title":151,"path":152,"stem":153,"icon":154},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","4.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":156,"path":157,"stem":158,"icon":159},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","4.integrate\u002Fadapters\u002Fcloud\u002F02.posthog","i-simple-icons-posthog",{"title":161,"path":162,"stem":163,"icon":164},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","4.integrate\u002Fadapters\u002Fcloud\u002F03.sentry","i-simple-icons-sentry",{"title":166,"path":167,"stem":168,"icon":169},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","4.integrate\u002Fadapters\u002Fcloud\u002F04.better-stack","i-simple-icons-betterstack",{"title":171,"path":172,"stem":173,"icon":174},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","4.integrate\u002Fadapters\u002Fcloud\u002F05.datadog","i-simple-icons-datadog",{"title":176,"path":177,"stem":178,"children":179,"page":29},"Cloud or Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fhybrid","4.integrate\u002Fadapters\u002Fhybrid",[180,185,190,195],{"title":181,"path":182,"stem":183,"icon":184},"Grafana Loki","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Floki","4.integrate\u002Fadapters\u002Fhybrid\u002F01.loki","i-simple-icons-grafana",{"title":186,"path":187,"stem":188,"icon":189},"ClickHouse","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fclickhouse","4.integrate\u002Fadapters\u002Fhybrid\u002F02.clickhouse","i-simple-icons-clickhouse",{"title":191,"path":192,"stem":193,"icon":194},"OTLP","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fotlp","4.integrate\u002Fadapters\u002Fhybrid\u002F03.otlp","i-simple-icons-opentelemetry",{"title":196,"path":197,"stem":198,"icon":199},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fhyperdx","4.integrate\u002Fadapters\u002Fhybrid\u002F04.hyperdx","i-custom-hyperdx",{"title":201,"path":202,"stem":203,"children":204,"page":29},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","4.integrate\u002Fadapters\u002Fself-hosted",[205,210,215],{"title":206,"path":207,"stem":208,"icon":209},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","4.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":211,"path":212,"stem":213,"icon":214},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","4.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":216,"path":217,"stem":218,"icon":219},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","4.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":221,"path":222,"stem":223,"children":224,"page":29},"Frameworks","\u002Fintegrate\u002Fframeworks","4.integrate\u002Fframeworks",[225,229,234,239,244,249,254,259,264,269,274,279,284,289,293,298,303],{"title":36,"path":226,"stem":227,"icon":228},"\u002Fintegrate\u002Fframeworks\u002Foverview","4.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":230,"path":231,"stem":232,"icon":233},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","4.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":235,"path":236,"stem":237,"icon":238},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","4.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":240,"path":241,"stem":242,"icon":243},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","4.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":245,"path":246,"stem":247,"icon":248},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","4.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":250,"path":251,"stem":252,"icon":253},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","4.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":255,"path":256,"stem":257,"icon":258},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","4.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":260,"path":261,"stem":262,"icon":263},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","4.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":265,"path":266,"stem":267,"icon":268},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","4.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":270,"path":271,"stem":272,"icon":273},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","4.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":275,"path":276,"stem":277,"icon":278},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","4.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":280,"path":281,"stem":282,"icon":283},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","4.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":285,"path":286,"stem":287,"icon":288},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","4.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":290,"path":291,"stem":292,"icon":74},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","4.integrate\u002Fframeworks\u002F13.standalone",{"title":294,"path":295,"stem":296,"icon":297},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","4.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":299,"path":300,"stem":301,"icon":302},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","4.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":304,"path":305,"stem":306,"icon":307},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","4.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":309,"path":310,"stem":311,"children":312,"page":29},"Use Cases","\u002Fuse-cases","5.use-cases",[313,316,321,350,377,409,430,435],{"title":36,"path":314,"stem":315,"icon":102},"\u002Fuse-cases\u002Foverview","5.use-cases\u002F0.overview",{"title":317,"path":318,"stem":319,"icon":320},"Client Logging","\u002Fuse-cases\u002Fclient-logging","5.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":322,"icon":323,"path":324,"stem":325,"children":326,"page":29},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","5.use-cases\u002F2.ai-sdk",[327,330,335,340,345],{"title":36,"path":328,"stem":329,"icon":39},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","5.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":331,"path":332,"stem":333,"icon":334},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","5.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":336,"path":337,"stem":338,"icon":339},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","5.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":341,"path":342,"stem":343,"icon":344},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","5.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":346,"path":347,"stem":348,"icon":349},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","5.use-cases\u002F2.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":351,"icon":352,"path":353,"stem":354,"children":355,"page":29},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","5.use-cases\u002F3.better-auth",[356,359,364,369,373],{"title":36,"path":357,"stem":358,"icon":39},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","5.use-cases\u002F3.better-auth\u002F01.overview",{"title":360,"path":361,"stem":362,"icon":363},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","5.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":365,"path":366,"stem":367,"icon":368},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","5.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":370,"path":371,"stem":372,"icon":320},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","5.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":374,"path":375,"stem":376,"icon":107},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","5.use-cases\u002F3.better-auth\u002F05.performance",{"title":378,"icon":379,"path":380,"stem":381,"children":382,"page":29},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","5.use-cases\u002F4.audit",[383,386,391,396,401,405],{"title":36,"path":384,"stem":385,"icon":39},"\u002Fuse-cases\u002Faudit\u002Foverview","5.use-cases\u002F4.audit\u002F01.overview",{"title":387,"path":388,"stem":389,"icon":390},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","5.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":392,"path":393,"stem":394,"icon":395},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","5.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":397,"path":398,"stem":399,"icon":400},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","5.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":402,"path":403,"stem":404,"icon":379},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","5.use-cases\u002F4.audit\u002F05.compliance",{"title":406,"path":407,"stem":408,"icon":79},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","5.use-cases\u002F4.audit\u002F06.recipes",{"title":346,"icon":107,"path":410,"stem":411,"children":412,"page":29},"\u002Fuse-cases\u002Ftelemetry","5.use-cases\u002F4.telemetry",[413,416,421,426],{"title":36,"path":414,"stem":415,"icon":39},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","5.use-cases\u002F4.telemetry\u002F01.overview",{"title":417,"path":418,"stem":419,"icon":420},"Setup","\u002Fuse-cases\u002Ftelemetry\u002Fsetup","5.use-cases\u002F4.telemetry\u002F02.setup","i-lucide-wrench",{"title":422,"path":423,"stem":424,"icon":425},"Ingest","\u002Fuse-cases\u002Ftelemetry\u002Fingest","5.use-cases\u002F4.telemetry\u002F03.ingest","i-lucide-server",{"title":427,"path":428,"stem":429,"icon":79},"Reference","\u002Fuse-cases\u002Ftelemetry\u002Freference","5.use-cases\u002F4.telemetry\u002F04.reference",{"title":431,"path":432,"stem":433,"icon":434},"Enrichers","\u002Fuse-cases\u002Fenrichers","5.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":436,"path":437,"stem":438,"icon":439},"eve","\u002Fuse-cases\u002Feve","5.use-cases\u002F5.eve","i-custom-eve",{"title":441,"path":442,"stem":443,"children":444,"page":29},"Extend","\u002Fextend","6.extend",[445,449,454,459,463,468,472,476,480,484,489,494],{"title":36,"path":446,"stem":447,"icon":448},"\u002Fextend\u002Foverview","6.extend\u002F0.overview","i-lucide-blocks",{"title":450,"path":451,"stem":452,"icon":453},"Stream","\u002Fextend\u002Fstream","6.extend\u002F1.stream","i-lucide-radio-tower",{"title":455,"path":456,"stem":457,"icon":458},"Custom framework","\u002Fextend\u002Fcustom-framework","6.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":460,"path":461,"stem":462,"icon":453},"Diagnostics channel","\u002Fextend\u002Fdiagnostics-channel","6.extend\u002F11.diagnostics-channel",{"title":464,"path":465,"stem":466,"icon":467},"FS reader","\u002Fextend\u002Ffs-reader","6.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":406,"path":469,"stem":470,"icon":471},"\u002Fextend\u002Fconsumer-recipes","6.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":473,"path":474,"stem":475,"icon":448},"Plugins","\u002Fextend\u002Fplugins","6.extend\u002F4.plugins",{"title":477,"path":478,"stem":479,"icon":434},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","6.extend\u002F5.custom-enrichers",{"title":481,"path":482,"stem":483,"icon":64},"Tail sampling","\u002Fextend\u002Ftail-sampling","6.extend\u002F6.tail-sampling",{"title":485,"path":486,"stem":487,"icon":488},"Identity headers","\u002Fextend\u002Fidentity-headers","6.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":490,"path":491,"stem":492,"icon":493},"Custom drains","\u002Fextend\u002Fcustom-drains","6.extend\u002F8.custom-drains","i-lucide-share-2",{"title":495,"path":496,"stem":497,"icon":498},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","6.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":427,"path":500,"stem":501,"children":502,"page":29},"\u002Freference","7.reference",[503,508,511,516,520,525],{"title":504,"path":505,"stem":506,"icon":507},"Configuration","\u002Freference\u002Fconfiguration","7.reference\u002F1.configuration","i-lucide-settings",{"title":374,"path":509,"stem":510,"icon":107},"\u002Freference\u002Fperformance","7.reference\u002F2.performance",{"title":512,"path":513,"stem":514,"icon":515},"Vite Plugin","\u002Freference\u002Fvite-plugin","7.reference\u002F3.vite-plugin","i-custom-vite",{"title":517,"path":518,"stem":519,"icon":379},"Best Practices","\u002Freference\u002Fbest-practices","7.reference\u002F4.best-practices",{"title":521,"path":522,"stem":523,"icon":524},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","7.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":526,"path":527,"stem":528,"icon":434},"Agent Skills","\u002Freference\u002Fagent-skills","7.reference\u002F6.agent-skills",{"id":530,"title":531,"body":532,"description":1103,"extension":1104,"links":1105,"meta":1108,"navigation":1109,"path":125,"seo":1110,"stem":126,"__hash__":1111},"docs\u002F3.cli\u002F8.agents.md","evlog agents",{"type":533,"value":534,"toc":1092},"minimark",[535,548,553,576,585,590,644,663,667,693,718,724,730,748,753,756,855,867,871,877,881,970,1018,1027,1033,1049,1064,1068,1088],[536,537,538,539,543,544,547],"p",{},"Wiring evlog into an app is half the job. The other half is the assistant writing the handlers, which keeps reaching for ",[540,541,542],"code",{},"console.log"," and ",[540,545,546],{},"throw new Error(...)"," until something in the repository tells it not to.",[536,549,550,552],{},[540,551,531],{}," writes that something.",[554,555,561],"pre",{"className":556,"code":557,"filename":558,"language":559,"meta":560,"style":560},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","evlog agents\n","Terminal","bash","",[540,562,563],{"__ignoreMap":560},[564,565,568,572],"span",{"class":566,"line":567},"line",1,[564,569,571],{"class":570},"sBMFI","evlog",[564,573,575],{"class":574},"sfazB"," agents\n",[554,577,583],{"className":578,"code":580,"filename":581,"language":582,"meta":560},[579],"language-text","nuxt\n\n✓ created AGENTS.md\n✓ created CLAUDE.md\n✓ installed the evlog skills\n  ran      npx --yes skills add https:\u002F\u002Fwww.evlog.dev\n","Output","text",[540,584,580],{"__ignoreMap":560},[586,587,589],"h2",{"id":588},"what-it-writes","What it writes",[591,592,593,606],"table",{},[594,595,596],"thead",{},[597,598,599,603],"tr",{},[600,601,602],"th",{},"File",[600,604,605],{},"What happens",[607,608,609,627],"tbody",{},[597,610,611,617],{},[612,613,614],"td",{},[540,615,616],{},"AGENTS.md",[612,618,619,620,543,623,626],{},"Created if missing. Otherwise the evlog block is replaced in place, between ",[540,621,622],{},"\u003C!-- evlog:start -->",[540,624,625],{},"\u003C!-- evlog:end -->"," — everything outside those markers is left exactly as it was.",[597,628,629,634],{},[612,630,631],{},[540,632,633],{},"CLAUDE.md",[612,635,636,637,640,641,643],{},"Created as a one-line ",[540,638,639],{},"@AGENTS.md"," if missing. If it exists and already mentions ",[540,642,616],{},", it is left alone.",[536,645,646,647,650,651,654,655,658,659,662],{},"The block is short on purpose — it is loaded into every agent turn. It states the rules (one wide event per operation, grouped context, structured errors, audit on sensitive actions, what never gets logged) and points at the skills for the depth. The logger accessor named in it follows your framework: ",[540,648,649],{},"useLogger(event)"," on Nuxt and Nitro, ",[540,652,653],{},"useLogger()"," from your ",[540,656,657],{},"lib\u002Fevlog.ts"," on Next.js, ",[540,660,661],{},"req.context.log"," on TanStack Start. When no framework is detected the block is still written with a generic accessor — the conventions apply just as well on Express or Hono.",[586,664,666],{"id":665},"the-skills-are-not-ours-to-install","The skills are not ours to install",[536,668,669,670,674,675,683,684,686,687,692],{},"The ",[671,672,673],"a",{"href":527},"agent skills"," come from ",[671,676,680],{"href":677,"rel":678},"https:\u002F\u002Fgithub.com\u002Fvercel-labs\u002Fskills",[679],"nofollow",[540,681,682],{},"npx skills",", which ",[540,685,531],{}," shells out to — the same way ",[671,688,689],{"href":90},[540,690,691],{},"evlog init"," runs your package manager instead of unpacking a tarball itself.",[536,694,695,696,699,700,699,703,706,707,710,711,710,714,717],{},"That is deliberate. Every agent reads a different directory (",[540,697,698],{},".claude\u002Fskills",", ",[540,701,702],{},".agents\u002Fskills",[540,704,705],{},".codex\u002Fskills",", …), and the skills CLI already resolves them per agent, symlinks a canonical copy, and supports a global scope. It also keeps no manifest, so any copy we wrote behind its back would be a second one it could never update. Delegating means one copy, and ",[540,708,709],{},"npx skills update"," \u002F ",[540,712,713],{},"remove",[540,715,716],{},"list"," keep working on it.",[536,719,720,721,723],{},"Before running anything, ",[540,722,531],{}," looks for evlog skills already installed — any agent, project-local or global — and leaves them alone if it finds them:",[554,725,728],{"className":726,"code":727,"filename":581,"language":582,"meta":560},[579],"· AGENTS.md is up to date\n· CLAUDE.md already points at AGENTS.md\n✓ skills already installed · .agents\u002Fskills, .claude\u002Fskills\n   npx skills update to refresh them\n",[540,729,727],{"__ignoreMap":560},[731,732,734,735,737,738,699,741,744,745,747],"callout",{"color":733,"icon":13},"neutral","Interactively, the skills CLI asks its own questions — which agents to install for, project or global. That question is its to ask, so ",[540,736,531],{}," hands over the terminal rather than answering on your behalf. Non-interactive runs (",[540,739,740],{},"--json",[540,742,743],{},"--yes",", CI, no TTY) pass ",[540,746,743],{}," so nothing blocks on a prompt nobody will answer.",[749,750,752],"h3",{"id":751},"what-you-are-trusting","What you are trusting",[536,754,755],{},"Delegating means running third-party code, so it is worth being explicit about the trust model.",[757,758,759,790,816,847],"ul",{},[760,761,762,766,767,770,771,773,774,710,777,780,781,699,783,785,786,789],"li",{},[763,764,765],"strong",{},"What runs."," Exactly one command, never assembled from anything you did not pass: ",[540,768,769],{},"npx --yes skills add \u003Csource>",", plus a trailing ",[540,772,743],{}," when the run is non-interactive and ",[540,775,776],{},"--skill",[540,778,779],{},"--global"," when you asked for them. Interactively it is shown twice — in the plan you confirm, and again as the step starts. Non-interactively (",[540,782,740],{},[540,784,743],{},", CI, no TTY) it appears in the report the run prints afterward. Either way the string is the command argument for argument, so re-typing it reproduces the run exactly; ",[540,787,788],{},"--dry-run"," shows it without running anything.",[760,791,792,795,796,799,800,807,808,811,812,815],{},[763,793,794],{},"Not pinned."," ",[540,797,798],{},"npx"," resolves the latest ",[671,801,804],{"href":802,"rel":803},"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fskills",[679],[540,805,806],{},"skills"," at run time. That is the point — skills guidance tracks the docs site, not a CLI release — but it does mean the version you get today is not the one you got last month. If your policy needs a fixed version, use ",[540,809,810],{},"--no-skills"," and run your own pinned ",[540,813,814],{},"npx skills@\u003Cversion> add https:\u002F\u002Fwww.evlog.dev",".",[760,817,818,824,825,710,828,831,832,835,836,839,840,842,843,846],{},[763,819,820,823],{},[540,821,822],{},"--source"," is validated."," It must be a plain ",[540,826,827],{},"http:",[540,829,830],{},"https:"," origin — letters, digits, and ",[540,833,834],{},". _ ~ : \u002F -"," only, so no query string and no shell metacharacters — and ",[540,837,838],{},"--skills"," entries must be lowercase dashed names. On Windows the spawn needs a shell to resolve ",[540,841,798],{}," (Node refuses to run a ",[540,844,845],{},".cmd"," without one), so both are checked before anything is spawned rather than trusted down the chain.",[760,848,849,795,852,854],{},[763,850,851],{},"Nothing is spawned without a decision.",[540,853,810],{}," skips it entirely, and the interactive flow will not reach the command until you confirm the plan.",[536,856,857,858,861,862,543,864,866],{},"If none of that fits your policy, ",[540,859,860],{},"evlog agents --no-skills"," still writes ",[540,863,616],{},[540,865,633],{}," — those never touch the network — and you can install the skills however you prefer.",[586,868,870],{"id":869},"safe-to-re-run","Safe to re-run",[536,872,873,874,815],{},"Running it again refreshes the block against the current CLI. Anything already identical is reported rather than rewritten, so a second run leaves the working tree clean. Run it after upgrading ",[540,875,876],{},"@evlog\u002Fcli",[586,878,880],{"id":879},"flags","Flags",[591,882,883,893],{},[594,884,885],{},[597,886,887,890],{},[600,888,889],{},"Flag",[600,891,892],{},"What it does",[607,894,895,909,923,935,949,958],{},[597,896,897,902],{},[612,898,899],{},[540,900,901],{},"--skills \u003Clist>",[612,903,904,905,908],{},"Comma-separated skill names, passed to ",[540,906,907],{},"npx skills add --skill"," (default: all of them)",[597,910,911,915],{},[612,912,913],{},[540,914,810],{},[612,916,917,918,543,920,922],{},"Still write ",[540,919,616],{},[540,921,633],{},"; skip only the skill installation — nothing is spawned",[597,924,925,932],{},[612,926,927,699,929],{},[540,928,779],{},[540,930,931],{},"-g",[612,933,934],{},"Install the skills for every project instead of just this one",[597,936,937,942],{},[612,938,939],{},[540,940,941],{},"--source \u003Curl>",[612,943,944,945,948],{},"Where the skills are published — a plain http(s) origin (default: ",[540,946,947],{},"https:\u002F\u002Fwww.evlog.dev",")",[597,950,951,955],{},[612,952,953],{},[540,954,788],{},[612,956,957],{},"Show the plan without writing or running anything",[597,959,960,967],{},[612,961,962,699,964],{},[540,963,743],{},[540,965,966],{},"-y",[612,968,969],{},"Apply without confirming",[554,971,973],{"className":556,"code":972,"filename":558,"language":559,"meta":560,"style":560},"evlog agents --skills review-logging-patterns\nevlog agents --global\nevlog agents --no-skills\nevlog agents --dry-run\n",[540,974,975,988,998,1008],{"__ignoreMap":560},[564,976,977,979,982,985],{"class":566,"line":567},[564,978,571],{"class":570},[564,980,981],{"class":574}," agents",[564,983,984],{"class":574}," --skills",[564,986,987],{"class":574}," review-logging-patterns\n",[564,989,991,993,995],{"class":566,"line":990},2,[564,992,571],{"class":570},[564,994,981],{"class":574},[564,996,997],{"class":574}," --global\n",[564,999,1001,1003,1005],{"class":566,"line":1000},3,[564,1002,571],{"class":570},[564,1004,981],{"class":574},[564,1006,1007],{"class":574}," --no-skills\n",[564,1009,1011,1013,1015],{"class":566,"line":1010},4,[564,1012,571],{"class":570},[564,1014,981],{"class":574},[564,1016,1017],{"class":574}," --dry-run\n",[536,1019,1020,1021,1023,1024,1026],{},"If the skills CLI fails — no network, no ",[540,1022,798],{}," — the block is still on disk and the command reports the failure and exits 1. The ",[540,1025,616],{}," block never needs the network.",[586,1028,1030,1031],{"id":1029},"as-part-of-evlog-init","As part of ",[540,1032,691],{},[536,1034,1035,1039,1040,543,1042,1044,1045,1048],{},[671,1036,1037],{"href":90},[540,1038,691],{}," offers this as its last question. The ",[540,1041,616],{},[540,1043,633],{}," writes land in the same plan as the evlog wiring — one list, one confirmation — and the skills run alongside the package-manager install. Skip it with ",[540,1046,1047],{},"--no-agents",":",[554,1050,1052],{"className":556,"code":1051,"filename":558,"language":559,"meta":560,"style":560},"evlog init --no-agents\n",[540,1053,1054],{"__ignoreMap":560},[564,1055,1056,1058,1061],{"class":566,"line":567},[564,1057,571],{"class":570},[564,1059,1060],{"class":574}," init",[564,1062,1063],{"class":574}," --no-agents\n",[586,1065,1067],{"id":1066},"next-steps","Next Steps",[757,1069,1070,1075,1083],{},[760,1071,1072,1074],{},[671,1073,526],{"href":527}," — what each skill teaches",[760,1076,1077,1082],{},[671,1078,1079],{"href":95},[540,1080,1081],{},"evlog map"," — score what your agent still has not covered",[760,1084,1085,1087],{},[671,1086,46],{"href":47}," — the conventions the block is summarising",[1089,1090,1091],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":560,"searchDepth":990,"depth":990,"links":1093},[1094,1095,1098,1099,1100,1102],{"id":588,"depth":990,"text":589},{"id":665,"depth":990,"text":666,"children":1096},[1097],{"id":751,"depth":1000,"text":752},{"id":869,"depth":990,"text":870},{"id":879,"depth":990,"text":880},{"id":1029,"depth":990,"text":1101},"As part of evlog init",{"id":1066,"depth":990,"text":1067},"Teach the AI agents working in your repository how to use evlog — a short block of conventions in AGENTS.md, plus the published agent skills installed through npx skills.","md",[1106],{"label":526,"icon":434,"to":527,"color":733,"variant":1107},"subtle",{},{"title":124,"icon":127},{"title":531,"description":1103},"_fdg9kq-WwlVucOYsrNncQq1URAapJf7_gEGsnETrbQ",[1113,1115],{"title":119,"path":120,"stem":121,"description":1114,"icon":122,"children":-1},"What the evlog CLI collects about its own usage, how to see it, and the three ways to turn it off — DO_NOT_TRACK, EVLOG_TELEMETRY=0, or evlog telemetry disable.",{"title":36,"path":134,"stem":135,"description":1116,"icon":136,"children":-1},"Wire evlog into your stack — pick a framework integration to capture requests automatically, then pick adapters to ship events to Axiom, Sentry, PostHog, OTLP, and more. Frameworks decide where the logger lives; adapters decide where events go.",1785778880576]