What I use
Hardware
My main workstation is a 2021 Macbook Pro with the M1 Pro chip. The hardware is fantastic in almost every way, but the software is a bit of a downgrade 1 from a solid Linux setup.
When working from my desk, I use a Microsoft Sculpt Ergonomic keyboard2, and a big additional monitor. Using a laptop stand to lift the laptop to eye level is a must.
Software
In my Mac setup, I heavily utilize yabai, skhd and karabiner-elements. With enough tinkering, it is possible to recreate most of the i3 tiling manager experience. 3 My setup is based on these dotfiles. For Linux desktops, I use Arch Linux (btw) with i3. 4
While I often work on a local machine, I definitely prefer using the laptop as a thin client to a remote server.
I was an early adopter of Cursor and an early adopter of Claude Code. As of March 2025, neither is clearly better than the other.
The tier list of Cursor features is: Cmd+I (Chat) >>
Cursor Copilot ~ Cmd+K in terminal >> Cmd+K in code. I
write a new .cursorrules
file every time a project
grows beyond 10 files or so.
Some indispensable VS Code / Cursor extensions are JSON Lines Viewer, LaTeX Workshop. I like ruff as a pre-commit hook, and if you use that, use the Ruff extension too.
Some features in my codebases are being written by Devin, and as of Jan 2025, I am slowly getting it to be useful. Key tricks I’ve learned: sample a prompt multiple times right away instead of repeating after it fails; read the plans it delivers (because this is the point that makes or breaks the run most often); and keep the sessions short.
For virtual environments, ditch any Conda-like software, and
just use uv run.
Seriously.
While we’re at basic Python tips: (0) use uv
; (1) a
simple Python tool that it is easy to forget about but is very
valuable when you need it is py-spy; (2)
spending 10 minutes learning
what asyncio actually is might be among the most valuable 10
minute intervals in your engineering career.
For navigating inside a terminal, fzf and z are great. You should set
unlimited history size. For running many experiments, I
launch a tmux session
with multiple panes from a script. When I am not inside the
Cursor terminal (where Cmd+K is good), I also like Simon
Willison’s suite of tools: llm, llm-cmd and files-to-prompt.
Python-based global tools such as these are always better
installed with uv tool install
instead of pip or
using a virtual environment.
For automating git commit messages, opencommit is a bit verbose, but it works. Looking for a better solution.
I paid for TypingMind, and there I chat to Claude about all sorts of things, with an occasional Gemini query for longer or cheaper queries. I also use ChatGPT Pro occassionally, for algorithmic code and intellectually demanding tasks.
My writing process combines various tools for different purposes. I often begin by using superwhisper to dictate initial drafts into TypingMind, then chat with Claude until I’m satisfied with the result. I generally spend a lot of time in Google Docs, though I write my newsletter in Obsidian to take advantage of its Smart Composer plugin. I’m considering migrating more of my daily writing (both structured and unstructured) to Obsidian eventually. For certain types of structured notes, I still rely on org-mode in Spacemacs.
For keeping work todos, I use Asana. Recently I’ve subscribed to Setapp, mostly for Timing and Cleanshot X. I do not recommend Bartender anymore as of Oct 2024, and recommend paying $5 for Ice instead.
I endorse Anki, especially the mobile version.
Web
I use Firefox with the following life-saving extensions: vimium, OneTab, uBlock Origin, Enhancer for Youtube, and Tab Notes. I am consistently impressed by how much value Tab Notes brings me in particular.
In Firefox (and perhaps other browsers), you can add bookmarks to LLMs and search engines like this:
- Name: ChatGPT
- URL: https://chatgpt.com/?q=%s
- Keyword: c
- Name: Claude AI
- URL: https://claude.ai/new?q=%s
- Keyword: cl
Some online tools I like: repo2txt, AoE clock. See also Simon Willison’s list.
Travel accessories
The following travel accessories bring quite a lot of value:
- packing cubes (Go Travel is fine, one if backpack, two if suitcase);
- comfortable noise-cancelling headphones (Sony WH-1000XM4);
- a power bank small enough to fit in a pocket.
See also Vitalik’s backpack travel guide.
Pen and paper
I like the Pilot G2-07, black ink. Dots ~ plain > checkered > lined.
The slow burn of improvement
I have, from time to time, been hit with a sudden realization that there exist people that make me feel like I am walking while they are running. Sometimes I observe an insanely productive feedback loops, or someone delivering a huge amount of work in a matter of weeks. At that point, everything that I’ve accomplished recently, even if it was a lot, starts mattering less.
My natural response is to feel the sudden urge to overhaul my setup, and start working in a completely different way. I have tried adopting strict rules for work, suddenly forcing myself to do a lot of Anki in my spare time, plaster the office walls with printed out docs with best practices for research, etc. The thing is, this is completely ineffective.
What does work for me is frustratingly simple: change at least one thing every single week. In high dimensional spaces, local minima are rare. This is especially true given the rising tide of AI progress enabling improvements where there were none last time you tried.
These changes can look tiny. From my personal experience, at
the risk of this sounding outdated in a few years: It could be a
different way of using Cursor; a reshaped
llm_utils.py
file; commiting to take notes whenever
you read a paper; deciding to clean up and publish those notes;
it could be taking notes after every single research meeting so
the conversation doesn’t just go in one ear and out the other;
or it could be deciding to finish an actual commit with a
feature every single day. It could be keeping the top priority
for a project always at the top of the project doc; or it could
even be something like buying a standing desk.
The highest leverage improvements are about habits, not tools. But habits are hard. You can’t just decide to be a different person overnight. But you can decide to be a slightly different person this week.
Moving to a new city, or changing jobs, seems to enable making many improvements at once. This is related to personality basins.
Sometimes you slip up. You’ll abandon tools. You’ll break streaks. That is fine. What matters is to keep moving and try to get back on track on parts of what you are doing that are genuinely important.
One of the best sources of improvement is the people around you. When you see a coworker doing something smart, steal it. It’s much easier to adopt a habit when you can see it in action every day.
And one final thing: the meta-habit of continuous improvements itself is something that one can get used to.
They discontinued it. How could they? It used to come with a fantastic mouse, and worked with both MacOS and Linux out of the box. I will never get rid of mine now. (I did get rid of the numpad, though. It’s nice that it comes separate from the main keyboard so I can just throw it away.)↩︎
I didn’t succeed completely – for example, with multiple displays, it doesn’t seem possible to label workspaces non-consecutively. If you have any ideas on how to do this, please let me know!↩︎
Since dropping Windows a long time ago, I used Ubuntu, then Arch, then Manjaro for a long time, then switched back to Arch on a new laptop. Manjaro and Arch are very similar and somewhat better than the others. There is no bloat at all if you go with i3.↩︎