pdxmph


#

Can We Break Out of Our Hyperpolitical Moment?

Bought this so fast.

“Everyday life in the United States and other Western democracies is increasingly politicized: our political ideologies, as curated on social media, have become central to our identities and have even increasingly come to structure our closest personal relationships. Yet this heightened politicization has not translated into meaningful policy change. Instead, the public’s dissatisfaction with traditional parties of both the Left and the Right continue to grow, while a panoply of new right-populist formations has managed to win over disaffected voters in ever larger numbers across the developed world. Meanwhile, the core elements of the neoliberal economic program — low taxes, public disinvestment, and corporate handouts — remain the order of the day.”
#

One school of thought on toilet paper says you will never stop pooping, and buys plenty. Another says that tacitly admitting to the cashier that you will probably never stop pooping, or at least not in the next month, is deeply shameful and buys only two rolls at a time to lessen that shame.

#

I have pretty severe misophonia so this online noodle service telling me to “slurp more” is not the awesome tagline they think.

#

People Team says they’re about to roll out “upward feedback” for directs -> managers.

www.youtube.com/watch

#

🚀 Thrilled to share that Kagi Translate has been an absolute game-changer for my professional growth! 📈 It’s all about leveraging the right tools to scale and reach new heights. #CareerGrowth #Innovation #Efficiency #KagiTranslate #ProfessionalDevelopment

I don't have a type. I just like making tools.

#

I’m 60 years old. Claude Code killed a passion":

I would argue it depends on what you enjoy: the journey or the destination. I have always enjoyed the journey, I think people having a blast nowadays are enjoying the destination. AI gave us more destinations, but less journey. It is not worse or better, just different.

I like the journey and the destination, thanks.

The journey now goes much faster and more efficiently for me, but that doesn’t actually mean less journey: It means I cover more ground in the same amount of journey time because I am not constrained by fumbling through the syntax to get there.

At the core, though, I am still thinking about a problem I am trying to solve or how to enable a kind of work I need to do and ideating toward a solution to that problem or a tool that better supports that kind of work.

I have a particular relationship with developers and software development:

I learned to code beyond rudimentary AppleScript because some dipshit in IT told me I didn’t need a particular tool I knew I needed, and he was happy to gatekeep tool creation. I learned to write Ruby because while I was looking for a solution to my problem, Ruby happened to be the language someone used in the first proof of concept I could find. Fine. Ruby it was.

Within a year, I was a Rails developer. I wasn’t getting paid to be a Rails developer, but I’d written an entire analytics framework and it was saving 10-15 people four or five hours of toil a month. It was meaningful enough that when I quit that job management dispatched someone from IT to learn how the tool worked.

I was good enough that I was getting technical interviews for Rails work, but I didn’t do too many before I realized I liked solving my own problems, not somebody else’s. If it was some hiring manager’s problem? Not interested. Didn’t want to spend my days that way. My problem? I’d throw myself at it on nights and weekends, too.

Now, I am not a good coder by any professional coder’s standards. I think I am an effective coder because when I make things with code to solve my problems, they always solve my problems.

“Oh, so that means you’re a ‘destination’ person!”

No, it doesn’t. I like the journey coding entails. It means thinking deeply about the problem. Considering the models one can apply to it. Challenging my conception of the problem. Following ideas to logical or illogical conclusions. Realizing there are better ways to think about it all. Realizing there are ways to get so much more leverage now that I have a fingernail under a corner.

But I’m not a good coder, or a particularly fluent coder, so the journey when it was just me and a new buffer in Emacs was long and slow.

Now? Coding with LLMs works for me because I know enough about how programming works generally to steer the LLM toward what I’m after, but I’m not burning all the time on scaffolding, boilerplate and syntax obscurities to get tools as effective as anything I ever wrote “by hand.”

I do spend some time re-specifying, backing out of blind alleys, and catching bugs during behavioral testing. It’s still faster. I still get more robust features. I still get good outcomes. Better outcomes. And once I get to that destination, I am probably going to start a new journey, because I like making tools for myself. It used to be slow and I couldn’t do as much. Now it is faster and my tools can do a lot more.

