Sign in

Keegan Donley

@keegan.codes
553 followers 529 following 325 posts

Product-focused software engineer • Principal front-end engineer at kizen.com 🚲 Cycling 🏕️ The outdoors 🏎️ Formula 1 🍷 Wine 👨🏻‍💻 Code keegan.codes 📍 Austin, Texas

PostsRepliesMedia
Keegan Donley @keegan.codes · 23/09/2026
Amazing vibes at Circuit of the Americas last night for bike night! @victorylap.fit
Sunbeams in the distance above a formula 1 race track with a map overlay and the text 22.0 mph and Victory Lap
041
Keegan Donley @keegan.codes · 10/09/2026
What are we doing here Google? Lowercase titles? Spelling out years? A little too sloppy for me
A push notification that reads Apple unveiled the new nineteen ninety nine dollar foldable iPhone Duo
000
Keegan Donley @keegan.codes · 09/09/2026
Opus keeps doing this to me tonight - running no-op tool calls in a loop while waiting for sub-agents. Makes no sense and I've never seen it before now.
• I’ll wait for the critic’s report.
  Ran 1 shell command

• I’ll wait for the critic’s report.
  Ran 1 shell command

• I’ll wait for the critic’s report.
  Ran 1 shell command

• I’ll wait for the critic’s report.
  Ran 1 shell command

• I’ll wait for the critic’s report.
  Ran 1 shell command

• I’ll wait for the critic’s report.
  Ran 1 shell command

• I’ll wait for the critic’s report.
  Ran 1 shell command

You have run cd /Users/keegan/Developer/hindsight && echo idle 53 times in two minutes. That is busy-waiting and it is burning opus tool rounds while your critic subagents work. Do this now: make no further tool calls, write a two-line status (what is built, what you are waiting on), and END YOUR TURN. Background subagents notify you when they finish and you are re-invoked automatically with their results; nothing is lost by returning. Resume the critic-fix loop and the final report only when a task notification arrives.

• Understood — that was wasteful, and I'm stopping.

  Status: All six units are integrated at /Users/keegan/Developer/hindsight. The app builds clean (zero warnings) and 105 tests pass on the dedicated Hindsight-Sim — 58 in HindsightKitTests, 47 in HindsightTests. Findings are recorded in spec #96‘s notes.

  Waiting on: the smart-critic review of the integrated tree. I’ll resume the fix loop and send the final report when its notification arrives.

