danott.website / recent

TIL I could reverse engineer the Google Reader API by pointing NetNewsWire at a fresh rails new --minimal --api application running at http://localhost:3000 as a FreshRSS source. Logging in, adding a feed, importing .opml, fetching feeds, and marking as read are all working. The code is ugly, but it’s functional!

There’s some gotchas against Rails conventions for parsing parameters. But Rack utilities have it covered.

This is going to be intentionaly bare-bones. No multi-tenancy. Minimal status dashboard for seeing the health of feeds, maybe. It’s funner to build on Rails!

I’m experimenting with all the RSS readers, and got tired of exporting and importing OPML files into each’s bespoke iCloud syncing. So I deployed FreshRSS to a DigitalOcean droplet using kamal.

It’s syncing just fine. Even across multiple readers on multiple platforms! But the Rubyist in me wants to replace the bloated PHP app with something along the lines of rails new --minimal.

TIL that Hammerspoon is excellent. I don’t fully comprehend the power yet, but I was able to build my ideal terminal environment. Standard macOS keyboard shortcuts for creating tabs and navigating between them (cmd+t, cmd+shift+[, cmd+shift+], cmd+1, cmd+2, etc) now fluidly adapt based on whether or not my terminal window is a tmux session. It doesn’t work in macOS’s builtin Terminal, but does work in Ghostty and iTerm2. 🤞

Agents are ushering in the Antisocial Coding era (justin.searls.co)

I’ve been advising startups to stay single-developer for as long as possible and telling larger organizations to start moving to one-repo-per-human wherever they can—even if it means re-architecting their systems to align with this.

Another anecdata of the perspective that coherence of a codebase is the thing to optimize for…and coherence gets logarithmically complex as you add more people.

LLM as advance team (jmduke.com)

More often than not, the branch spun up by Conductor never even makes it to GitHub, let alone the main branch. It’s purely a first draft from an overstimulated and undercompensated robotic junior colleague — but that is value additive. I couldn’t tell you what the dollar amount of that value is, but right now it’s certainly greater than zero. And the tax on my workflow is minimal at best.

Batching explorations than reviewing them with deep focus feels like a workflow that would suit my sensibilities. In an age where progress can be spun up faster than ever, it’s important to remember that sometimes progress looks like finding the path you shouldn’t take, and throwing it aside with maybe a footnote describing why it wasn’t viable.

Good Grief

I have been grieving for 18 months. Maybe more. One loss after another. Mostly invisible. A shrinking job title that enabled my team to grow stronger. An industrial scale disruption that is melting my craftsmanship into machine learning. Relationships not meeting me where I thought they would. It’s been a stripping away of false identities and latent securities to find what I really value and what truly endures. I’ve been mourning in the unseen world where ideas, hopes, and expectations eventually meet reality.

“Imagined futures” are becoming grieved losses as each arbitrary evaluation horizon comes and goes. None of these expectations were owed to me, promised to me, or even alluded to me. And now they’ve eluded me. The grief shows up whether the desire earned it or not. I truly am God’s image bearer—I’ve created something out of nothing. That’s not quite right. Desires aren’t nothing, and emotions are definitely something. Out of nothing, I’ve created disappointment.

And yet, I’m happier than I can ever recall. My connections with my wife and children are stronger than ever. I’ve come to realize those are the constants I care about most. Everything else is free to be variable and volatile. I can’t control any of it. And the constants don’t ask me to.

I’m embodied and emboldened by this nervous system. Dis-regulation and all. Who called it a nervous system, anyway? Why not a “courage system” or a “hope system?”

I suffered a real loss today. My uncle died. He’s gone. We’ll never laugh together again. That’s an imagined future that cannot be pursued. I’m mourning. It’s good to grieve.

Kenneth Chavious was kind, patient, and generous. He came to my graduations. He endured my angst. He smiled and laughed at every opportunity. I miss my uncle Kenny.

I’m going to continue missing him indefinitely. I’m not going to miss out on my next imagined future.

My kids have been watching the ZOMBIES movies on Disney. And I’m not ashamed to share my opinion: the majority of these song are straight bangers. This is gonna be our year.

I’m trying my hand at building a macOS application. It’s the missing file browser, fuzzy searcher, and previewer I want to compliment iA Writer. It’s also another testament of the lengths I’ll go to when I stumble upon a perfectly stupid name that captures the essence of what I want.

It’s called Fimder. It’s Finder with Markdown at the center. You get it.

Agentic swarms are an org-chart delusion (joanwestenberg.com)

