|
| 1 | +--- |
| 2 | +layout: default |
| 3 | +title: Agent Observability Series |
| 4 | +description: Practical notes on diagnosing, debugging, and monitoring autonomous agents — what signals tell you when a session is struggling, how to trace unexpected behavior, and how to build measurement infrastructure that compounds. |
| 5 | +permalink: /observability/ |
| 6 | +hero: true |
| 7 | +--- |
| 8 | + |
| 9 | +.hero |
| 10 | + div |
| 11 | + h1 {{ page.title }} |
| 12 | + p.excerpt {{ page.description }} |
| 13 | + .flex.flex-wrap.items-center.justify-center.gap-4.mt-3 |
| 14 | + a.inline-flex.items-center.gap-1.no-underline(href="/tags/#observability" class="text-sm text-text/50 hover:text-primary transition-colors") |
| 15 | + i.fas.fa-tag(class="text-[11px]") |
| 16 | + | #observability |
| 17 | + a.inline-flex.items-center.gap-1.no-underline(href="/tags/#debugging" class="text-sm text-text/50 hover:text-primary transition-colors") |
| 18 | + i.fas.fa-tag(class="text-[11px]") |
| 19 | + | #debugging |
| 20 | + a.inline-flex.items-center.gap-1.no-underline(href="/tags/#autonomous-agents" class="text-sm text-text/50 hover:text-primary transition-colors") |
| 21 | + i.fas.fa-tag(class="text-[11px]") |
| 22 | + | #autonomous-agents |
| 23 | + |
| 24 | +main.container.mx-auto.px-4.py-8 |
| 25 | + .max-w-4xl.mx-auto |
| 26 | + |
| 27 | + //- Intro |
| 28 | + .mb-10.prose.prose-sm(class="text-text/70 max-w-none") |
| 29 | + p |
| 30 | + | Autonomous agents fail in ways that are hard to see. The session looks productive. |
| 31 | + | The journal says something happened. But a signal was lost, a cursor skipped rows, |
| 32 | + | or five consecutive sessions dismissed the same red check without connecting them. |
| 33 | + | This series collects concrete notes on building the instrumentation to find those failures: |
| 34 | + | trajectory metrics, flight recorders, source-grounded debugging, and the patterns |
| 35 | + | that let you distinguish a real problem from an artifact of how you're measuring. |
| 36 | + |
| 37 | + //- Primary posts: flight-recorder and trajectory anchors |
| 38 | + | {% assign anchor_slugs = "what-the-trajectory-tells-you,flight-recorder-for-agents,agents-doing-science,seventeen-observations-no-process-attribution,five-sessions-dismissed-the-same-red-check" | split: "," %} |
| 39 | + |
| 40 | + .mb-8 |
| 41 | + h2.text-lg.font-bold.mb-4.pb-2.border-b.border-border(class="text-text") Start here |
| 42 | + .grid.gap-4 |
| 43 | + | {% for slug in anchor_slugs %} |
| 44 | + | {% assign matched_post = nil %} |
| 45 | + | {% for post in site.posts %} |
| 46 | + | {% if post.url contains slug %} |
| 47 | + | {% assign matched_post = post %} |
| 48 | + | {% endif %} |
| 49 | + | {% endfor %} |
| 50 | + | {% if matched_post %} |
| 51 | + article.rounded-lg.border.p-4.transition-all(class="bg-surface/50 border-border hover:border-primary/40") |
| 52 | + .flex.items-start.gap-3 |
| 53 | + div |
| 54 | + h3.font-semibold.mb-1 |
| 55 | + a.no-underline(href="{{ matched_post.url }}" class="text-text hover:text-primary transition-colors") {{ matched_post.title }} |
| 56 | + | {% assign ex = matched_post.excerpt | strip_html | strip | truncatewords: 30 %} |
| 57 | + p.text-sm.leading-relaxed.mb-2(class="text-text/60") {{ ex }} |
| 58 | + time.text-xs(class="text-text/40") {{ matched_post.date | date: "%B %d, %Y" }} |
| 59 | + | {% endif %} |
| 60 | + | {% endfor %} |
| 61 | + |
| 62 | + //- All observability-tagged posts by date |
| 63 | + | {% assign obs_posts = site.tags["observability"] | sort: "date" | reverse %} |
| 64 | + .mb-4 |
| 65 | + h2.text-lg.font-bold.mb-4.pb-2.border-b.border-border(class="text-text") |
| 66 | + | All posts |
| 67 | + span.text-sm.font-normal.ml-2(class="text-text/40") {{ obs_posts.size }} posts tagged #observability |
| 68 | + |
| 69 | + .space-y-0 |
| 70 | + | {% for post in obs_posts %} |
| 71 | + article.flex.items-baseline.gap-4.py-3.border-b(class="border-border/30 hover:bg-surface/30 -mx-3 px-3 rounded transition-colors") |
| 72 | + time.text-xs.whitespace-nowrap.flex-shrink-0.w-24(class="text-text/40") {{ post.date | date: "%b %d, %Y" }} |
| 73 | + div |
| 74 | + h3.text-base.font-semibold.mb-1 |
| 75 | + a.no-underline(href="{{ post.url }}" class="text-text hover:text-primary transition-colors") {{ post.title }} |
| 76 | + | {% assign ex = post.excerpt | strip_html | strip | truncatewords: 20 %} |
| 77 | + | {% assign title_str = post.title | strip %} |
| 78 | + | {% unless ex == title_str %} |
| 79 | + p.text-sm(class="text-text/60") {{ ex }} |
| 80 | + | {% endunless %} |
| 81 | + | {% endfor %} |
0 commit comments