tl;dr Trust should not be a blank check. For expensive product capabilities that can be abused at scale, access should grow with evidence, and teams need to measure both the abuse they prevent and the legitimate users they slow down. For a long time I have used and taught a pretty simple model for commercial abuse at scale. The adversary is basically running a business, just a dishonest one. When…
When I finished writing I stopped watching my agents work and started listening , I still had one problem. The post described Focus, Ready, Live mode, and voices for different agent lines. Those ideas made more sense when I could see and hear them, and I wanted a short demo video for each section. I could have recorded the videos by hand. I also knew what would happen. I would record one, notice…
I shipped the first version of Tri-State Relay Service (TSRS) because I needed agents to stop interrupting me. The original problem was simple. I had figured out that short spoken updates helped me follow agent work without reading a wall of terminal output, but plain say calls broke down as soon as more than one agent was running. If every process can talk whenever it wants, the room gets noisy…
I was talking with friends recently about what changes when agents become a normal part of building software. One of them shared a story about reviewing a large agent-assisted change where the explanation was basically missing. They asked for more context, and the added description still did not answer the useful questions. Why this change? Why this approach? How did the author know it worked?…
A few weeks ago I was in a Copilot CLI conversation with my Brain folder in scope, trying to make a small version of Andrej Karpathy’s LLM wiki approach fit into my day. The idea made sense to me right away. Keep source material around, let agents help turn it into useful wiki pages, keep those pages maintained, and stop rebuilding context from scratch every time you sit down to work. I thought I…
This last weekend I was doing my best to live in the moment and my daughter asked me if we could play Minecraft. We did for an hour or two and then, inspired by a conversation with a friend, I asked if she wanted to build her own Minecraft-like game. She was excited about the idea so I spent a few minutes with GitHub Copilot and put together an AGENTS.md that had the rough draft of the milestones…
I updated this post on August 9, 2026. Copilot CLI and VS Code now have built-in tools for finding previous sessions, so I recommend starting with the Copilot CLI resume documentation and the VS Code session history documentation . I kept the original tool and the ~/.copilot/ notes below because the local session data is still useful to understand and build on. Last week I switched to copilot-cli…
Update (Feb 28, 2026): This post got a lot of discussion on Hacker News and Lobsters . Two things worth addressing. First, several people pointed out 1Password Environments , a newer feature I hadn’t tried yet. It mounts a .env file backed by a UNIX named pipe (FIFO) so your existing dotenv libraries just work, but no plaintext ever lands on disk. Authorization persists until 1Password locks,…
I use AI in my writing all the time. For research, for turning messy transcripts into coherent sentences, for drafting, for getting feedback. But the way I use it matters. This isn’t about handing the wheel to an AI and publishing whatever it spits out. It’s a collaboration, a conversation, where the AI assists me and I stay in the driver’s seat. I’ve been refining this process over the past year…
I spent the weekend making my home network more secure, and the whole thing was just a conversation. Not “I asked an AI to generate a security checklist and then went through it.” More like: I sat down with a CLI agent, started talking about my network, and kept going. Over the next several hours, we port-scanned the network, audited what was exposed, hardened the NAS, built documentation…
I turned 44 recently, which means I’ve now spent exactly half my professional life as an entrepreneur and half as an employee. Fifteen years building and running my own businesses, followed by fifteen years working for others. The symmetry wasn’t planned, but it’s given me a chance to reflect on what I’ve learned about myself along the way. # The Foundation I fell in love with computers when I was…
Over the holiday break I decided to rebuild a slice of an internal web app from my day job as a webview experience inside VS Code. The goal wasn’t really the feature itself—it was to force myself to learn the VS Code extension APIs and to get my hands dirty with Open Truss , an open-source workflow framework I’ve been collaborating on with @hktouw and @kmcq . I started where I usually do: drafting…
I took this week off to reflect and spend some time closer to the mountains as I start my forty-fourth year on this planet. One of the things I’ve been thinking about and have been meaning to write about is how my processes and tools have evolved over the past two decades. Most productivity systems, the processes and tools, optimize for the wrong brain—someone else’s. I spent years trying to adopt…
Earlier today I saw a friend post about layoffs. Someone they were collaborating with on a project had just been let go. “I will be anxiously distracted for the next few days,” they wrote, “trying to yet again pivot a collaboration I was planning on.” The conversation that followed touched on questions many of us are wrestling with right now. How can critical engineering positions get cut when…
In my last post, The Uncertain Future of Coding Careers (and Why I’m Still Hopeful) , I wrote about something I’ve always found exciting as a developer: working myself out of a job so I can work myself into the next one. I don’t come from a CS background and my programming journey has always been focused on solving problems that matter to me, and that often means automating away the tedious parts…
I was drowning in meetings, losing track of decisions, and manually typing notes I never revisited. Then I found a better way—capture once, reuse everywhere with AI. In this post, I’ll show how I record and transcribe meetings, feed transcripts to large language models, and generate immediate action lists, summaries, and architecture drafts. It transformed my workflow from frantic note-taking to…
2006, Chicago. Nearly everyone at the first RailsConf tapped away on a MacBook, except about fifty rebels. My friend Christian Metts , who had introduced me to Rails , and I printed Certificates of Nonconformity , forged Bill Gates’ and Linus Torvalds’ signatures, and handed them to the non-MacBook crowd while Christian snapped photos of each proud hold-out , including the elusive why the lucky…
I recently rebuilt jonmagic.com from the ground up with help from GitHub Copilot , transforming it from a boring about page into a real blog and migrating over 100 posts from my old blog. After adding this much content, I wanted a way to make it searchable, but using eleventy on GitHub Pages meant there was no backend to rely on. Most of my projects these days involve building AI-powered features,…
A friend of mine, bright, driven, and relatively new to programming, asked me a heavy question the other day. “Did I make a mistake? Did I choose the right career?” The question hung in the air. It wasn’t born from a bad day or a frustrating bug. It came from a much deeper place of anxiety, one that I suspect many in our industry are feeling right now. They saw recent waves of layoffs, they read…
It’s that time of year again and I’m asking for peer feedback and writing feedback for teammates and realized I’ve learned a few things about this process over the years that I think are worth sharing. # Asking for peer feedback A close teammate and friend @kmcq gave this piece of advice recently and it really stuck and has made this review cycle at work much more straightforward and enjoyable:…
This year flew by with a couple life changing family events, several projects shipped at work, and a lot of learning. # Family We took two family trips to Florida this year to visit Natalie’s parents. The first trip was after her father found out he had cancer and the second trip was to help her mom pack up and move after he passed away. Of course these weren’t easy trips but I cherish the time we…
Ten years ago I started programming professionally and now I’m a Senior Engineer at GitHub. This blog post begins with a retrospective and ends with what I’m looking forward to in the future. # How did I get here? Growing up I was always building, repairing, using, and teaching people how to use computers. With a steady stream of spare computer parts from my Uncle John and encouragement from my…
It is interesting to study the gap between the intention of communication and the perception of communication in the context of leadership. “We’re going to do X going forward” can be interpreted as “You’re doing a crappy job at Y so we’re going to try X now” or “We decided that it is better to do X instead of Y because we had a meeting you weren’t invited to since we don’t really value your…
In college I learned how to do a SWOT analysis and I’ve been using it in one form or another at work and in my personal life ever since. Update 5-19-2015: The authors of this amazing SWOT guide reached out to me to let me know about their work. After reading my simple how to below, check out their full guide to learn even more. So why do I care about my strengths, weaknesses, opportunities, and…
I’ve never been good at New Years resolutions but this year has been different. Starting the year I decided to iterate on life in a much more deliberate way. Here are the results. # Writing I’m starting to understand how important it is to measure iterations in order to continously improve, instead of just changing things for the sake of change. Writing things down is the best way I have found to…
GitHub launched the Atom beta this week and the response has been great. As the first day was winding down a coworker suggested we write an FAQ and add a robot to answer the frequently asked questions in the IRC channel where people were congregating. Here’s how we taught hubot to do support. # Questions and answers First my coworker gathered the questions that were being asked over and over…
Almost two years ago a friend and my wife saved my life. They got me to go see a doctor because my sleep was a mix of bone rattling snores, deathly silence, and gasps for air. If this sounds like someone you know, help save a life. # I should have listened to her She wouldn’t say “I told you so” but I am certainly guilty of not following my wife’s advice several years ago to go see a doctor…
The past few months I have been building a new team at GitHub focused on solving problems for our business teams. Here are a few valuable lessons we learned along the way. # Solving the right problem We solve problems for a living and we have one major constraint, our time. This means we need to be thoughtful in choosing which problems to solve. We cannot solve them all. We decided to solve…
Hi, my name is Jon. I’m an addict. It does not matter what it is—if it makes me feel good, I do more of it. # But I Love It So Much! I love my job, or more specifically, I love the work I get to do every day. Combine my love for work with my addiction problem and I end up working too much and spending too little time with my wife, or reading a book, or taking a walk. When things are going well at…
We just finished shipping a six month long milestone on one of our support tools at GitHub . One lesson I learned along the way was focus. # Make a Commitment When I first heard about this project, the tool that handles all incoming support requests at GitHub, I was immediately intrigued and volunteered myself to help. Sitting down with the person who had developed the tool to that point and the…
As my plane broke through the clouds, descending into Verona, my eyes were met with seemingly endless farm land, a patchwork quilt, broken up by small patches of trees and wandering erratic roads. # Day 1 We landed at the small airport and for the first time in a decade I felt like a foreigner. I was in Verona for jsDay , having been given the opportunity to speak. After exchanging dollars for…
In the past month I’ve had the opportunity to present this talk twice, first in London England and then in Verona Italy. Before joining GitHub I met Zach Holman from GitHub at a conference in Colorado and heard about Hubot . As soon as Hubot was released as open source we started using him at Ordered List and I blogged a simple script writing tutorial , which is still my most popular blog post day…
I’m really excited to let you know that we’ve added full-screen support to presentations on Speaker Deck . This feature has been percolating for awhile, going thru several iterations before we found a solution that we really liked. We are using the new full-screen API’s available in Webkit based browsers and Firefox. There were a few obstacles we had to overcome, mostly just learning how the API’s…
Ever since Hubot was released I’ve been regular expressing myself. Here is a tool I built to make testing regular expressions in JavaScript easier. Rubular was my go-to for testing regex in the past, but it’s targeted at Ruby so I went in search of a nice editor for JavaScript regular expressions. Unfortunately my search yielded no results. Fortunately I had the tools and experience to build one!…
While working on an internal app at GitHub I had to write a cucumber scenario that ran expectations against a new tab that was opened. Here is how I did it. # The Code Searching around the internet, I finally found a tip on StackOverflow that got me moving in the right direction. In this context tabs are referred to as windows. page . driver . browser . switch_to . window ( page . driver . browser…
It has been a month since Ordered List was acquired by GitHub and our team of 5 joined their team of 50, and it hasn’t sucked at all. Here are some observations on how to remove the suck from acquisitions. # The Suck My general attitude towards acquisitions the past few years has been fairly negative. I’ve seen too many people and products we love be acquired and the people only stick around until…
This year I authored several RubyGems and just this week finally learned how to work with a contributor. UPDATE: @bryckbost points out that the github-gem does exactly what I wanted to do. See the Fetching and Evaluating Downstream Changes section of the README. Of course GitHub has the great Merge pull request option when an auto-merge is possible, and I use that quite often, but the workflow on…
Today I hacked together an easy to use gem for accessing the Gauges API. When I started this morning 12-gauge was the first thing I thought, so I called the gem Twelve (silly I know). I had fun figuring out the API (with a little help from Brandon ) and then writing the gem using some of the proxy object and method missing stuff I was learning a few weeks ago. # Installation gem install twelve #…
Today the whole crew from Ordered List joins GitHub! # Ordered List Last year was a big year for myself and Ordered List . Steve and John launched Harmony in August, I started hanging out with them on a regular basis and began work on Speaker Deck , and the end of the year saw Brandon Keepers and I leaving our own businesses to make OL four strong . This year was even bigger, launching Gauges and…
While I initially had issues with the concept of Finish Weekend, I’m really glad I participated and believe everyone involved is better off for it. # The Who My friends at Collective Idea have apparently been talking about doing a Finish Weekend for a few years and this is the year they made it happen! They put out the word thru Twitter, friends, colleagues, and a ton of people signed up and…
Ok, so now you’ve got your shiny new hubot up and ready to listen to your every command. But what should we tell him to do with our nonsense! # Basics Scripts for hubot are written with CoffeeScript . This is what a basic script looks like: # hubot greeting. # # (hi|hello) - say hi to your butler module . exports = ( robot ) - > robot . respond / hi | hello / i , ( msg ) - > msg . send "Howdy!"…
How you can give Siri her very own robot brother with some help from Heroku and HipChat. Github released hubot this week and geeks the world over have been transfixed by his awesomeness. He’s the second robot butler to enter my life lately, Siri being the first. Together these two fulfill my every wish (not quite) and are at my beck and call day and night (too true). UPDATE: for a slightly…
We need more mentors. Mentors help us avoid mistakes and give us guidance on how to be better at our jobs and at life. # My Mentors The first eight months of my new job at Ordered List I paired with my coworker Brandon three or four days a week. We kept each other on task, but most important for me, he started teaching me the process of writing beautiful and maintainable code. He had years of…
Building a career as a programmer requires a lot of hard work, determination, and in my opinion a lot of writing. How do you build a personal brand online? How do you get opportunities to work on awesome projects? How do you get invited to speak at conferences? Looking at my coworkers’ success I would deduce that you have to work hard on stuff you care about and then share the knowledge you have…
Looking back at the last two weeks since launching Speaker Deck. # Launching Knowing when to launch a product is a painstaking task and ultimately you are never sure if it’s the right time, but at some point you have to pull the trigger. September 26th we finally committed and launched Speaker Deck to the world. The past two weeks since launch have been pretty intense, we’ve had over 2500 signups…
We recently ran into issues with certain versions of GhostScript not being able to convert PDFs into images. Here’s how we solved the problem. # The Problem Last week we launched Speaker Deck and since launch over 2000 people have signed up and uploaded almost a 1000 presentations. We were using GhostScript 9.04 because it is faster than 9.02 by a factor of two and fixed some processing problems…
When did you start using a Mac? Just wanted to share my story and how Steve Jobs and Apple changed my life. I bought my first Apple laptop, the 12” Powerbook, in 2002 for $2000. It forever changed my life. Simple, intuitive, and extremely powerful. Before that I had only ever owned PCs, my first one a 286SX my parents bought in 1987. Before that I had played on 8088’s, playing Frogger and learning…
How a product was born, from inception to implementation, and distractions to launch. # Inception Speaker Deck was born in a little Irish bar right around the corner from our offices in South Bend Indiana in May of I was meeting Steve and John for lunch and they were talking about how much they disliked the slide sharing options currently available. It was of special interest to them as they do a…
I struggle with remembering great ideas, not so great ideas, things I want to accomplish, and so much more. Let’s talk about the easiest way to hack our lives so we can be more productive. If you find yourself struggling to remember conversations, epiphanies, and just “what should I do next” then you may be struggling with the same thing I am, a lousy memory. For years I’ve told people my memory…
Grim is a simple gem for extracting (reaping) a page from a pdf and converting it to an image as well as extract the text from the page as a string. Grim is my first Ruby gem! Not technically my first OSS contribution, but definitely my first gem. This project came out of Speaker Deck and is used by Speaker Deck whenever you upload a presentation. # Sample usage pdf = Grim . reap ( "/path/to/pdf"…