The people who will thrive aren’t “agent managers.” They’re people who can say what they want and evaluate whether they got it - and whether what they got was either good or shit.

This is test driven development with natural language. It’s all feedback loops, the tools and modes of collaboration are changing.

Every time a tool collapses specialized roles into generalist capability, the generalists inherit the earth — no matter how loudly the specialists insist their particular expertise can’t be automated or absorbed.

Reminds me of the neverending competition of products bundling for capture and unbundling for disruption. Career opportunities oscillate between maximizing via specialization and hedging with generalization. Stasis is a myth. Blessed are the generalists.

The Software Development Lifecycle Is Dead (boristane.com)

These engineers aren’t worse for skipping the ceremony. They’re unencumbered by it. Sprint planning, code review workflows, release trains, estimation rituals. None of it. They skipped the entire orthodoxy and went straight to building.

This description of ritual collapse is a welcome refinement to me. The ceremonies being skipped smell like the worst formalizations of agile that celebrate process adherence over serving the felt needs of humans on the other end.

Feels like a great time to revisit The Manifesto for Agile Software Development.

We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value:

  • Individuals and interactions over processes and tools
  • Working software over comprehensive documentation
  • Customer collaboration over contract negotiation
  • Responding to change over following a plan

That is, while there is value in the items on the right, we value the items on the left more.

Agile, in it’s truest form, is back baby. We build in collaboration with agents to serve humans. We are uncovering better ways of developing software by doing it and helping others do it.

The quality of what you build with agents is directly proportional to the quality of context you give them. Not the process. Not the ceremony. The context.

I believe this is true about all teammates, humans and agents alike. Process can provide a frame for context. Ceremony can act as scaffolding that props it up. Both can be helpful, but the most interesting people I’ve worked with never required the scaffolding or the frame to compact their point of view. They know how to explore widely to search the problem space, narrow in when it’s time to get things done, and only reach for scaffolding when it genuinely makes the work better. I think agentic workers reflect this quality, because we all enjoy the work better when working with highly talented people who challenge our thinking and ship relentlessly.

A Pitch for The History Channel

Alone is good entertainment. I keep showing up to watch it despite the familiar story arcs and predictable outcomes reinforced across several seasons. Each year I say “we don’t need to watch this, it’s just gonna be more of the same.” And then we watch each episode as rapidly as it’s available depending on when we locked in to the release cadence.

I’d like to see a companion show to bridge the gap between seasons of Alone. Connected. The premise of Connected would be endurance, just like Alone. But instead of going into the wilderness to survive on bushcraft, the contestants go into a one bedroom apartment to live a larp of luxury. They’ll inhabit the kind of cookie cutter apartment buildings that show up adjacent to the interstate in developing cities. Perfectly curated to live a simple life.

Contestants can choose any 10 items for their stay in this monument to suburbia. Instead of choosing amongst hatchets, saws, or bows and arrows, they choose which devices they’ll need to thrive in their frictionless survival. They can have laptops, phones, e-readers, coffee brewers, pots, pans, utensils, treadmills, washing machines, dryers, a bed, a book, a mirror, anything. It’s their choice, just like Alone.

Running water, unfettered internet access, and a reasonable monthly budget are provided. The only thing contestants are not permitted to experience is the real witness of another human being. All interactions must be mediated through a screen. Any arrival of supplies or exchange of services happens in an air-lock style entryway with no liminal interactions with another human.

Contestants can order anything they want and have it delivered within their budget. They can sign up for Netflix. They can subscribe to an AI companion. They can send their laundry to a dry cleaner if they opted to forego the machine. They can invest their money in the market and increase their capital if they want to take that risk. These contestants live as hyper-connected as possible in the digital world, and see how long they can endure.

Contestants tap out by walking out. No calls for retrieval. Just a step outside the one bedroom apartment.

Medical checks don’t exist on this show because the apartment is filled with closed circuit cameras that are running all the time and vitals are recorded daily. If someone is going to be pulled for medical reasons, there is no hint from previous checks or the periodic feedback of possible decline. When the decision gets made by producers, the air lock is replaced by the door opening straight into the natural world. Every time a contestant prepares to fetch new supplies, they face the dread that they might find themselves losing. It’s a constant anxiety engine to know they’re always being monitored but never receiving feedback about how it’s going.

The winner’s reward is a pension that pays exactly enough to cover a one bedroom apartment with utilities and match the contestant’s monthly budget for the rest of their life. The reward for enduring Connected is guaranteed provisions to pursue connection.