There is still plenty of space held open for the journey.

"It's my nature."

#

The Great Turnover: 9 in 10 Companies Plan To Hire in 2026, Yet 6 in 10 Will Have Layoffs":

59% [of surveyed hiring managers] admit they emphasize AI when explaining hiring freezes or layoffs because it plays better with stakeholders than citing financial constraints

During the dotcom bust a company I worked for spent five or six months sliding all over the road with layoffs because its ad business was collapsing, but it kept underestimating the extent of the damage as non-renewals continued to pour in from tech companies that were bleeding out.

The layoffs – always two or three at a time across all the verticals – were like the old Russian folk tale about the man whose dog had a diseased tail: He couldn’t bring himself to cut the tail off, so he settled on slicing away a chunk of it each day. Every month, toward the end, I’d get a call telling me two or three people had gotten the axe (“but don’t worry – you’re fine! – I just need you to take over …")

They were taking a public beating for the chronic layoffs, though, so suddenly every dismissal was performance-related. Any semblance of dignity for those people went out the window as mid-level leadership informally let us all know that they had it coming but the company was fine. The company’s GC was happy to inform us all that if we provided references for any former colleagues we would enjoy no legal protection.

My breaking point: Being the last of two people on a former team of around 15, and learning the other guy lost his job because he hadn’t picked up the phone until the fifth ring the day prior. I don’t mean breaking point as in “I said fuck it, I quit.” I mean breaking point as in, “I need my job, so I’ll do what I can to keep it, but this is insane and stupid, so I won’t take it personally when it finally comes for me.”

Don’t get me wrong:

25 years later layoffs still make me nervous. I’ve been through enough, run some kind of operations for enough, or been one of the people going through the layoff rosters enough that I know how they work and what a thoroughly mid-wit or sociopathic cast of characters can end up with power over peoples' livelihoods.

I’ve sat in a room with a CEO telling all the senior directors she saw everyone else doing layoffs as a good reason to demand more than the business strictly needed. “The environment permitted me to take this opportunity.” The “environment” being the Covid pandemic, the “opportunity” being a rushed operation that went from “we need to cut from next year’s hiring plan” to “we need about 10% of the department” in under 24 hours, with an inept People team creating so many barriers to collaboration that engineering managers were cutting talent Product was roadmapping for. All while CNN was carrying footage of miles-long drive up food lines.

I can’t help anybody with the underlying sociopathy of capital. We’re all going to either collectively address it or not. After 25 years in and around tech, I’m just here to tell you I have no patience for the “get back to normal” wing of the Democratic party, because “normal” was always bad and unjust for working people.

What I can help with, I guess, is suggesting to someone who finds themselves out of work that it is not you.

It’s hard to remember that.

I’ve been on the wrong side of the layoff table once and am open to the possibility it will happen again. I knew when my layer-offer said “this is a business decision” that it wasn’t me. But there was some self-doubt there. I spent a little bit of time feeling a little wounded and wondering about all the ways I might have mis-managed my career.

So, it is one thing to wake up every morning thinking “I caught a bad break in a sociopathic system that uses buffering layers of bureaucracy to help middle managers rationalize the immiseration they’re dealing out,” and quite another to wake up thinking “an efficient and rational market has determined I am somehow to blame for day 189 of my unemployment, and I think it has a point.”

I’d encourage you to stick to the former. The scorpion stung you. That’s in its nature.

#

“Emacs and Vim in the Age of AI”

You can now describe what you want in plain English and get working Elisp, VimScript, or Lua. ‘Write me an Emacs function that reformats the current paragraph to 72 columns and adds a prefix’ – done. […] The extension language barrier, which has been the biggest obstacle to adoption for decades, is suddenly much lower.

This has been my experience with Emacs. Instantly useful extensions I would have struggled with previously. The only real problem was learning to ignore the guilt.

batsov.com/articles/…

#

There’s a guy on a sub who does “you’re not entitled to your own facts” on runaway hate-spiral threads, and it’s fascinating to watch because it is shockingly well received. He provides a sort of quantitative “I counted how many times …” analysis in his pushback. I’m always braced for “quit sealioning” or whatever, but he usually just gets a quick “ok, fair,” I think because he is very consistent about it.

I have become very resigned to people just going around with their own facts, so I guess I’m glad to see a community where people can hear that they’re doing that and suck it back in.

#

I think Taylor Stitch is becoming “Buck Mason except hung over and has bed head.” It’s a bit more relatable than Buck Mason, which has become “unrealistically hot incipient granddad” and/or “unnervingly affluent Zoomer.”

#

Apparently we’re disrupting TiddlyWiki this week.

wordpress.org/news/2026…

#

“Portland council president blasts 95-year-old constituent for her ‘small-minded’ tattoo critique”

www.oregonlive.com/politics/…

You are not serious people
#

I went all in on a large iPad Pro for not-at-my-desk. After working on a tool project again, tmux in Blink lost a lot of its charm.

I’ve got a MacBook Air so I don’t need a Neo, just fascinated to see Gruber “welp” his iPad out the window.

daringfireball.net/2026/03/t…

Gruber surrenders
#

Just setting expectations with the internal comms team on how my keynote prep is going.

Nigel Tufnel plays an electric guitar with a violin  stage next to another guitar standing on a stand.

Plumbing the pieces of asystem

#

I’ve spent the last week evolving asystem at a pretty quick pace. The three apps in the suite: atask, apeople, and anote all got a common library to cover their shared functionality, and a collection of new API stuff that makes it easier to cross-link objects between the three.

The goal has been to keep the TUIs I like working with, but make the tools better for use with an agent of some kind. Each comes with a SKILL.md that helps LocalGPT understand how to interact with them, and LocalGPT has some protocols in place to use the skills for daily routine stuff for me.

I also put a React front-end on the whole thing, so there’s a web interface available over Tailscale that gives me a GUI to access my stuff from wherever. It’s all still Markdown and YAML underneath, but simple to manage from a phone.

I’ve built a few workflows with all these pieces to help me plan my week and day. asystem goes out and grabs my calendar, looks at my task/project list, and scans my meetings for who the participants are. I time block my hard meeting times, then dialog back and forth about what to prioritize when and schedule that into the day.

In the React front-end, there’s a daily page that reflects any tasks I’ve signed up for, and it also tosses in links to the contacts asystem found in my calendar for the day. Since tasks, projects, ideas, and people are all cross-linkable, I’ve pretty much got my agenda there in the app, whether it’s a list of tasks or some ideas I’ve been kicking around that relate to that person.

Getting a web front-end built has taken a lot of the pressure off to change the back end, because I don’t really need a db with this arrangement. If I want something tappy/clicky from my iPad or phone, I’ve got aweb. If I want a TUI, those apps are still there from ghostty or Blink. If I just want to edit a file, I can. The underlying execution from any entry point is just the individual CLI apps that ingest and emit JSON when an agent is using them, but present me with a TUI if I want.

A lot of the fussing with this right now is about figuring out how much structure to provide agents to do useful things for me without ending up just writing the procedural code. By putting tasks, contacts, and ideas in hybrid Markdown/YAML files, there’s plenty of structured data to remove some kinds of ambiguity, but enough room for prose and personal notes that it’s still useful and familiar to me. The SKILL.md scaffolding makes sure the agents use the tools the way they’re meant.

I’ve added other scaffolding in the form of LocalGPT’s MEMORY.md file, which contains an org chart, and in relationship: tags in apeople that help guide the agent’s recommendations during planning times: I took about 30 minutes to go through and classify everyone at work based on a few flavors of relationship, so the agent doesn’t recommend rescheduling the wrong people, and it can tell from looking at a given contact if I have any open business with them that might encourage me to keep the current time before pushing back.

I fed the whole thing a few personality tests and used that to work through a work habits and patterns map that is also sitting in LocalGPT’s memory. It looks out for tasks that aren’t getting done and prods a little, and because it has the apeople map with my read on everybody around me, it offers a little “how do you want to show up for this” guidance when doing the daily overview, so I get reminders, like “this is one of your reports, so keep it concrete and not too conceptual.” If I feed it work I need to review from someone, it uses the apeople log and anote idea mapping to draw my attention to areas I should be on the lookout for, or think about better feedback on. And during the day, I just drop log entries into it that it goes through at the end of the day and processes as either potential next steps (aspirations) or things I might or might not know (beliefs), making links between ideas, tasks, projects, and people that further inform how it surfaces stuff and what it recommends.

So slowly there is some stuff emerging from all the linked context across people, tasks, and ideas. Nothing profound. I am not in communion with another mind, I’m just finding a state where the LLM can do helpful things, and is operating in such an introspectable, finite web of information that it doesn’t have room to invent shit but is instead reduced to catching associations and surfacing them in the form of little reminders, or reducing the number of ideas I have to say “no” to as I plan my day.

Oh, helpfully, Claude Code also has access to all the asystem SKILL files, and CLAUDE.md has some light guidance on them. So when I drop an idea into anote about how to evolve the system, I can reference it in a Code session and that helps drive feature development. This part isn’t as rich as I’d like it to be, because the CLAUDE.md instructions and skills aren’t really written around “have a holistic understanding of your operator and his context,” but the plumbing is there if I care to get around to figuring out the prompt.

So … sort of fun turn of the crank on vibe coding this time. Last time around, last year, I built some TUI tools that were sort of fun little throwback exercises. This time around the more interesting part is all the connections I can make with those tools.

#

lol

github.com/mholovets…

#

I was today years old when I learned ⌘ ] (and the other bracket, which would break Markdown) cycle between your Slack workspaces. Given my diminishing neuroplasticity, I’ll just be tormented by the knowledge because I’ll always just click like some sort of caveman.

