{ "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/category/posts/feed/json -- and add it your reader.", "next_url": "https://decoding.io/category/posts/feed/json?paged=2", "home_page_url": "https://decoding.io/category/posts", "feed_url": "https://decoding.io/category/posts/feed/json", "language": "en-US", "title": "Posts – Decoding", "description": "Articles about productivity and technology.", "items": [ { "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=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=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=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=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=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=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=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/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" ] }, { "id": "https://decoding.io/?p=3323", "url": "https://decoding.io/2025/01/3323/", "content_html": "

I\u2019m just playing around with Muse for Mac, and I just found this picture in their macOS version announcement post.

\n

\"Creative

\n

I love this analogy. Every idea we execute should have some form of artifact at the end: a blog post, a Zettelkasten note, a presentation, an email, etc.

\n

I\u2019ll use this distinction between the different apps that I use for idea development.

\n

Previously:

\n\n
", "content_text": "I\u2019m just playing around with Muse for Mac, and I just found this picture in their macOS version announcement post.\n\nI love this analogy. Every idea we execute should have some form of artifact at the end: a blog post, a Zettelkasten note, a presentation, an email, etc.\nI\u2019ll use this distinction between the different apps that I use for idea development.\nPreviously:\n\nNotCon’04 Danny O’Brien Life Hacks – Decoding Zettelkasten\nThe published section for plans is helpful to see the outputs of a project – Decoding Zettelkasten\nIt\u2019s more effective to explain our ideas using external tools – Decoding Zettelkasten\nList of thinking frameworks – Decoding Zettelkasten\nSzaba\u0301lyok a digita\u0301lis ve\u0301gterme\u0301kek elo\u030ba\u0301lli\u0301ta\u0301sa\u0301ra – Decoding Zettelkasten (Hungarian)", "date_published": "2025-01-24T14:04:25+01:00", "date_modified": "2025-01-24T14:12:51+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": [ "NaturalPlanningModel", "Thinking", "Posts" ] }, { "id": "https://decoding.io/?p=3288", "url": "https://decoding.io/2025/01/setting-up-mona-for-private-thinking/", "title": "Setting Up Mona for Private Thinking", "content_html": "

Since I started to thinker with private Mastodon threading, I’ve been experimenting with using Mona as a private note-taking app.

\n

Hiding the Home tab from Mona makes the app feel more private. I only left the following tabs available because I want to optimize it only for my posts.

\n
\"\"
\n

I read other people’s posts in Reeder; I use Mona for threading and journaling about ideas privately (and keeping up with my notifications and mentions).

\n

Another thing I did is to replace the \u2318N keyboard shortcut with a custom Keyboard Maestro macro which creates private posts by default. This way, I can work on my threads in a private manner, but still see my notifications if I post something public.

\n

These changes make Mona a note-taking app with built-in discussion features. I don’t know if we have any other app like this.

\n

This is one of the things I love about the Fediverse. In essence, it is just a public place where we post things, but we can make weird mashups on top of it, like a note-taking app.\"\"

\n
", "content_text": "Since I started to thinker with private Mastodon threading, I’ve been experimenting with using Mona as a private note-taking app.\nHiding the Home tab from Mona makes the app feel more private. I only left the following tabs available because I want to optimize it only for my posts.\n\nI read other people’s posts in Reeder; I use Mona for threading and journaling about ideas privately (and keeping up with my notifications and mentions).\nAnother thing I did is to replace the \u2318N keyboard shortcut with a custom Keyboard Maestro macro which creates private posts by default. This way, I can work on my threads in a private manner, but still see my notifications if I post something public.\nThese changes make Mona a note-taking app with built-in discussion features. I don’t know if we have any other app like this.\nThis is one of the things I love about the Fediverse. In essence, it is just a public place where we post things, but we can make weird mashups on top of it, like a note-taking app.", "date_published": "2025-01-19T09:55:39+01:00", "date_modified": "2025-01-19T09:55: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": [ "Journaling", "Mastodon", "Notes", "Open Web", "Social Media", "Zettelkasten", "Posts" ] }, { "id": "https://decoding.io/?p=3271", "url": "https://decoding.io/2025/01/using-mastodons-threads-for-thinking-out-loud/", "title": "Using Mastodon\u2019s threads for thinking out loud", "content_html": "

A few days ago I wrote about getting back to Mastodon, and it\u2019s becoming an unexpected part of my workflow. While I initially set up my instance just to syndicate my blog posts, I found myself using it in ways I didn\u2019t anticipate.

\n

Remember how I loved Gibberish\u2019s chat-like UI for drafting ideas? Well, Mastodon\u2019s thread format accidentally became my new space for thinking out loud. I create private threads where I can ramble about stuff, just like I used to do in Gibberish, but with some nice advantages:

\n\n

What I find fascinating is how this turned into a lightweight note-taking system. I write posts for myself, bookmark them, and can easily go back to review my thoughts. It\u2019s like a poor man\u2019s Zettelkasten, but the thread format adds this natural, conversational flow to my thinking process.

\n

The best part? Mona\u2019s sliding pane UI feels like it was accidentally designed for this kind of short-form note-taking. The way you can slide between connected thoughts makes it natural to build on ideas. I treat my posts as append-only \u2013 while I could edit them, I choose not to. Instead, I add new posts to clarify or expand on my thoughts. This self-imposed constraint helps in capturing the evolution of ideas.

\n

I\u2019m finding myself using Mastodon more and more for drafting ideas, alongside Gibberish. Not what I expected when I set up my instance, but it\u2019s becoming a nice addition to my workflow.

\n
", "content_text": "A few days ago I wrote about getting back to Mastodon, and it\u2019s becoming an unexpected part of my workflow. While I initially set up my instance just to syndicate my blog posts, I found myself using it in ways I didn\u2019t anticipate.\nRemember how I loved Gibberish\u2019s chat-like UI for drafting ideas? Well, Mastodon\u2019s thread format accidentally became my new space for thinking out loud. I create private threads where I can ramble about stuff, just like I used to do in Gibberish, but with some nice advantages:\n\nMastodon is completely open, so I can:\n\nRun my own instance\nControl my data\nBuild whatever I want on top of it\n\n\nThe clients are surprisingly good\n\nMona\n\nHighly customizable\nThe sliding panes UI reminds me of the old Tweetie for iPad\nPerfect for browsing through connected thoughts\n\n\nIvory\n\nClean, focused interface, but I prefer Mona\u2019s sliding pane UI\n\n\n\n\n\nWhat I find fascinating is how this turned into a lightweight note-taking system. I write posts for myself, bookmark them, and can easily go back to review my thoughts. It\u2019s like a poor man\u2019s Zettelkasten, but the thread format adds this natural, conversational flow to my thinking process.\nThe best part? Mona\u2019s sliding pane UI feels like it was accidentally designed for this kind of short-form note-taking. The way you can slide between connected thoughts makes it natural to build on ideas. I treat my posts as append-only \u2013 while I could edit them, I choose not to. Instead, I add new posts to clarify or expand on my thoughts. This self-imposed constraint helps in capturing the evolution of ideas.\nI\u2019m finding myself using Mastodon more and more for drafting ideas, alongside Gibberish. Not what I expected when I set up my instance, but it\u2019s becoming a nice addition to my workflow.", "date_published": "2025-01-16T11:30:33+01:00", "date_modified": "2025-12-21T11:49: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": [ "Mastodon", "Notes", "Open Web", "Social Media", "Thinking", "Threading", "Zettelkasten", "Posts" ] }, { "id": "https://decoding.io/?p=3256", "url": "https://decoding.io/2025/01/3256/", "content_html": "

CES: We made a tablet that you can fold up like paper.

\n

Me: Ohh cool, when can I buy it?

\n

CES: What do you mean? \"\ud83e\udd28\"

\n
", "content_text": "CES: We made a tablet that you can fold up like paper.\nMe: Ohh cool, when can I buy it?\nCES: What do you mean?", "date_published": "2025-01-14T17:16:14+01:00", "date_modified": "2025-01-14T17:16: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=3245", "url": "https://decoding.io/2025/01/3245/", "content_html": "

Wow, my new “Edit in MarsEdit” button and the corresponding shortcut are such a quality-of-life improvement in my blogging workflow.

\n
\n

\n

\n
", "content_text": "Wow, my new “Edit in MarsEdit” button and the corresponding shortcut are such a quality-of-life improvement in my blogging workflow.", "date_published": "2025-01-13T10:11:34+01:00", "date_modified": "2025-01-13T10:11:34+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 Script", "Application", "Blogging", "Shortcuts", "Workflow", "Posts" ] }, { "id": "https://decoding.io/?p=3239", "url": "https://decoding.io/2025/01/3239/", "content_html": "

I always forgot that I have a global shortcut for microposting using MarsEdit. Although I’m not sure about what defaults it is using for the new post.

\n
", "content_text": "I always forgot that I have a global shortcut for microposting using MarsEdit. Although I’m not sure about what defaults it is using for the new post.", "date_published": "2025-01-13T08:49:57+01:00", "date_modified": "2025-01-13T08:49:57+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=3235", "url": "https://decoding.io/2025/01/3235/", "content_html": "

Looks like 37signals is building a new editor called House (MD). The code is already available in the Writebook project which I haven\u2019t tried yet.

\n

This new editor is based on Markdown, which I like, since their current Trix editor is WYSIWYG, although it works pretty well in my experience.

\n
", "content_text": "Looks like 37signals is building a new editor called House (MD). The code is already available in the Writebook project which I haven\u2019t tried yet.\nThis new editor is based on Markdown, which I like, since their current Trix editor is WYSIWYG, although it works pretty well in my experience.", "date_published": "2025-01-13T00:50:06+01:00", "date_modified": "2025-01-13T10:13:19+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": [ "Development", "Markdown", "Posts" ] }, { "id": "https://decoding.io/?p=3030", "url": "https://decoding.io/2025/01/drafts-alternatives/", "title": "Drafts alternatives", "content_html": "

I still use Drafts and am not planning to switch, but in recent years, I’ve seen a couple of nice quick-capture app alternatives pop up. Since I just stumbled upon\u00a0the new version of Funnel, I thought I would share some quick thought-capture apps.

\n\n
", "content_text": "I still use Drafts and am not planning to switch, but in recent years, I’ve seen a couple of nice quick-capture app alternatives pop up. Since I just stumbled upon\u00a0the new version of Funnel, I thought I would share some quick thought-capture apps.\n\nFunnel\n\nIt captures text, transcribes voice, and even uses Shazam, which is pretty nice. Unfortunately, it is available only on iPhones.\n\nBebop\n\nIt is optimized for text file capturing, but it can be a pretty nice tool if you have a file-based system with The Archive. Again, iPhone only.\n\nCapture\n\nThis seems to be the most interesting alternative to Drafts since it works on most Apple platforms (no Watch, though) and can capture stuff into a timeline-like format.", "date_published": "2025-01-07T09:19:04+01:00", "date_modified": "2025-01-07T09:19:42+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", "Drafts", "GTD", "iOS", "Posts" ] }, { "id": "https://decoding.io/?p=3025", "url": "https://decoding.io/2025/01/retiring-script-debugger/", "title": "Retiring Script Debugger", "content_html": "

I ran into this post the other day about Script Debugger getting retired.

\n

January 2025 marks Script Debugger\u2019s 30th anniversary. It\u2019s been a very long run for a two-person effort. Script Debugger began as a Classic MacOS product, survived Apple\u2019s near-death experience, transitioned to macOS X and migrated across 4 CPU processor types. We are so grateful for the support we\u2019ve received over these years. This support allowed us to keep working on Script Debugger much longer than we ever imagined.

\n
\n

Shane and I are retiring and the effort and costs associated with continuing Script Debugger\u2019s development are too great for us to bear any longer.

\n
\n

I bought this app about 2-3 years ago because I was getting serious about learning AppleScript, and in a short amount of time, it became an important part of my workflow. As I mentioned, I learned AppleScript with the help of Script Debugger\u2019s awesome live inspection feature.

\n

Since then, I have used this app to build many scripts that I use in my everyday workflow.

\n

I don\u2019t know the current state of AppleScript inside Apple, but I know that the difference between Script Debugger and Script Editor is night and day. Script Debugger should be part of the system, which is why I feel sad that another great Mac app, especially one with such a long history, is getting retired.

\n

In June 2025, Script Debugger will no longer be offered for sale and all support and maintenance will cease.

\n
\n

At this time, Script Debugger will become a free download. Links to all versions of Script Debugger back to 5.0 will be posted, along with registration numbers that can be used to activate the software. These free versions of Script Debugger will be provided as-is and without any maintenance or support.

\n
\n

Currently, the developers plan to leave it as is. The problem with this approach is that any future macOS update could break Script Debugger. It\u2019s not like 1Password 7, which, after years, I still keep around because I\u2019m not going to migrate to their stupid Electron app. Script Debugger is a complex beast, so any new Windows Vista-style \u201csecurity\u201d dialog could kill it in an upcoming version. And boy, Apple has been really into \u201cCancel or Allow\u201d lately.

\n

Will Script Debugger become an open-source project? No. Unfortunately, there are portions of the Script Debugger source code we do not have the right to release.

\n
\n

I\u2019m not sure how the app could be saved. I created a topic on MPU to let people know about it. Open-sourcing will not work since there are licensing issues, so the last resort is for someone to buy it. Or maybe some people in the Macscripter.net community could take care of it as Late Night Software \u201ccontractors.\u201d

\n

I don\u2019t know yet, but it\u2019ll be pretty sad the day when Script Debugger stops working.

\n
\n

Just an aside: it makes me wonder why we have Emacs and Vim still around alive and well\u2026

\n
", "content_text": "I ran into this post the other day about Script Debugger getting retired.\nJanuary 2025 marks Script Debugger\u2019s 30th anniversary. It\u2019s been a very long run for a two-person effort. Script Debugger began as a Classic MacOS product, survived Apple\u2019s near-death experience, transitioned to macOS X and migrated across 4 CPU processor types. We are so grateful for the support we\u2019ve received over these years. This support allowed us to keep working on Script Debugger much longer than we ever imagined.\n\nShane and I are retiring and the effort and costs associated with continuing Script Debugger\u2019s development are too great for us to bear any longer.\n\nI bought this app about 2-3 years ago because I was getting serious about learning AppleScript, and in a short amount of time, it became an important part of my workflow. As I mentioned, I learned AppleScript with the help of Script Debugger\u2019s awesome live inspection feature.\nSince then, I have used this app to build many scripts that I use in my everyday workflow.\nI don\u2019t know the current state of AppleScript inside Apple, but I know that the difference between Script Debugger and Script Editor is night and day. Script Debugger should be part of the system, which is why I feel sad that another great Mac app, especially one with such a long history, is getting retired.\nIn June 2025, Script Debugger will no longer be offered for sale and all support and maintenance will cease.\n\nAt this time, Script Debugger will become a free download. Links to all versions of Script Debugger back to 5.0 will be posted, along with registration numbers that can be used to activate the software. These free versions of Script Debugger will be provided as-is and without any maintenance or support.\n\nCurrently, the developers plan to leave it as is. The problem with this approach is that any future macOS update could break Script Debugger. It\u2019s not like 1Password 7, which, after years, I still keep around because I\u2019m not going to migrate to their stupid Electron app. Script Debugger is a complex beast, so any new Windows Vista-style \u201csecurity\u201d dialog could kill it in an upcoming version. And boy, Apple has been really into \u201cCancel or Allow\u201d lately.\nWill Script Debugger become an open-source project? No. Unfortunately, there are portions of the Script Debugger source code we do not have the right to release.\n\nI\u2019m not sure how the app could be saved. I created a topic on MPU to let people know about it. Open-sourcing will not work since there are licensing issues, so the last resort is for someone to buy it. Or maybe some people in the Macscripter.net community could take care of it as Late Night Software \u201ccontractors.\u201d\nI don\u2019t know yet, but it\u2019ll be pretty sad the day when Script Debugger stops working.\n\nJust an aside: it makes me wonder why we have Emacs and Vim still around alive and well\u2026", "date_published": "2025-01-07T07:52:57+01:00", "date_modified": "2025-01-07T07:59: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": [ "Apple", "Apple Script", "Application", "Automation", "electron", "macOS", "Tools", "Workflow", "Posts" ] }, { "id": "https://decoding.io/?p=3011", "url": "https://decoding.io/2025/01/i-just-love-the-gibberish-ui-for-drafting-ideas/", "title": "I just love the Gibberish UI for drafting ideas", "content_html": "

I subscribed to Gibberish again. It’s a pretty simple app with a weird idea: you can write blog posts by typing out your thoughts in a text messaging-style UI. Each message represents a paragraph.

\n

Why that\u2019s great? The messaging UI somehow triggers me to spit ideas into a chat thread, which I can revise later. Well, the \u201crevise later\u201d part is not the strongest suit of Gibberish, but creating the first draft is the best I found for me.

\n

I just love this chat UI for capturing ideas. It\u2019s not coincidental that people text themselves a lot. Also, it just makes sense how the app calls drafts \u201cthoughts\u201d and published stuff \u201cposts.\u201d I love small touches like this.

\n

Though these are not posts, and I\u2019m not writing a blog here, since I have to publish a post to get the \u201cCopy Post Text\u201d menu working, I figured, why the hell not? I\u2019m not going to share the URL of my Gibberish \u201cblog\u201d since it is just a side effect of using the app \u201cwrong,\u201d but because I love this way of drafting things, I\u2019m going to keep it around. I don\u2019t care if people find it.

\n

\n

Since I\u2019m using the app just kinda right (I don\u2019t care about the blogging part), I wish it was just a private thing that syncs over iCloud (or whatever) with better support for exporting my \u201cthoughts\u201d into other apps like Drafts. As mentioned, I only publish my posts there to get the \u201cCopy Text\u201d option working.

\n

So, essentially, I just want an app that I can use to ramble about stuff and then export to revise the content somewhere else. Gibberish would be an awesome app for collecting thoughts without having a blog behind it.

\n
", "content_text": "I subscribed to Gibberish again. It’s a pretty simple app with a weird idea: you can write blog posts by typing out your thoughts in a text messaging-style UI. Each message represents a paragraph.\nWhy that\u2019s great? The messaging UI somehow triggers me to spit ideas into a chat thread, which I can revise later. Well, the \u201crevise later\u201d part is not the strongest suit of Gibberish, but creating the first draft is the best I found for me.\nI just love this chat UI for capturing ideas. It\u2019s not coincidental that people text themselves a lot. Also, it just makes sense how the app calls drafts \u201cthoughts\u201d and published stuff \u201cposts.\u201d I love small touches like this.\nThough these are not posts, and I\u2019m not writing a blog here, since I have to publish a post to get the \u201cCopy Post Text\u201d menu working, I figured, why the hell not? I\u2019m not going to share the URL of my Gibberish \u201cblog\u201d since it is just a side effect of using the app \u201cwrong,\u201d but because I love this way of drafting things, I\u2019m going to keep it around. I don\u2019t care if people find it.\n\nSince I\u2019m using the app just kinda right (I don\u2019t care about the blogging part), I wish it was just a private thing that syncs over iCloud (or whatever) with better support for exporting my \u201cthoughts\u201d into other apps like Drafts. As mentioned, I only publish my posts there to get the \u201cCopy Text\u201d option working.\nSo, essentially, I just want an app that I can use to ramble about stuff and then export to revise the content somewhere else. Gibberish would be an awesome app for collecting thoughts without having a blog behind it.", "date_published": "2025-01-06T00:01:48+01:00", "date_modified": "2025-01-06T00:10:07+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", "Drafts", "iOS", "iPadOS", "macOS", "Open Web", "Thinking", "Tools", "Writing", "Posts" ] }, { "id": "https://decoding.io/?p=3005", "url": "https://decoding.io/2025/01/3005/", "content_html": "

Nice, I can have a custom Bluesky handle using my own domain. Updated the links on my blog to @zsolt.decoding.io.

\n
", "content_text": "Nice, I can have a custom Bluesky handle using my own domain. Updated the links on my blog to @zsolt.decoding.io.", "date_published": "2025-01-05T00:09:51+01:00", "date_modified": "2025-01-05T00:09:51+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=3001", "url": "https://decoding.io/2025/01/im-back-on-mastodon-and-bluesky/", "title": "I\u2019m back on Mastodon and Bluesky", "content_html": "

After years of focusing on my blog and staying off social platforms like Mastodon and Bluesky, I\u2019ve decided to set up profiles there. Why now? Here\u2019s what\u2019s changed.

\n

I\u2019ve mostly set up Mastodon and Bluesky profiles to publish my posts to social media platforms. This could also be a way to have conversations around my content. I might occasionally post short status updates, but the main way I\u2019ll share ideas will continue to be through my blog.

\n

I also want to try out new iOS apps like Ivory, Croissant, and Reeder which are integrating with these services.

\n

If you\u2019d like to follow along, here are my profiles:

\n\n

Feel free to follow me, say hi or share something interesting.

\n

The blog will remain my main hub for new posts, which are also shared to Mastodon and Bluesky via Micro.blog and replies to these posts should appear as comments here on the blog too.

\n
", "content_text": "After years of focusing on my blog and staying off social platforms like Mastodon and Bluesky, I\u2019ve decided to set up profiles there. Why now? Here\u2019s what\u2019s changed.\nI\u2019ve mostly set up Mastodon and Bluesky profiles to publish my posts to social media platforms. This could also be a way to have conversations around my content. I might occasionally post short status updates, but the main way I\u2019ll share ideas will continue to be through my blog.\nI also want to try out new iOS apps like Ivory, Croissant, and Reeder which are integrating with these services.\nIf you\u2019d like to follow along, here are my profiles:\n\nMastodon: @zsolt@mastodon.decoding.io\nBluesky: @zsolt.decoding.io\n\nFeel free to follow me, say hi or share something interesting.\nThe blog will remain my main hub for new posts, which are also shared to Mastodon and Bluesky via Micro.blog and replies to these posts should appear as comments here on the blog too.", "date_published": "2025-01-04T15:15:40+01:00", "date_modified": "2025-01-04T23:57:08+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": [ "Blogging", "Bluesky", "Mastodon", "Social Media", "Posts" ] }, { "id": "https://decoding.io/?p=2996", "url": "https://decoding.io/2025/01/why-do-i-have-so-many-posts-today/", "title": "Why do I have so many posts today?", "content_html": "

Well, I was reading Simon Willison\u2019s post about his blogging process, and I realized that I often write about weird ideas, thoughts, and things I discover online, but I usually keep them in a private journal.

\n

Some of these things are available publicly on my Zettelkasten as notes or annotations, but not here. I think I\u2019m going to change this habit.

\n

While I don\u2019t always have interesting content to blog about, I shouldn\u2019t keep these thoughts to myself either. Most of these ideas are just ramblings, but if you visit any blog or social media platform, you\u2019ll realize that it\u2019s mostly people rambling about random stuff.

\n

On the other hand, you can find interesting sparks for ideas, peculiar thought chains, workflow tips, and bits and pieces that I actually enjoy more than coherent and lengthy blog posts.

\n

So, I\u2019m going to publish more of these fragmented ideas that I\u2019ve kept private until now.

\n
", "content_text": "Well, I was reading Simon Willison\u2019s post about his blogging process, and I realized that I often write about weird ideas, thoughts, and things I discover online, but I usually keep them in a private journal.\nSome of these things are available publicly on my Zettelkasten as notes or annotations, but not here. I think I\u2019m going to change this habit.\nWhile I don\u2019t always have interesting content to blog about, I shouldn\u2019t keep these thoughts to myself either. Most of these ideas are just ramblings, but if you visit any blog or social media platform, you\u2019ll realize that it\u2019s mostly people rambling about random stuff.\nOn the other hand, you can find interesting sparks for ideas, peculiar thought chains, workflow tips, and bits and pieces that I actually enjoy more than coherent and lengthy blog posts.\nSo, I\u2019m going to publish more of these fragmented ideas that I\u2019ve kept private until now.", "date_published": "2025-01-04T10:01:18+01:00", "date_modified": "2025-01-04T10:01: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": [ "Blogging", "Journaling", "Posts" ] }, { "id": "https://decoding.io/?p=2939", "url": "https://decoding.io/2024/09/trying-out-strflow-for-project-related-status-updates/", "title": "Trying out Strflow for project-related status updates", "content_html": "

I used Strflow today with OmniFocus, which is pretty good for an interstitial journal. I can quickly bring it up and leave a status update about projects. It is handy when making a phone call and logging what we discussed.

\n

I made two shortcuts, which work on the selected action\u2019s project:

\n
    \n
  1. Journal About Selected OmniFocus Project: ask for a quick status update, then it automatically tags the note with the project name converted to a hashtag.
  2. \n
  3. Open Selected OmniFocus Project Timeline: opens the timeline based on the project name.
  4. \n
\n

I created a journaling shortcut for OmniFocus a couple of months ago, but it is built on top of DEVONthink. It doesn\u2019t automatically get the project, and storing these entries in DEVONthink will make my status updates get mixed with project-related assets, which I don\u2019t like.

\n

By the way, I can also add pictures to Strflow entries, which is kind of hard to do in DEVONthink.

\n

I used to do interstitial journaling in TaskPaper, and I\u2019m not sure yet if Strflow is better or worse than TaskPaper, but at least it is available on iOS, too.

\n

These days, I\u2019m using TaskPaper for \u201cbrainstorming,\u201d not journaling. TaskPaper is a pretty cool outliner, so I can quickly create session notes related to the selected OmniFocus action. But these are just fleeting notes\u2026 I\u2019m using TaskPaper as a temporary thinking tool.

\n

I can also share Strflow notes with other apps, like Day One, or add them to Drafts, where I can process and export them to other places, transforming Drafts into a tool that migrates text-based information between apps.

\n

Also, I like how the Strflow timeline was made to look like a chat app. In a way, it feels like the old Twitter feed, where we posted random thoughts to get them out of our heads. It is a private version of that.

\n
", "content_text": "I used Strflow today with OmniFocus, which is pretty good for an interstitial journal. I can quickly bring it up and leave a status update about projects. It is handy when making a phone call and logging what we discussed.\nI made two shortcuts, which work on the selected action\u2019s project:\n\nJournal About Selected OmniFocus Project: ask for a quick status update, then it automatically tags the note with the project name converted to a hashtag.\nOpen Selected OmniFocus Project Timeline: opens the timeline based on the project name.\n\nI created a journaling shortcut for OmniFocus a couple of months ago, but it is built on top of DEVONthink. It doesn\u2019t automatically get the project, and storing these entries in DEVONthink will make my status updates get mixed with project-related assets, which I don\u2019t like.\nBy the way, I can also add pictures to Strflow entries, which is kind of hard to do in DEVONthink.\nI used to do interstitial journaling in TaskPaper, and I\u2019m not sure yet if Strflow is better or worse than TaskPaper, but at least it is available on iOS, too.\nThese days, I\u2019m using TaskPaper for \u201cbrainstorming,\u201d not journaling. TaskPaper is a pretty cool outliner, so I can quickly create session notes related to the selected OmniFocus action. But these are just fleeting notes\u2026 I\u2019m using TaskPaper as a temporary thinking tool.\nI can also share Strflow notes with other apps, like Day One, or add them to Drafts, where I can process and export them to other places, transforming Drafts into a tool that migrates text-based information between apps.\nAlso, I like how the Strflow timeline was made to look like a chat app. In a way, it feels like the old Twitter feed, where we posted random thoughts to get them out of our heads. It is a private version of that.", "date_published": "2024-09-03T08:19:24+02:00", "date_modified": "2024-09-03T08:23:07+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", "DEVONthink", "GTD", "Journaling", "macOS", "OmniFocus", "Productivity", "Strflow", "TaskPaper", "Posts" ] }, { "id": "https://decoding.io/?p=2928", "url": "https://decoding.io/2024/09/2928/", "content_html": "

Maybe I should try Setapp. My Hookmark subscription is expiring soon, and it would be cheaper to use Setapp than just trying to subscribe to Hookmark directly.

\n

From a UX point of view, Hookmark has this weird and confusing licensing behavior. I have to pick a specific license file, which I always mix up, and I don’t know… It’s just confusing…

\n

I assume on Setapp, it works as long as I pay for the subscription.

\n

I would also have access to Ulysses, since it is also available on Setapp.

\n

I’m unsure how Setapp works on iOS, though. I should look into that.

\n
", "content_text": "Maybe I should try Setapp. My Hookmark subscription is expiring soon, and it would be cheaper to use Setapp than just trying to subscribe to Hookmark directly.\nFrom a UX point of view, Hookmark has this weird and confusing licensing behavior. I have to pick a specific license file, which I always mix up, and I don’t know… It’s just confusing…\nI assume on Setapp, it works as long as I pay for the subscription.\nI would also have access to Ulysses, since it is also available on Setapp.\nI’m unsure how Setapp works on iOS, though. I should look into that.", "date_published": "2024-09-01T09:19:12+02:00", "date_modified": "2024-09-01T09:19:12+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": [ "Hookmark", "iOS", "macOS", "Subscriptions", "Posts" ] }, { "id": "https://decoding.io/?p=2861", "url": "https://decoding.io/2024/07/david-allens-gtd-system-up-close/", "title": "David Allen\u2019s GTD System Up Close", "content_html": "

A few years ago, I found a hidden video series about how David Allen does GTD. I instantly downloaded it and merged it into one video.

\n

While browsing today on YouTube, I stumbled upon two existing videos from this series that are still available. The rest are removed or marked as private, I don\u2019t know\u2026 Edit: actually I checked the video and these in fact are the same ones. But I wanted to share them because they are pretty interesting.

\n

Luckily, I saved the full video, although I can\u2019t share it here. If you are interested, maybe you can ping me via email. Otherwise, I embedded the two existing videos here as an introduction.

\n

\n

\n
", "content_text": "A few years ago, I found a hidden video series about how David Allen does GTD. I instantly downloaded it and merged it into one video.\nWhile browsing today on YouTube, I stumbled upon two existing videos from this series that are still available. The rest are removed or marked as private, I don\u2019t know\u2026 Edit: actually I checked the video and these in fact are the same ones. But I wanted to share them because they are pretty interesting.\nLuckily, I saved the full video, although I can\u2019t share it here. If you are interested, maybe you can ping me via email. Otherwise, I embedded the two existing videos here as an introduction.", "date_published": "2024-07-03T22:42:58+02:00", "date_modified": "2024-07-04T07:58:51+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", "Workflow", "Posts" ] }, { "id": "https://decoding.io/?p=2820", "url": "https://decoding.io/2024/03/making-my-file-archive-portable-in-a-different-way/", "title": "Making my file archive portable in a different way", "content_html": "

I looked into how Tailscale works behind the scenes, but I’m still not sure I need a 3rd-party tool to create a virtual network for my devices. There are a couple of cool uses of a network like this, like syncing DEVONthink and OmniFocus over WebDAV using my Mac mini. Still, I also have an Apple Watch, which doesn’t seem to work with Tailscale, so I can’t sync OmniFocus with my Mac mini there like I originally planned.

\n

Initially, I was looking for something that could give me access to my Mac mini outside of my network to get to my file archive stored on my external drives connected to my Mac mini. But giving it a second thought, there is a good reason we have the distinction between Cold Storage and Active Storage.

\n

For me, Active Storage is iCloud Drive, which is synced to all my devices. Cold Storage is not something that I should have access to all the time (not to mention ransomware and other dangers). So, from a security point of view, it’s a good thing that I have a local Mac server and a remote Linux server used for different things. Each of them requires a different level of security, and Tailscale merges them all into one network, which I’m not sure I’m comfortable with.

\n

I’m thinking about shelving this whole idea of reaching my Mac mini server outside of my network and making a distinction between private networks and public networks. A public network means it should be available anywhere, but it should be end-to-end encrypted. This is what DEVONthink and OmniFocus do: each uses my WebDAV server running on my public server as a syncing backend, but these apps store data encrypted.

\n

On the other hand, my private network should be guarded, and data stored there should have a good 3–2–1 backup plan instead.

\n

So, instead of using the network as a transport layer to access my file archive, I’m thinking about using an external drive to bring a copy of my archive with me when I’m away.

\n

Related

\n\n
", "content_text": "I looked into how Tailscale works behind the scenes, but I’m still not sure I need a 3rd-party tool to create a virtual network for my devices. There are a couple of cool uses of a network like this, like syncing DEVONthink and OmniFocus over WebDAV using my Mac mini. Still, I also have an Apple Watch, which doesn’t seem to work with Tailscale, so I can’t sync OmniFocus with my Mac mini there like I originally planned.\nInitially, I was looking for something that could give me access to my Mac mini outside of my network to get to my file archive stored on my external drives connected to my Mac mini. But giving it a second thought, there is a good reason we have the distinction between Cold Storage and Active Storage.\nFor me, Active Storage is iCloud Drive, which is synced to all my devices. Cold Storage is not something that I should have access to all the time (not to mention ransomware and other dangers). So, from a security point of view, it’s a good thing that I have a local Mac server and a remote Linux server used for different things. Each of them requires a different level of security, and Tailscale merges them all into one network, which I’m not sure I’m comfortable with.\nI’m thinking about shelving this whole idea of reaching my Mac mini server outside of my network and making a distinction between private networks and public networks. A public network means it should be available anywhere, but it should be end-to-end encrypted. This is what DEVONthink and OmniFocus do: each uses my WebDAV server running on my public server as a syncing backend, but these apps store data encrypted.\nOn the other hand, my private network should be guarded, and data stored there should have a good 3–2–1 backup plan instead.\nSo, instead of using the network as a transport layer to access my file archive, I’m thinking about using an external drive to bring a copy of my archive with me when I’m away.\nRelated\n\nImplementation plan", "date_published": "2024-03-18T08:40:15+01:00", "date_modified": "2024-03-18T12:11:27+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": [ "Backup", "DEVONthink", "File Management", "File System", "Linux", "Local First Software", "Privacy", "Server", "Tools", "Workflow", "Posts" ] }, { "id": "https://decoding.io/?p=2812", "url": "https://decoding.io/2024/03/playing-around-with-tailscale/", "title": "Playing around with Tailscale", "content_html": "

I\u2019m playing around with Tailscale, but I\u2019m not sure about the privacy aspect of being on a VPN all the time. I want to sync DEVONthink and OmniFocus using a WebDAV server on my Mac mini, but running Tailscale 24/7 raises some questions.

\n
    \n
  1. Is it really end-to-end encrypted?
  2. \n
  3. Does all traffic go through the VPN?
  4. \n
  5. What about network issues when using a VPN? I\u2019ve seen some connection drops in the OmniFocus sync logs when I used my Mac mini as a sync server.
  6. \n
\n

I love the idea of having my private network of devices available everywhere. But I don\u2019t trust random companies with my data, so I want to do my research before I start to use Tailscale with all my devices.

\n
", "content_text": "I\u2019m playing around with Tailscale, but I\u2019m not sure about the privacy aspect of being on a VPN all the time. I want to sync DEVONthink and OmniFocus using a WebDAV server on my Mac mini, but running Tailscale 24/7 raises some questions.\n\nIs it really end-to-end encrypted?\nDoes all traffic go through the VPN?\nWhat about network issues when using a VPN? I\u2019ve seen some connection drops in the OmniFocus sync logs when I used my Mac mini as a sync server.\n\nI love the idea of having my private network of devices available everywhere. But I don\u2019t trust random companies with my data, so I want to do my research before I start to use Tailscale with all my devices.", "date_published": "2024-03-17T00:07:56+01:00", "date_modified": "2024-03-17T00:10:29+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", "DEVONthink", "Local First Software", "OmniFocus", "Open Web", "Privacy", "Server", "Workflow", "Posts" ] }, { "id": "https://decoding.io/?p=2807", "url": "https://decoding.io/2024/03/open-sourcing-thinking/", "title": "Open-sourcing thinking", "content_html": "

I write a lot every day, but I don’t publish a lot of it since I have this fear of being judged. But I have a lot of ideas and thoughts that can be boring for some people but maybe interesting for others.

\n

I ramble about tools and workflows in Day One and my Zettelkasten. Those are private posts that are not necessarily useful to anyone, but I want to publish them anyway because I can see a history of my thoughts, which can give someone else an idea.

\n

That’s what #DigitalGarden is about, but it is still different. Sometimes, I want to write a journal entry and be done with it. I don’t need a full-fledged Zettelkasten all the time.

\n

Actually, I’m afraid of publishing these ideas, but as we have had success with open-source software in the last couple of decades, maybe open-source thinking can be a helpful thing to master, too.

\n

What do I mean by that? Blogposts without much crafting and maybe even with a lot of grammar errors, but the idea is that I can write about something, then continue thinking about that idea in a new post, and so on. Maybe I’ll run into a conclusion and come up with something cool or ignore the whole thing at the end, but the critical point here is that I should flex my writing more, and my blog is still the best place for that.

\n

Inspired by More people should write

\n
", "content_text": "I write a lot every day, but I don’t publish a lot of it since I have this fear of being judged. But I have a lot of ideas and thoughts that can be boring for some people but maybe interesting for others.\nI ramble about tools and workflows in Day One and my Zettelkasten. Those are private posts that are not necessarily useful to anyone, but I want to publish them anyway because I can see a history of my thoughts, which can give someone else an idea.\nThat’s what #DigitalGarden is about, but it is still different. Sometimes, I want to write a journal entry and be done with it. I don’t need a full-fledged Zettelkasten all the time.\nActually, I’m afraid of publishing these ideas, but as we have had success with open-source software in the last couple of decades, maybe open-source thinking can be a helpful thing to master, too.\nWhat do I mean by that? Blogposts without much crafting and maybe even with a lot of grammar errors, but the idea is that I can write about something, then continue thinking about that idea in a new post, and so on. Maybe I’ll run into a conclusion and come up with something cool or ignore the whole thing at the end, but the critical point here is that I should flex my writing more, and my blog is still the best place for that.\nInspired by More people should write", "date_published": "2024-03-16T08:38:06+01:00", "date_modified": "2024-03-18T08:49: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": [ "Development", "Thinking", "Zettelkasten", "Posts" ] }, { "id": "https://decoding.io/?p=2795", "url": "https://decoding.io/2024/02/on-apple-pundits-attitude-towards-the-ipad/", "title": "On Apple pundits attitude towards the iPad", "content_html": "
\n\n
\n
", "content_text": "After the latest “iPad can’t do shit” meme popping up in the Apple community, I just unsubscribed from a bunch of Apple pundits.\n\n\nI’m just tired of this negativity towards the iPad from people who sometimes have no idea how the device actually works or what it is capable of.\n\n\nIf you want to get into the arguments, just read posts on Beardy Guy Musings with Denny’s awesome Macalope style reactions.\n\n\n\n\nI’m not saying that having criticism toward a device is wrong. We should criticize something if it has issues.\n\n\nBut because it works differently than the other device, or simply not knowing something then whining about it just for the sake of it is just trolling attitude at this point.\n\n\nAs I said, I’m just ignoring these people at this point.", "date_published": "2024-02-24T21:00:00+01:00", "date_modified": "2024-07-12T21:08: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": [ "Punditing", "Posts" ] }, { "id": "https://decoding.io/?p=2788", "url": "https://decoding.io/2024/02/2788/", "content_html": "

The new version of the ActivityPub WordPress plugin lets me reply to comments coming from Mastodon and federate them back as standard replies. I just wanted to install an instance this morning to have a profile that I can use to reply to incoming comments, but this one is way better.

\n

Again, you can follow me on Mastodon by searching for my profile (zsbenke@decoding.io) from your instance.

\n
", "content_text": "The new version of the ActivityPub WordPress plugin lets me reply to comments coming from Mastodon and federate them back as standard replies. I just wanted to install an instance this morning to have a profile that I can use to reply to incoming comments, but this one is way better.\nAgain, you can follow me on Mastodon by searching for my profile (zsbenke@decoding.io) from your instance.", "date_published": "2024-02-22T09:33:02+01:00", "date_modified": "2024-02-22T09:55:10+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": [ "Blogging", "Mastodon", "Open Web", "Social Media", "Posts" ] }, { "id": "https://decoding.io/?p=2782", "url": "https://decoding.io/2024/02/building-my-own-web/", "title": "Building my own web", "content_html": "

I’m very disappointed after reading comments on this article: How Twitter\u2019s descent into chaos is paving the way for a new web

\n

I don’t want to see this divided mentality (especially politics) under articles that are talking about cool indie projects. The mainstream web has gotten into a state where people just inject politics into everything. If I want to have a place that I like, I have to build my part of the web.

\n

A Zettelkasten and a blog can help with that. I can make my blog cozy, write about what I like, and then browse that from time to time to rediscover things.

\n
", "content_text": "I’m very disappointed after reading comments on this article: How Twitter\u2019s descent into chaos is paving the way for a new web\nI don’t want to see this divided mentality (especially politics) under articles that are talking about cool indie projects. The mainstream web has gotten into a state where people just inject politics into everything. If I want to have a place that I like, I have to build my part of the web.\nA Zettelkasten and a blog can help with that. I can make my blog cozy, write about what I like, and then browse that from time to time to rediscover things.", "date_published": "2024-02-18T10:45:33+01:00", "date_modified": "2024-02-18T10:47:05+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": [ "Blogging", "Open Web", "Posts" ] }, { "id": "https://decoding.io/?p=2772", "url": "https://decoding.io/2024/01/getting-comfortable-with-emacs/", "title": "Getting familiar with Emacs", "content_html": "
\n\n
\n
", "content_text": "I can safely say that Emacs (with Org mode) is my new PKM app. It is really good (and I’m telling you as someone who loves Vim).\n\n\nI started to mess around with Org mode about a week ago.\n\n\nOrg mode is just an awesome way of organizing information and actually do something with it.\n\n\n\n\nI added Hookmark integration for Org mode based on these scripts.\n\n\nVideo \u2192 Using Emacs with Hookmark\n\n\n\n\nI’m still going to use Vim for web development, but Emacs is my thinking space now (my home-grown Roam if you will).\n\n\nOf course I’m using Evil mode in Emacs.\n\n\nI don’t have time to learn a new way of editing text currently.", "date_published": "2024-01-27T14:33:00+01:00", "date_modified": "2024-01-27T14:48:36+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=2764", "url": "https://decoding.io/2024/01/letters-to-myself/", "title": "Letters to Myself", "content_html": "

I\u2019m writing emails to myself. Seems like\nother people do this as well. It is yet another way of journaling, but I email is special since it\u2019s open, and I can never change it again (I mean I can change it, but you get the idea).

\n

I just discovered that both Emacs and Vim nicely wrap text in a message-mode / mail file type. This is cool since properly formatted plain-text emails are a treat these days. On top of messing around with Org Mode, I\u2019m playing around with the idea of using Emacs for sending emails to myself. It has a bunch of macOS services built around creating new messages, so starting one from LaunchBar is easy. Emacs will open a new buffer and I can start writing a plain-text email. Then I can send the message over to Apple Mail with the keyboard shortcut of C-c C-c.

\n

So why do I want to send letters to myself?

\n

Well, it is a way to write about something interesting to me at the moment. Since both Emacs and Vim wrap the line as I write, it is a bit hard to edit these messages afterward, so I\u2019ll think a bit more about how I say things. This is a benefit since it slows me down.

\n

Emailing myself is a way to reflect on things. It is a journal entry basically, and I have Day One for that, but I still like the aspect of sending something somewhere. I have feeling being done with it, so I don\u2019t have to deal with it anymore. I just like getting thoughts and feelings out of my head, and sending it to myself to park it later. If an email is sent, it can\u2019t be changed anymore.

\n

After sending these emails, they reappear in my inbox, where I can just read them again, then move them to a folder called \u201cLetters to Myself\u201d. After a while, I\u2019ll have a bunch of cool letters that my past me sent to the future me.

\n

I should read more about this habit\u2026

\n
", "content_text": "I\u2019m writing emails to myself. Seems like\nother people do this as well. It is yet another way of journaling, but I email is special since it\u2019s open, and I can never change it again (I mean I can change it, but you get the idea).\nI just discovered that both Emacs and Vim nicely wrap text in a message-mode / mail file type. This is cool since properly formatted plain-text emails are a treat these days. On top of messing around with Org Mode, I\u2019m playing around with the idea of using Emacs for sending emails to myself. It has a bunch of macOS services built around creating new messages, so starting one from LaunchBar is easy. Emacs will open a new buffer and I can start writing a plain-text email. Then I can send the message over to Apple Mail with the keyboard shortcut of C-c C-c.\nSo why do I want to send letters to myself?\nWell, it is a way to write about something interesting to me at the moment. Since both Emacs and Vim wrap the line as I write, it is a bit hard to edit these messages afterward, so I\u2019ll think a bit more about how I say things. This is a benefit since it slows me down.\nEmailing myself is a way to reflect on things. It is a journal entry basically, and I have Day One for that, but I still like the aspect of sending something somewhere. I have feeling being done with it, so I don\u2019t have to deal with it anymore. I just like getting thoughts and feelings out of my head, and sending it to myself to park it later. If an email is sent, it can\u2019t be changed anymore.\nAfter sending these emails, they reappear in my inbox, where I can just read them again, then move them to a folder called \u201cLetters to Myself\u201d. After a while, I\u2019ll have a bunch of cool letters that my past me sent to the future me.\nI should read more about this habit\u2026", "date_published": "2024-01-19T23:49:37+01:00", "date_modified": "2024-01-19T23:51: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": [ "Emacs", "Email", "Journaling", "Thinking", "Vim", "Posts" ] }, { "id": "https://decoding.io/?p=2760", "url": "https://decoding.io/2024/01/2760/", "content_html": "

I guess I love them both now.

\n

\"\"

\n
", "content_text": "I guess I love them both now.", "date_published": "2024-01-19T20:55:49+01:00", "date_modified": "2024-01-19T20:55:49+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", "Emacs", "Plain Text", "Vim", "Posts" ] }, { "id": "https://decoding.io/?p=2732", "url": "https://decoding.io/2024/01/texting-yourself-for-capturing-ideas/", "title": "Texting yourself for capturing ideas", "content_html": "
\n\n
\n
", "content_text": "A couple of months ago I started to use Messages for talking to myself.\n\n\nWhy do I want to do that?\n\n\nWhen I want to figure something out, I noticed that the best way to do it is to start writing in freeform text.\n\n\nWriting Is Thinking\n\n\n\n\nIt feels like talking to myself, which helps me to externalize my ideas, and find solutions quickly to problems. It’s like a pre-thinking phase for capturing ideas in a timeline format, then organizing them later in a mindmap or an outline.\n\n\nSlack has a similar idea of why you should start to message yourself. When you open your profile and press the Direct Message button, the following message appears on the top.\n\n\nThis is your space. Draft messages, list your to-dos, or keep links and files handy. You can also talk to yourself here, but please bear in mind you\u2019ll have to supply both sides of the conversation.\n\n\n\n\nOthers also wrote about this idea in more detail. It is the modern version of emailing ourselves.\n\n\nI text myself all day every day \u2014\u00a0and you should, too – The Verge\n\n\n\n\nMessages is actually a pretty cool candidate for this workflow. It is available on all my devices, I can pin messages for reviewing them later, and it is still the best way to share information between my devices when AirDrop and Handoff farts themselves.\n\n\n\n\nHow to set it up?\n\n\nTexting with ourselves in Messages is a bit weird since every message will be sent back in the same thread duplicating everything. We can avoid that by registering a new iCloud account and sending messages to there.\n\n\nI have a sparse iCloud sandbox account which I use for testing. I logged in from my old MacBook Air, then I started to write thoughts for myself over iMessage.\n\n\nWe have to log into a separate iCloud account at least once, otherwise, Messages won’t pick up the account as a proper recipient.\n\n\n\n\n\n\nThis is yet another version of the capture step in GTD\n\n\nThis idea was cool, but for me it quickly fell apart. People get the idea of writing stuff down, but they forget that it needs to be processed later.\n\n\nWhen I had to pull out data from Messages, it was hard to mark my processed position in the timeline.\n\n\nI started to use a marker message by typing 5 equal signs which is similar to how I mark my processed position in my notebook using a double line.\n\n\nThis is a very important note about something.\n\n\n====== \u2190 This is my “processed” bookmark. Anything above this line is processed and I don’t need to see it again.\n\n\nMy Notebook System (part 3): Field Notes Pocket Notebook \u2013 Decoding\n\n\n\n\nWhen I process, I usually reference information between apps, which means that I like to link to the source or at least copy the text out into a place that I can link to.\n\n\nThere is a hidden URL scheme in Messages, but it is really hard to link to messages.\n\n\nsms://open?message-guid=UUID\n\n\nIf there is a data detector visible in your message (like the text of “tomorrow 9:00am”), Messages will underline it, and you can create a new event or a reminder by clicking on it. Creating a new reminder will also add the link to the message which you can copy.\n\n\n\n\n\n\nGetting links or text out of Messages is actually bit convoluted.\n\n\n\n\nStrflow, an actual app made for texting yourself\n\n\nI just found a unique new app today called Strflow, which mixes note-taking with a messaging interface. It works exactly like I wanted to use Messages.\n\n\nWhy it is better than Messages?\n\n\nThere is a “Copy Note Link” command for every note.\n\n\nNotes can be edited after they are created.\n\n\nThere is a minimal Markdown-like syntax available, which lets me have the right amount of formatting for quick notes like these.\n\n\n\n\nI love unique apps like this one \u2013 that’s one the reasons I love the Mac, since you can always find interesting tools like this \u2013 although it still has some missing pieces.\n\n\niOS version (the developer mentioned that he’s working on it).\n\n\nSpotlight integration: it just feels right to index and search snippets of information in Spotlight.\n\n\nBetter export: we get a JSON file on export, but since the app uses Markdown for formatting, why not export proper Markdown notes?\n\n\nIt would be even better if I could define a date range for exporting, so processing information can be done outside of Strflow.\n\n\n\n\nAlthough there are unique links for each note, getting them is a bit hard. I have to \u2303Click and choose the “Copy Link to Note” command from the context menu which is not available in the app’s menubar.\n\n\nstrflow://show-note?id=UUID\n\n\n\n\nSelecting notes can be done using the trackpad, but having keyboard shortcuts for navigating up and down would be useful to select one or multiple notes.\n\n\nRelated to the previous issue, I could use UI scripting and Hookmark to get the currently selected notes’ URL.\n\n\n\n\n\n\n\n\nSo what am I using Strflow for?\n\n\nAs I mentioned, I mostly use this app for talking with myself to figure out something by writing.\n\n\nI started the draft of this post there.\n\n\nI saved couple of links which I want to revisit later.\n\n\nIt is like a private version of Mastodon.\n\n\n\n\nIt is going to be another inbox/journal/status update tool next to my interstitial journal in TaskPaper.\n\n\nTaskPaper as an interstitial journal", "date_published": "2024-01-05T21:42:00+01:00", "date_modified": "2024-01-27T14:48:38+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", "Field Notes", "GTD", "macOS", "Workflow", "Posts" ] } ] }