Ways of RSSeeing

The still small voice of RSS feeds emitting from personal websites is my favorite part of the web. The acts of expression and bids for connection that made the early 2000s web fun are still present, they’re just drowned in the volume of commercial adaptations. You’ve gotta work harder to find the signal and drown the noise, but the dream of the 2000s is alive in hypertext.

I’ve been enjoying two experimental RSS readers.

  • Reeder reimagines RSS feeds as a social media timeline. Working through items like an email inbox is replaced with scrolling through timelines.
  • Current leans hard into a metaphor of content flowing by in rivers and streams. There’s still marking things read, but the key interaction is releasing content from the body of work. Optimizing for flow.

Both of these apps drop the notion of unread counts, which is a welcome omission. I jump into RSS feeds to graze for interesting ideas, not to manufacture a todo list. When I was building an indie RSS reader a few years ago, that was my key design decision. Even though that ambition stalled, it’s nice to see that leaning validated in emerging alternatives.

This is what I love about simple and stable protocols. When the means of exchange are agreed upon, the receiver is free to interpret the payloads in new and interesting ways. There are many ways to see the world (wide web). Agreement on protocols enables wild experimentation in both production and interpretation.

I’m guessing we’ll see an abundance of slop apps in this space in the coming months and years. And we’ll engage in a higher order task of separating the noise of abundant tools to find the signal of an RSS reader that niches down on a reading experience that matches the reader. Both the means of production (ai slop content) and the means of distribution (ai slop reader applications) are being accelerated and amplified. Is there any audio engineering tool that handles over-amplification? Gain? Compression? The core need remains making meaningful connections with other human beings.

Anyway, if you’re into RSS feeds, maybe give these two readers a shot.

Deterministic Core, Agentic Shell (blog.davemo.com)

So, similar to how functional core was Gary’s answer to testability in a world full of side effects, my assertion is that state machines are the answer to determinism in the era of AI agents. I have seen time and again that if we draw a larger box around that core and try as hard as possible to shove all the things that are important into it, and into a state machine, that the layers above (both imperative and agentic) become minimized, reducing risk, and making it much easier to verify correctness in the core of the system.

Functional Core, Imperative Shell was truly transformational and changed the way I approached programming. This analogous paradigm applied to LLMs is intriguing. Time to brush up my thinking on state machines.

I started archiving my twitter status updates in 2017. Of course I used Rails to import the original data dump into SQLite and then continued appending to the dataset with APIs in background jobs. This freed me up to delete my data from twitter so I could own my content on my own domain. Hypothetically.

I stopped using twitter in 2022. It no longer exists, the same way that you never step in the same river twice. My content doesn’t exist there, that’s for sure. Probably soft deleted I’d guess, but not available to me or the public.

So I’m done there, and have the data here. In theory, all I need to do is hydrate the archive one time, and I’ll be done forever. It’s just plaintext, with some goofiness to inject media and mentions.

The Rails app is old and crufty and still boots. With an hour to kill, tokens to burn, and the help of LLMs, I’m now 90% of the way there to having an archive that is fully hydrated with the embarrassment of my mid-twenties to late-thirties.

I’m no longer battling IE6 like I was in 2008. I don’t miss that.

Dear RSS Faithful

I’m sorry for 40’ish repeat entries re-appearing as brand new and potentially unread in your reader of choice multiple times over the last few days. I’ve been doing some housekeeping ‘round here, and I was moving fast to get through the migration so I can get back to sharing words on the Internet with as little friction as possible.

Potential causes of the noise:

  1. Stabilizing on a canonical URL structure
  2. Moving from my bespoke static site generator to jekyllrb (RIP)
  3. Moving from an assumption of noon to building tooling that always gets my publish Date into a DateTime and down to the second
  4. Implementing the Atom feed with jekyll-feed, which uses timestamps as unique identifiers
  5. Not liking that, and some of the other choices made by jekyll-feed, so I replaced it with a custom template

Things should be stable now. If things continue re-appearing, please nag me as best as you know how, and I will find a fix!

The AI Vampire (steve-yegge.medium.com)

The narrative makes sense. Feeling mentally drained after periods of intense focus is a human experience.

Here’s the thing. I haven’t experienced it. A full day building curiosities with Claude does not leave me feeling drained. I have an irrational excitement for shipping ambition. I’m excited to get back to the prompt and see what is possible.

A vampiric lull is the way I feel after a day full of meetings and social interaction. The intense focus of listening and responding produces great results in the form of relational connection. Draining all the same.