#

As a writer I didn’t need AI to utterly devalue my gifts. People have been doing it for decades with content farms, steady elimination of support roles for editorial teams, and just general contempt for the craft or the idea anyone should earn a living from it.

Sit with an engineer who asks as only an engineer can, “how could there even be a principal writer? There’s not that much to know.” I had to.

So, sorry it’s no fun anymore and that people are saying “how much can there be to know” about a thing you cherished.

Learn what I did: Just know it for yourself.

dylancastillo.co/posts/ai-…

Notes on asystem

#

With a few nips and tucks and some stuff I held back from daily workflows, I got to use asystem a little this evening. Good first pass.

Recap:

Each has two aspects: There’s a TUI app built to suit my preferences for keyboard-centric interactions with a tool, and there’s a CLI tool that can emit JSON for all the objects and take batch commands. The former is so a human can use these tools like TUI productivity tools, and the latter is so agents can efficiently search all the data, make programmatic changes/additions/removals, and insert relationships between the objects each manages.

These are all glued together on the agent level as SKILL.md files for each that explain how the tools work and how they are meant to relate to each other.

They’re all used together by a LocalGPT instance.

I work with LocalGPT through Slack, because it allows me to create structured channels. LocalGPT doesn’t naturally do Slack, so I’ve got a bot running locally that hits the LocalGPT http API. Each channel in Slack spawns a new instance of a LocalGPT agent running as a bot in Slack. The Slack bot has some features that allow LocalGPT to see the canvas or pinned messages in each channel and use them as its topmost directive if the pinned message starts with instructions. For instance, here’s the #daily channel:

[instructions]

**Daily Channel Protocol**

This channel operates in **three modes**. Between triggers, it defaults to **log mode**.

---

**Log Mode (default)**
Drop anything in here throughout the day — ideas, reactions, tasks, stray thoughts. No formatting required. I'll acknowledge briefly and hold. No analysis, no riffing, no engagement. Just capture.


**"start of day"** → Planning mode. Pulse check, calendar scan, task triage, daily intention, notebook prompt.

**"end of day"** → First triages the log (promotes entries to anote for ideas and atask for actions, flags process signals, updates records in apeople when they're mentioned), then runs synthesis: what happened, open threads, tomorrow's anchor, energy debrief.

**"process the log"** → Standalone log triage. Same promotion steps as end-of-day, without the full close-out. Use mid-day to clear the buffer.

---

**Key behaviors:**
- In log mode, responses are one line max. Catch and hold.
- Meaning comes later — during triage and end-of-day, not mid-stream.
- Full protocol details: daily-protocols.md in  memory.

So during the day, I can just go to #daily channel and type in a quick note naming people and actions. The logging protocol dumps that into a text file to ensure the context survives a LocalGPT daemon restart or context cleanse, and goes on passively listening. When triggered, it goes through the file and processes.

Today, for instance, it took a recap of a meeting with an internal stakeholder, updated his contact record, and associated him with new tasks reminding me to look into some Cloudflare features. It also captured observations about a call with our privacy counsel, and added an item to chat with my boss about next steps there.

I make all this easier by using Wisprflow: I just go to the channel, press ctrl + opt, dictate a quick note between meetings, and it’s captured. No typing or visiting individual tools in the system. In the event of agent failure, well, there’s a Slack record I can go visit.

All the notes in the system are using Markdown with YAML frontmatter, and they have relationship arrays in the YAML, so as associations are made between people, tasks, and ideas, the agent knows to look for them when one of those things becomes a topic, stitching together context from the existence of a relationship in the frontmatter and scanning the interaction logs for more context.

… and all this context is there at the beginning of the day during my morning timeblocking ritual:

The agent retrieves my calendar, checks the invites for people and projects it knows about, and gives me a small cheat sheet for meeting agendas. Then it looks at my live projects and tasks, their priority, and estimated effort, and helps me block work in my discretionary time.

Ambitions

I’ve been keeping an eye on a vibecoder at work who is currently beginning to brush up against the limits of Google’s AI Studio. Its integration picture is poor and it has its limits, but it does crank out nice-looking little web apps with integration into Gemini. I did a quick sprint on Friday to implement the guts of asystem as a little PoC app I named Hecubus. Hitting my own limits with AI Studio, I learned that if you’re desperate you can store JSON on Google Drive to feed a chat agent you can embed in a Studio App. I’m assuming I could just store Markdown that way, too, and build a web front end for all this, leveraging Gemini for the LLM.

denote-contacts -> apeople

#

I just woke up my vibecoded contact management app to go with the updates I made to my task and idea/aspiration/belief system. I’ve got Claude Code extending it to be agent-friendly and present a SKILLS.md specifically for contact management. It’ll give me a continuum of apps that all use the same basic markdown-n-yaml format, share a common unique id format, present a TUI for human interaction and records management, and present a JSON API for agents.

Between the three apps, I get fast, local agent access to people, ideas, and actions that can be related internally and among themselves. So, for instance, once it’s online, during daily planning sessions, brainstorming sessions, etc. the SKILLS for each will allow for associations and connections. Individually they’re also just basic TUI utilities to manage my todos, store contact info, and keep track of things that are not quite ready to be work or action, but I don’t want littering my task list.

Could be the current “screw around with agents” thing will fall completely by the wayside, but I still get to keep portable, transparent, and human readable content with a TUI I like working with (or even just drop the TUI and write an exporter to a better tool someday, because it’s all structured enough to keep that simple).

Capturing aspirations and beliefs in Markdown with anote

#

This morning I turned denote-tasks into atask (for “agent task”). Now I’m moving onto anote, which is still a bit fuzzy in my head, but beginning to take shape:

I’m not really interested in the “order me a pizza,” or “make sure I always have deodorant” end states. And I don’t like the landscape any agentic workflow for a consumer has to operate in. I tossed off a quip about how browser automation to do agentic workflows is turning me into a Maoist not because “I hate capitalist pizza places” or whatever, but because I remember the way I felt after finally torturing AppleScript into doing UI scripting for some Mac app that its slob of a developer couldn’t bother to build an AppleScript library for: It was plainly just the very worst thing in the world. There was nothing human readable about it at all. There was nothing I’d ever be able to turn my back on at all. Brittle and opaque. I was in that stage of my automation journey where I was usually blaming myself for failed experiments, but this was a rare case, for the time, of feeling completely cheated by the tools available.

We’re cheated by the tools today. All these silos. You can make agentic workflows to do things, but the underlying infra sucks for it, and a lot of the things people want to do are forbidden by the silos commercial imperatives create. Want to automate a simple flow for a service you hold an account on? Probably a ToS violation even if you’re paying for a premium tier of some kind. And probably a security nightmare.

So for now, whatever. I didn’t create the problem, I don’t want to think about the problem. I think browser automation is a bad idea. It’s inelegant and wasteful. Rube Goldberg shit. And just try using it with some everyday sites with their either inept or automation-hostile tire fire markup. Just, no thanks. And as a digression, all the hooting and whingeing of the tech press aside, I’m kinda +1 on Apple’s “slowness” to improve Siri with LLMs, because Apple’s fundamental neuroses are on full display, but in a way that is probably better for me as a user. Siri sucks, but we’re in real “frying pan/fire” territory with generative AI. Good for Apple. Take your time.

Anyhow, not worrying about how to order pizzas or deodorant, and not primarily a software developer, so what I want to do with agents is more around persistence, executive function augmentation, connection-making, and pattern-matching.

Oh, also really put off by the way I’m seeing marketing people on LinkedIn doing the whole “it’s a feature not a bug” thing with LLM randomness, intoning that these are “stochastic sytems” that demand a new kind of leadership to avoid getting left behind. I am so glad that my content marketing days, however brief, were spent marketing something helpful and good.

My local rig is running LocalGPT. My primary uses for it involve planning my day/week, capturing ideas, wrangling tasks/projects, and knowing about me. During setup, I fed it a number of corporate personality tests I’ve taken over the years, had it step me through a 20-question “getting to know me” workflow, and gave it a Markdown document with my org chart and a few observational notes on everyone in it.

My initial approach for outside context was pretty exuberant, but I cooled my jets after a day or two because I’d piled too much context in and it was beginning to get weird and scattered.

My initial approach for inside context was to just have a directory of more or less freeform Markdown/YAML. That led to lossiness as the LLM struggled to make sense of the hodgepodge of concrete task/project metadata and human musing. So I woke atask back up to provide more structure: There’s JSON output, better automation for the CLI tool, and a SKILL.md agents can use to understand how to use atask in planning and interaction sessions. My task data remains my own, I don’t have the overhead of an MCP, the sandboxed agent just gets access to what it needs, and it’s pretty fast.

So to anote for the things that aren’t tasks … they’re just ideas and relationships. Same underlying data format: Denote-style filenaming, Markdown/YAML, affordances for humans and machines, but with an ideation/incubation/continuous improvement workflow where the entry point is “hey I had this idea,” the exit point is “I ended up here with this idea and rejected it,” or “I ended up here with this idea and accepted it, implemented it, etc.” The SKILL is there to guide the agent into making sense of, working with, and accounting for that corpus of ideas and understandings without the current approach the assorted -claws take of a flat Markdown file.

As I’ve sat with Claude this morning, I’m up to “working CLI that can capture ideas into Markdown files,” and there are a couple of taxonomies rattling around: Everything is an “idea.” Some ideas are “aspirations,” — things you want to do, make or build. Some ideas are “beliefs,” things you consider and either accept or reject.

The conceptual glue lives in the SKILL, where the agent is prompted to work with these things in distinct fashions depending on their stage:

Stage Aspiration Belief
seed seed seed
draft draft draft
engaged active considering
rethinking iterating reconsidering
arrived implemented accepted
shelved archived archived
no rejected rejected
fizzled dropped dropped

The thing I’m trying to deal with is that I’ve increasingly found LocalGPT useful for kicking ideas around (I fire up wisprflow and free associate and it chatters back at me using that loose collection of things it knows about me) but sometimes it is just … Jesus Christ. Like, “sorry, that dog was distracting me with its barking” leads to “do you want me to find you contact information for animal control,” or worse.

It took some random work noodling and wanted me to go to HR by the time it was done. It took some additional, unstructured prompting to get it to memorize that senior directors don’t go to HR for that kind of thing, and that the problem I am trying to solve is entirely within me to solve. Now that it “knows” that, it’s a more helpful mirror because it doesn’t suggest stuff I don’t think is okay to begin with, and because I can see it making connections with the existing corpus (e.g. those personality profiles) before proposing ideas.

(I am wondering if there’s an idea to explore that for every technology person of a certain age, there is a foundational or formative BASIC program. Given how many hours I lost to Civilization and Sim City over the years, it makes sense that “Hamurabi” was a fave. And for this line of experimentation right now, it makes sense that I was also deeply intrigued by—then immediately irritated by—“ELIZA.” )

“You know, Mike, you could do this with other humans.”

But I kind of don’t want to. As much as I like to be in collaborative settings and interact with people, there is a part of me that is probably more intensely private than many, and right now at work I am very much in “go it alone” mode for assorted reasons. It is helpful to have a big, connected mesh of tasks, projects, and ideas to ideate with. I am after persistence for things I care about as a human being who does things besides write code.

The SKILL.md is plenty useful for understanding what it is about so far.

A robot sitting in a chair is surrounded by lines of programming code for an Eliza chatbot script.
#

Well, GEICO has already declared the trailer a total loss, so now on to the claims adjuster.

reviving denote-tasks

#

I’ve been struggling a little with having a common task/project language with LocalGPT, which is sort of my OpenClaw it’s okay to like.

LocalGPT was making Markdown files with project content in them. It wasn’t very structured and I had no simple way to quickly interact with a project; just open-read-edit and a sense that it was more cumbersome than I wanted. There was also some “oh, btw, check in a few other inboxes” that was making life harder and slower.

I realized this morning that I wrote a spec for how I think about tasks and projects when I did denote-tasks earlier in the year. It covers all the things I care about, and its TUI is how I prefer to process lists of things to do. At one point I was running a local MCP that understood the denote-tasks spec, but it was slow and I wasn’t very far along on personalizing work management with AI.

So I pulled denote-tasks back out, added JSON output, added better search/query features, and a SKILL.md meant to help agents gravitate toward the machine-friendly parts. No need for an MCP, and it feels a bit more predictable and deterministic. Previously, the quality of interactions over open projects and tasks was more variable. Not exactly hallucinations but just a little sloppier than I’d like.

With denote-tasks I get a TUI for quickly making/managing tasks that operates the way my ideal list manager works, but underneath it’s Markdown-n-YAML so it works for readability but has structured data a machine can deal with better.

From the looks of it so far, just going through and having LocalGPT process those free-form project files, then interact with me to bring order to the resulting denote-task tasks, bolting on the more machine-friendly approach is making things smoother when working through projects.

I ought to change the project name. It borrows the denote file naming convention and format, and I believe it would all parse as clean denote content, but I don’t actually use Denote (or Emacs much lately) and don’t want to give the impression I’ve got anything to do with Prot’s thing.

#

“Very late stage capitalism.”

Not sure how exactly radlibs are gonna see what was an already woeful construction to conclusion, but if the actual mid-century Marxists are an indicator it’ll involve chasing tenure and blaming workers.

I mean, that’s already what radlibs do, so … 🏆🏁

#

“We’ll just use screen automation to make it easier for an LLM to order Uber Eats for you.” These people are turning me into a Maoist.