TIL macOS has shipped a terminal version of the Caffeine app since 2012:
caffeinate -dims
Keeps your Mac awake until Ctrl+C. Add -t 7200 for 2 hours.
Better: put it in front of a long command and it stays awake only until that finishes:
caffeinate -i npm run build
The flags:
-d keep the display on
-i block idle sleep
-m block disk sleep
-s block system sleep (on power only)
-t stop after N seconds
I use AI to write my blog posts. English isn't my first language, and I'm scared of getting facts wrong.
After this video, I stopped hiding it. Every post now says how AI was involved: ihabkhattab.com/ai
Chat, we're getting grilled on YouTube 😅
Jokes aside, the video and the comments are about AI-assisted writing, and some people are fine with it while others really aren't.
Honestly, they raised some good points that have me rethinking how I'll write going forward. Worth a watch:
youtu.be/Txx4T6oIpUo?si=HhOb…
1
8
625
Ihab Khattab retweeted
Listen to this guy.
Try this prompt I slightly adjusted from some who I think got it from @steveruizok:
Find all of the implicit state machines in my app (there are probably a ton). Make the best decision that will elevate all three: the user experience (UX), developer experience (DX), and agent experience (AX) always, without breaking anything. Also, make state machines explicit.
What is an implicit state machine?
Your apps are full of state machines, which is the logic that says "when we're in this state, and this event happens, now we're in this state" (given, when, then).
Sometimes those state machines are clearly mapped out (switch statements, reducers, tables/maps, libraries like XState for the more complex ones, etc.) and the logic is explicitly enumerable.
And sometimes it's not. The ad-hoc logic is spread all over the place. That's how developers typically code, and that's how agents typically vibe-code (they learned from you). Those are implicit state machines.
What's wrong with implicit state machines? It's not clear what state transitions are possible, so you might have "allowed" states that should have been impossible without knowing it. Agents make the same mistakes.
You can get all tests passing and your code review agents (even the well-funded ones) can say "LGTM" and you can *still* have very bad bugs because an implicit state machine allowed unexpected or illegal behavior. (Remember the Apple FaceTime bug?)
So yeah, making your app logic explicit is important.
Ihab Khattab retweeted
Need to record video of a Chrome tab, for a demo or tests?
There's a new API allowing flawless no-dropped-frames AV1 capture.
60fps easy. But can also do 120fps @2160p. (Yes, for real).
It's easy to use within pptr or playwright.. here's a mini npm package:
github.com/paulirish/chrome-… (bonus 120fps video within :)
Ihab Khattab retweeted
WebMCP gives your agents the manual to use your website. Without it, your agent spend more tokens on reading your accessibility tree, taking screenshots and trials and errors.
I wrote this article about WebMCP where I do a walkthrough of WebMCP built on TodoMVC, with a live demo.
alfy.blog/2026/11/08/webmcp-…
@ChromiumDev
Ihab Khattab retweeted
I’m building an accessible app using the #Claude Agent SDK to help people who are blind manage multiple coding sessions at once, without the complexity of terminals or IDEs.
It uses their own Claude Code installation and authentication.
My dream is to open-source this and help more blind people take their first steps into programming and computer science.
@AnthropicAI @ClaudeDevs, could someone help me understand how to make sure this complies with your policies?
I’d love to bring this to the community. ❤️ #a11y
Ihab Khattab retweeted
Please retweet
I’m building an accessible app using the #Claude Agent SDK to help people who are blind manage multiple coding sessions at once, without the complexity of terminals or IDEs.
It uses their own Claude Code installation and authentication.
My dream is to open-source this and help more blind people take their first steps into programming and computer science.
@AnthropicAI @ClaudeDevs, could someone help me understand how to make sure this complies with your policies?
I’d love to bring this to the community. ❤️ #a11y
It's Monday and you're adding dark mode.
No error. No warning. The bug isn't in your code.
ihabkhattab.com/blog/what-pe…
5
341
JavaScript Maps now have getOrInsert(), so you can finally stop writing the same if in every LeetCode solution.
Except on LeetCode. It still runs Node 22 🤦
ihabkhattab.com/til/map-get-…
1
4
171
my Ghostty settings. yes the font size is 22. my eyes and I have reached an agreement 👴
font-size = 22
theme = Night Owl
# Brighter gray for autosuggestions and dim text (5.22:1 on #011627)
palette = 8=#7a8b99
# Safety net: Ghostty raises any fg/bg pair below this ratio
minimum-contrast = 3
2
137
my Ghostty settings. yes the font size is 22. my eyes and I have reached an agreement 👴
font-size = 22
theme = Night Owl
# Brighter gray for autosuggestions and dim text (5.22:1 on #011627)
palette = 8=#7a8b99
# Safety net: Ghostty raises any fg/bg pair below this ratio
minimum-contrast = 3
Users click, the page freezes for two seconds, and the spinner never shows. Why?
And why don't a forced reflow, an await, or one requestAnimationFrame fix it?
The answer and a live demo of every version are in the post:
ihabkhattab.com/blog/the-spi…



















