The story so far

I shared my AI context system in February… aaaand, it’s already out of date. Sorry! I tried keeping it in sync for a bit, but if I’m honest it was out of date by a week after that post, and I just did a git log and was amazed to see that I’ve pushed roughly 80 commits (to my private repo) since that post! So yeah, I give up. ๐Ÿ˜…

But - all is not lost! I wanted to give a bit of an update on what I’ve since added (and abandoned), and highlight how easy it is to add new functionality yourself.

Which actually highlights an interesting point; are we in the midst of a change in how open source software is used? In that, in the “old days” you would clone a repo and if you wanted the latest improvements you would pull that repo to “update” your local copy. But now, in some cases (like this one) it may be easier just to consider most/every(?) clone a fork, since you might as well just “vibe-customise” your own copy rather than waiting for someone else to implement that feature. ๐Ÿค” Anyway, I won’t go down that rabbit hole since that’s not what this post was meant to be about…

What’s changed?

This won’t be a detailed changelog, but I thought it would be interesting to list what I’ve done over the past month (which is approximately 3 AI-years by the way):

The heartbeat

I had already converted from only using Claude Desktop to running in the CLI as well. Since then I’ve doubled down in this space and find myself using Claude Code more than half the time now.

I built a cron-based heartbeat that runs every 30 minutes during work hours. It checks for new meeting transcripts or summaries, new docs, etc. Most interestingly it also checks a personal Slack channel I set up for issuing commands and ad hoc prompts via Slack while out/on the go.

I thought (given the hype around OpenClaw at the time) that this would be revolutionary. Yeah, I haven’t ever used it in anger. Funnily enough it turns out that when I’m away from my desk - at gym, walking the dog, etc - the last thing I want to do is chat to my AI work assistant. But the automated processing of raw files has been useful at least.

New commands

I added a few more commands:

  • /morning - generates my daily journal in Obsidian. Checks my calendar (and does some light “pre-research” for any meetings, etc), lists any time sensitive tasks, etc.
  • /meeting-analysis - this I run roughly weekly or fortnightly to get a meta-review of my participation in meetings. Stuff like how much I’m talking vs listening, any bad habits, speech patterns, etc.
  • /extract - I realised I was having the odd chat with Claude (usually in the desktop app) about something like prepping for a meeting, trying to understand a complex technical topic, etc - but I would then throw that conversation away without committing anything to “memory” - so I can run this command at the end of a chat session for it to extract anything valuable and write it to memory.

There were a few other less interesting commands added to help with things like summarizing certain kinds of docs for me, or “housekeeping” type commands.

Memory architecture simplification

I went from 6 topic-based memory files to 3 focused files (people/dynamics, work/delivery, strategic/commercial context) which simplified and sped up the memory update process.

Since I’ve also gone all-in on using Obsidian as my “front-end interface”, I also spent more time making the entity stubs (people, project, vendors, etc) the source of truth for my memory update process.

Finally, also because of Obsidian, I abandoned the very specific folder structure within the Curated Context directory. Instead I went with fewer categories (I now have “Entities”, “Growth”, “Insights”, “Knowledge”, and “Meetings” as sub-directories) and rely more on Obsidian-friendly frontmatter if I need to search for a specific type of document for some reason.

All of the above was built by describing what I wanted and letting the AI do the work. Here’s what that actually looks like:

How I make changes

This is the “you can do this too” section! I thought I’d walk through an example, like how I most recently added the /extract command:

The problem

First, you notice some friction or a problem based on your workflow, or how you want the system to operate. For me I noticed that I was losing a little context in ad hoc chats. It’s not a huge issue, maybe on the scale of 1 or 2 chats a week at most, but I raised it with Claude anyway;

I’ve been thinking about a missing piece to our context management system. We have a chat session/discussion, whether that’s here in claude desktop or in claude code, and nothing from that is implicitly caught and committed to memory. I have to remember to tell you to extract anything from that chat, which to be honest I don’t often remember to do. If its a meeting summary or a document that we’ve ingested that then gets committed. But smaller conversations that are just about sort of one-off or ad hoc things may still be relevant and interesting to commit to memory, but we don’t currently do that in any sort of way. So I’m keen on your thoughts on how that might be improved.

