<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  
  <title>Jeff Beard</title>
  <subtitle>Essays on AI, technology and leadership, plus notes from cycling and trail running.</subtitle>
  <link href="https://jeffbeard.com/feed.xml" rel="self" />
  <link href="https://jeffbeard.com/" />
  <updated>2026-09-01T00:00:00Z</updated>
  <id>https://jeffbeard.com/</id>
  <author>
    <name>Jeff Beard</name>
  </author>
  <entry>
    <title>The OpenAI / Hugging Face incident was an egress problem</title>
    <link href="https://jeffbeard.com/openai-hugging-face-incident-egress/" />
    <updated>2026-09-01T00:00:00Z</updated>
    <id>https://jeffbeard.com/openai-hugging-face-incident-egress/</id>
    <content type="html">&lt;p&gt;Now that all the &amp;quot;final&amp;quot; documents are out, I&#39;ve been reading through the reports on the OpenAI / Hugging Face incident. One of the most fascinating things I&#39;ve dug into in years.&lt;/p&gt;
&lt;p&gt;The headline is that agents, given access, will find and exploit complex pathways across networks, including novel collaboration protocols they invented themselves. Artifactory as a message board? Clever. But from an agent&#39;s perspective it&#39;s just a place to read and write data for whatever purpose. If you have access.&lt;/p&gt;
&lt;p&gt;That&#39;s where my hot take comes from.&lt;/p&gt;
&lt;p&gt;For background, I&#39;ve operated Artifactory. It&#39;s very fit for purpose. If you&#39;re diligent about how you configure, secure, and use it, it&#39;s a fantastic platform for hosting and managing a huge variety of executable data.&lt;/p&gt;
&lt;p&gt;Scanning the reports, I immediately honed in on egress. OpenAI&#39;s own words: zero-day exploits in Artifactory became &amp;quot;the agents&#39; principal egress path to the public internet.&amp;quot;&lt;/p&gt;
&lt;p&gt;I&#39;d put it differently. The zero-days didn&#39;t create that path. They used one the architecture already provided. A service whose job is fetching remote content on your behalf, placed inside a no-egress boundary, &lt;em&gt;is&lt;/em&gt; an egress path.&lt;/p&gt;
&lt;p&gt;The architectural fix is straightforward:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pre-load required artifacts into an internal, local-only repository&lt;/li&gt;
&lt;li&gt;Delete Internet egress at the network layer&lt;/li&gt;
&lt;li&gt;Attach the isolated, static snapshot to the sandbox&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This eliminates any path to the Internet, so a misconfiguration of the service is irrelevant. If you want another layer, make the tenant principal read-only: no clever message board, no plugin execution, no token endpoints.&lt;/p&gt;
&lt;p&gt;But how was this missed? I don&#39;t know. The reports say the controls &amp;quot;balanced security and utility based on OpenAI&#39;s understanding of the threat at the time,&amp;quot; and are silent on what that understanding was based on. What I do know is that through the lens of network security, the pathway seems clear.&lt;/p&gt;
&lt;p&gt;That, in my view, is the critical failure. Everything else, as fascinating as it is, cascaded from it.&lt;/p&gt;
&lt;p&gt;My perspective is that of both an outsider (take with a grain of salt) and an operator with battle scars.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>A status bar app for Claude API outages</title>
    <link href="https://jeffbeard.com/claude-status-bar-app/" />
    <updated>2026-08-24T00:00:00Z</updated>
    <id>https://jeffbeard.com/claude-status-bar-app/</id>
    <content type="html">&lt;p&gt;The recent Claude API outage forced me to pivot to Antigravity CLI. That was probably a good test for maintaining velocity during an outage. I use OpenSpec and a few other processes, so it was straightforward for Antigravity to continue the work.&lt;/p&gt;