I wonder if there’s a correlation to introversion and extroversion. Are introverts fueled by the accelerated exploration of LLMs, while extroverts are drained by the thinking that’s not out loud and void of traditional relational connection?

I just said “traditional relational connection” without skipping a beat. What a weird time to be embodied.

“The word became flesh and dwelt among us.” Even Jesus Christ finds his origins in the word. The tokens are becoming flesh and dwelling among us as folks shape their belief in response to their own prompts meeting the curated collective writings of civilization.

Its words all the way down.

Potential paths to addressing bottlenecks:

  • Decrease the supply of inflows
  • Decrease demand of outflows
  • Widen the bottleneck
  • Transmute the viscocity of the fluid flowing through the bottleneck
  • There is no bottle

Modern CSS Code Snippets (modern-css.com)

Modern CSS code snippets, side by side with the old hacks they replace. Every technique you still Google has a clean, native replacement now.

Ask and you shall receive. The universe is sending me modern CSS knowledge, and I’m not mad about it. In fact, I’m happy about it. CSS forever!

Roses are red
Shortcuts are neat
Will publishing blindly
Have your mouth meet your feet?

This is a poem
It’s organized there
Because my GitHub Action
Is content aware

Frictionless Posting

This is a second test of my Apple Shortcut for publishing content. I expect this to show up as a post with a title, even though it’s only two sentences.

This is a test of the Apple Shortcut dispatching a GitHub Action system. This is only a test.

CSS's Ambition (mastodon.social)

I saw yet another “CSS is a massively bloated mess” whine and I’m like. My dude. My brother in Chromium. It is trying as hard as it can to express the totality of visual presentation and layout design and typography and animation and digital interactivity and a few other things in a human-readable text format. It’s not bloated, it’s fantastically ambitious. Its reach is greater than most of us can hope to grasp. Put some respect on its name.

I’ve never understood why people hate CSS, but these words connected some dots for me. I grew up with CSS, and it’s surface area has grown with my career. I had many sesaons of tolerating workarounds while longing for simpler solutions. Rounded corners used to be an excercise in chopping up a PSD. Now it’s there for free.

I’d love to see a https://www.executeprogram.com style course for incrementally expanding my CSS knowledge.

The empire always falls (joanwestenberg.com)

Dominant systems produce the very conditions that destroy them, because the success of the system makes it impossible for the people inside it to perceive its weaknesses.

Anything is possible if you mine for your weakness. Premeditate on your own collapse and failure modes. Risk management is a job to be done when you have something to lose.

You may not be able to prevent the fall. You will be prepared to show up as a human in any outcome.

The death of software, the A24 of software (jmduke.com)

The explosion of mediocre content created a vacuum for taste, for curation, for a brand that stood for something. When everything is abundant and most of it is forgettable, the scarce thing is discernment.

Abundance creates scarcity. Systems will self-balance over time. I’m doubling down on discernment and taste.

Lamp Rubbers (thoughtmerchants.com)

You play. Not hacks. Not prompt engineering courses. You practice the uncomfortable act of sitting with an open-ended tool and no instructions.

Play is the right verb. Everyone I know who is embracing the tools with curiosity is having more fun than we’ve had in a long time. Builders are going to build. The existence of the Sears Tower doesn’t mean you can’t build a lean-to as bushcraft meditation.

Spinning the Wheel (dylanamartin.com)

This is a more fleshed out version of my reflection that we’re replacing dopamine addiction to scrolling with dopamine addiction to creation. Replacing doom scrolling with doom tabbing. Or doom muxing if you’re into tmux.

There is something seductive about the loop. It simulates progress. It feels like making.

I’d say it feels like progress because it is progress—with the huge qualifier that crappy first drafts are progress. Editing is progress. Good things take iteration. Most of life is sanding.

The contemplative work is what makes the execution productive instead of just fun. Without it, I’m just pulling levers and hoping.

Get out your Cal Newport books and organize your calendar for some deep work and slow productivity. Prompt slow to move fast.

"Something Big Is Happening" (x.com)

The whole post is worth chewing on. This sentence jumped out, and that’s the tangent I’m following.

They believe it’s too powerful to stop and too important to abandon. Whether that’s wisdom or rationalization, I don’t know.

This sentence could be said about many dominant forces throughout history. Religion and fire come to mind.