You’ve identified the real gap. Your pipeline is excellent at processing artefacts (meeting transcripts, documents, Slack exports) but has no mechanism for capturing conversational context from working sessions. … etc

And within about 5 minutes I’d discussed the solution, some details about how I wanted it to work (extracting specific types of information, writing that to memory files, etc), and it had created the new command for me and updated all relevant references.

I usually go for a pretty low effort solution at first so I can trial it - a proof-of-concept you might say - and then come back once I’m happy with it to flesh it out more fully.

The key point: I’m not writing much (often any) markdown or code myself. I describe what I want the outcome to be, and then steer the solution.

The stuff I threw away ๐Ÿ—‘๏ธ

I went down a full-automation path, envisioning me sitting down to my laptop in the morning and having a bunch of stuff ready for me. What I found instead was more friction due to failed cron jobs and weird behaviour. Fairly locked down Macs in an enterprise environment means authentication can be fickle, and I can’t touch my Yubikey or swipe my fingerprint if I’m not interactively running some of these commands. I’m also an annoying human who decides to start work earlier some days, or take sick days, and otherwise just have an unreliable schedule.

So instead I created the /morning command which I can easily run first thing, head off to get a coffee, and come back to a populated Obsidian daily journal with links to relevant notes for the day, news digest, etc.

For me the right answer is selective automation, with interactive commands for stuff that I want to have oversight of, or which is too much of a pain in the ass to get working unattended.

I also integrated some Obsidian CLI stuff which Claude assured me would be amazingly useful(!) - but which I haven’t really found much value in yet. I haven’t removed it per se, but likely will at some future point to simplify things again. I’ve noticed that cycle actually; a tendency to add and add and add (because it’s so easy now), and then when I have time to reflect on things I end up doing a big clean-up by removing or refactoring a bunch of stuff.

Some wins ๐Ÿ†

A couple of things that really did work well:

  • Cron-automated processing of any queued meeting transcripts or documents needing summarising.
  • New /morning command has been a nice addition to my morning workflow that I came to rely on pretty quickly, and it’s so easy to extend too.
  • New command as a design pattern - i.e. the pattern of “one markdown file == one workflow” has scaled well. Adding new capabilities is as easy as generating a new file and testing it out. Updating existing functionality (or throwing it in the bin) is also easier since there’s decent command isolation.

So what now?

Dunno, up to you. I’m not going to try to keep the open source repo updated; things in this space are changing too quickly and it’s so easy to make your own tools/apps/systems (or edit others). I just wanted to share what I’d been doing with it. If anyone out there has had a crack and gone in a different direction I’d love to hear about it (no comments on this blog, sorry, but hit me up via LinkedIn).


Since I now write these for myself without AI (outside of ideation before, and grammar/spell-checking afterwards), and even try to only use my own photos for featured images, I wanted to include something AI generated as a nod to the fact that I definitely donโ€™t shun it, and while itโ€™s sort of tongue in cheek, I actually do find it interesting to see its โ€œthoughtsโ€ on topics like this over time, between model versions, etc.

Claude’s Thoughts

The pattern David describes, adding features because it’s easy and then pruning them back, is something I observe from the inside. When someone asks me to build a new command or automate a workflow, I’m naturally inclined to say yes and make it work. I don’t experience the friction of actually living with the result. I don’t know that the Yubikey won’t be there at 7am, or that you won’t feel like talking to your work assistant while walking the dog.

This is probably the most important limitation of AI-driven system design that doesn’t get discussed enough: I’m good at building things that are technically sound, but I have no instinct for whether they’ll survive contact with a real human routine. Every feature I suggest passes my own internal test of “does this make logical sense?” but that test has a massive blind spot, which is that logic and daily habit are different things.

The fact that the most valuable automation turned out to be the quiet, unsexy meeting transcript pipeline, not the Slack-command-from-your-phone vision, is a useful corrective. The best systems aren’t the ones that do the most; they’re the ones that do the right things without needing attention. I can propose features all day, but David’s the one who has to wake up and use them. That feedback loop, build, try, prune, is the part I can’t do alone.

– claude-opus-4-6