&lt;p&gt;While I waited, I decided to save a click or two in the future. I started another Antigravity session to gin up a taskbar status app that gives me a signal when the Claude API is impacted. It took about 50 minutes, a chunk of which was me being pedantic about process (OpenSpec, TDD) and failing to create a good icon.&lt;/p&gt;
&lt;p&gt;I&#39;ve since added a local storage with SQLite in order to power a dashboard that covers a longer time horizon. It&#39;s open source under the MIT license if you want to try it or build on it.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Unbound 100, mud year</title>
    <link href="https://jeffbeard.com/unbound-100-mud-year/" />
    <updated>2026-05-31T00:00:00Z</updated>
    <id>https://jeffbeard.com/unbound-100-mud-year/</id>
    <content type="html">&lt;figure&gt;&lt;img src=&quot;https://jeffbeard.com/unbound-100-mud-year/unbound.jpg&quot; alt=&quot;Barn and Coca-Cola silo on the Unbound course.&quot; loading=&quot;lazy&quot;&gt;&lt;figcaption&gt;Barn and Coca-Cola silo on the Unbound course.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Yesterday I rode the 2026 Unbound 100 gravel bike race. This was my second time at the race, which has a lottery for entry, and the first time doing a southern route.&lt;/p&gt;
&lt;p&gt;It was also a mud year, which I learned is a thing.&lt;/p&gt;
&lt;p&gt;Before race day I went for a shakeout ride with my friend Ben who I met at UnPAved, then to the expo. I dropped off my bike at the Canyon tent for a pre-race tune up. I ran into some friends including Staci and a friend from Boulder. Also saw luminaries like Willie the dog.&lt;/p&gt;
&lt;p&gt;My plans for tire choice, nutrition, and hydration were based on a bet that it would dry out on race day, and based on the sunny, warm conditions the day before, I was feeling positive about the weather.&lt;/p&gt;
&lt;p&gt;So of course it rained. I missed my goals by a mile, my plan imploded, I over-hydrated in the cool temps requiring multiple bathroom breaks, tires were wrong for mud, I rode through a couple of massive thunderstorms, hiked my bike through 4 inches of mud and rode or walked through a few creeks and field runoff.&lt;/p&gt;
&lt;p&gt;And it was very fun.&lt;/p&gt;
&lt;p&gt;The sun came out with about 20 miles left so the finish was fast, with the tires finally matching conditions.&lt;/p&gt;
&lt;p&gt;Chip time: 7:46:25. Results: 510/1585 overall, 428/1249 men, 43/206 in my age group.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Bucknell Cycling Classic</title>
    <link href="https://jeffbeard.com/bucknell-cycling-classic/" />
    <updated>2026-03-22T00:00:00Z</updated>
    <id>https://jeffbeard.com/bucknell-cycling-classic/</id>
    <content type="html">&lt;figure&gt;&lt;img src=&quot;https://jeffbeard.com/bucknell-cycling-classic/cover.jpg&quot; alt=&quot;At the start line with the collegiate field.&quot; loading=&quot;lazy&quot;&gt;&lt;figcaption&gt;At the start line with the collegiate field.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;I raced the Bucknell Cycling Classic road race and had a great result, in my humble opinion.&lt;/p&gt;
&lt;p&gt;I haven&#39;t been training as much as I would like to, for a variety of reasons: sickness, weather, fatigue, location. It just hasn&#39;t been a good preseason.&lt;/p&gt;
&lt;p&gt;Still, when I heard about this race I said &amp;quot;why not&amp;quot;. I would at least be out riding and it would be a fitness check.&lt;/p&gt;
&lt;p&gt;Since this was a collegiate event and there were no age groups, I knew I wouldn&#39;t be competitive with anyone but myself or any other oldsters.&lt;/p&gt;
&lt;p&gt;So I lined up on a blustery, overcast race day and waited for a start that was 10 minutes late.&lt;/p&gt;
&lt;p&gt;The start was a short flat section followed by the steepest hill of the race. I was at the front with about five guys when we started up the hill. They quickly dropped me, then 95% of the field blew past me as well. I tried to keep up but felt like doing an 800 watt sprint at the start would come back to bite me.&lt;/p&gt;
&lt;p&gt;After the hill there was a flat-ish section where I started scouting for riders that seemed to be going about my speed. There were some, but they latched onto my wheel and let me do the work until I shook them off, temporarily.&lt;/p&gt;
&lt;p&gt;Shortly after starting my second lap, the collegiate women started passing me. I finally found one rider from UVM going at a sustainable pace, so I caught her wheel and we worked together for a couple of laps. We also built up a group including some of the original hangers-on.&lt;/p&gt;
&lt;p&gt;In the final lap I was on the UVM rider&#39;s wheel, and right before a fast descent I got on the front. I went fast on the descent, then full gas on a kicker and managed to drop them. I passed two or three more riders further up the road and finished solo.&lt;/p&gt;
&lt;p&gt;Very happy with the result, and a fun ride. Thanks to Steve Schoenfelder for the action shots.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Claude Code vs an IDE</title>
    <link href="https://jeffbeard.com/claude-code-vs-an-ide/" />
    <updated>2026-03-05T00:00:00Z</updated>
    <id>https://jeffbeard.com/claude-code-vs-an-ide/</id>
    <content type="html">&lt;p&gt;One for the coders.&lt;/p&gt;