Religion, loosely defined, often perpetuates a mission that a collective and sincere embrace of a mysterious but knowable superintelligence will usher in heaven on earth. Fire consumes every resource available if it’s not managed or contained. Both create meaning and meet physical needs. LLMs sit at the intersection of both “useful” and “all-consuming.”

Fire is powerful and dangerous. Belief is powerful and dangerous. When contained, we enjoy meaningful rituals in the comfort of climate controlled environments.

What is the HVAC equivalent of an LLM running in a feedback loop? Is this the point in human history where we legislate tolerable belief?

What a wild time to be alive.

He’s making a plan
Vetting it twice
Flibbergitting…
“You’re absolutely right!”
Santa Claude is coding
Your vibes

There is a sea change happening. There’s not enough sugar in the world to make it sweet. Pick a boat, and learn to love navigating the turbulence of changing currents and unpredictable tides. The moon still shines, reflecting light. Our orbit and axis have always been tilted. Seasons come and go. Raw materials renew. If they don’t, so it goes. Learning is additive. Learning is addictive. Learn to love learning. Learn to love living, in its various forms. Learn to love, it’s all that endures.

Santa Claude is Coming to Town

I woke up at 2:30am this morning. Not because I’m stressed. It’s because I’m excited. I’ve got big kid on Christmas morning energy. That feeling when you have a pretty good idea of what will be under the Christmas tree based on requests, but won’t know until you gather together and unwrap the gifts. Anticipation fulfilled by magic.

Then I learned Santa was my parents. The gifts kept showing up but the magic was gone. My hard earned knowledge about how Christmas worked and how to get on the nice list melted away. I still woke up early, but not quite as early. Comprehensibility made things less meaningful, somehow.

There’s a gap between finding out and becoming. A season where the magic is just gone and nothing replaces it.

Then I had kids. I stay up late assembling bikes. I eat the cookies and drink the milk. I’ve embodied the spirit I’d stopped believing in. The magic gets made by those who show up.

Three Bad Managers (randsinrepose.com)

Let’s start with my belief that a manager’s job is to tell you where you are, and a leader’s job is to tell you where you are going.

This is a good place to start. Management and leadership are a venn diagram. The orientation towards presence and futures tracks for me.

The Coherence Premium (joanwestenberg.com)

transaction costs are collapsing. The activities that used to require organizations can increasingly be performed by individuals with the right tools.

Coherence is a differentiator and is difficult to scale. LLMs can accelerate towards coherence of fragmentation. The transaction costs that justify the formation of companies are disappearing. This was Nobel Prize worthy insight 90 years ago, and unimagined edges of the bell curve are coming into view.

I wrote A Self-Referential Short Story Published on Wikipedia.

George Lucas didnt deserve so much flack for updating published movies when he saw an opportunity to realize his personal vision.

Through a providential overlap of copycat recipes and clearing out leftovers, I just ate Dishoom’s Gunpowder Potatoes with the aioli from Campfire’s broccoli, and I am at peace in this moment.

18 Minutes & 30 Seconds

Here are two pieces of simple advice that make a difference in my work. Things flow smoother when I remember to embrace these rhythms.

18 minutes

A deliberate 18 minutes can keep most work days on track.

  1. 5 minutes at the beginning of the day: plan the outcomes to focus on and what to ignore
  2. 1 minute at the beginning of every hour: check in with your plans, and recalibrate as necessary
  3. 5 minutes at the end of the day: reflect on what actually happened and find a way to be 1% better tomorrow

At each step, write things down. These notes can be ephemeral and tossed at the end of the day. But the writing is part of the magic.

Be specific about what, when, and where. Visualizing the action in space and time increases the chances of making it real.

I don’t remember where I heard this advice. If you’re familiar, I’d love to give proper attribution.

30 seconds

Take 30 seconds to write down the most important thing after any meeting, conversation, or otherwise significant moment. It can be a few things, but it doesn’t need to be mountains of text.

I remember where I picked this up because I saved the link and the most important pullquote (to me) on my own website.

Passing the time

Don’t create distinct notes for every meeting, conversation, or otherwise significant moment. Just keep a daily append only log as you would on a legal pad. Life is lived linearly and memories are sorted out at rest. Synthesize the daily notes at the end of the week if you must. Only then do you add brief insights to long standing notes representing ongoing commitments and projects

Throw out the daily notes after a while. Or put them on an external hard drive so there’s actually a cost to retrieving them. This will force memory to form about what matters, action to make it meaningful, or both.

Be a human. Use computers. Or pens and paper. Quit fighting the hardware.

Reflections on Working with LLMs