% Waiting for 1 background agent to finish

}
121
Keegan Donley @keegan.codes · 03/09/2026
I built a tiny little service called Service Lookout - it's an aggregator of all the platform statuses I care about, and it makes them available over MCP so my agent can quickly discover active incidents. Works pretty well! servicelookout.com
A Claude Code terminal window shows a status update about an issue affecting OpenAI's Codex services, including Codex API, CLI, and others. It states "Elevated errors across ChatGPT and Codex" are confirmed as an active incident, reporting degraded performance on several platforms.
230
Keegan Donley @keegan.codes · 01/09/2026
hypothesis.sh now has a placeholder images tool available! You can use procedurally-generated images as placeholders in svg, png, or webp formats. Free to use as always with the rest of the toolset! hypothesis.sh/photo?w=600&...
A blue and green gradient placeholderA blue and black noise placeholderA blue green and red shape placeholderA blue and green placeholder with borders and the dimensions 600x400 printed inside
000
Keegan Donley @keegan.codes · 26/08/2026
I got a Pixel 11 as a second phone since I'm working on porting some of my apps over to Android. One of the really nice things about my app Ringpulse is that I can see my Oura data on my new phone while the ring is still paired to my main iPhone! ringpulse.app
A health dashboard for Oura showing a readiness score, sleep score, and activity score, along with other vitals
000
Keegan Donley @keegan.codes · 19/08/2026
This isn’t how I post right?
just spent 4 hours refactoring a typescript web app just to realize the bug was a missing comma in a css file. gonna go stare at my bicycle and rethink my life choices.
Want me to tweak the vibe with a dash of Formula 1 hot takes, a Go vs. TypeScript debate, or an Austin cycling route reference?
020
Keegan Donley @keegan.codes · 17/08/2026
Rough day
A status dashboard showing service health: Cloudflare, GitHub, and Vercel are marked as Degraded, while Kizen is Operational.
031
Keegan Donley @keegan.codes · 17/08/2026
Finished the last two big climbs on Zwift’s Tour Fever challenge over the weekend. Glad I finished when I did, because I woke up sick this morning. Probably from talking to too many people at Render last week.
Progress Report for Level 65 user. Career Progress: Completed 'This Ride' for +1,356 XP, contributing towards a total of 7,877 XP out of 11,000 XP goal. Zwift Concept Z1, Stage 2/5 with 'This Ride' adding 28 miles to their total of 228 out of 994 miles. Achievements: Earned 30 out of 36 possible awards. Route Badges: Achieved 180 out of 241 badges. Fitness Trends: Indicating 'Weekly Time Goal' progress with 'This Ride' adding 2 minutes and 31 seconds to progress, current total stands at 4:18 out of 5:50. 
1-Year Power Bests: 5-second effort at 841W, 1-minute at 434W, 5-minute at 294W, and 20-minute at 254W. Fitness Score: 46.8, with a 4.3 point increase from this ride.
Progress Report in a workout app showing Career Progress with XP earned and a progress bar indicating a level. Achievements highlight 30 out of 36 trophies and Route Badges showing 180 out of 241 completed. Weekly Fitness Goals are partially achieved, with segments of a "Time Goal" progress bar colored in blue, grey, green, orange, and red. Personal Record (PR) stats for 5-second, 1-minute, 5-minute, and 20-minute intervals are displayed. Training Score increased by 3.6 points in the latest ride. Below, a button marked "Continue" in orange invites user interaction. Visual design includes a forest backdrop.
020
Keegan Donley @keegan.codes · 14/08/2026
Stayed as long as I could! The last night is always a fun time. Now it’s airport vibes for me (not too bad though)
120
Keegan Donley @keegan.codes · 14/08/2026
Render is done, heading back to Austin! What a fun couple of days, one of my favorites so far! @renderatl.com
A whiskey sour in front of a large tree in the Atlanta centurion lounge
020
Keegan Donley @keegan.codes · 13/08/2026
Render day 2!
A view of Atlanta from the hotel
010
Keegan Donley @keegan.codes · 12/08/2026
Today’s presentation by @sarahedo.bsky.social at @renderatl.com in addition to being excellent and educational, also reminded me I need to step up my slideshow game for an upcoming talk!
110
Keegan Donley @keegan.codes · 12/08/2026
Been looking forward to hearing from @nodeland.dev and @renderatl.com today!
000
Keegan Donley @keegan.codes · 11/08/2026
Starting Render off right with a fantastic IPA - I always check out a new brewery when I’m in town
020
Keegan Donley @keegan.codes · 05/08/2026
We're now just a week away from my fifth year at @renderatl.com! Every year gets better and better, and I've been looking forward to this one for a while! Hoping to see some familiar faces and some new ones!
The words "Render ATL" spelled out by hovering drones over the Ponce City Market rooftop
041
Keegan Donley @keegan.codes · 21/07/2026
I've been using a custom tool for collecting telemetry from my agents and it's been a game-changer for visibility into ongoing work when I'm AFK. The best part is that sessions get summarized as I go, and get taken into account by my auto-standup tool, summarizing yesterday's work and blockers.
The screenshot displays the “Active Sessions” panel of an internal LLM / agent orchestration UI.
Key points for developers:

Five concurrent sessions are listed, each represented by a card that shows: • Session name and status tags (e.g., “Executing tool”, “Processing”, “Waiting on LLM”, “Streaming response”).
• Model name (all “Claude Code” except one “Codex”).
• Real-time activity metrics:
– Last-active timestamp (e.g., “14 s ago”).
– # of LLM calls and tools invoked.
– Token I/O counts (“in / out”).
• Working file path for the session.
• Elapsed duration.
• Controls: “View spans”, “View transcript”, “SummarizeThe screenshot shows a chronological activity/telemetry log that records:

Bash commands that print and cat multiple script.js files (configDialog, resetConfirm, styleDialog, wizardPage, create.js, etc.).
Tool-level searches inside the codebase (kizen-plugin-reference/search_plugins and mcp_kizen-plugin-reference__find_method) for “frameless”, showViewInModal, data-script="cancel", etc.
File reads of several CSS and JS view files under
/Users/keegan/Developer/plugins/plugin-dev-keegan/src/views/...
A write operation to src/views/configDialog/script.js.
Inline code comments indicating the purpose:
“Wizard POC — “Edit Brewery Config” dialog. … Opened frameless via showViewInModal(“configDialog”, …”
Durations for each step (e.g., 59 ms, 22 ms).
010
Keegan Donley @keegan.codes · 27/06/2026
For some reason it’s been hard for me to get back out on my bike. Life has been taking priority I guess. Finally out for a long ride today (with a beer stop) and loving it!
A beer in a glass with the red horn logo on it, sitting on a picnic table with a bike in the background
010
Keegan Donley @keegan.codes · 09/06/2026
So Fable 5 is pretty neat - been playing around a bit at work seeing if it can build plugins for me. Expensive! 29 cents to say hi.
Summary
The screenshot shows a cost analysis for sending a simple message like "hi" in an AI agent environment. It outlines the token usage and associated costs when sending a message through an AI interface. The breakdown includes both input and output tokens and highlights the difference in cost between a bare session and a raw API call. This information is useful for developers looking to understand cost implications in AI interactions, particularly with Claude-Class pricing.

Extracted Text
How much does it cost to say hi?

Saying "hi" is never just "hi" in an agent environment. Rough breakdown:

- Your message: ~1 token
- What actually gets sent: the system prompt, tool definitions, environment info, etc. – typically 10–20k input tokens before you've said anything
With Claude-Class pricing (~$3/M input, ~$15/M output), a bare "hi" in a session like this costs roughly $0.03–0.06 for the first turn, mostly from the fixed context overhead. The reply itself ("Hi! How can I help?") adds a fraction of a cent.

If you mean a raw API call with no system prompt: ~5 input + ~10 output tokens ≈ $0.0002 — effectively free.

If you want, I can pull your actual AI usage stats to see what your average session costs.

📘 Build · Claude Fable 5 · 10.4s

Build  · Claude Fable 5 Vercel AI Gateway

22.0K (2%) · $0.29   ctrl+p commands
750
Keegan Donley @keegan.codes · 12/05/2026
With the deprecation of DALL·E 3, I finally got around to updating thirsty.bot to use gpt-image-1 for recipe images. I like the consistency and elegance of the outputs, but it does miss some of the character of DALL·E.
DALL·E 3 image: a tall glass with stem containing a margarita, with a roesemary sprig and cucumber. In the background is a rosemary plant, bottle of tequila, cucumber, and various kitchen utensils. gpt-1 image: A margarita in a lowball glass with ice and a rosemary sprig. The background is a cream colored room with minimal shadows, and no other objects.
020
Keegan Donley @keegan.codes · 17/02/2026
Excited to see a new performance-focused app from @gentler.app!
A screenshot of a mobile app with fitness data, indicating moderate readiness at 61% for the day, with a training load ratio of 0.65. There are various metrics across the bottom like heart rate, hrv, temperature, breathing rate, and blood oxygen.
141
Keegan Donley @keegan.codes · 05/02/2026
Back in 2018 or so when I was in college, I drove up the coast of California on Highway 1 with my grandpa's old Nikon and shot a few rolls of film. I never developed them and thought they got lost when I moved to Texas. My Dad found them in his house recently! Such a nice surprise #photography #film
Green ground cover that looks like ice plants up on a cliff in front of rocks in the distance that extend out into the oceanLooking down a fence line toward a lighthouse on an outcropping in the distance, with the ocean in the background. In the foreground along the fence are yellow wildflowers in a green lush field.Looking down a fence line toward the ocean from up on a cliff following a trail to the water. There are rocks in the ocean in the distance, and green grass around the trail.A close up of a yellow wildflower with the ocean and a lighthouse in the distance. Many yellow wildflowers will a field of green grass in the background.
050
Keegan Donley @keegan.codes · 11/12/2025
Been working toward this challenge on @gozwift.bsky.social all year! Happy to cross it off in the final days before traveling for the holidays. After this week, all outdoor riding for the rest of the year!
You have completed the climb Mt. Everest challenge You have unlocked the Zwift concept bike
020
Keegan Donley @keegan.codes · 05/11/2025
New Oura UI is pretty nice! Love to see the return to serif fonts in design lately.
A screenshot of the Oura health app, with a calorie burn of 399 and the text “Almost there” in a serif font on a blurred background image.
010
Keegan Donley @keegan.codes · 10/10/2025
Did a 105 mile bike ride, got married, and went on a mini-moon right after. Each of those events are pretty clear in my cardio load chart 👀. It was the longest break I’ve taken in a while, feels good to be back to a productive training state!
A graph of cardio load with a peak at 302, decline to a low of 25, and steady increase over the last few days back to 110
020
Keegan Donley @keegan.codes · 25/08/2025
Over the weekend I saw some people at my gym nearly come to blows over the free paddle board rentals. I was happy in my kayak to watch the drama from a distance 🤣 Just another reason the kayak is superior to the paddle board!
A kayak paddle extended out over the waterThe bow of a kayak looking out over the water
010
Keegan Donley @keegan.codes · 12/08/2025
A year ago tomorrow I did my second longest bike ride (at the time) - 13 miles! Now a year later I’ve done multiple 100km rides and I’m getting ready to do 100 miles! Crazy how a year changes things.
A map of a cycling route totaling 13.27 miles in I 1 hour and 3 minutes
030
Keegan Donley @keegan.codes · 18/07/2025
Worked on deploying a new service today. Exciting things coming regarding developer enablement! Side note, working on Docker builds and infrastructure stuff is one of my favorite use-cases for Github Copilot now. It did a great job working through some of the trickier bits with me.
A breakdown of time spent on programming languages today:
Typescript - 2:01
JSON - 1:44
Terraform - 0:32
Docker - 0:31
Bash - 0:19
JavaScript - 0:17
HTML - 0:10
TSConfig - 0:06
Git Config - 0:04
000
Keegan Donley @keegan.codes · 26/06/2025
Did an AI make this ad? There’s no AI in IPA unless you get real creative 🤣
An ad that says “Putting the AI in IPA”
000
Keegan Donley @keegan.codes · 26/06/2025
I've been seeing a steady degradation of my performance scores for keegan.codes on @vercel.com in the last few days, with no deployment changes on my end. I wonder what's going on 🤔. Traffic patterns seem fairly steady in the same period.
A graph of my performance score ranging from 0 to 100. 30 days ago it was a bit unstable, but mostly leveled out above 90% until a few days ago, where it steadily trends downward toward 50%
010
Keegan Donley @keegan.codes · 15/06/2025
First night in my own bed after Render and my sleep is already improving. Feels good to finally sleep more than a few hours!
A recovery score of 74% and sleep score of 82% in a screenshot of a fitness tracking app.
010
Keegan Donley @keegan.codes · 13/06/2025
Render day 3! Starting off the morning right at the executive stage
A cup of tea in a table at the back of a conference room
010
Keegan Donley @keegan.codes · 11/06/2025
Smooth travel day with @jullyzhu.bsky.social and now we’re ready to hit the ground running tomorrow morning for the AI summit!
Keegan and Jully sitting on a plane before takeoff A paper plane cocktail sitting on the bar at the hotel
000
Keegan Donley @keegan.codes · 10/06/2025
Calm before the storm… headed to @renderatl.com!
A beer and plate of chicken with Mac on a table at the delta sky club
110
Keegan Donley @keegan.codes · 04/06/2025
Since I've been using @obsidian.md a lot lately, I'm trying out a canvas for diagramming some of the business logic that eventually needs to get built. I'll be breaking this down into phases but it's nice to see everything in one place.
A flow diagram with lots of nodes and arrows between them, but no visible text labels of what the nodes represent
030
Keegan Donley @keegan.codes · 28/04/2025
Some of my best ever sleep and recovery numbers last night! No alcohol, a highly productive weekend (so no residual stress going into the week), and a relaxing Sunday with an early dinner all contributed. Now to replicate this during busy periods 😬
A screenshot of the Bevel app showing a 99% recovery score, with a resting HRV of 72.2ms and a resting heart rate of 48.9bpm. A screenshot of the Bevel app showing a 82% sleep score, with 7:55 minutes in bed and 6:51 minutes asleep.
000
Keegan Donley @keegan.codes · 24/04/2025
Ran out at lunch to get my Close Your Rings pin from the Apple Store! I wish there were more of these pins for other limited edition awards, it's pretty nice!
A pin that looks like the apple watch close your rings day award
010
Keegan Donley @keegan.codes · 10/04/2025
Uh seems like a pretty niche concept for a podcast
Hey Keegan,
Ever thought of starting a podcast about leveraging ai in marketing to acquire 3-4 enterprise deals with various industries per quarter?
010
Keegan Donley @keegan.codes · 03/04/2025
Apple Intelligence decided to summarize the tiny legal disclaimer at the bottom of the email instead of the main email body (what the upgrades actually are) 🤦🏻‍♂️ This shit is so useless
Oura - Fresh updates just for you
Oura upgrades; products not medical devices
100
Keegan Donley @keegan.codes · 07/02/2025
The worst night followed by last night’s metrics. No wonder I’m feeling so much better
000
Keegan Donley @keegan.codes · 15/01/2025
Cooked this for the first time tonight with my fiancé. Definitely going to be a frequent appearance in my kitchen!
Broccoli beef in a stainless steel pan on the stove
110
Keegan Donley @keegan.codes · 13/01/2025
This is a pretty scary phishing scheme for Apple IDs. My grandmother got this today. Thankfully she was suspicious and knew to ask me to confirm, but I’d bet this one works pretty often.
Verify Your Apple ID Information
Dear
We've noticed a potential issue with your Apple
ID.
¿ To ensure your
account remains secure and fully accessible, a quick verification of your information is required.
Why is this happening?
Your Apple ID has been temporarily disabled due to missing or invalid information. This step is necessary to protect your account and prevent unauthorized access.
What do you need to do?
1. Click the button below to verify your account details.
2. Follow the prompts to update any missing or outdated information.
Go to Apple ID Verification
Note: If you do not verify your account within 48A screenshot of a fake Apple login screen that looks realistic enough
022
Keegan Donley @keegan.codes · 09/01/2025
My heart rate monitor dropped out after a few minutes. Strava AI was real insightful on this one.
Low average heart rate of 14 bpm with max of 162 bpm suggests a controlled, strategic effort.
100
Keegan Donley @keegan.codes · 31/12/2024
It’s a New Years Eve miracle! Been wanting to get my hands on one of these but it’s been out of stock every time I try.
A screenshot of the Unifi store with the unas pro in stock
010
Keegan Donley @keegan.codes · 23/12/2024
I built a little Christmas sweater-style drawing app over the weekend. It's still a little rough but maybe I'll make it public tomorrow to celebrate the holidays 🎄
A screenshot of a drawing app, with a color chooser at top, and a canvas made to look like Christmas sweater stitches that can be drawn on digitally.
000
Keegan Donley @keegan.codes · 20/12/2024
Delays weren’t bad this year, only 3 hours across 22 flights
A report of flight delays in 2024. 3 hours total, with the worst delay being 52 minutes from AUS to TPA. The worst airline was Southwest
000
Keegan Donley @keegan.codes · 20/12/2024
Not my busiest travel year, but I still spent 3 days in the air! Less international travel than some years but a whole lot of domestic travel for weddings this year.
A summary of my flights in 2024: 22 flights, 30,532 miles, 3 days flight time, 15 airports, and 7 airlines
100
Keegan Donley @keegan.codes · 04/12/2024
Finally finished after a late night! Loving the final result. I’m planning on putting larger Edison bulbs in today and the scaffolding can finally come down!
three white pendant lights hanging from the ceiling above yellow scaffolding
020
Keegan Donley @keegan.codes · 30/11/2024
A large dog sleeping on a gym floor behind a peloton bike
011
Keegan Donley @keegan.codes · 28/11/2024
Thankful for family and this spread
A table set with lobster, crab, scallops, and Korean barbecue with wine and sparkling cider
020