I use Raycast Snippets to insert text wherever I’m typing. All my snippets start with a ! character so they never trigger by accident.
I used to have a lot more of these but found myself having to look up the trigger keywords for the infrequently-used ones, which was slower than just typing the thing. Here’s what I currently have.
!ultra
Ultrathink and take your time. Use parallel subagents freely and look online if you need to.
I find myself typing this into Claude Code regularly enough that I wanted a snippet for it. It’s pretty much the only “AI prompt” snippet I have now.
!starttodo
We are working on @docs/tasks-todo/ {cursor} . Gather as much context as you need and then continue implementation.
I routinely start new Claude Code sessions like this. Almost all my projects have a docs/tasks-todo folder where I keep markdown files describing implementation plans. After iterating on these implementation plans and heavily editing them, I often have Claude Code implement them across a number of different sessions.
!iso
{date "yyyy-MM-dd"}
Probably my most used snippet. Inserts an ISO date for today.
!gd and !gdos
{date "yyyyMMdd"}-{cursor}-OS
Inserts the important parts of a MoD filename/email subject (which I wrote about in 2013 ). The “OS” suffix is an OFFICIAL-SENSITIVEprotective marking , which isn’t always required, hence two separate commands.
!eraf, !ehi and !mob
These insert my two current email addresses and phone number, respectively. My RAF email is in the form name.surname.number@rafac.mod.gov.uk which is far too long to type by hand. I use the others less frequently than I used to because my password manager got better at inserting my details into web forms.
!meet, !zoom and !linkedin
These insert URLs which I use regularly or which are long enough that I struggle to remember them.
meet - My meeting booking link. I can use Raycast’s Cal.com integration to get meeting links for my specific types of meeting, but most of the time I just wanna share my “book a meeting” homepage.
zoom - The join link for my Zoom personal meeting room.
linkedin - Because I can never remember the form of my LinkedIn profile URL.
!a1, !a2 and !ap
Insert the first, second and postcode lines of my home address. Again, I used these much more before my password manager got good at webforms.
Do whatever it takes to have a stable and reliable developer environment. I don’t think it’s possible to overstate the importance of this. The stability of your developer environment directly determines how much of a workday you can spend actually doing work.
For instance, use as normal a developer stack as possible. At GitHub, most development is done in Codespaces, a platform for server-hosted dev containers. You can connect to a codespace with almost any IDE, but the majority of people use VSCode, so I use VSCode, with as few plugins as possible2. I think a lot of developers are too focused on their personal “top speed” with their developer environment when everything is working great, and under-emphasize how much time they spend tweaking config, patching dotfiles, and troubleshooting in general.
Fix developer environment problems as quickly as production incidents. If you can’t run tests or run a local server, don’t half-ass the troubleshooting process - focus on it until it’s fixed. On the flip side, don’t treat it as a leisurely learning experience (say, about how MacOS handles Dockerized networking). In many circumstances you’re probably better off tearing down and re-creating everything than digging in and trying to patch the specific issue.
Tauri Template is a batteries-included template for building production-ready desktop applications with Tauri, React and TypeScript. It’s designed with opinionated patterns that help both humans and AI coding agents build well-architected apps. The first version of it was extracted from Astro Editor in the summer, and yesterday I shipped some fairly major updates to it…
Added cross-platform support including path normalisation, OS-detection utilities, sensible title bars and updated GitHub actions for building releases for all platforms.
Added a quick entry pane which is a floating window that can appear anywhere. This is triggered by a global shortcut which can be changed in the preferences. On macOS it’s converted to an NSPane so it works over fullscreen apps, and there is an event bridge pattern which allows for this kind of pane to send data to the main window. The idea here is to provide a working example of how global spotlight-esque things should work.
Added a bunch of other common Tauri plugins which are likely to be needed in most apps.
Added internationalisation, including support for RTL languages.
Tweaked the shadcn theme and cleaned up the Tailwind and CSS a bit.
Refactored the monolithic lib.rs into multiple files.
Refactored the React components slightly.
Fixed a whole slew of bugs, potential edge cases and performance issues and generally made the code more defensive.
Completely overhauled the developer documentation.
Simplified the Claude Code Commands and Agents and updated the AI Agent files.
Plus a load of other little things which I can’t remember.
If you’re looking to start a new Tauri project, it’s a good place to start. Give it a try .
I read Simon Willison’s blog religeously , and occasionally he references a post he wrote way back in the dark ages of 2005. Every time he does I think what a shame it is that I lost a lot of the content I’ve posted over the years by intermittently switching the platform and domain I publish on. I’ve various published on:
In July I stumbled on a GitHub repo which had some of my old posts from dasmith.co.uk, and ported them over to this site.
Today I spent a little bit of time looking on the Wayback Machine to see if I could find and move over some of my much older writing - particularly the stuff I published on my first blog (thescri.be) circa 2005-07. I asked Claude Code to:
Okay, so I Just remembered that many years ago I used to have a blog on http://thescri.be And some of those posts are archived on the Wayback Machine. The latest snapshot I can find is here: https://web.archive.org/web/20080521124353/http://thescri.be/
I would like you to go through the posts on there and download their content into a series of markdown files. I think that eventually I will want to make all of these Notes in this site, But for now I just want to get down the content, ensure that the links are correct. Ensure that the dates and titles and everything are correct. And also wherever possible get any images which have been backed up. Um before actually trying to get all of these, you should come up with a plan for how you're going to get them. Ultrathink And do a little bit of exploring and research to work out the best way of doing this.
It came up with a plan which involced using the chrome-devtools MCP to spin up a browser and navigate the internet archive to find as many posts as it could from various snapshots. It did a really good job of finding posts which only appeared in one snapshot, which it turned out was quite a lot of them (all in different snapshots). It then extracted their contents and downloaded any archived images and created some markdown files with YAML frontmatter for them. I then asked it to:
Okay, now what I'd like you to do is go through these posts and do the following:
1. Turn them into MDX files which import <Callout> from '@components/mdx'
2. Update the frontmatter so that it matches the correct format for my notes content collection. Turn the categories into tags and discard the originalURL.
3. Fix up any markdown formatting issues.
4. Add a <Callout> at the top of each saying "This was originally posted on [thescri.be](originalURL) on <date in human readable format> and was imported here from the [Internet Archive](archiveUrl) on 18 December 2025"
5. Move the files into `src/notes`
6. Move any images to `src/assets/notes` and rename in the form "xxxx-xx-xx-current-file-name.ext" where xxx-xx-xx is the date the post was made. Update the image links in the posts.
7. Ensure internal links use the correct Astro URLs (eg: [link](/notes/<slug>)). If the internal links point at posts which we haven't been able to retrieve, leave the original thescri.be URLs.
So in two prompts (three if you include yes do it after it did the planning) I ended up with a load of my super old writing as notes in this site! I’ll do something similar for the other old domains I have soon!