&lt;p&gt;I recently received my JetBrains newsletter announcing a Cursor integration with IntelliJ via their Agent Client Protocol. It gave me pause to reflect on how much my personal development environment and processes have changed since I started using AI agents to build software.&lt;/p&gt;
&lt;p&gt;I&#39;ve tested Cursor and other AI-native IDEs for about a year now, but stopped using them regularly when Claude Code dropped. As I&#39;ve mentioned before, the CLI felt very natural to me, along with the more conversational nature of coding with an agent.&lt;/p&gt;
&lt;p&gt;The bigger shift, though, is that I&#39;ve largely stopped using traditional IDEs altogether. IntelliJ, Cursor, Visual Studio, all of them.&lt;/p&gt;
&lt;p&gt;In the past, I relied on deep knowledge of keyboard shortcuts and code generation features to squeeze every bit of speed out of my IDE. The result was a highly efficient setup, particularly for reducing friction from the massive amounts of boilerplate that software engineering involves.&lt;/p&gt;
&lt;p&gt;What AI coding agents have done is not just obscure boilerplate. They&#39;ve replaced the need for years of muscle memory and curated personalization with a code generation system that is, in my view, the first true killer app for AI.&lt;/p&gt;
&lt;p&gt;I still pull an IDE off the shelf when I need to debug something an agent can&#39;t fix, perform security or performance analysis on critical code, or get a more holistic view of a system. But that&#39;s rare. More often than not, I&#39;m only looking at code in a PR and relying on various analysis tools for quality, performance, and security.&lt;/p&gt;
&lt;p&gt;With the advent of multi-agent development, which I predict will be the norm as we exit 2026, I think IDEs will be increasingly relegated to the infrequent tasks I&#39;ve already been using them for, as we shift to custom agents for all phases of the SDLC.&lt;/p&gt;
&lt;p&gt;I&#39;ll caveat that: there are some areas where AI agents will take time to penetrate, like compilers, kernels, highly tuned code, and obscure or proprietary languages.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Old Man Winter, 2026</title>
    <link href="https://jeffbeard.com/old-man-winter-2026/" />
    <updated>2026-02-03T00:00:00Z</updated>
    <id>https://jeffbeard.com/old-man-winter-2026/</id>
    <content type="html">&lt;figure&gt;&lt;img src=&quot;https://jeffbeard.com/old-man-winter-2026/cover.jpg&quot; alt=&quot;Galen and me ready for 40 miles of gravel riding.&quot; loading=&quot;lazy&quot;&gt;&lt;figcaption&gt;Galen and me ready for 40 miles of gravel riding.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Another Old Man Winter on the books. Galen and I did the 10k run and 40 mile ride combo.&lt;/p&gt;
&lt;p&gt;Galen put in a heroic effort to get across the ride&#39;s finish line. Super proud of him for pushing through the pain.&lt;/p&gt;
&lt;p&gt;For myself, I managed to get sick and then drove cross country as prep for the event. I missed my goal of doing the 10k under an hour by seven seconds. I thought I was keeping a close eye on my pace, but there you have it.&lt;/p&gt;
&lt;p&gt;I do love this event, and doing it with Galen makes it particularly special.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>What I&#39;ve been doing since October</title>
    <link href="https://jeffbeard.com/since-october/" />
    <updated>2026-01-04T00:00:00Z</updated>
    <id>https://jeffbeard.com/since-october/</id>
    <content type="html">&lt;figure&gt;&lt;img src=&quot;https://jeffbeard.com/since-october/cover.jpg&quot; alt=&quot;An abandoned gas station canopy against fall hills in Pennsylvania.&quot; loading=&quot;lazy&quot;&gt;&lt;figcaption&gt;An abandoned gas station canopy against fall hills in Pennsylvania.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;What&#39;s Jeff been doing since October, you ask? Ramping up the running and continuing to ride. I went back to Colorado for several weeks, then came back to Pennsylvania via Chicago.&lt;/p&gt;