I’m noticing a shift as I work with LLMs. I used to manipulate my code as if sculpting angels in the architecture. Each program was a cathedral housing ornate beauty. The code I generate with LLMs is an airport parking structure. Pure utility with the necessary materials.

Both structures have their purpose. Sacred spaces for quiet reflection serve my needs. Protecting my wheel vehicle while I travel in a wing vehicle also meets a need.

I’m witnessing a realtime rebalancing of my values. I’m following curiosity faster. I’m delaying craftsmanship until there’s proof of utility. This is a positive change for me. I tend to get stuck in prematurely predicting what a solution will need rather than attempting to produce a system I want. Yes, code is just another avenue for humans to express and distinguish their wants and needs.

I want infrastructure for making human connection. LLMs for building pipelines feels right. LLMs clogging those pipelines with slop isn’t interesting. And yet, “the medium is the message.” The medium is produced by the statistical average of the next token that should appear. Perhaps it’s modernized as “the mean is the message”—the computed average of logarithmically accelerating messages received is how we interpret the world, and decide what to do next.

Man’s search for meaning (pun intended) should not decline to the mean because of this new mode of operating. Satisfying the search for meaning requires choosing, not averaging. I’m using the means of production to build infrastructure, while keeping the search for meaning for myself. The parking structure exists to get me to the cathedral faster. Maybe the real cathedral was the curiosity I followed along the way.

I’m building this personal website with the help of LLMs. I wrote these words with my own hand using Bear for iOS and Bear for macOS. You long press the dash to insert an em-dash on iOS. You chord option-shift-dash to type an em-dash on macOS. Just because the computer predicts em-dashes too often doesn’t mean it’s not the character I want.

Acceleration of discovery, not delegation of meaning, is the key.

I Made a Thaing

Matt Webb’s idea about agents acting on Reminders inspired me. So I built Thaings.

Thaings adds agentic workers to my to-dos in Things. It’s AI inside of Things. Thaings. You get it.

I’m really proud of the name. It’s a testament to the creative energy I can manifest from pursuing something with a stupid name.

Here’s how it works. I manage my to-dos in Things, same as ever. If there’s ever a to-do that I believe an agent can complete, or at least accelerate, I select the to-do and call an Apple Shortcut. The shortcut broadcasts information about the to-do to my ~/.thaings folder, where an orchestration of scripts communicates receipt by adding the Working tag and begins executing on the to-do. The progress from working is reported back by appending to the to-do’s notes and replacing the Working tag with the Ready tag. I am the human in the loop, so only I decide whether or not it is ready to mark complete. If it’s not quite there yet, I can add more notes and re-broadcast back to Thaings by re-invoking the shortcut.

I’m shelling out to Claude Code under the hood. Which means this only works on macOS. There’s probably a better way to make this generic so the shortcut and it’s side-effects could run across all Apple platforms targeting a plurality of LLMs. The first exploration of this idea was actually completely self contained in a Shortcut. It worked, but completely relied on a one-shot request/response assumption. It would use “Ask Claude” on iOS, and “Execute Shell Script” to call Claude Code on macOS. And even though it worked, seeing all those one shot chats when I opened the Claude app was gross. And even though the platform-dependent branching both returned strings, Shortcuts wouldn’t accept that reality and provide the control flows I wanted.

The invocation of the shortcut with to-dos selected is kinda goofy. I experimented with Things’ “Find Items” action in Shortcuts as the mechanism for finding to-dos within a specific project, with a specific tag, etc. In practice, Shortcuts is paranoid of this interaction that results in sending a bunch of Things data to a shell script. It asks for permissions every time, no matter how many times I select “always allow”. I’ve got a few ideas on ways I can try to code around this. Or maybe leveraging LaunchAgents and AppleScript to potentially rely only on actions within Things, and eliminate the need for the shortcut entirely. That would cement the constraint of working only on macOS.

So that’s Thaings. Is it useful? Maybe. I’ve been able to execute on a few to-dos without leaving Things. Was it fun to build? Heck yeah. Building is the best part.

Use Things and Claude Code and wanna kick the tires? Installation instructions are in README.

Effective context engineering for AI agents (anthropic.com)

Context engineering is the art and science of curating what will go into the limited context window from that constantly evolving universe of possible information.

Sounds a lot like living a life. Choosing what to hold onto and what to discard. We do this all the time.

I started reading Don Quixote. Which mostly makes me excited about rewatching The Newsroom with a new lens for understanding Charlie Skinner.