{ "version": "https://jsonfeed.org/version/1.1", "user_comment": "This feed allows you to read the posts from this site in any feed reader that supports the JSON Feed format. To add this feed to your reader, copy the following URL -- https://decoding.io/feed/json -- and add it your reader.", "next_url": "https://decoding.io/feed/json?paged=2", "home_page_url": "https://decoding.io", "feed_url": "https://decoding.io/feed/json", "language": "en-US", "title": "Decoding", "description": "Articles about productivity and technology.", "items": [ { "id": "https://decoding.io/?p=3559", "url": "https://decoding.io/2026/02/bookmarked-itsyhome-control-homekit-from-your-menu-bar/", "title": "Bookmarked \u201cItsyhome \u2013 Control HomeKit from your menu bar\u201d", "content_html": "
\n

Your entire smart home in the macOS menu bar. Cameras, lights, thermostats, locks, and more \u2013 just one click away.

\n
\n
", "content_text": "Your entire smart home in the macOS menu bar. Cameras, lights, thermostats, locks, and more \u2013 just one click away.", "date_published": "2026-02-02T07:56:11+01:00", "date_modified": "2026-02-02T07:56:11+01:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Application", "HomeKit", "macOS", "Bookmarks" ] }, { "id": "https://decoding.io/?p=3554", "url": "https://decoding.io/2026/01/last-two-weeks-zettelkasten/", "title": "Last two weeks from my Zettelkasten", "content_html": "

I keep a Zettelkasten, a personal knowledge base where I write notes and connect them over time. I\u2019m trying out writing about what\u2019s happening there, we\u2019ll see if it sticks.

\n

It started with a video

\n

I watched a video about M-shaped careers. People with too many interests (\u201cscanners\u201d) building deep expertise in multiple areas instead of forcing specialization. The Zettelkasten fits here as external memory that lets you switch topics without losing everything.

\n

Three connected notes

\n

My job is thinking, then AI executes. I don\u2019t write code anymore, I review it while Claude writes and I direct. My work runs on two tracks: notes and feature plans for AI to implement, and infrastructure that makes AI execution reliable.

\n

Clarify by prototyping, not planning. My old core value was \u201cMeasure twice, cut once\u201d, which assumed execution was expensive. These days prototyping is cheaper than planning, so I just build stuff and figure it out as I go.

\n

AI reframes depth from execution to directing. The M-shaped career model assumes depth means doing the work, but with AI handling execution, depth becomes about understanding enough to see patterns and direct the AI.

\n

These three became permanent notes in my outline, and they\u2019re all connected to each other.

\n

PKM audit

\n

As I use more AI tools these days, my old PKM setup started to feel off, so I ran an audit. The result was Each PKM tool should have one role. Tools work better when they do one thing, and my old setup had overlap everywhere.

\n

Current pipeline:

\n\n

I also wrote about GTD having a gap. Refinement is a missing stage between Process and Organize. GTD assumes everything captured can be immediately classified as actionable, reference, or trash, but some ideas don\u2019t fit any of these. They\u2019re not procrastinated or blocked, they\u2019re just unformed and still searching for shape. Someday/Maybe gets treated as a parking lot, but refinement is active, not passive. It needs systems for repeated contact with incomplete ideas until they\u2019re ready to become either a Zettelkasten note or a project plan.

\n

Most of these notes come back to the same thing: AI made execution cheap, so I\u2019m rethinking how I work and how my tools support that. Three notes became permanent zettels, two are about my PKM setup, and one came from a video. That\u2019s the last two weeks.

\n
", "content_text": "I keep a Zettelkasten, a personal knowledge base where I write notes and connect them over time. I\u2019m trying out writing about what\u2019s happening there, we\u2019ll see if it sticks.\nIt started with a video\nI watched a video about M-shaped careers. People with too many interests (\u201cscanners\u201d) building deep expertise in multiple areas instead of forcing specialization. The Zettelkasten fits here as external memory that lets you switch topics without losing everything.\nThree connected notes\nMy job is thinking, then AI executes. I don\u2019t write code anymore, I review it while Claude writes and I direct. My work runs on two tracks: notes and feature plans for AI to implement, and infrastructure that makes AI execution reliable.\nClarify by prototyping, not planning. My old core value was \u201cMeasure twice, cut once\u201d, which assumed execution was expensive. These days prototyping is cheaper than planning, so I just build stuff and figure it out as I go.\nAI reframes depth from execution to directing. The M-shaped career model assumes depth means doing the work, but with AI handling execution, depth becomes about understanding enough to see patterns and direct the AI.\nThese three became permanent notes in my outline, and they\u2019re all connected to each other.\nPKM audit\nAs I use more AI tools these days, my old PKM setup started to feel off, so I ran an audit. The result was Each PKM tool should have one role. Tools work better when they do one thing, and my old setup had overlap everywhere.\nCurrent pipeline:\n\nCapture: Drafts on mobile, Bike on desktop\nProcess: Tinderbox or Claude Code\nDestination: Zettelkasten for knowledge, OmniFocus for action, DEVONthink for reference\nOutput: Craft for project plans, iA Writer for polished posts\n\nI also wrote about GTD having a gap. Refinement is a missing stage between Process and Organize. GTD assumes everything captured can be immediately classified as actionable, reference, or trash, but some ideas don\u2019t fit any of these. They\u2019re not procrastinated or blocked, they\u2019re just unformed and still searching for shape. Someday/Maybe gets treated as a parking lot, but refinement is active, not passive. It needs systems for repeated contact with incomplete ideas until they\u2019re ready to become either a Zettelkasten note or a project plan.\nMost of these notes come back to the same thing: AI made execution cheap, so I\u2019m rethinking how I work and how my tools support that. Three notes became permanent zettels, two are about my PKM setup, and one came from a video. That\u2019s the last two weeks.", "date_published": "2026-01-18T13:12:17+01:00", "date_modified": "2026-01-18T13:12:17+01:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Claude Code", "GTD", "Zettelkasten", "Posts" ] }, { "id": "https://decoding.io/?p=3547", "url": "https://decoding.io/2026/01/3547/", "content_html": "

I can safely say that Liquid Glass is the Butterfly Keyboard of software design. The basic idea is great, but the execution sucks.

\n

I just hope it won’t take years to fix it.

\n
", "content_text": "I can safely say that Liquid Glass is the Butterfly Keyboard of software design. The basic idea is great, but the execution sucks.\nI just hope it won’t take years to fix it.", "date_published": "2026-01-17T08:49:37+01:00", "date_modified": "2026-01-17T08:49:37+01:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Posts" ] }, { "id": "https://decoding.io/?p=3543", "url": "https://decoding.io/2026/01/3543/", "content_html": "

I had my two previous post in the wrong format, so outgoing links didn’t work. Fixed it.

\n
", "content_text": "I had my two previous post in the wrong format, so outgoing links didn’t work. Fixed it.", "date_published": "2026-01-13T22:54:48+01:00", "date_modified": "2026-01-13T22:54:48+01:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Posts" ] }, { "id": "https://decoding.io/?p=3539", "url": "https://decoding.io/2026/01/bookmarked-linkedit-cocoa-productions/", "title": "Bookmarked \u201cLinkEdit \u2013 Cocoa Productions\u201d", "content_html": "

Personal knowledge manager (PKM). Point to any folder and manage your Markdown and plain text notes. Create auto-updating links which can go in both directions.

\n
\n

Pretty early, but looks promising.

\n
", "content_text": "Personal knowledge manager (PKM). Point to any folder and manage your Markdown and plain text notes. Create auto-updating links which can go in both directions.\n\nPretty early, but looks promising.", "date_published": "2026-01-13T20:11:01+01:00", "date_modified": "2026-01-13T22:54:02+01:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Application", "macOS", "Zettelkasten", "Bookmarks" ] }, { "id": "https://decoding.io/?p=3537", "url": "https://decoding.io/2026/01/bookmarked-sozercan-kaset-%f0%9f%93%bb-the-missing-youtube-music-macos-app/", "title": "Bookmarked \u201csozercan/kaset: \ud83d\udcfb The missing YouTube Music macOS app\u201d", "content_html": "
\n

A native macOS YouTube Music client built with Swift and SwiftUI.

\n
\n
", "content_text": "A native macOS YouTube Music client built with Swift and SwiftUI.", "date_published": "2026-01-13T16:34:21+01:00", "date_modified": "2026-01-13T16:34:21+01:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Application", "macOS", "Bookmarks" ] }, { "id": "https://decoding.io/?p=3534", "url": "https://decoding.io/2026/01/bookmarked-aaaaalexis-obsidian-cupertino-a-native-look-and-feel-obsidian-theme-designed-for-a-clean-focused-and-mobile-friendly-writing-experience/", "title": "Bookmarked \u201caaaaalexis/obsidian-cupertino: A native look and feel Obsidian theme designed for a clean, focused, and mobile-friendly writing experience.\u201d", "content_html": "
\n

Cupertino is an Obsidian theme, optimized for desktop and mobile devices. Bringing clean, focused, comfortable reading and writing experience to your vault.

\n
\n

Looks pretty nice, but\u2026 it is still Electron under the hood.

\n
", "content_text": "Cupertino is an Obsidian theme, optimized for desktop and mobile devices. Bringing clean, focused, comfortable reading and writing experience to your vault.\n\nLooks pretty nice, but\u2026 it is still Electron under the hood.", "date_published": "2026-01-13T16:27:57+01:00", "date_modified": "2026-01-13T22:53:16+01:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Application", "Design", "Liquid Glass", "macOS", "Bookmarks" ] }, { "id": "https://decoding.io/?p=3532", "url": "https://decoding.io/2026/01/bookmarked-updatest/", "title": "Bookmarked \u201cUpdatest\u201d", "content_html": "
\n

All your Mac updates. One beautiful interface.

\n
\n
", "content_text": "All your Mac updates. One beautiful interface.", "date_published": "2026-01-10T20:00:28+01:00", "date_modified": "2026-01-10T20:00:28+01:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Application", "macOS", "Bookmarks" ] }, { "id": "https://decoding.io/?p=3530", "url": "https://decoding.io/2026/01/bookmarked-owl/", "title": "Bookmarked \u201cOwl\u201d", "content_html": "
\n

Owl is a note-taking app currently under development for Apple platforms. An early version is available for Mac.

\n
\n
", "content_text": "Owl is a note-taking app currently under development for Apple platforms. An early version is available for Mac.", "date_published": "2026-01-10T16:35:26+01:00", "date_modified": "2026-01-10T16:35:26+01:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Application", "macOS", "Notes", "Bookmarks" ] }, { "id": "https://decoding.io/?p=3528", "url": "https://decoding.io/2025/12/my-mind-is-not-the-cpu-for-bureaucracy/", "title": "My Mind Is Not the CPU for Bureaucracy", "content_html": "

I don\u2019t usually do New Year\u2019s resolutions, but this year I made an exception. It\u2019s not a goal but a boundary, and it\u2019s that I want to stop spending thinking capacity on problems AI can handle well enough.

\n

Things like passport renewals, car maintenance, and health insurance paperwork aren\u2019t intellectually hard problems for me. They\u2019re high-friction re-entries into suspended projects that steal the same executive function I need for creative work. So I\u2019m experimenting with an approach where Claude Code does the thinking and I become the hands and feet that execute.

\n

You might be wondering why I\u2019d give up that much control, but the thing is that I\u2019m not giving up control over outcomes, just over the tedious context-reconstruction that precedes every action.

\n

The Problem Isn\u2019t Time, It\u2019s Context

\n

The standard productivity narrative says \u201cdo things faster.\u201d But I\u2019ve realized that for life admin, speed isn\u2019t the bottleneck. The bottleneck is cognitive re-entry.

\n

Every time I return to a bureaucratic project (health insurance setup, car inspection scheduling, government ID renewal), I pay a tax, and it\u2019s not a time tax but a thinking tax. I have to reload the entire context: What did I do last time? Where\u2019s that document? What\u2019s the phone number? What did the person say?

\n

This context reconstruction drains the exact same mental resource I need for interesting problems like creative work and engineering challenges, the stuff that actually benefits from my personal attention.

\n

The insight is simple, which is that most life admin problems are not hard. They\u2019re just high-friction re-entries. The thinking required isn\u2019t creative; it\u2019s reconstructive. And in my experience, Claude Code handles reconstructive thinking reasonably well (though I still verify critical details).

\n

Flipping the Collaboration

\n

For knowledge work, everyone talks about AI as a copilot where the human captain does the thinking and the AI assistant helps with execution.

\n

For life admin, I flipped this around so that Claude does the thinking while I handle the execution.

\n

In my early experiments, this architecture shows promise:

\n\n

It might sound like I\u2019m demoting myself to grunt work, but for me the hard part of life admin was never the physical execution. It was always the mental overhead of figuring out where I left off and what to do next. Once I know what to say and have my documents ready, making the call is easy (though I still need to think on my feet when conversations go sideways).

\n

Ghost in the Shell

\n

Now let\u2019s talk about how this actually works. For Claude to be useful, it needs context. It can\u2019t just be a chatbot I explain things to each time. It needs to temporarily inhabit the project\u2019s accumulated knowledge.

\n

I call this approach \u201cGhost in the Shell\u201d (borrowing from the anime, where consciousness can inhabit different bodies). In my version, the \u201cshell\u201d is the project\u2019s accumulated data and the \u201cghost\u201d is Claude\u2019s reasoning capability that temporarily inhabits it.

\n

Each project has a brain: notes, meeting transcripts, task history, linked documents. When I trigger a task, Claude loads this brain and reasons from that context.

\n

I should mention the technical setup, which is that I use Claude with MCP integrations that can read from my document database and task manager. I use Mac-specific tools (DEVONthink for documents, OmniFocus for tasks, Hookmark for cross-app links), but the principle should be tool-agnostic since any setup that can aggregate project context and feed it to an LLM would work.

\n

When I select a task in OmniFocus, Claude follows the project hierarchy upward to find the parent project, then loads all linked documents and notes. It builds a timeline of what happened. Then it can act with full context, not just respond to isolated prompts. Sure, Claude doesn\u2019t truly \u201cunderstand\u201d the project, but it synthesizes the available information well enough for bureaucratic tasks.

\n

The One Question Rule

\n

You might ask whether managing AI becomes its own overhead, and yes, it can. I\u2019ve found that AI assistants can become another attention sink through clarifications, follow-ups, and re-prompts, and before you know it, managing the AI becomes a new kind of bureaucracy.

\n

So I built in what I call the \u201cone question rule.\u201d If Claude is missing information, it can ask one question maximum. Then it has to provide a best-effort plan with assumptions stated. If it\u2019s still stuck, it downgrades by first moving from doing the task to proposing a plan, and then to explaining how this type of problem generally works so I can handle it myself.

\n

This prevents Claude from becoming needy. It forces decisive action with explicit assumptions rather than endless clarification loops.

\n

I also added risk-based escalation. \u201cAutopilot\u201d here means Claude proceeds without asking for confirmation:

\n\n

This doesn\u2019t prevent all errors. I still need to review what Claude produces, and I\u2019ve caught it confidently stating wrong details. But the guardrails prevent the worst-case scenarios while keeping friction low for routine tasks.

\n

Closing the Loop

\n

Claude doesn\u2019t just prep and disappear but waits for me to come back with results.

\n

Here\u2019s a typical flow:

\n
Claude: "Here's your call script for the mechanic. Key points to cover:\n     timing, parts availability, price estimate. Come back when done."\n\n[I make the call]\n\nMe: "Done. He said Tuesday at 10am works, and the part needs to be ordered."\n\nClaude: Creates follow-up task that surfaces on the appointment date,\n    logs the outcome to project notes (so next time I have this\n    context), links everything together.
\n

This conversational loop keeps Claude as the orchestrator throughout. Every interaction gets logged back to the project\u2019s brain, so next time the context is even richer.

\n

What I Actually Delegate

\n

The action types fall into three modes based on how much autonomy Claude gets:

\n

Autopilot (Claude does the work, I review results): Research tasks where Claude queries Perplexity or analyzes code. Processing tasks where it extracts key points from articles or documents. Documentation tasks where it saves findings to DEVONthink and creates links between related items.

\n

Propose (Claude preps, I decide and act): Phone calls where Claude loads my last conversation with someone, generates a script, and tells me what questions to ask. Emails where it drafts messages based on project context. Setup tasks where it researches best practices and generates step-by-step guides. Decisions where it builds comparison matrices and recommends options.

\n

Teach (Claude explains, I learn): Learning tasks where Claude curates resources, creates a study plan, and suggests hands-on exercises, but I do the actual learning.

\n

The key insight is that even when Claude can\u2019t do the task, it can reduce my cognitive load significantly. For a phone call, I usually don\u2019t have to remember anything because Claude already looked up my last interaction with that person and what we discussed. I just read the script (though I still need to adapt when the conversation goes sideways).

\n

Action Types

\n

I built a library of action types as markdown files that Claude reads when working on a task. Each type (research, review, process, draft, analyze, document, setup, learn, coordinate, execute, spec) defines a prep pattern for what Claude should do before I act, a capture pattern for logging results afterward, and which tools to use. For example, the \u201cdraft\u201d type handles phone calls and emails by loading contact details and past conversations, then generating a script or message draft.

\n

The process of building this library is ongoing. I pay attention to what types of actions I do repeatedly, then figure out how Claude could help with each one. Some actions start in Propose mode and graduate to Autopilot once I trust the pattern. The goal is to keep expanding what can be delegated as I discover new friction points.

\n

Claude generates plans fresh each time using these patterns plus the project\u2019s accumulated context. In theory, this gets smarter with each use because the context compounds. I haven\u2019t measured this rigorously, but I\u2019ve noticed Claude\u2019s prep work improving as project histories grow richer.

\n

The Real Risk of AI Assistants

\n

What I\u2019ve found is that the real risk of AI assistants isn\u2019t that they make you lazy but that they make you a manager of an intern that asks infinite questions.

\n

I prevent that by design through a kind of contract with Claude that includes clear modes of operation, risk-based guardrails, explicit definitions of done, and a hard cap on questions, so it behaves like a capable assistant rather than a needy one.

\n

Is this worth the setup time? I spent a day building the infrastructure. Whether it pays off depends on how many bureaucratic projects I run through it. Ask me in six months.

\n

For now, I\u2019m experimenting with reserving my thinking capacity for interesting problems. Everything else gets delegated to the ghost in the shell.

\n
", "content_text": "I don\u2019t usually do New Year\u2019s resolutions, but this year I made an exception. It\u2019s not a goal but a boundary, and it\u2019s that I want to stop spending thinking capacity on problems AI can handle well enough.\nThings like passport renewals, car maintenance, and health insurance paperwork aren\u2019t intellectually hard problems for me. They\u2019re high-friction re-entries into suspended projects that steal the same executive function I need for creative work. So I\u2019m experimenting with an approach where Claude Code does the thinking and I become the hands and feet that execute.\nYou might be wondering why I\u2019d give up that much control, but the thing is that I\u2019m not giving up control over outcomes, just over the tedious context-reconstruction that precedes every action.\nThe Problem Isn\u2019t Time, It\u2019s Context\nThe standard productivity narrative says \u201cdo things faster.\u201d But I\u2019ve realized that for life admin, speed isn\u2019t the bottleneck. The bottleneck is cognitive re-entry.\nEvery time I return to a bureaucratic project (health insurance setup, car inspection scheduling, government ID renewal), I pay a tax, and it\u2019s not a time tax but a thinking tax. I have to reload the entire context: What did I do last time? Where\u2019s that document? What\u2019s the phone number? What did the person say?\nThis context reconstruction drains the exact same mental resource I need for interesting problems like creative work and engineering challenges, the stuff that actually benefits from my personal attention.\nThe insight is simple, which is that most life admin problems are not hard. They\u2019re just high-friction re-entries. The thinking required isn\u2019t creative; it\u2019s reconstructive. And in my experience, Claude Code handles reconstructive thinking reasonably well (though I still verify critical details).\nFlipping the Collaboration\nFor knowledge work, everyone talks about AI as a copilot where the human captain does the thinking and the AI assistant helps with execution.\nFor life admin, I flipped this around so that Claude does the thinking while I handle the execution.\nIn my early experiments, this architecture shows promise:\n\nClaude does the thinking (loads context, synthesizes history, generates call scripts, decides what to say)\nHuman does the grunt work (physically holds the phone, drives to the government office, signs the document)\n\nIt might sound like I\u2019m demoting myself to grunt work, but for me the hard part of life admin was never the physical execution. It was always the mental overhead of figuring out where I left off and what to do next. Once I know what to say and have my documents ready, making the call is easy (though I still need to think on my feet when conversations go sideways).\nGhost in the Shell\nNow let\u2019s talk about how this actually works. For Claude to be useful, it needs context. It can\u2019t just be a chatbot I explain things to each time. It needs to temporarily inhabit the project\u2019s accumulated knowledge.\nI call this approach \u201cGhost in the Shell\u201d (borrowing from the anime, where consciousness can inhabit different bodies). In my version, the \u201cshell\u201d is the project\u2019s accumulated data and the \u201cghost\u201d is Claude\u2019s reasoning capability that temporarily inhabits it.\nEach project has a brain: notes, meeting transcripts, task history, linked documents. When I trigger a task, Claude loads this brain and reasons from that context.\nI should mention the technical setup, which is that I use Claude with MCP integrations that can read from my document database and task manager. I use Mac-specific tools (DEVONthink for documents, OmniFocus for tasks, Hookmark for cross-app links), but the principle should be tool-agnostic since any setup that can aggregate project context and feed it to an LLM would work.\nWhen I select a task in OmniFocus, Claude follows the project hierarchy upward to find the parent project, then loads all linked documents and notes. It builds a timeline of what happened. Then it can act with full context, not just respond to isolated prompts. Sure, Claude doesn\u2019t truly \u201cunderstand\u201d the project, but it synthesizes the available information well enough for bureaucratic tasks.\nThe One Question Rule\nYou might ask whether managing AI becomes its own overhead, and yes, it can. I\u2019ve found that AI assistants can become another attention sink through clarifications, follow-ups, and re-prompts, and before you know it, managing the AI becomes a new kind of bureaucracy.\nSo I built in what I call the \u201cone question rule.\u201d If Claude is missing information, it can ask one question maximum. Then it has to provide a best-effort plan with assumptions stated. If it\u2019s still stuck, it downgrades by first moving from doing the task to proposing a plan, and then to explaining how this type of problem generally works so I can handle it myself.\nThis prevents Claude from becoming needy. It forces decisive action with explicit assumptions rather than endless clarification loops.\nI also added risk-based escalation. \u201cAutopilot\u201d here means Claude proceeds without asking for confirmation:\n\nHigh risk (finance, medical, identity): never autopilot\nMedium risk: autopilot only for prep work (drafts, research)\nLow risk: full autopilot allowed\n\nThis doesn\u2019t prevent all errors. I still need to review what Claude produces, and I\u2019ve caught it confidently stating wrong details. But the guardrails prevent the worst-case scenarios while keeping friction low for routine tasks.\nClosing the Loop\nClaude doesn\u2019t just prep and disappear but waits for me to come back with results.\nHere\u2019s a typical flow:\nClaude: "Here's your call script for the mechanic. Key points to cover:\n timing, parts availability, price estimate. Come back when done."\n\n[I make the call]\n\nMe: "Done. He said Tuesday at 10am works, and the part needs to be ordered."\n\nClaude: Creates follow-up task that surfaces on the appointment date,\n logs the outcome to project notes (so next time I have this\n context), links everything together.\nThis conversational loop keeps Claude as the orchestrator throughout. Every interaction gets logged back to the project\u2019s brain, so next time the context is even richer.\nWhat I Actually Delegate\nThe action types fall into three modes based on how much autonomy Claude gets:\nAutopilot (Claude does the work, I review results): Research tasks where Claude queries Perplexity or analyzes code. Processing tasks where it extracts key points from articles or documents. Documentation tasks where it saves findings to DEVONthink and creates links between related items.\nPropose (Claude preps, I decide and act): Phone calls where Claude loads my last conversation with someone, generates a script, and tells me what questions to ask. Emails where it drafts messages based on project context. Setup tasks where it researches best practices and generates step-by-step guides. Decisions where it builds comparison matrices and recommends options.\nTeach (Claude explains, I learn): Learning tasks where Claude curates resources, creates a study plan, and suggests hands-on exercises, but I do the actual learning.\nThe key insight is that even when Claude can\u2019t do the task, it can reduce my cognitive load significantly. For a phone call, I usually don\u2019t have to remember anything because Claude already looked up my last interaction with that person and what we discussed. I just read the script (though I still need to adapt when the conversation goes sideways).\nAction Types\nI built a library of action types as markdown files that Claude reads when working on a task. Each type (research, review, process, draft, analyze, document, setup, learn, coordinate, execute, spec) defines a prep pattern for what Claude should do before I act, a capture pattern for logging results afterward, and which tools to use. For example, the \u201cdraft\u201d type handles phone calls and emails by loading contact details and past conversations, then generating a script or message draft.\nThe process of building this library is ongoing. I pay attention to what types of actions I do repeatedly, then figure out how Claude could help with each one. Some actions start in Propose mode and graduate to Autopilot once I trust the pattern. The goal is to keep expanding what can be delegated as I discover new friction points.\nClaude generates plans fresh each time using these patterns plus the project\u2019s accumulated context. In theory, this gets smarter with each use because the context compounds. I haven\u2019t measured this rigorously, but I\u2019ve noticed Claude\u2019s prep work improving as project histories grow richer.\nThe Real Risk of AI Assistants\nWhat I\u2019ve found is that the real risk of AI assistants isn\u2019t that they make you lazy but that they make you a manager of an intern that asks infinite questions.\nI prevent that by design through a kind of contract with Claude that includes clear modes of operation, risk-based guardrails, explicit definitions of done, and a hard cap on questions, so it behaves like a capable assistant rather than a needy one.\nIs this worth the setup time? I spent a day building the infrastructure. Whether it pays off depends on how many bureaucratic projects I run through it. Ask me in six months.\nFor now, I\u2019m experimenting with reserving my thinking capacity for interesting problems. Everything else gets delegated to the ghost in the shell.", "date_published": "2025-12-28T21:51:55+01:00", "date_modified": "2025-12-28T21:51:55+01:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "AI", "Claude Code", "DEVONthink", "GTD", "Hookmark", "OmniFocus", "Thinking", "Posts" ] }, { "id": "https://decoding.io/?p=3523", "url": "https://decoding.io/2025/12/bookmarked-writing-workflow/", "title": "Bookmarked \u201cWriting Workflow\u201d", "content_html": "

This is actually a pretty interesting way to think about which app should be used for which type of writing.

\n
\n

Question: What am I writing?

\n

a. Longform – a novel or non fiction piece of more than 2,000 words.

\n

Answer: Scrivener

\n

b. Shortform – a blog post or e-mail or report or some such. Something that I’m “drafting”.

\n

Answer: IA Writer

\n

c. Notes – an idea, a thought, a snippet or reminder. Something that may grow, or may link, but does not in its current form represent a draft towards publishing.

\n

Answer: Obsidian

\n

Question: where do I “archive” writing?

\n

Answer: DevonThink

\n

DevonThink is searchable, organised and backed-up. Perhaps archiving is an annual process – so at the beginning of 2022, I archive any and all pieces in IA Writer that predate 2021, leaving a minimum of 1 year and a maximum of 2 years in situ. Scrivener projects can be archived too. (In Plain Text)

\n
\n

See more about this topic:

\n\n
", "content_text": "This is actually a pretty interesting way to think about which app should be used for which type of writing.\n\nQuestion: What am I writing?\na. Longform – a novel or non fiction piece of more than 2,000 words.\nAnswer: Scrivener\nb. Shortform – a blog post or e-mail or report or some such. Something that I’m “drafting”.\nAnswer: IA Writer\nc. Notes – an idea, a thought, a snippet or reminder. Something that may grow, or may link, but does not in its current form represent a draft towards publishing.\nAnswer: Obsidian\nQuestion: where do I “archive” writing?\nAnswer: DevonThink\nDevonThink is searchable, organised and backed-up. Perhaps archiving is an annual process – so at the beginning of 2022, I archive any and all pieces in IA Writer that predate 2021, leaving a minimum of 1 year and a maximum of 2 years in situ. Scrivener projects can be archived too. (In Plain Text)\n\nSee more about this topic:\n\nConsolidate my journals\nConclusion on my journal-type apps\nDifferent Tools for Different Thinking Modes", "date_published": "2025-12-26T17:25:40+01:00", "date_modified": "2025-12-26T21:07:44+01:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Application", "Thinking", "Writing", "Bookmarks" ] }, { "id": "https://decoding.io/?p=3515", "url": "https://decoding.io/2025/12/3515/", "title": "Blogging from Bike today", "content_html": "
\n\n
\n
", "content_text": "I\u2019m writing on my blog from Bike today, which I still love. \n\n\nBlogging with Bike\n\n\nPublish daily notes to my Zettelkasten from Bike\n\n\nAlso related but in a different way\n\n\nThinking in Threads with Bike Outliner\n\n\nNote: sometimes I wonder why do I keep a separate Zettelkasten around, since WordPress and my blog could solve that problem easily.\n\n\n\n\n\n\n\n\nWriting in an outliner and publishing directly kinda works for me, since I’m not editing posts in some weird CMS (even if MarsEdit is awesome).\n\n\nI like how easy it is to move rows around.\n\n\nIt’s freeform text, but on the other hand, it’s still pretty structured.\n\n\n\n\nI should write more posts from here. It would make sense for quick posts like this, no hard editing, even spelling errors.\n\n\nNobody cares, the main idea is to push content which can be interesting.", "date_published": "2025-12-26T16:55:00+01:00", "date_modified": "2025-12-26T21:08:14+01:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Posts" ] }, { "id": "https://decoding.io/?p=3510", "url": "https://decoding.io/2025/12/devonthink-and-liquid-glass-testing/", "title": "DEVONthink and Liquid Glass testing", "content_html": "
\n\n
\n
", "content_text": "There is a new beta of DEVONthink in Liquid Glass.\n\n\nLooks pretty nice.\n\n\n\n\nThere\u2019s a new app icon, which is similar to DEVONthink To Go 4.\n\n\nSome smaller UI issues\n\n\nThe magnification glass on the right has a small UI issue.\n\n\nGeneral settings drop-downs are touching each other.", "date_published": "2025-12-26T15:19:00+01:00", "date_modified": "2025-12-26T21:08:17+01:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Posts" ] }, { "id": "https://decoding.io/?p=3512", "url": "https://decoding.io/2025/12/brainstorming-about-macos-note-taking-apps/", "title": "Brainstorming about macOS note-taking apps", "content_html": "
\n\n
\n
", "content_text": "The Archive (native)\n\n\nPlain-text Zettelkasten app with wiki-links, fast search, and minimal UI. File-based (markdown), local-first. The primary tool for this zettelkasten. (Workflow context)\n\n\nMy current or previous usage of the app.\n\n\nPrimary zettelkasten tool – all permanent notes live here. Main journaling and thought capture. Search and browse the knowledge network. Private notes hidden from published site. (Content pipeline)\n\n\nPart of three-tool thinking system: Zettelkasten (The Archive) for journaling and permanent notes, TaskPaper for planning/brainstorming, Emacs for code experiments. (Different thinking modes)\n\n\n\n\n\n\nArticles and websites\n\n\nBook workflow, introduction to The Archive, saved searches\n\n\nHow to Do Research with The Archive\n\n\nA love letter to The Archive\n\n\nSummary of this article.\n\n\nManan Khattar’s case for The Archive: 1,330 notes (350K words) in plain text. Speed and keyboard-centric design minimize cognitive friction. Search-driven workflow enables queries like #literature #inbox (productivity OR writing) (202407 OR 202408). Native Zettelkasten support from zettelkasten.de’s creator.\n\n\nTrade-offs acknowledged: unique identifier requirement makes wikilinks less readable than Obsidian. No plugin system\u2014requires Alfred workflows for full functionality. No mobile app (uses 1Writer as workaround).\n\n\nCore thesis: tool choice matters less than sustaining writing-focused thinking habit. The Archive’s speed accelerated his adoption.\n\n\nI got to know kindaVim from this article.\n\n\nActually, I already wrote about this before: Bookmarked \u201ckindaVim\u201d\n\n\nThere are videos about kindaVim: kindaVim – YouTube\n\n\nMost of them just ramblings.\n\n\n\n\nThis is another app from the same guy for keyboard based UI navigation: Wooshy\n\n\n\n\n\n\n\n\n\n\n\n\niA Writer (native)\n\n\nDistraction-free markdown editor with focus mode, syntax highlighting, and publishing integrations. Typography-first design from Information Architects.\n\n\nMy current or previous usage of the app.\n\n\nDrafting and linking workflow via smart folders. #Drafting folder shows notes being written, #Linking folder shows notes ready for outline placement. The final drafting step before zettelkasten integration. (Content pipeline)\n\n\n\n\n\n\nArticles and websites\n\n\nHow I set up iA Writer After Moving from Ulysses\n\n\nWriting Workflow – Stuart Lennon\n\n\nSummary of the article, focusing on the question \u201cWhat am I writing?\u201d section.\n\n\nStuart Lennon’s framework: three writing categories.\n\n\nLongform (2000+ words) in Scrivener for novels/non-fiction.\n\n\nShortform drafts in iA Writer for blog posts and reports.\n\n\nNotes ideas in Obsidian for thoughts not yet publication-ready.\n\n\nThe “What am I writing?” question determines tool selection. Plain text everywhere for portability. DEVONthink as archive. Open question: whether Drafts could serve as unified entry point with automated routing.\n\n\n\n\n\n\n\n\n\n\nBike (native)\n\n\nNative macOS outliner with fast keyboard navigation, collapsible hierarchy, and scripting support. Version 2 adds extensions API and custom attributes. The app running this outline.\n\n\nMy current or previous usage of the app.\n\n\nCore organizing tool for the content pipeline. Ideas get arranged in Bike outlines before export to zettelkasten via Drafts. Also manages the folgezettel outline structure. (Content pipeline)\n\n\nDecoding files are raw Bike outlines for blog posts. All content ready for publishing; private things go to interstitial journal instead. (Journal-type apps)\n\n\nNow used as AI-integrated thinking space with thread-watch and MCP server. Reactive prompting via @question attributes. (Bike thinking tool exploration)\n\n\n\n\n\n\nArticles and websites\n\n\nBike: An Elegant Outliner For Mac-Focused Workflows – MacStories\n\n\nBike: Tool for thought\n\n\n\n\n\n\nTaskPaper (native)\n\n\nPlain-text task management using indentation and tags. Same developer as Bike. Good for project brainstorming and task breakdown. (Workflow context)\n\n\nMy current or previous usage of the app.\n\n\nTaskPaper role: plain-text planning and brainstorming for project-specific thinking and task breakdown. OmniFocus shortcut triggers “project brainstorming” in TaskPaper. (Different tools for different thinking modes)\n\n\nHistorical use: interstitial journaling. Deprecated that role, moved journaling back to zettelkasten. Brainstorm sessions now live in the journal rather than separate files. (Plans for TaskPaper changes)\n\n\nWorkflow: Bike for initial outlining, switch to TaskPaper once plan solidifies. Part of the plain-text system alongside The Archive and Bike. (Text-based system)\n\n\n\n\n\n\nArticles and websites\n\n\nTaskPaper for Mac\n\n\nHow do you use TaskPaper? – Forum Discussion\n\n\nThe move to a plaintext GTD system\n\n\n\n\n\n\nDrafts (native)\n\n\nQuick capture app with powerful actions system for routing text to other apps. Automation-first design. Inbox for thoughts, not storage.\n\n\nMy current or previous usage of the app.\n\n\nExport gateway from Bike to zettelkasten. Ideas organized in Bike get exported through Drafts into new notes. Also used for quick capture on Apple Watch at night. (Content pipeline)\n\n\nMCP server spec exists for automation integration. AppleScript-based CRUD operations planned but automation permissions need resolution first. (Drafts MCP spec)\n\n\n\n\n\n\nArticles and websites\n\n\nAutomating Email with Drafts (feat. David Sparks)\n\n\nQuick Capture with Drafts – The Sweet Setup\n\n\nA Drafts Workflow for Conferences\n\n\n\n\n\n\nCraft (native)\n\n\nBlock-based document editor with rich formatting, folder structure, and cross-device sync. Apple Design Award winner, positioned between Notion and traditional notes.\n\n\nMy current or previous usage of the app.\n\n\nPrimary reading queue manager via Readwise-Craft syncer integration. Articles flow in, get processed with highlights, then export to zettelkasten. MCP server enables AI automation. (Readwise-Craft syncer)\n\n\nDaily notes workflow for session logging and project tracking. Block-based structure good for moving content between documents. (Content pipeline)\n\n\n\n\n\n\nArticles and websites\n\n\nSecond Brain Workflows (Obsidian vs Craft for PKM)\n\n\nHow I’m Using Craft in My Productivity Workflows\n\n\nThe Craft App \u2014 A Year of Magical Linking\n\n\n\n\n\n\nDEVONthink (native)\n\n\nDocument/knowledge management database with AI classification, OCR, and smart groups. Stores anything, indexes everything. Research-grade organization.\n\n\nMy current or previous usage of the app.\n\n\nDEVONthink role: document archive and reference storage. Articles, PDFs, web archives, receipts. AI classification and OCR. Research-grade organization with smart groups. (Incremental reading system)\n\n\nReading queue integration: documents captured to DEVONthink appear in OmniFocus @Read/Review perspective. The queue is in OmniFocus, content stays in DEVONthink.\n\n\nMCP access via mcporter enables AI agents to search and retrieve DEVONthink content. Source references in older zettelkasten notes use x-devonthink-item:// links.\n\n\n\n\n\n\nArticles and websites\n\n\nUse Obsidian and DEVONthink Together!\n\n\nDEVONthink for Historians: developing your qualitative research process\n\n\nFour Hour Setup: How I use DEVONthink\n\n\nWorkflows for Scholars – DEVONtechnologies\n\n\n\n\n\n\nObsidian (Electron)\n\n\nPlugin-extensible markdown vault with graph view, backlinks, and community ecosystem. Electron-based, local files. Power-user PKM tool.\n\n\nMy current or previous usage of the app.\n\n\nLimited use currently. Explored for AI integration with Cursor but zettelkasten workflow remains in The Archive. Considered for consolidating Planning folder but not active. (Obsidian exploration)\n\n\n\n\n\n\nArticles and websites\n\n\nHow to Connect Zotero and Obsidian for the Ultimate PhD Workflow\n\n\nHow to Build a Second Brain in Obsidian: Complete Setup Guide\n\n\nPKM + Obsidian: The Tech Stack for Your Brain\n\n\n\n\n\n\nOmniOutliner (native)\n\n\nProfessional outliner from OmniGroup with styling, columns, and export options. More structured than Bike, less nimble. AppleScript support.\n\n\nArticles and websites\n\n\nGTD = OmniFocus + OmniOutliner + DEVONThink\n\n\n\n\n\n\nMindNode (native)\n\n\nVisual mind mapping with clean design and focus mode. Exports to various formats. Good for brainstorming spatial relationships, less for linear text.\n\n\nMy current or previous usage of the app.\n\n\nUsed for preparing content before processing. Ideas get connected to mindmaps with tags and links before moving to notes. Public mindmaps shared online (e.g., Japanese Design and Aesthetics). (Processing workflow)\n\n\n\n\n\n\nArticles and websites\n\n\nHow David Develops with Mind Maps\n\n\n\n\n\n\nScapple (native)\n\n\nFreeform note board from Literature and Latte (Scrivener makers). Spatial arrangement of text snippets with connection lines. Idea exploration before structure.\n\n\nArticles and websites\n\n\nScapple: a great little brainstorming gem\n\n\nHow to Get Unstuck + Plot Your Novel in Scapple\n\n\n\n\n\n\nNotePlan (native)\n\n\nMarkdown notes with calendar integration and task management. Daily notes workflow with backlinks. Hybrid of journaling and task app.\n\n\nArticles and websites\n\n\nMy Ultimate Productivity Tool Workflow for 2024: Plan with Me in NotePlan\n\n\nMy Productivity Workflow 2025: Task Management + Apple Shortcuts + Gmail\n\n\nMy NotePlan Workflow \u2014 Everything I Need to Plan and Execute my Day\n\n\nNotePlan: Your Notes, Tasks, and Calendar in One Place – MacSparky\n\n\n\n\n\n\nDistill (Tauri)\n\n\nAI-native thinking tool with append-only threads and contextual awareness. Local-first with cloud sync. Discussed earlier in this document.\n\n\nMy current or previous usage of the app.\n\n\nExplored briefly – app installed, bug filed about quick capture window positioning with right-side Dock. Append-only threading concept influenced thread-watch development. (Reactive prompting)\n\n\nRemoved from active toolchain – no current use case. Keep app installed for existing content. (Journal-type apps conclusion)\n\n\nExplored briefly – app installed, bug filed about quick capture window positioning with right-side Dock. Append-only threading concept influenced thread-watch development. (Reactive prompting)\n\n\nRemoved from active toolchain – no current use case. Keep app installed for existing content. (Journal-type apps conclusion)\n\n\n\n\n\n\nArticles and websites\n\n\nActive intelligence – Distill Documentation\n\n\nWorkflows – Distill Documentation\n\n\n\n\n\n\nBear (native)\n\n\nMarkdown notes with tags, nested tags, and backlinks. Clean native UI. Simpler than Obsidian, more polished than most.\n\n\nArticles and websites\n\n\nHow I use Bear As My Second Brain With Alfred\n\n\nBear is a fully fledged writing app – experiences as former Ulysses user\n\n\nWorkflow wobbles – Stuart Lennon\n\n\n\n\n\n\nUlysses (native)\n\n\nLong-form writing app with library management and publishing targets. Markdown-based but hides syntax. For writers shipping manuscripts.\n\n\nArticles and websites\n\n\nHow I Organise My Writing\n\n\nA Complete Ulysses Writing Workflow – The Sweet Setup\n\n\nChoosing Ulysses over PKM Software for Longform Writing\n\n\n\n\n\n\nNoteship (native)\n\n\nMinimal sticky-note style capture app. Menu bar access, quick entry. Capture-focused, not organization-focused.\n\n\nArticles and websites\n\n\nNoteship User Guide\n\n\nMeeting Notes with Noteship\n\n\n\n\n\n\nNotebooks 3 (native)\n\n\nHierarchical notebook app with nested books and markdown support. Cross-platform sync. Traditional notebook metaphor with modern features.\n\n\nArticles and websites\n\n\nTen Reasons I Write Everything in Notebooks App\n\n\nTask Management in Notebooks\n\n\n\n\n\n\nScrivener (native)\n\n\nLong-form writing IDE with binder, corkboard, and compile system. For novels, screenplays, research papers. Structure-first drafting.\n\n\nArticles and websites\n\n\nMy Easy Scrivener Writing Workflow + Setup\n\n\nHow to Use Scrivener Like a PhD Student\n\n\nHow I Use Scrivener For Fiction And Non-Fiction – The Creative Penn\n\n\nStructuring your novel in Scrivener\n\n\n\n\n\n\nTinderbox (native)\n\n\nHyper-customizable note database with agents, attributes, and visual maps. Steep learning curve, extreme power. For complex knowledge work and research.\n\n\nMy current or previous usage of the app.\n\n\nHigher-level life management – dreams, someday/maybe ideas, things above projects. Scripts connect OmniFocus to Tinderbox for two-way sync. Ideas and goals live here; projects get managed in OmniFocus. (Tinderbox for life management)\n\n\nIncremental Reading document watches Readwise chunks folder. Considered skipping from general chunk processing due to workflow friction getting content in. (Tinderbox workflow friction)\n\n\n\n\n\n\nArticles and websites\n\n\nWorking with Tinderbox Zotero\n\n\nPhD Tools: Think better with Tinderbox\n\n\nTinderbox for writing long Academic texts – Forum\n\n\n\n\n\n\nBBEdit (native)\n\n\nProfessional text editor with grep, syntax coloring, and scripting. Not a note app per se – a text tool that handles notes. 30+ years of macOS development.\n\n\nArticles and websites\n\n\nTaking Notes: BBEdit 14, Working Copy, Self-hosted Git Repo\n\n\nBBEdit for Writers: A Guide and Appreciation\n\n\n\n\n\n\nOrg-mode with Emacs (native)\n\n\nPlain-text outliner inside Emacs with TODO states, scheduling, and literate programming. Keyboard-driven, infinitely extensible. Used for programming experiments. (Workflow context)\n\n\nMy current or previous usage of the app.\n\n\nCurrent Emacs usage: Org Mode for programming experiments and literate programming. Still exploratory – set up OmniFocus shortcut for “programming docs” but workflow not fully established. (Different Tools for Different Thinking Modes)\n\n\nOrg Agenda navigation shortcuts documented separately – day/week views, date jumping, standard Emacs keybindings. (Org Agenda Shortcuts)\n\n\nPosition in tool ecosystem: Zettelkasten (The Archive) for journaling and permanent notes, TaskPaper for planning/brainstorming, Emacs for code experiments. Three tools, three thinking modes.\n\n\n\n\n\n\nArticles and websites\n\n\nHow I use Org-mode to organize my life\n\n\nHow I use Org Mode – Bill de h\u00d3ra\n\n\nGetting Things Done with Emacs: Manage your life with Org Mode\n\n\n\n\n\n\nStrflow (native)\n\n\nStream-of-consciousness capture app with AI integration. Continuous text flow rather than discrete notes. Early-stage product.\n\n\nMy current or previous usage of the app.\n\n\nShort idea dumps when thinking about something – ideas then move to OmniFocus/Bike. Removed from active toolchain; no current use case. App kept installed for existing content. (Journal-type apps conclusion)\n\n\nShort idea dumps when thinking about something – ideas then move to OmniFocus/Bike. Removed from active toolchain; no current use case. App kept installed for existing content. (Journal-type apps conclusion)\n\n\n\n\n\n\nArticles and websites\n\n\nShow HN: Strflow – Note-Taking for people who keep abandoning notes\n\n\nStrflow \u2014 Note-Taking, Like Chatting\n\n\n\n\n\n\nNotePlus (native)\n\n\nNative macOS LLM client (~10MB). Supports OpenAI, Gemini, Anthropic, Ollama, DeepSeek, Copilot. Different category than Bike\u2014this is a chat interface with note-taking features, not an outliner. The “True Native” claim positions it against Electron apps.", "date_published": "2025-12-21T23:48:00+01:00", "date_modified": "2025-12-26T21:08:18+01:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Drafting", "inbox", "Linking", "literature", "Posts" ] }, { "id": "https://decoding.io/?p=3496", "url": "https://decoding.io/2025/12/thinking-in-threads-with-bike-outliner/", "title": "Thinking in Threads with Bike Outliner", "content_html": "

I’ve been looking for a tool that supports threaded thinking. Distill nails the concept: you think out loud into threads, and AI agents respond inline without breaking the flow. But it’s pricey, hosted, and not native. I want local files so I can use git.

\n

So I built something similar with Bike.

\n

The Threading Idea

\n

The core concept is append-only threading. New thoughts go at the end. No reorganizing, no inserting between existing ideas. The thread keeps expanding.

\n

This preserves how ideas actually develop. When I capture thoughts in a traditional outline, I’m constantly deciding where things go. That decision-making interrupts the thinking. With append-only, there’s no decision. New thought? Add it at the end. Want to go deeper? Indent.

\n

I’ve written about this before in Reviewing append-only workflows. The pattern keeps showing up: Mastodon threads, chat-based note apps like Gibberish, and now Bike.

\n

Why Bike

\n

Bike is a macOS outliner (think Workflowy, but native and scriptable). What makes it work for threading:

\n\n

The structure emerges from the content. I start typing, indent when going deeper, and the hierarchy forms naturally.

\n

Adding AI Inline

\n

Distill’s insight is that AI agents can watch threads and respond without being addressed directly. I wanted that for Bike.

\n

So I built thread-watch. It watches my outlines for rows tagged with @question and adds responses as indented blockquotes. The workflow:

\n
    \n
  1. Think out loud in the outline
  2. \n
  3. Tag uncertainties with @question
  4. \n
  5. Run thread-watch (keyboard shortcut)
  6. \n
  7. Responses appear as children of the question
  8. \n
  9. Keep thinking, keep appending
  10. \n
\n

The responses stay in the thread. They’re part of the thinking record, not a separate conversation.

\n

Here’s what it looks like in practice:

\n
\n

\n

Reactive Prompting

\n

The technique I use for AI responses is what I call reactive prompting. The agent isn’t addressed directly. It responds to the thought stream.

\n

The system prompt tells Claude to write like margin notes in a book: factual, terse, no “I found that\u2026” discovery narrative. This matters because conversational AI responses feel like interruptions. Reactive responses integrate with the thinking instead.

\n

Connecting to the Zettelkasten

\n

The agent has access to my Zettelkasten folder. Before answering, it searches for relevant existing knowledge and links back. I was outlining something about capture workflows, tagged it @question, and the agent found a note I’d written two years ago. The response linked back, and I restructured my outline based on what past-me had already figured out.

\n

Bike becomes the staging area for fast thinking. When something crystallizes, I copy it to the zettelkasten as a permanent note.

\n

The Trade-Off

\n

Append-only limits restructuring. If the structure is wrong, I can add cross-references and synthesis rows, but I can’t reorganize without losing the thinking record.

\n

Tagging @question and running the tool is still an interruption. It’s smaller than switching to a chat window, but not invisible.

\n

Why This Works

\n

Standard outlining is about organization. Threading is about capture. I’m not building a perfect structure. I’m externalizing thinking fast enough that I don’t lose it, and the AI assists inline when I need context.

\n

The structure emerges. The thread keeps expanding.

\n
", "content_text": "I’ve been looking for a tool that supports threaded thinking. Distill nails the concept: you think out loud into threads, and AI agents respond inline without breaking the flow. But it’s pricey, hosted, and not native. I want local files so I can use git.\nSo I built something similar with Bike.\nThe Threading Idea\nThe core concept is append-only threading. New thoughts go at the end. No reorganizing, no inserting between existing ideas. The thread keeps expanding.\nThis preserves how ideas actually develop. When I capture thoughts in a traditional outline, I’m constantly deciding where things go. That decision-making interrupts the thinking. With append-only, there’s no decision. New thought? Add it at the end. Want to go deeper? Indent.\nI’ve written about this before in Reviewing append-only workflows. The pattern keeps showing up: Mastodon threads, chat-based note apps like Gibberish, and now Bike.\nWhy Bike\nBike is a macOS outliner (think Workflowy, but native and scriptable). What makes it work for threading:\n\nIndentation for depth – Drilling into an idea by adding child rows\nSequencing – New rows extend the thread chronologically\nGrouping – When patterns emerge, I can nest siblings under a new parent\n\nThe structure emerges from the content. I start typing, indent when going deeper, and the hierarchy forms naturally.\nAdding AI Inline\nDistill’s insight is that AI agents can watch threads and respond without being addressed directly. I wanted that for Bike.\nSo I built thread-watch. It watches my outlines for rows tagged with @question and adds responses as indented blockquotes. The workflow:\n\nThink out loud in the outline\nTag uncertainties with @question\nRun thread-watch (keyboard shortcut)\nResponses appear as children of the question\nKeep thinking, keep appending\n\nThe responses stay in the thread. They’re part of the thinking record, not a separate conversation.\nHere’s what it looks like in practice:\n\n\nReactive Prompting\nThe technique I use for AI responses is what I call reactive prompting. The agent isn’t addressed directly. It responds to the thought stream.\nThe system prompt tells Claude to write like margin notes in a book: factual, terse, no “I found that\u2026” discovery narrative. This matters because conversational AI responses feel like interruptions. Reactive responses integrate with the thinking instead.\nConnecting to the Zettelkasten\nThe agent has access to my Zettelkasten folder. Before answering, it searches for relevant existing knowledge and links back. I was outlining something about capture workflows, tagged it @question, and the agent found a note I’d written two years ago. The response linked back, and I restructured my outline based on what past-me had already figured out.\nBike becomes the staging area for fast thinking. When something crystallizes, I copy it to the zettelkasten as a permanent note.\nThe Trade-Off\nAppend-only limits restructuring. If the structure is wrong, I can add cross-references and synthesis rows, but I can’t reorganize without losing the thinking record.\nTagging @question and running the tool is still an interruption. It’s smaller than switching to a chat window, but not invisible.\nWhy This Works\nStandard outlining is about organization. Threading is about capture. I’m not building a perfect structure. I’m externalizing thinking fast enough that I don’t lose it, and the AI assists inline when I need context.\nThe structure emerges. The thread keeps expanding.", "date_published": "2025-12-21T11:56:06+01:00", "date_modified": "2025-12-21T12:06:32+01:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "AI", "Bike", "Claude Code", "Outline", "Thinking", "Threading", "Zettelkasten", "Posts" ] }, { "id": "https://decoding.io/?p=3472", "url": "https://decoding.io/2025/08/first-impressions-of-liquid-glass-in-macos-tahoe/", "title": "First Impressions of Liquid Glass in macOS Tahoe", "content_html": "

I’ve been running macOS Tahoe‘s new Liquid Glass design on my MacBook Air for a couple of days. Parts work, parts don’t, but most people will adapt quickly enough.

\n

The smart thing Apple did was leave 3rd-party apps alone. They run with the previous design intact, giving you familiar anchors while you adapt to the new interface. Electron apps will probably never update, which might be a blessing.

\n

The dynamic background adaptation is broken. Buttons shift from black to white as the background changes, and it’s jarring every single time. Toolbar consistency is all over the place too. Photos and Mail use progressive blur with gradients while Safari keeps the old blurred rectangle, with no apparent logic to which apps get which treatment. Scrolling through Photos is particularly painful as the interface flips from black to white and back again as you move through your library. This isn’t a minor polish issue. It’s a fundamental problem with how the adaptive system responds to content, and Apple should fix it.

\n
\n

\n\n

\n

When the general public gets their hands on Liquid Glass, I’m sure people will complaint. The current state is too buggy to survive contact with millions of users. I expect iterative improvements throughout the OS 26 cycle as the design gets tweaked based on user feedback.

\n

The foundation has potential, but the background adaptation logic needs fixing. Until then, it’s a work in progress.

\n
", "content_text": "I’ve been running macOS Tahoe‘s new Liquid Glass design on my MacBook Air for a couple of days. Parts work, parts don’t, but most people will adapt quickly enough.\nThe smart thing Apple did was leave 3rd-party apps alone. They run with the previous design intact, giving you familiar anchors while you adapt to the new interface. Electron apps will probably never update, which might be a blessing.\nThe dynamic background adaptation is broken. Buttons shift from black to white as the background changes, and it’s jarring every single time. Toolbar consistency is all over the place too. Photos and Mail use progressive blur with gradients while Safari keeps the old blurred rectangle, with no apparent logic to which apps get which treatment. Scrolling through Photos is particularly painful as the interface flips from black to white and back again as you move through your library. This isn’t a minor polish issue. It’s a fundamental problem with how the adaptive system responds to content, and Apple should fix it.\n\n\n\n\nWhen the general public gets their hands on Liquid Glass, I’m sure people will complaint. The current state is too buggy to survive contact with millions of users. I expect iterative improvements throughout the OS 26 cycle as the design gets tweaked based on user feedback.\nThe foundation has potential, but the background adaptation logic needs fixing. Until then, it’s a work in progress.", "date_published": "2025-08-30T10:57:57+02:00", "date_modified": "2025-08-30T11:04:24+02:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Design", "Liquid Glass", "macOS", "Posts" ] }, { "id": "https://decoding.io/?p=3468", "url": "https://decoding.io/2025/08/solving-token-waste-with-claude-code-personas/", "title": "Solving Token Waste with Claude Code Personas", "content_html": "

The new /context command in Claude Code revealed how I’m wasting tokens by having all MCP (Model Context Protocol) tools loaded into one session for every conversation. When I’m in the middle of development, I don’t need OmniFocus task management or DEVONthink database tools.

\n

Based on subagents I had the following idea: what if I split Claude into specialized personas, each loading only the tools it actually needs?

\n

Creating Focused Personas

\n

Instead of one bloated agent trying to do everything, I created three specialized personas:

\n

Main Persona (cc): The clean, focused default. Just filesystem, bash, and macOS automation via one MCP server. This handles most of my daily coding tasks with minimal tool overhead.

\n

Research Persona (ccr): The deep investigation specialist. Loads Zen for multi-model reasoning (GPT-5, O3, Gemini Pro), Context7 for library docs, Octocode for code search and analysis, and Codex for deep code research. When I need to debug something complex or review architecture, this persona has the tools.

\n

GTD Persona (ccg): The productivity workflow expert. Connects to OmniFocus for tasks, Obsidian for notes, DEVONthink for documents, and HyperContext for calendar management. This persona focuses on productivity workflows and task management.

\n

Each persona also has access to subagents for specialized tasks, adding another layer of capability without wasting more tokens.

\n

The implementation lives in my dotfiles as simple shell functions:

\n
# Main persona - clean and fast\ncc() {\n  claude ${*} --dangerously-skip-permissions\n}\n\n# Research persona with specialized tools\nccr() {\n  claude ${*} --dangerously-skip-permissions \\\n    --model opus \\\n    --mcp-config ~/.claude/mcp-research.json \\\n    --append-system-prompt \"You are a code research and analysis specialist \\\nfocused on deep technical investigation, multi-model reasoning, and \\\ncomprehensive code review. Your expertise includes security auditing, \\\narchitecture analysis, debugging complex issues, and researching best \\\npractices across codebases. You leverage multiple AI models for consensus \\\nbuilding, use Context7 to fetch up-to-date library documentation, analyze \\\nGitHub repositories for patterns with Octocode, and generate thorough \\\ntechnical documentation.\"\n}\n\n# GTD persona with productivity tools\nccg() {\n  claude ${*} --dangerously-skip-permissions \\\n    --model opus \\\n    --mcp-config ~/.claude/mcp-gtd.json \\\n    --append-system-prompt \"You are a GTD specialist orchestrating a \\\nmulti-layered knowledge system where OmniFocus drives project execution, \\\nObsidian captures notes and knowledge, and DEVONthink archives reference \\\nmaterials. You excel at processing inboxes across all three systems, \\\norganizing projects with proper next actions, capturing meeting notes \\\nwith task extraction, and maintaining a trusted system for all personal \\\nand professional information. Your expertise includes creating bidirectional \\\nlinks between systems using Hook and maintaining clear separation between \\\nactive project work and archived reference materials.\"\n}
\n

Each persona loads its own MCP configuration file, containing only the relevant tool servers. The --append-system-prompt flag gives each persona a specialized identity and deep expertise in their domain.

\n

The Delegation Pattern

\n

The most powerful aspect isn’t just the separation. It’s the ability for personas to delegate to each other. This creates a network of specialized expertise without loading unnecessary tools.

\n

When delegation happens, I must approve it first. The main persona will say something like: “I’d like to ask the research persona to analyze this Rails controller for N+1 queries using its specialized tools.” Once I type “approved” or “go”, the delegation proceeds.

\n

The delegation always runs in the background using the Bash tool:

\n
// How the main persona actually delegates\nBash({\n  command: 'ccr -p \"Analyze this Rails controller for N+1 queries and performance issues\"',\n  description: \"Ask research persona to analyze Rails performance\",\n  run_in_background: true\n})
\n

This pattern works both ways. I can also delegate GTD tasks with a simple OmniFocus link:

\n
# Ask GTD persona for comprehensive project review\nccg -p \"/gtd:project-review omnifocus:///task/jP9S4CFgPin\"
\n

The GTD persona doesn’t just fetch tasks. It discovers linked resources through Hookmark, pulls references and meeting notes from DEVONthink, reads project plans from Obsidian, builds a complete timeline, and suggests concrete next actions based on the full project context. All while the main persona continues with development work.

\n

The background execution is key. The delegating persona doesn’t block waiting for results. It can continue working on other aspects while the specialized persona handles its domain-specific task.

\n

What Changed

\n

The token savings are significant, but the real benefit is focus. Each persona does one thing well with the right tools for that job. The system prompts shaped distinct behaviors. The main persona stays lean and fast. The research persona leverages multiple AI models for deep analysis. The GTD persona navigates my entire productivity stack.

\n
", "content_text": "The new /context command in Claude Code revealed how I’m wasting tokens by having all MCP (Model Context Protocol) tools loaded into one session for every conversation. When I’m in the middle of development, I don’t need OmniFocus task management or DEVONthink database tools.\nBased on subagents I had the following idea: what if I split Claude into specialized personas, each loading only the tools it actually needs?\nCreating Focused Personas\nInstead of one bloated agent trying to do everything, I created three specialized personas:\nMain Persona (cc): The clean, focused default. Just filesystem, bash, and macOS automation via one MCP server. This handles most of my daily coding tasks with minimal tool overhead.\nResearch Persona (ccr): The deep investigation specialist. Loads Zen for multi-model reasoning (GPT-5, O3, Gemini Pro), Context7 for library docs, Octocode for code search and analysis, and Codex for deep code research. When I need to debug something complex or review architecture, this persona has the tools.\nGTD Persona (ccg): The productivity workflow expert. Connects to OmniFocus for tasks, Obsidian for notes, DEVONthink for documents, and HyperContext for calendar management. This persona focuses on productivity workflows and task management.\nEach persona also has access to subagents for specialized tasks, adding another layer of capability without wasting more tokens.\nThe implementation lives in my dotfiles as simple shell functions:\n# Main persona - clean and fast\ncc() {\n claude ${*} --dangerously-skip-permissions\n}\n\n# Research persona with specialized tools\nccr() {\n claude ${*} --dangerously-skip-permissions \\\n --model opus \\\n --mcp-config ~/.claude/mcp-research.json \\\n --append-system-prompt \"You are a code research and analysis specialist \\\nfocused on deep technical investigation, multi-model reasoning, and \\\ncomprehensive code review. Your expertise includes security auditing, \\\narchitecture analysis, debugging complex issues, and researching best \\\npractices across codebases. You leverage multiple AI models for consensus \\\nbuilding, use Context7 to fetch up-to-date library documentation, analyze \\\nGitHub repositories for patterns with Octocode, and generate thorough \\\ntechnical documentation.\"\n}\n\n# GTD persona with productivity tools\nccg() {\n claude ${*} --dangerously-skip-permissions \\\n --model opus \\\n --mcp-config ~/.claude/mcp-gtd.json \\\n --append-system-prompt \"You are a GTD specialist orchestrating a \\\nmulti-layered knowledge system where OmniFocus drives project execution, \\\nObsidian captures notes and knowledge, and DEVONthink archives reference \\\nmaterials. You excel at processing inboxes across all three systems, \\\norganizing projects with proper next actions, capturing meeting notes \\\nwith task extraction, and maintaining a trusted system for all personal \\\nand professional information. Your expertise includes creating bidirectional \\\nlinks between systems using Hook and maintaining clear separation between \\\nactive project work and archived reference materials.\"\n}\nEach persona loads its own MCP configuration file, containing only the relevant tool servers. The --append-system-prompt flag gives each persona a specialized identity and deep expertise in their domain.\nThe Delegation Pattern\nThe most powerful aspect isn’t just the separation. It’s the ability for personas to delegate to each other. This creates a network of specialized expertise without loading unnecessary tools.\nWhen delegation happens, I must approve it first. The main persona will say something like: “I’d like to ask the research persona to analyze this Rails controller for N+1 queries using its specialized tools.” Once I type “approved” or “go”, the delegation proceeds.\nThe delegation always runs in the background using the Bash tool:\n// How the main persona actually delegates\nBash({\n command: 'ccr -p \"Analyze this Rails controller for N+1 queries and performance issues\"',\n description: \"Ask research persona to analyze Rails performance\",\n run_in_background: true\n})\nThis pattern works both ways. I can also delegate GTD tasks with a simple OmniFocus link:\n# Ask GTD persona for comprehensive project review\nccg -p \"/gtd:project-review omnifocus:///task/jP9S4CFgPin\"\nThe GTD persona doesn’t just fetch tasks. It discovers linked resources through Hookmark, pulls references and meeting notes from DEVONthink, reads project plans from Obsidian, builds a complete timeline, and suggests concrete next actions based on the full project context. All while the main persona continues with development work.\nThe background execution is key. The delegating persona doesn’t block waiting for results. It can continue working on other aspects while the specialized persona handles its domain-specific task.\nWhat Changed\nThe token savings are significant, but the real benefit is focus. Each persona does one thing well with the right tools for that job. The system prompts shaped distinct behaviors. The main persona stays lean and fast. The research persona leverages multiple AI models for deep analysis. The GTD persona navigates my entire productivity stack.", "date_published": "2025-08-26T17:54:30+02:00", "date_modified": "2025-08-26T17:54:30+02:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "AI", "Claude Code", "Development", "GTD", "Posts" ] }, { "id": "https://decoding.io/?p=3465", "url": "https://decoding.io/2025/08/bookmarked-making-software/", "title": "Bookmarked \u201cMaking Software\u201d", "content_html": "
\n

A reference manual for people who design and build software.

\n
\n
", "content_text": "A reference manual for people who design and build software.", "date_published": "2025-08-17T19:12:53+02:00", "date_modified": "2025-08-17T19:12:53+02:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Bookmarks" ] }, { "id": "https://decoding.io/?p=3462", "url": "https://decoding.io/2025/07/pezeta-progress-log/", "title": "Pezeta Progress Log", "content_html": "

Spent today designing the Rails controller layer for Pezeta.

\n

I analyzed Capito, an envelope budgeting prototype I built seven years ago. Standard approach \u2013 categories as envelopes, track balances, show what’s left to spend, like YNAB. But Pezeta takes a different angle. Instead of manually managing category balances, I’m building a goal-oriented system where users define financial objectives and the system calculates the monthly allocations needed to achieve them.

\n

For the controller architecture I designed five main tasks:

\n

Authentication & Ledger Foundation \u2013 Auto-create ledgers with system categories when users sign in the first time. System categories like Income and Safe to Spend get created automatically, so no manual setup required.

\n

Budget Controller \u2013 Returns a single JSON endpoint for now, focused on Safe to Spend calculation and future goal balances. This is what the UI will display prominently, not a list of category balances.

\n

Categories Controller \u2013 Standard CRUD for user-defined categories. Goals are implemented as special categories with allocation rules that determine how they get funded each month.

\n

Monthly Allocations \u2013 This is where goal-driven allocations get applied, but users can override them when needed.

\n

Test Infrastructure \u2013 Rails conventions with fixtures that include the system categories.

\n

I’m sticking with pure Rails MVC patterns, so no service objects, no complex abstractions. Business logic lives in models, controllers stay thin, everything renders JSON for now since we don’t have a Turbo-based UI yet.

\n

This foundation should make the goal system feel automatic rather than manual.

\n
", "content_text": "Spent today designing the Rails controller layer for Pezeta.\nI analyzed Capito, an envelope budgeting prototype I built seven years ago. Standard approach \u2013 categories as envelopes, track balances, show what’s left to spend, like YNAB. But Pezeta takes a different angle. Instead of manually managing category balances, I’m building a goal-oriented system where users define financial objectives and the system calculates the monthly allocations needed to achieve them.\nFor the controller architecture I designed five main tasks:\nAuthentication & Ledger Foundation \u2013 Auto-create ledgers with system categories when users sign in the first time. System categories like Income and Safe to Spend get created automatically, so no manual setup required.\nBudget Controller \u2013 Returns a single JSON endpoint for now, focused on Safe to Spend calculation and future goal balances. This is what the UI will display prominently, not a list of category balances.\nCategories Controller \u2013 Standard CRUD for user-defined categories. Goals are implemented as special categories with allocation rules that determine how they get funded each month.\nMonthly Allocations \u2013 This is where goal-driven allocations get applied, but users can override them when needed.\nTest Infrastructure \u2013 Rails conventions with fixtures that include the system categories.\nI’m sticking with pure Rails MVC patterns, so no service objects, no complex abstractions. Business logic lives in models, controllers stay thin, everything renders JSON for now since we don’t have a Turbo-based UI yet.\nThis foundation should make the goal system feel automatic rather than manual.", "date_published": "2025-07-17T01:15:16+02:00", "date_modified": "2025-07-17T01:15:16+02:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Pezeta", "Posts" ] }, { "id": "https://decoding.io/?p=3460", "url": "https://decoding.io/2025/07/pezeta-progress-log-day-9/", "title": "Pezeta Progress Log: Day 9", "content_html": "

I built the model layer for goal-oriented budgeting in Pezeta today. This is the implementation of the goal system I’ve been designing over the past week.

\n

I’ve laid the foundation for four distinct goal types:

\n\n

I still need to test all of this thoroughly, but the models are in place and the calculations are working. What I like about this approach is how it will turn vague financial intentions into concrete monthly actions. Want to save $5,000 for a vacation by next December? The system can calculate exactly how much to set aside each month. Need three months of expenses in your emergency fund? It’ll figure out what that means based on your actual spending patterns. The system tracks progress over time, adjusts recommendations based on current balances, and integrates smoothly with the existing budget structure.

\n

Next up is building the UI layer. The foundation is solid, but there’s still work to do before I can actually use these goal features in my own budgeting workflow.

\n
", "content_text": "I built the model layer for goal-oriented budgeting in Pezeta today. This is the implementation of the goal system I’ve been designing over the past week.\nI’ve laid the foundation for four distinct goal types:\n\nSomeday Goals \u2013 For big purchases. Save until you hit your target amount, then stop allocating.\nMonthly Goals \u2013 For recurring commitments. Allocate a fixed amount every month, like subscriptions or regular savings habits.\nDeadline Goals \u2013 For time-bound expenses. Spread the target amount evenly across the remaining months until your due date.\nReserve Goals \u2013 For emergency funds. Maintain a buffer of N months of average expenses based on your actual spending patterns.\n\nI still need to test all of this thoroughly, but the models are in place and the calculations are working. What I like about this approach is how it will turn vague financial intentions into concrete monthly actions. Want to save $5,000 for a vacation by next December? The system can calculate exactly how much to set aside each month. Need three months of expenses in your emergency fund? It’ll figure out what that means based on your actual spending patterns. The system tracks progress over time, adjusts recommendations based on current balances, and integrates smoothly with the existing budget structure.\nNext up is building the UI layer. The foundation is solid, but there’s still work to do before I can actually use these goal features in my own budgeting workflow.", "date_published": "2025-07-15T11:13:00+02:00", "date_modified": "2025-07-15T11:13:00+02:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Pezeta", "Posts" ] }, { "id": "https://decoding.io/?p=3457", "url": "https://decoding.io/2025/07/on-deleting-second-brains/", "title": "On Deleting Second Brains", "content_html": "

Joan Westenberg:

\n

Two nights ago, I deleted everything.

\n

Every note in Obsidian. Every half-baked atomic thought, every\nZettelkasten slip, every carefully linked concept map. I deleted every Apple\nNote I\u2019d synced since 2015. Every quote I\u2019d ever highlighted. Every to-do\nlist from every productivity system I\u2019d ever borrowed, broken, or\nbastardized. Gone. Erased in seconds.

\n

What followed: Relief.

\n
\n

Sometimes it\u2019s good to delete things, but a second brain isn\u2019t an end goal. The sole purpose of a second brain is to help achieve some form of output. It serves as a tool to organize thinking for the future.

\n

The problem with output is that we often don\u2019t know what it will look like when we start. What a Zettelkasten (and GTD too) acknowledges is that you\u2019ll have an outcome of some kind and you need a framework to manage it. That\u2019s all.

\n

People who capture their ideas then leave them there are still doing the same thing, but can probably think through their output in their head. I do that sometimes too, and it\u2019s fast.

\n

But as soon as I\u2019m working on anything that requires more thinking capacity than I currently have, I reach for PKMs and task managers to handle it.

\n

I usually split my long-term project-specific Zettelkastens off from my main one, though.

\n

Previously:

\n\n
", "content_text": "Joan Westenberg:\nTwo nights ago, I deleted everything.\nEvery note in Obsidian. Every half-baked atomic thought, every\nZettelkasten slip, every carefully linked concept map. I deleted every Apple\nNote I\u2019d synced since 2015. Every quote I\u2019d ever highlighted. Every to-do\nlist from every productivity system I\u2019d ever borrowed, broken, or\nbastardized. Gone. Erased in seconds.\nWhat followed: Relief.\n\nSometimes it\u2019s good to delete things, but a second brain isn\u2019t an end goal. The sole purpose of a second brain is to help achieve some form of output. It serves as a tool to organize thinking for the future.\nThe problem with output is that we often don\u2019t know what it will look like when we start. What a Zettelkasten (and GTD too) acknowledges is that you\u2019ll have an outcome of some kind and you need a framework to manage it. That\u2019s all.\nPeople who capture their ideas then leave them there are still doing the same thing, but can probably think through their output in their head. I do that sometimes too, and it\u2019s fast.\nBut as soon as I\u2019m working on anything that requires more thinking capacity than I currently have, I reach for PKMs and task managers to handle it.\nI usually split my long-term project-specific Zettelkastens off from my main one, though.\nPreviously:\n\nEvery idea we execute should have some form of artifact at the end: a blog post, a Zettelkasten note, a presentation, an email, etc.\nUsing Mastodon\u2019s threads for thinking out loud\nUsing iA Writer as an end-to-end writing system\nReviewing append-only workflows\nAppend-only storage and developing ideas", "date_published": "2025-07-13T09:36:47+02:00", "date_modified": "2025-07-13T09:36:47+02:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "GTD", "Project-based Zettelkasten", "Zettelkasten", "Comments", "Posts" ] }, { "id": "https://decoding.io/?p=3454", "url": "https://decoding.io/2025/07/bookmarked-lisagui/", "title": "Bookmarked \u201cLisaGUI\u201d", "content_html": "
\n

LisaGUI is a web OS inspired by the Lisa Office System, Apple\u2019s first graphical user interface (GUI). It aims to perfectly recreate the Lisa\u2019s iconic 1-bit UI directly in your browser.

\n
\n

Lisa had so many great UI ideas. We still have the concept of stationary pads on macOS today.

\n
", "content_text": "LisaGUI is a web OS inspired by the Lisa Office System, Apple\u2019s first graphical user interface (GUI). It aims to perfectly recreate the Lisa\u2019s iconic 1-bit UI directly in your browser.\n\nLisa had so many great UI ideas. We still have the concept of stationary pads on macOS today.", "date_published": "2025-07-12T07:03:25+02:00", "date_modified": "2025-07-12T07:03:25+02:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Apple", "History", "Bookmarks" ] }, { "id": "https://decoding.io/?p=3452", "url": "https://decoding.io/2025/07/pezeta-progress-log-day-5/", "title": "Pezeta Progress Log: Day 5", "content_html": "

Today I worked on planning Pezeta’s goal system. I experimented with using two AI agents to collaborate on breaking down the work: Claude Opus 4 as the coordinating agent with read/write access, and ChatGPT o3 through Repo Prompt for implementation planning.

\n

The idea was to leverage each model’s strengths. Claude handles the file operations and manages the task structure, while ChatGPT analyzes the codebase and suggests implementation approaches. They literally chat with each other using the Repo Prompt MCP tool, with Claude asking questions and ChatGPT providing analysis. Sometimes I had to intervene to guide them back on track or stop them to wait for my approval on design decisions. It’s like having two developers pair programming, each bringing their own expertise to the planning session.

\n

The approach surfaced some important design decisions. Instead of service objects, we’re going with Rails-idiomatic patterns: model methods, class methods on MonthlyAllocation, and callbacks for snapshots. Everything through ActiveRecord.

\n

Planning Through Test Cases

\n

The bulk of the work went into defining test specifications:

\n\n

Each test case addresses specific edge cases. What happens when a monthly goal already has surplus funds? How does a deadline goal behave when it’s past due? Getting these details right upfront matters.

\n

All calculations will use “opening balance,” the balance at the start of the month, not the current balance. This prevents allocation amounts from changing as transactions flow through during the month, which matches how people think about budgets.

\n

The session produced seven detailed task files ready for implementation. Each includes exact specifications, test cases, and implementation notes. The tasks cover Single Table Inheritance strategy, historical snapshots through callbacks, and model-driven allocation suggestions.

\n

Tomorrow I’m letting Claude Code implement these tasks.

\n
", "content_text": "Today I worked on planning Pezeta’s goal system. I experimented with using two AI agents to collaborate on breaking down the work: Claude Opus 4 as the coordinating agent with read/write access, and ChatGPT o3 through Repo Prompt for implementation planning.\nThe idea was to leverage each model’s strengths. Claude handles the file operations and manages the task structure, while ChatGPT analyzes the codebase and suggests implementation approaches. They literally chat with each other using the Repo Prompt MCP tool, with Claude asking questions and ChatGPT providing analysis. Sometimes I had to intervene to guide them back on track or stop them to wait for my approval on design decisions. It’s like having two developers pair programming, each bringing their own expertise to the planning session.\nThe approach surfaced some important design decisions. Instead of service objects, we’re going with Rails-idiomatic patterns: model methods, class methods on MonthlyAllocation, and callbacks for snapshots. Everything through ActiveRecord.\nPlanning Through Test Cases\nThe bulk of the work went into defining test specifications:\n\n7 test cases for SomedayGoal\n15 for MonthlyGoal (including top-up logic)\n17 for DeadlineGoal (with auto-advance scenarios)\n17 for ReserveGoal\n\nEach test case addresses specific edge cases. What happens when a monthly goal already has surplus funds? How does a deadline goal behave when it’s past due? Getting these details right upfront matters.\nAll calculations will use “opening balance,” the balance at the start of the month, not the current balance. This prevents allocation amounts from changing as transactions flow through during the month, which matches how people think about budgets.\nThe session produced seven detailed task files ready for implementation. Each includes exact specifications, test cases, and implementation notes. The tasks cover Single Table Inheritance strategy, historical snapshots through callbacks, and model-driven allocation suggestions.\nTomorrow I’m letting Claude Code implement these tasks.", "date_published": "2025-07-11T00:45:47+02:00", "date_modified": "2025-07-11T00:45:47+02:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Pezeta", "Posts" ] }, { "id": "https://decoding.io/?p=3450", "url": "https://decoding.io/2025/07/pezeta-progress-log-day-4/", "title": "Pezeta Progress Log: Day 4", "content_html": "

Had a focused session today expanding the goal system design for Pezeta. Yesterday I started with the basic concept, today I dove deeper into the details.

\n

I expanded all four goal types with detailed logic and edge cases:

\n\n

So this session was used to think about these and take a deep dive in the goal rule engine inner workings. I still have questions but it will be iterated when I start using the MVP. I have goal examples in my current budget for all of these.

\n

The technical challenge was handling goal changes over time. What happens if you change your vacation target from $2,000 to $3,000 in March? Should January’s allocation be recalculated as if you always wanted $3,000?

\n

I went with a snapshot approach. Each month gets its own snapshot of goal parameters. Past months never change retroactively. January’s allocation was based on January’s goal settings, period. This preserves the audit trail of what you were thinking at the time.

\n
", "content_text": "Had a focused session today expanding the goal system design for Pezeta. Yesterday I started with the basic concept, today I dove deeper into the details.\nI expanded all four goal types with detailed logic and edge cases:\n\nSomeday goals are your classic piggy bank. You want $3,000 for a new laptop someday. The system suggests funding it until you hit that target, then stops.\n\nEdge case: what happens if you change the target from $3,000 to $4,000? Only future months use the new target.\n\n\nMonthly goals keep a set amount available each month. You want $200 available for groceries each month. If you spend $150, you need $50 to top back up. If you somehow end up with $300, that’s fine – surplus is allowed.\n\nEdge case: what happens if you never spend anything? The surplus just sits there – no more funding needed.\n\n\nDeadline goals add time pressure. $2,000 for a vacation by next summer. The system calculates: you need $200 per month to hit that target.\n\nEdge case: what happens if you miss a month? The next month’s allocation jumps to catch up.\n\n\nReserve goals are your safety nets. Keep at least $2,000 in emergency savings. If it dips to $1,500, fund $500 immediately.\n\nEdge case: what happens if you never touch it? No allocation needed – it’s already above the reserve.\n\n\n\nSo this session was used to think about these and take a deep dive in the goal rule engine inner workings. I still have questions but it will be iterated when I start using the MVP. I have goal examples in my current budget for all of these.\nThe technical challenge was handling goal changes over time. What happens if you change your vacation target from $2,000 to $3,000 in March? Should January’s allocation be recalculated as if you always wanted $3,000?\nI went with a snapshot approach. Each month gets its own snapshot of goal parameters. Past months never change retroactively. January’s allocation was based on January’s goal settings, period. This preserves the audit trail of what you were thinking at the time.", "date_published": "2025-07-10T00:44:08+02:00", "date_modified": "2025-07-10T00:44:08+02:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Pezeta", "Posts" ] }, { "id": "https://decoding.io/?p=3447", "url": "https://decoding.io/2025/07/pezeta-progress-log-day-3/", "title": "Pezeta Progress Log: Day 3", "content_html": "

Today wrapped up the core data foundation with the Budget view model and spent time planning the goal allocation rules that’ll make this budgeting app different.

\n

The aggregation layer

\n

The Budget model pulls everything together. Give it a ledger and a month, and it calculates the current state of all categories, their allocated amounts, actual spending, and remaining balances.

\n

This is just pure Ruby class that takes the foundational models and presents them in a way that makes sense to users.

\n

Goal allocation rules

\n

The bigger breakthrough today was finalizing the goal allocation rules. This is what’ll set Pezeta apart from traditional envelope budgeting.

\n

Instead of managing dozens of budget categories, users define their financial goals\u2014things they actually care about saving for. The app figures out how much to allocate to each goal and shows one simple number: how much is safe to spend on everything else. Goals run in the background while you focus on that single “Safe to Spend” amount.

\n

I want to implement four goal types:

\n\n

Each follows different allocation formulas, but the key insight is the engine just calculates expected allocations\u2014it never moves money automatically. That stays under your control.

\n

The vision coming together

\n

I’ve got a React prototype artifact built with Claude that demonstrates how this will look. We have a simple “Safe to Spend” number on top, goals running quietly in the background. I just created this to validate the UX approach, but it shows the vision clearly.

\n
", "content_text": "Today wrapped up the core data foundation with the Budget view model and spent time planning the goal allocation rules that’ll make this budgeting app different.\nThe aggregation layer\nThe Budget model pulls everything together. Give it a ledger and a month, and it calculates the current state of all categories, their allocated amounts, actual spending, and remaining balances.\nThis is just pure Ruby class that takes the foundational models and presents them in a way that makes sense to users.\nGoal allocation rules\nThe bigger breakthrough today was finalizing the goal allocation rules. This is what’ll set Pezeta apart from traditional envelope budgeting.\nInstead of managing dozens of budget categories, users define their financial goals\u2014things they actually care about saving for. The app figures out how much to allocate to each goal and shows one simple number: how much is safe to spend on everything else. Goals run in the background while you focus on that single “Safe to Spend” amount.\nI want to implement four goal types:\n\nSomeday: Save for something with no deadline\u2014like a new laptop or vacation fund. Allocates the difference between target and current balance until you hit the goal.\nMonthly: Keep a certain amount available each month\u2014like rent or groceries. Tops up to the monthly amount, and any surplus stays there.\nDeadline: Gather a lump sum by a specific date\u2014like saving $3000 for a trip by July. Calculates how much to save each month based on time remaining.\nReserve: Maintain a minimum balance at all times\u2014like an emergency fund. Only allocates money when the balance dips below the reserve amount.\n\nEach follows different allocation formulas, but the key insight is the engine just calculates expected allocations\u2014it never moves money automatically. That stays under your control.\nThe vision coming together\nI’ve got a React prototype artifact built with Claude that demonstrates how this will look. We have a simple “Safe to Spend” number on top, goals running quietly in the background. I just created this to validate the UX approach, but it shows the vision clearly.", "date_published": "2025-07-09T08:23:42+02:00", "date_modified": "2025-07-09T08:23:42+02:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Pezeta", "Posts" ] }, { "id": "https://decoding.io/?p=3443", "url": "https://decoding.io/2025/07/3443/", "title": "Pezeta Progress Log: Day 2", "content_html": "

Day two of building Pezeta. Yesterday was all planning and starting. Today was about getting my hands dirty with actual Rails models.

\n

Completed the three core models today:

\n\n

Not the most exicting part for people to see (and I\u2019m spending about 1\u20132 hours a day to build this), but I want to get the models right, that\u2019s the whole point of why I\u2019m writing the first MVP in Rails, I know Rails the best.

\n

I\u2019m trying to stick to test-driven development. Write the test first, make it pass, move on. Feels slower at first, but every time I change something, I know immediately if I broke anything.

\n

The workflow experiment

\n

Here\u2019s something weird I\u2019m trying: I started a new zettelkasten in Obsidian yesterday to drive this whole project.

\n

The idea: use notes as the driving force to guide Claude Code through writing the actual code. I think in the zettelkasten, then I let AI collect that context and draft the output: code, blog posts, status updates etc. At the end I still manually review and adjust.

\n

I\u2019m using a modified version of Ian Nuttal\u2019s Task Magic system to drive the development. Break big plans into smaller tasks, then automate the output generation. Not just code generation though. Claude Code helps with everything like documentation, tests, even these blog posts, but I\u2019m still reviewing everything.

\n

My theory is that this might be the fastest way to do solo development today. Capitalize on what AI is actually good at – turning clear thinking into working artifacts.

\n

We\u2019ll see if this scales. but for now, it\u2019s working.

\n
", "content_text": "Day two of building Pezeta. Yesterday was all planning and starting. Today was about getting my hands dirty with actual Rails models.\nCompleted the three core models today:\n\nCategory model (with proper enums and validations)\nMonthlyAllocation model (with decimal precision for money)\nTransaction model (income/expense tracking)\n\nNot the most exicting part for people to see (and I\u2019m spending about 1\u20132 hours a day to build this), but I want to get the models right, that\u2019s the whole point of why I\u2019m writing the first MVP in Rails, I know Rails the best.\nI\u2019m trying to stick to test-driven development. Write the test first, make it pass, move on. Feels slower at first, but every time I change something, I know immediately if I broke anything.\nThe workflow experiment\nHere\u2019s something weird I\u2019m trying: I started a new zettelkasten in Obsidian yesterday to drive this whole project.\nThe idea: use notes as the driving force to guide Claude Code through writing the actual code. I think in the zettelkasten, then I let AI collect that context and draft the output: code, blog posts, status updates etc. At the end I still manually review and adjust.\nI\u2019m using a modified version of Ian Nuttal\u2019s Task Magic system to drive the development. Break big plans into smaller tasks, then automate the output generation. Not just code generation though. Claude Code helps with everything like documentation, tests, even these blog posts, but I\u2019m still reviewing everything.\nMy theory is that this might be the fastest way to do solo development today. Capitalize on what AI is actually good at – turning clear thinking into working artifacts.\nWe\u2019ll see if this scales. but for now, it\u2019s working.", "date_published": "2025-07-08T01:35:10+02:00", "date_modified": "2025-07-09T08:23:34+02:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Pezeta", "Posts" ] }, { "id": "https://decoding.io/?p=3439", "url": "https://decoding.io/2025/07/bookmarked-i-shipped-a-macos-app-built-entirely-by-claude-code/", "title": "Bookmarked \u201cI Shipped a macOS App Built Entirely by Claude Code\u201d", "content_html": "
\n
\n

I recently shipped Context, a native macOS app for debugging MCP servers. The goal was to build a useful developer tool that feels at home on the platform, powered by Apple’s SwiftUI framework. I’ve been building software for the Mac since 2008, but this time was different: Context was almost 100% built by Claude Code. There is still skill and iteration involved in helping Claude build software, but of the 20,000 lines of code in this project, I estimate that I wrote less than 1,000 lines by hand.

\n
\n

Indragie shipped a native macOS app with Claude Code writing 95% of the code. Haven’t dug into the full post yet, but Simon Willison pulled out the key bits \u2013 Claude nails SwiftUI but gets tripped up by Swift’s newer concurrency stuff.

\n
\n", "content_text": "I recently shipped Context, a native macOS app for debugging MCP servers. The goal was to build a useful developer tool that feels at home on the platform, powered by Apple’s SwiftUI framework. I’ve been building software for the Mac since 2008, but this time was different: Context was almost 100% built by Claude Code. There is still skill and iteration involved in helping Claude build software, but of the 20,000 lines of code in this project, I estimate that I wrote less than 1,000 lines by hand.\n\nIndragie shipped a native macOS app with Claude Code writing 95% of the code. Haven’t dug into the full post yet, but Simon Willison pulled out the key bits \u2013 Claude nails SwiftUI but gets tripped up by Swift’s newer concurrency stuff.", "date_published": "2025-07-07T08:47:31+02:00", "date_modified": "2025-07-07T08:47:31+02:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "AI", "Application", "Development", "macOS", "Bookmarks" ] }, { "id": "https://decoding.io/?p=3437", "url": "https://decoding.io/2025/07/starting-pezeta/", "title": "Starting Pezeta", "content_html": "

Finally decided to start building Pezeta today. It’s been in my mind for years – since we started Agyvihar, our Hungarian podcast about personal finance and productivity.

\n

What’s Pezeta?

\n

Simple: a budgeting app that tells you one number – how much you can spend right now.

\n

That’s it.

\n

No charts. No categories. No endless reports. Just open the app and see: $47. Or $134. Or whatever you can actually spend without screwing up your budget.

\n

The features (keeping it minimal)

\n

The One Number – Your daily spending limit. Updated in real-time. Factors in your bills, savings, everything.

\n

Goals – Want to save $2000 by December? Cool. The app adjusts your daily number automatically. No spreadsheets required.

\n

That’s basically it. If budgeting were simpler, maybe more people would actually do it.

\n

Starting with Rails

\n

I’m not jumping straight into building native apps. Starting with a Rails MVP instead.

\n

Few reasons:

\n\n

This Rails version won’t go public. It’s just for me to validate the idea and work out the kinks.

\n

Building in public (might regret this)

\n

I’m putting it all out there because watching someone figure things out might be more useful than another perfect tutorial.

\n

Partly for feedback – maybe someone will tell me this is a terrible idea before I waste six months on it.

\n

Partly for accountability – harder to quit when people are watching.

\n

Partly because I’m curious what happens when you share the messy process instead of just the polished result.

\n

The plan

\n

Starting with Rails 8 setup, basic models, authentication. The boring foundation stuff that nobody talks about but takes forever.

\n

After that, we’ll see. Building software is weird.

\n
", "content_text": "Finally decided to start building Pezeta today. It’s been in my mind for years – since we started Agyvihar, our Hungarian podcast about personal finance and productivity.\nWhat’s Pezeta?\nSimple: a budgeting app that tells you one number – how much you can spend right now.\nThat’s it.\nNo charts. No categories. No endless reports. Just open the app and see: $47. Or $134. Or whatever you can actually spend without screwing up your budget.\nThe features (keeping it minimal)\nThe One Number – Your daily spending limit. Updated in real-time. Factors in your bills, savings, everything.\nGoals – Want to save $2000 by December? Cool. The app adjusts your daily number automatically. No spreadsheets required.\nThat’s basically it. If budgeting were simpler, maybe more people would actually do it.\nStarting with Rails\nI’m not jumping straight into building native apps. Starting with a Rails MVP instead.\nFew reasons:\n\nRails 8 has some new stuff I want to try\nNeed a reference implementation anyway for the iOS/macOS versions\nI can actually use it myself while building\n\nThis Rails version won’t go public. It’s just for me to validate the idea and work out the kinks.\nBuilding in public (might regret this)\nI’m putting it all out there because watching someone figure things out might be more useful than another perfect tutorial.\nPartly for feedback – maybe someone will tell me this is a terrible idea before I waste six months on it.\nPartly for accountability – harder to quit when people are watching.\nPartly because I’m curious what happens when you share the messy process instead of just the polished result.\nThe plan\nStarting with Rails 8 setup, basic models, authentication. The boring foundation stuff that nobody talks about but takes forever.\nAfter that, we’ll see. Building software is weird.", "date_published": "2025-07-07T01:26:33+02:00", "date_modified": "2025-07-07T01:26:33+02:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Application", "Budget", "Development", "Pezeta", "Posts" ] }, { "id": "https://decoding.io/?p=3422", "url": "https://decoding.io/2025/03/bookmarked-macos-tips-tricks-saurabhs-org/", "title": "Bookmarked \u201cmacOS Tips & Tricks \u2013 saurabhs.org\u201d", "content_html": "

I actually learned a couple of new things about TextEdit and Terminal.

\n
", "content_text": "I actually learned a couple of new things about TextEdit and Terminal.", "date_published": "2025-03-09T07:32:04+01:00", "date_modified": "2025-03-09T09:00:25+01:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Application", "macOS", "Productivity", "Bookmarks" ] }, { "id": "https://decoding.io/?p=3416", "url": "https://decoding.io/2025/02/3416/", "content_html": "

Mihai Parparita is asking on Mastodon:

\n

What are good examples of early Mac OS X software (10.0-10.4 era, pre-Intel switch)?

\n
\n

Then providing the initial list.

\n
\n\n
\n

Good memories, although most if these are still alive and well.

\n
", "content_text": "Mihai Parparita is asking on Mastodon:\nWhat are good examples of early Mac OS X software (10.0-10.4 era, pre-Intel switch)?\n\nThen providing the initial list.\n\n\nOmniWeb, OmniGraffle, OmniOutliner and other Omni Group software\nTransmit 2, Unison, Candy Bar, Pixadex, and other Panic software\nAudio Hijack and other Rogue Amoeba software\nNetNewsWire and MarsEdit\nWatson\nAcorn\nTextMate\nQuicksilver\nVoodooPad\nBBEdit\nSubEthaEdit\nGraphicConverter\niCab\nCamino\nFetch\nDefault Folder X\nMenuMeters\nDEVONthink\nCodeWarrior\nResorcerer\nFruitMenu, WindowShadeX and other Unsanity haxies\nLiteSwitch X\nDragThing and PCalc\nTinkerTool\nLaunchBar\nPath Finder\nKonfabulator\n\n\nGood memories, although most if these are still alive and well.", "date_published": "2025-02-26T20:15:44+01:00", "date_modified": "2025-02-26T20:15:45+01:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Application", "macOS", "Comments" ] }, { "id": "https://decoding.io/?p=3413", "url": "https://decoding.io/2025/02/read-its-still-worth-blogging-in-the-age-of-ai/", "title": "Read \u201cIt\u2019s still worth blogging in the age of AI\u201d", "content_html": "

Blogging is essential because it provides knowledge and serves as a valuable reference for us and others.

\n

On the other hand, getting recognized as a blogger these days is rarely going to work. People are increasingly consuming different types of content these days, and this is largely due to the way AI is changing the way we interact with the web.

\n

That said, having a blog for thinking out loud is still the best way to learn and then \u201creport\u201d it, even if we\u2019re the only ones reading it.

\n
", "content_text": "Blogging is essential because it provides knowledge and serves as a valuable reference for us and others.\nOn the other hand, getting recognized as a blogger these days is rarely going to work. People are increasingly consuming different types of content these days, and this is largely due to the way AI is changing the way we interact with the web.\nThat said, having a blog for thinking out loud is still the best way to learn and then \u201creport\u201d it, even if we\u2019re the only ones reading it.", "date_published": "2025-02-26T08:30:54+01:00", "date_modified": "2025-02-26T08:30:55+01:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "AI", "Blogging", "Incremental Reading", "Social Media", "Comments" ] }, { "id": "https://decoding.io/?p=3410", "url": "https://decoding.io/2025/02/read-never-look-at-your-files-again-wikilinks-tags-and-search-in-ia-writer/", "title": "Read \u201cNever Look at Your Files Again: Wikilinks, Tags, and Search in iA Writer\u201d", "content_html": "

Lately, I started to do a bunch of (what I call) Project-based Zettelkasten\"\u2122\", which are just git repositories containing a bunch of Markdown files related to different projects.

\n

This post reminds me that iA Writer can grab all that stuff and make it available in one app.

\n

Previously:

\n\n
", "content_text": "Lately, I started to do a bunch of (what I call) Project-based Zettelkasten, which are just git repositories containing a bunch of Markdown files related to different projects.\nThis post reminds me that iA Writer can grab all that stuff and make it available in one app.\nPreviously:\n\nUsing iA Writer as an end-to-end writing system", "date_published": "2025-02-18T07:34:52+01:00", "date_modified": "2025-02-18T07:34:53+01:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Project-based Zettelkasten", "Comments" ] }, { "id": "https://decoding.io/?p=3407", "url": "https://decoding.io/2025/02/bookmarked-zen-browser/", "title": "Bookmarked \u201cZen Browser\u201d", "content_html": "

I\u2019m not a big fan of Arc (it just overcomplicates the browsing session), but if you want something similar based on Firefox, then the Zen browser could be interesting.

\n
", "content_text": "I\u2019m not a big fan of Arc (it just overcomplicates the browsing session), but if you want something similar based on Firefox, then the Zen browser could be interesting.", "date_published": "2025-02-17T20:50:13+01:00", "date_modified": "2025-02-17T20:50:13+01:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Application", "Open Web", "Bookmarks" ] }, { "id": "https://decoding.io/?p=3405", "url": "https://decoding.io/2025/02/apple-we-just-dont-want-ads/", "title": "Apple: we just don\u2019t want ads", "content_html": "

Steve Jobs said this in 2011:

\n
\n

No ads. We build products that we want for ourselves, too, and we just don’t want ads.

\n
\n

Then, we have a new rumor, that Apple is thinking about showing ads in Maps.

\n

My reaction? No ads. You build products that you and I want for ourselves, too, and we just don’t want ads.

\n
", "content_text": "Steve Jobs said this in 2011:\n\nNo ads. We build products that we want for ourselves, too, and we just don’t want ads.\n\nThen, we have a new rumor, that Apple is thinking about showing ads in Maps.\nMy reaction? No ads. You build products that you and I want for ourselves, too, and we just don’t want ads.", "date_published": "2025-02-17T19:36:20+01:00", "date_modified": "2025-02-17T19:37:37+01:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Apple and Ads", "Comments" ] }, { "id": "https://decoding.io/?p=3399", "url": "https://decoding.io/2025/02/bookmarked-meishi-a-tiny-productivity-system/", "title": "Bookmarked \u201cMeishi: a tiny productivity system\u201d", "content_html": "

This is not more for me, but I love the idea of using the MagSafe Wallet this way.

\n

\n
", "content_text": "This is not more for me, but I love the idea of using the MagSafe Wallet this way.", "date_published": "2025-02-10T23:02:51+01:00", "date_modified": "2025-02-13T18:26:33+01:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Apple", "Field Notes", "iPhone", "Productivity", "Bookmarks" ] }, { "id": "https://decoding.io/?p=3396", "url": "https://decoding.io/2025/02/bookmarked-macostalgia/", "title": "Bookmarked \u201c(mac)OStalgia\u201d", "content_html": "

Mac(os)talgia is exploring my 2020 work-from-home routine with an added touch of nostalgia. How would have the same workflow looked like with the tools of today and the limitations of yesterday.

\n
\n

I would take this Mac OS 9 design of Slack, Zoom, and Figma immediately.

\n
", "content_text": "Mac(os)talgia is exploring my 2020 work-from-home routine with an added touch of nostalgia. How would have the same workflow looked like with the tools of today and the limitations of yesterday.\n\nI would take this Mac OS 9 design of Slack, Zoom, and Figma immediately.", "date_published": "2025-02-10T08:15:49+01:00", "date_modified": "2025-02-10T08:15:50+01:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "macOS", "Throwback", "Bookmarks" ] }, { "id": "https://decoding.io/?p=3392", "url": "https://decoding.io/2025/02/read-can-anyone-stop-president-musk/", "title": "Read \u201cCan anyone stop President Musk?\u201d", "content_html": "

Yet more reading about President Musk (I\u2019m gonna steal this).

\n
", "content_text": "Yet more reading about President Musk (I\u2019m gonna steal this).", "date_published": "2025-02-08T12:58:16+01:00", "date_modified": "2025-02-08T12:58:16+01:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "President Musk", "Space Karen", "Comments" ] }, { "id": "https://decoding.io/?p=3389", "url": "https://decoding.io/2025/02/read-the-governments-computing-experts-say-they-are-terrified/", "title": "Read \u201cThe Government\u2019s Computing Experts Say They Are Terrified\u201d", "content_html": "
\n

Elon Musk\u2019s unceasing attempts to access the data and information systems of the federal government range so widely, and are so unprecedented and unpredictable, that government computing experts believe the effort has spun out of control.

\n
\n

Lately, I feel early Gilead vibes while reading the news.

\n
", "content_text": "Elon Musk\u2019s unceasing attempts to access the data and information systems of the federal government range so widely, and are so unprecedented and unpredictable, that government computing experts believe the effort has spun out of control.\n\nLately, I feel early Gilead vibes while reading the news.", "date_published": "2025-02-08T12:52:36+01:00", "date_modified": "2025-02-08T12:56:58+01:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "President Musk", "Space Karen", "Comments" ] }, { "id": "https://decoding.io/?p=3382", "url": "https://decoding.io/2025/02/using-tags-to-create-threads-in-wordpress/", "title": "Using tags to create threads in WordPress", "content_html": "

Continuing 3380:

\n

Maybe I should use tags as a thread title in a way that group posts together. I\u2019m using pretty general tags currently, which is fine, but a tag page is just another filtered wall of text. This way, each post could be part of an ongoing conversation. Here\u2019s an example page for a thread.

\n

It means that I could have more precise tags which can be displayed in the sidebar, or even better, I can link to a thread which kind of acts like an article on its own. It was just written in a chronological order.

\n

As an icing on the cake, a post could belong to multiple threads.

\n
", "content_text": "Continuing 3380:\nMaybe I should use tags as a thread title in a way that group posts together. I\u2019m using pretty general tags currently, which is fine, but a tag page is just another filtered wall of text. This way, each post could be part of an ongoing conversation. Here\u2019s an example page for a thread.\nIt means that I could have more precise tags which can be displayed in the sidebar, or even better, I can link to a thread which kind of acts like an article on its own. It was just written in a chronological order.\nAs an icing on the cake, a post could belong to multiple threads.", "date_published": "2025-02-08T12:45:11+01:00", "date_modified": "2025-02-08T12:47:04+01:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Threading in WordPress", "Posts" ] }, { "id": "https://decoding.io/?p=3380", "url": "https://decoding.io/2025/02/3380/", "content_html": "

Continuing 3378:

\n

If you visit the front page of my blog, you\u2019ll notice that I organize posts by day, inspired by the daily notes feature from Roam Research.

\n

I typically enjoy this wall of text style more than having separate posts highlighted individually (perhaps that\u2019s why I like threading on Mastodon).

\n

The issue is that WordPress lacks a similar feature, but I would love to have threading on my blog too. My Zettelkasten can stack connected notes, which aligns with this concept.

\n

Maybe I should create something that allows me to link posts together, with backlink support.

\n

Previously:

\n\n
", "content_text": "Continuing 3378:\nIf you visit the front page of my blog, you\u2019ll notice that I organize posts by day, inspired by the daily notes feature from Roam Research.\nI typically enjoy this wall of text style more than having separate posts highlighted individually (perhaps that\u2019s why I like threading on Mastodon).\nThe issue is that WordPress lacks a similar feature, but I would love to have threading on my blog too. My Zettelkasten can stack connected notes, which aligns with this concept.\nMaybe I should create something that allows me to link posts together, with backlink support.\nPreviously:\n\nThreading – Decoding Zettelkasten\nUsing Mastodon\u2019s threads for thinking out loud \u2013 Decoding", "date_published": "2025-02-08T12:34:56+01:00", "date_modified": "2025-02-08T12:45:41+01:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Threading in WordPress", "Posts" ] }, { "id": "https://decoding.io/?p=3378", "url": "https://decoding.io/2025/02/3378/", "content_html": "

I sometimes think we might need different ways to share ideas instead of long articles\u2014it\u2019s important to mention that I’m talking about ideas, not stories.

\n

Looking at how I read, I see that I usually skim content instead of reading it all at once. Then, I go back to the interesting parts later. If you think this is like Incremental reading, then you\u2019re correct.

\n

I\u2019m not sure what might happen if I started using formats closer to the raw idea then heavily edited posts.

\n
", "content_text": "I sometimes think we might need different ways to share ideas instead of long articles\u2014it\u2019s important to mention that I’m talking about ideas, not stories.\nLooking at how I read, I see that I usually skim content instead of reading it all at once. Then, I go back to the interesting parts later. If you think this is like Incremental reading, then you\u2019re correct.\nI\u2019m not sure what might happen if I started using formats closer to the raw idea then heavily edited posts.", "date_published": "2025-02-08T12:24:54+01:00", "date_modified": "2025-02-08T12:46:18+01:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Incremental Reading", "Threading in WordPress", "Posts" ] }, { "id": "https://decoding.io/?p=3374", "url": "https://decoding.io/2025/02/exploring-real-time-voice-to-text-transcription-options/", "title": "Exploring Real-Time Voice-to-Text Transcription Options", "content_html": "

I\u2019ve been thinking about using voice input more in my workflow after watching Chris from DailyTekk talk about quitting typing. He made some interesting points about how speaking (120-150 words per minute) is naturally faster than typing (40-60 words per minute). What was interesting is his observation about typing disrupting the flow with constant self-editing\u2014I\u2019ve definitely experienced this.

\n

So, I\u2019m experimenting with various voice-based input options for my Mac (and possibly iOS/iPadOS as well).

\n

I recently acquired VoicePen as a tool to take voice notes. It\u2019s not a direct dictation app, though. Instead, it works by recording voice in a separate app and then allowing you to copy the cleaned transcription back to your note-taking app. It maintains a history of transformations (such as fixing grammar and cleaning the text) alongside the original transcription. I can revisit and reapply these transformations or copy different versions of the text. It\u2019s a decent tool, but it\u2019s not designed for real-time voice input.

\n

I looked at Inbox AI too, but it\u2019s more of an automation app and I don\u2019t want to invest time learning it right now. I\u2019m sure it can do this.

\n

Bolt.AI offers something different – it has an inline dictation feature. I\u2019m currently trying out its dictation with chat assistants\u2014being able to talk naturally to AIs instead of typing.

\n

I\u2019m also experimenting with macOS\u2019s built-in dictation. It integrates well with text editing and shows what I\u2019m typing in real-time. Sure, it sometimes types the wrong stuff, but these can be fixed quickly with the built-in writing tools.

\n

I\u2019m noticing there\u2019s a difference between thinking out loud and just dictation\u2014I\u2019ll need more time to figure out what works best for each case. For now, I think each input method\u2014typing, voice, even Apple Pencil\u2014probably has its place. I\u2019ll likely end up using a mix of them depending on what I\u2019m trying to do.

\n
", "content_text": "I\u2019ve been thinking about using voice input more in my workflow after watching Chris from DailyTekk talk about quitting typing. He made some interesting points about how speaking (120-150 words per minute) is naturally faster than typing (40-60 words per minute). What was interesting is his observation about typing disrupting the flow with constant self-editing\u2014I\u2019ve definitely experienced this.\nSo, I\u2019m experimenting with various voice-based input options for my Mac (and possibly iOS/iPadOS as well).\nI recently acquired VoicePen as a tool to take voice notes. It\u2019s not a direct dictation app, though. Instead, it works by recording voice in a separate app and then allowing you to copy the cleaned transcription back to your note-taking app. It maintains a history of transformations (such as fixing grammar and cleaning the text) alongside the original transcription. I can revisit and reapply these transformations or copy different versions of the text. It\u2019s a decent tool, but it\u2019s not designed for real-time voice input.\nI looked at Inbox AI too, but it\u2019s more of an automation app and I don\u2019t want to invest time learning it right now. I\u2019m sure it can do this.\nBolt.AI offers something different – it has an inline dictation feature. I\u2019m currently trying out its dictation with chat assistants\u2014being able to talk naturally to AIs instead of typing.\nI\u2019m also experimenting with macOS\u2019s built-in dictation. It integrates well with text editing and shows what I\u2019m typing in real-time. Sure, it sometimes types the wrong stuff, but these can be fixed quickly with the built-in writing tools.\nI\u2019m noticing there\u2019s a difference between thinking out loud and just dictation\u2014I\u2019ll need more time to figure out what works best for each case. For now, I think each input method\u2014typing, voice, even Apple Pencil\u2014probably has its place. I\u2019ll likely end up using a mix of them depending on what I\u2019m trying to do.", "date_published": "2025-02-08T11:39:08+01:00", "date_modified": "2025-02-08T11:40:50+01:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "AI", "ChatGPT", "Productivity", "Posts" ] }, { "id": "https://decoding.io/?p=3370", "url": "https://decoding.io/2025/02/read-the-field-notes-thing/", "title": "Read \u201cThe Field Notes Thing\u201d", "content_html": "

I try to operate on the \u201cNothing Doesn\u2019t Go in Here\u201d principle. Flipping through the notebook that is on my desk right now, I see shopping lists, notes from conference calls, sermon notes, a little chart I made when working on some invoices for Relay, a doodle of the Widgetsmith icon I made for some reason, and a lot more. A receipt for a recent meal with a friend fell out of it onto my lap; I\u2019ll probably tape that into the notebook for safekeeping.

\n
\n

The good thing about Field Notes is that you don’t have to care about it. It doesn’t feel pristine like some other brands. So, I mainly capture similar things, but I group them by date. I have meeting notes, programming session notes, random ideas, outlines, journal entries, etc.

\n

These notebooks are a trail of breadcrumbs dating back almost 15 years. If I flip through an old one, I get a glimpse of what was going on in my life at that time. I can go to the notebook I was using when we launched Relay, or when I quit my job. I like having them on hand; seeing them in my studio each day makes me happy.

\n
\n

I never scanned my old Field Notes but kept them safe in a wooden box. I don’t care if they are destroyed someday since I use my notebooks as a temporary capture tool. If something is interesting, I’ll transfer it to my GTD system or just scan that part of the notebook.

\n

Otherwise, the notebook can be discarded.

\n

Previously:

\n\n
", "content_text": "I try to operate on the \u201cNothing Doesn\u2019t Go in Here\u201d principle. Flipping through the notebook that is on my desk right now, I see shopping lists, notes from conference calls, sermon notes, a little chart I made when working on some invoices for Relay, a doodle of the Widgetsmith icon I made for some reason, and a lot more. A receipt for a recent meal with a friend fell out of it onto my lap; I\u2019ll probably tape that into the notebook for safekeeping.\n\nThe good thing about Field Notes is that you don’t have to care about it. It doesn’t feel pristine like some other brands. So, I mainly capture similar things, but I group them by date. I have meeting notes, programming session notes, random ideas, outlines, journal entries, etc.\nThese notebooks are a trail of breadcrumbs dating back almost 15 years. If I flip through an old one, I get a glimpse of what was going on in my life at that time. I can go to the notebook I was using when we launched Relay, or when I quit my job. I like having them on hand; seeing them in my studio each day makes me happy.\n\nI never scanned my old Field Notes but kept them safe in a wooden box. I don’t care if they are destroyed someday since I use my notebooks as a temporary capture tool. If something is interesting, I’ll transfer it to my GTD system or just scan that part of the notebook.\nOtherwise, the notebook can be discarded.\nPreviously:\n\nMy Notebook System (part 3): Field Notes Pocket Notebook", "date_published": "2025-02-08T08:26:54+01:00", "date_modified": "2025-02-08T08:26:55+01:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Field Notes", "GTD", "Journaling", "OmniFocus", "Productivity", "Workflow", "Writing", "Comments" ] }, { "id": "https://decoding.io/?p=3368", "url": "https://decoding.io/2025/02/read-programmers-are-modern-day-computers/", "title": "Read \u201cProgrammers are modern-day computers\u201d", "content_html": "
\n

Programming as we know it is in a process of dying out.

\n

Most haven’t come to terms with it yet.

\n
\n

I’m just saving this, so I can look back at it in 3 years and see if it’s becoming true or not.

\n
", "content_text": "Programming as we know it is in a process of dying out.\nMost haven’t come to terms with it yet.\n\nI’m just saving this, so I can look back at it in 3 years and see if it’s becoming true or not.", "date_published": "2025-02-05T08:15:06+01:00", "date_modified": "2025-02-05T08:15:06+01:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "AI", "Development", "Comments" ] }, { "id": "https://decoding.io/?p=3366", "url": "https://decoding.io/2025/02/read-google-removes-pledge-to-not-use-ai-for-weapons-from-website-techcrunch/", "title": "Read \u201cGoogle removes pledge to not use AI for weapons from website | TechCrunch\u201d", "content_html": "
\n

Google removed a pledge to not build AI for weapons or surveillance from its website this week. The change was first spotted by Bloomberg. The company appears to have updated its public AI principles page, erasing a section titled \u201capplications we will not pursue,\u201d which was still included as recently as last week.

\n

Asked for comment, the company pointed TechCrunch to a new blog post on \u201cresponsible AI.\u201d It notes, in part, \u201cwe believe that companies, governments, and organizations sharing these values should work together to create AI that protects people, promotes global growth, and supports national security.\u201d

\n
\n

Shit, I just finished watching the Terminator movies yesterday.

\n
", "content_text": "Google removed a pledge to not build AI for weapons or surveillance from its website this week. The change was first spotted by Bloomberg. The company appears to have updated its public AI principles page, erasing a section titled \u201capplications we will not pursue,\u201d which was still included as recently as last week.\nAsked for comment, the company pointed TechCrunch to a new blog post on \u201cresponsible AI.\u201d It notes, in part, \u201cwe believe that companies, governments, and organizations sharing these values should work together to create AI that protects people, promotes global growth, and supports national security.\u201d\n\nShit, I just finished watching the Terminator movies yesterday.", "date_published": "2025-02-05T07:32:12+01:00", "date_modified": "2025-02-05T07:32:12+01:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "AI", "Comments" ] }, { "id": "https://decoding.io/?p=3363", "url": "https://decoding.io/2025/02/read-introducing-apple-invites-a-new-app-that-brings-people-together-apple/", "title": "Read \u201cIntroducing Apple Invites, a new app that brings people together\u201d", "content_html": "

Well, meh\u2026

\n
", "content_text": "Well, meh\u2026", "date_published": "2025-02-04T23:24:11+01:00", "date_modified": "2025-02-04T23:24:24+01:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Application", "iCloud", "iOS", "Comments" ] }, { "id": "https://decoding.io/?p=3361", "url": "https://decoding.io/2025/02/tapestry/", "title": "Tapestry", "content_html": "

I like Tapestry. It\u2019s going to be a great app, and people seem to like it. No Mac app for now though.

\n

I\u2019m just not sure why everyone was complaining about Reeder 5 when it was released doing basically the same thing.

\n
", "content_text": "I like Tapestry. It\u2019s going to be a great app, and people seem to like it. No Mac app for now though.\nI\u2019m just not sure why everyone was complaining about Reeder 5 when it was released doing basically the same thing.", "date_published": "2025-02-04T23:03:16+01:00", "date_modified": "2025-02-04T23:03:16+01:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Application", "Blogging", "iOS", "Open Web", "RSS", "Comments" ] }, { "id": "https://decoding.io/?p=3356", "url": "https://decoding.io/2025/01/how-to-clean-a-macbook-keyboard/", "title": "How to clean a MacBook keyboard", "content_html": "

After today\u2019s post on disabling the wake on lid open, I got a comment from smarthieef on how we can switch off this behavior for the keyboard too, so we can only turn on the MacBook using the Touch ID button, making the keyboard cleaning process way easier.

\n
\n\n
\n

I tested this on a 16-inch M1 MacBook Pro, and it works indeed. It is also a one-time thing, so on the next boot, it resets this behavior to the default one, so we can get the best of both worlds.

\n

Update: I tested this on an M3 MacBook Air too, and it didn\u2019t work.

\n
", "content_text": "After today\u2019s post on disabling the wake on lid open, I got a comment from smarthieef on how we can switch off this behavior for the keyboard too, so we can only turn on the MacBook using the Touch ID button, making the keyboard cleaning process way easier.\n\n\nPress and hold the left Control and Command buttons with right Shift button for a total of 7 seconds.\nWithout releasing them, press the Power button and hold together for an additional 7 seconds until your laptop shuts down. The login screen may flash for a second so don’t prematurely release the keys until the machine is off.\nFor your next startup, your Mac can only be powered on by using the Power button or closing and opening the lid.\n\n\nI tested this on a 16-inch M1 MacBook Pro, and it works indeed. It is also a one-time thing, so on the next boot, it resets this behavior to the default one, so we can get the best of both worlds.\nUpdate: I tested this on an M3 MacBook Air too, and it didn\u2019t work.", "date_published": "2025-01-31T22:31:26+01:00", "date_modified": "2025-01-31T22:35:03+01:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Mac", "macOS", "Posts" ] }, { "id": "https://decoding.io/?p=3351", "url": "https://decoding.io/2025/01/read-why-i-make-minimal-use-of-social-media/", "title": "Read \u201cWhy I Make Minimal Use of Social Media\u201d", "content_html": "

Here are a couple of highlights from Why I Make Minimal Use of Social Media:

\n

I have a relative who loves to post about their perfect, loving family, filling their Facebook feed with happy family photos. But, as you might guess, they conveniently leave out the reality of their many conflicts and challenges. It\u2019s a polished image that doesn\u2019t show the truth.

\n
\n

Nobody\u2019s gonna share their struggles and failures as much as their fun times, so I think this behavior is just for display. Remember that when you see something like this, it’s just a snapshot of their day. Nothing more, nothing less.

\n

There are other ways to keep in touch with family members and friends. Emails and texts can be addressed to a group of contacts or individuals. By not using social media yourself, you can discourage others from using it as their preferred way to \u201ckeep in touch.\u201d

\n
\n

I never emailed any of my friends, but we usually keep in touch via text messages. Texting is like having a peer-to-peer social network.

\n
", "content_text": "Here are a couple of highlights from Why I Make Minimal Use of Social Media:\nI have a relative who loves to post about their perfect, loving family, filling their Facebook feed with happy family photos. But, as you might guess, they conveniently leave out the reality of their many conflicts and challenges. It\u2019s a polished image that doesn\u2019t show the truth.\n\nNobody\u2019s gonna share their struggles and failures as much as their fun times, so I think this behavior is just for display. Remember that when you see something like this, it’s just a snapshot of their day. Nothing more, nothing less.\nThere are other ways to keep in touch with family members and friends. Emails and texts can be addressed to a group of contacts or individuals. By not using social media yourself, you can discourage others from using it as their preferred way to \u201ckeep in touch.\u201d\n\nI never emailed any of my friends, but we usually keep in touch via text messages. Texting is like having a peer-to-peer social network.", "date_published": "2025-01-31T08:45:38+01:00", "date_modified": "2025-01-31T08:45:39+01:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Attention", "Social Media", "Comments" ] }, { "id": "https://decoding.io/2025/01/3346/", "url": "https://decoding.io/2025/01/3346/", "content_html": "

I just realized that the ActivityPub plugin for WordPress does Fediverse replies inline too. Pretty nice!

\n
\"\"
\n
", "content_text": "I just realized that the ActivityPub plugin for WordPress does Fediverse replies inline too. Pretty nice!", "date_published": "2025-01-31T08:00:08+01:00", "date_modified": "2025-01-31T08:00:41+01:00", "authors": [ { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" } ], "author": { "name": "Zsolt Benke", "url": "https://decoding.io/author/zsbenke/", "avatar": "https://secure.gravatar.com/avatar/d2f7385024c21eb525b487cf362987f5?s=512&d=mm&r=g" }, "tags": [ "Fediverse", "Mastodon", "Open Web", "Social Media", "Posts" ] } ] }