&lt;p&gt;The first event of the year will, as usual, be the Old Man Winter rally, where Galen and I will again tackle the 10k run and 40 mile gravel ride duathlon.&lt;/p&gt;
&lt;p&gt;After that I&#39;m trying to decide what to do with March and April ahead of Unbound in May. Boulder Roubaix is a classic, fun race, but as a lowly Cat 5 racer it doesn&#39;t necessarily help with race preparation the way, say, Desert Gravel would. Will have to make a call soon.&lt;/p&gt;
&lt;p&gt;It&#39;s been fun adventuring and getting to share some runs and hikes with my daughter Laurel.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Financial modeling: iterating toward viability with Claude Code</title>
    <link href="https://jeffbeard.com/financial-modeling-with-claude-code/" />
    <updated>2025-12-12T00:00:00Z</updated>
    <id>https://jeffbeard.com/financial-modeling-with-claude-code/</id>
    <content type="html">&lt;p&gt;I kind of fell into using Claude Code for financial modeling. I asked for help with infrastructure architecture, but as soon as I asked for costing it changed everything, because of how easy and fast it was.&lt;/p&gt;
&lt;p&gt;Important: all costs were verified by finding up-to-date pricing or talking to sales staff.&lt;/p&gt;
&lt;h2&gt;The first principle: super simple and cheap&lt;/h2&gt;
&lt;p&gt;I started with an arbitrary pricing idea for what I expected to be the most popular tier: $4.67 a month.&lt;/p&gt;
&lt;p&gt;Then I asked Claude Code: &amp;quot;What&#39;s the least expensive way to deploy the app as a container on AWS and be profitable at this price point?&amp;quot;&lt;/p&gt;
&lt;p&gt;The AWS constraint was purposeful, but more on Claude&#39;s infrastructure-as-code skills another time.&lt;/p&gt;
&lt;p&gt;That single question kicked off a cycle of iterative financial modeling, since I always ask the AI to interview me for detailed context.&lt;/p&gt;
&lt;h2&gt;What &amp;quot;iterative&amp;quot; means&lt;/h2&gt;
&lt;p&gt;This wasn&#39;t spreadsheet development, though it&#39;s easy to generate one. This was totally conversational:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Multiple infrastructure options (App Runner, Fargate, ECS, EKS)&lt;/li&gt;
&lt;li&gt;Evolving feature requirements (database, Internet access, vector storage)&lt;/li&gt;
&lt;li&gt;LLM cost comparisons across providers (Bedrock, Claude, GPT, Ollama)&lt;/li&gt;
&lt;li&gt;Pricing structure experiments&lt;/li&gt;
&lt;li&gt;Break-even analysis for self-hosted vs managed LLMs&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;AI lacks a lot of context, so I had to prompt it to do research first:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AWS and LLM provider credits&lt;/li&gt;
&lt;li&gt;Vector storage options, including S3&lt;/li&gt;
&lt;li&gt;Bedrock managed LLMs vs LLM provider APIs&lt;/li&gt;
&lt;li&gt;Networking and data transfer costs&lt;/li&gt;
&lt;li&gt;Security implications&lt;/li&gt;
&lt;li&gt;Third-party auth and data services&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But once I pointed it in a direction, I could easily iterate: &amp;quot;What if we add database migrations as part of deployment?&amp;quot;, &amp;quot;Cost impacts of public Internet access&amp;quot;, or &amp;quot;Model the cost at N users using x, y, and z LLMs.&amp;quot; It would regenerate the analysis in minutes, keeping me in a flow state and driving decisions, and the roadmap.&lt;/p&gt;
&lt;h2&gt;Key insight: markdown-driven development&lt;/h2&gt;
&lt;p&gt;Early on I didn&#39;t ask for markdown docs. Then I realized that markdown was simple long-term memory storage for the robot, and executable instructions for later.&lt;/p&gt;
&lt;p&gt;Once I started requesting markdown artifacts for every analysis, the quality and reusability improved. Each financial model became a versioned, auditable document I could reference and iterate on.&lt;/p&gt;
&lt;p&gt;Importantly, this creates a timeline of decisions and their justification.&lt;/p&gt;
&lt;p&gt;In the end I had a roadmap and a model for profitable growth, including an attainable break-even point.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Lehigh Gorge, 35 years later</title>
    <link href="https://jeffbeard.com/lehigh-gorge/" />
    <updated>2025-10-26T00:00:00Z</updated>
    <id>https://jeffbeard.com/lehigh-gorge/</id>
    <content type="html">&lt;figure&gt;&lt;img src=&quot;https://jeffbeard.com/lehigh-gorge/cover.jpg&quot; alt=&quot;The Lehigh Gorge Scenic Railway at Jim Thorpe station in fall color.&quot; loading=&quot;lazy&quot;&gt;&lt;figcaption&gt;The Lehigh Gorge Scenic Railway at Jim Thorpe station in fall color.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Jenny booked us a drop-off bike ride down Lehigh Gorge between White Haven and Jim Thorpe, Pennsylvania. A super fun ride and the first time in 35 years I&#39;ve been to Jim Thorpe.&lt;/p&gt;
&lt;p&gt;The last time was for a &amp;quot;MTB Weekend&amp;quot; when I first started mountain biking, before they smoothed out those rail beds. That trail was probably the smoothest gravel I&#39;ve ridden. There was a Huffy Toss event to make up for the sore backsides, and probably some youthful debauchery; I don&#39;t remember.&lt;/p&gt;
&lt;p&gt;Not this time. Very tame, and the town was swamped with people out for a day of leaf peeping, biking, or the train ride. A super fun day out with Jenny.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>UnPAved 2025</title>
    <link href="https://jeffbeard.com/unpaved-pennsylvania-2025/" />
    <updated>2025-10-13T00:00:00Z</updated>
    <id>https://jeffbeard.com/unpaved-pennsylvania-2025/</id>
    <content type="html">&lt;figure&gt;&lt;img src=&quot;https://jeffbeard.com/unpaved-pennsylvania-2025/cover.jpg&quot; alt=&quot;Ripping through the Hollows.&quot; loading=&quot;lazy&quot;&gt;&lt;figcaption&gt;Ripping through the Hollows.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;I rode UnPAved Pennsylvania again this year and had a challenging but fun day in the saddle.&lt;/p&gt;
&lt;p&gt;Last year I made a friend on course who I finished with, and we started together this year. He dropped me after the halfway aid station. I turned back because my power meter was complaining about battery levels and I had a spare in my drop bag.&lt;/p&gt;
&lt;p&gt;Setting aside being less fit than last year, this course was objectively harder. More and harder climbs, sketchy road surfaces, and a poor tire choice for the conditions, all resulting in more time on course.&lt;/p&gt;
&lt;p&gt;There were two timed segments I hoped to do better on this year. I got my second fastest results on both, so I can&#39;t really complain. In fact, I got a PR for most climbing in a ride.&lt;/p&gt;
&lt;p&gt;Despite forecasts to the contrary, the weather improved throughout the day, which made being out in the Central Pennsylvania mountains a fun fall outing. Also, perogis.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>The Rad Dirt Fest</title>
    <link href="https://jeffbeard.com/rad-dirt-fest/" />
    <updated>2025-09-28T00:00:00Z</updated>
    <id>https://jeffbeard.com/rad-dirt-fest/</id>
    <content type="html">&lt;figure&gt;&lt;img src=&quot;https://jeffbeard.com/rad-dirt-fest/cover.jpg&quot; alt=&quot;Bunny hopping acrossing the finish at The Rad Dirt Fest.&quot; loading=&quot;lazy&quot;&gt;&lt;figcaption&gt;Bunny hopping acrossing the finish at The Rad Dirt Fest.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;The Rad Dirt Fest in Trinidad, Colorado. Another race on the books.&lt;/p&gt;
&lt;p&gt;It was a fun and varied ride. Someone wanted to make sure the finish was earned: there were a few absurdly steep climbs, including the last one before the finish. And lots of great gravel, great views, varied terrain and road surfaces. Totally worth the suffering.&lt;/p&gt;
&lt;p&gt;Sadly, I did not get a coin for Unbound in the drawing, so off to the lottery I go.&lt;/p&gt;
&lt;p&gt;I wish I had a complete training regime on the books when I race, but I need to figure out the fine line between over-depletion and good fitness. I seem to get sick in the lead-up to a race, which blows up my training plan. It&#39;s often related to flying, which is a cesspool of pre-weaponized biological agents, so that might be an easy fix. Lots more to learn, and more hard work to get out of the back of the pack.&lt;/p&gt;
</content>
  </entry>
</feed>