<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: lukas kunhardt</title>
    <description>The latest articles on DEV Community by lukas kunhardt (@lukaskunhardt).</description>
    <link>https://dev.to/lukaskunhardt</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3987402%2Feba5ab8f-db02-4228-a99b-c8900f3fd173.png</url>
      <title>DEV Community: lukas kunhardt</title>
      <link>https://dev.to/lukaskunhardt</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lukaskunhardt"/>
    <language>en</language>
    <item>
      <title>How to avoid locking yourself into one AI provider</title>
      <dc:creator>lukas kunhardt</dc:creator>
      <pubDate>Tue, 16 Jun 2026 12:39:00 +0000</pubDate>
      <link>https://dev.to/lukaskunhardt/how-to-avoid-locking-yourself-into-one-ai-provider-2j4d</link>
      <guid>https://dev.to/lukaskunhardt/how-to-avoid-locking-yourself-into-one-ai-provider-2j4d</guid>
      <description>&lt;p&gt;Most model providers give you two ways to work: a “chat” and a “code” environment. Most people just use chat, but for anything you’ll come back to later the code environment is actually the better choice, because it allows you to work in your own file system.&lt;/p&gt;

&lt;p&gt;The name “code” is a bit misleading, because the difference isn’t about doing more or less programming (I use it for many tasks that have nothing to do with coding), but about where your work ends up.&lt;/p&gt;

&lt;p&gt;In chat, everything you produce lives in the chat history on the provider’s server. All the input (files you drag in) and outputs (files the model creates for you) and the whole conversation in between is accessible to you only through the chat interface.&lt;/p&gt;

&lt;p&gt;With a coding agent you point it at a folder on your own machine, and all the inputs and outputs are just files sitting on your disk.&lt;/p&gt;

&lt;p&gt;This matters when you want to switch providers. If they raise their prices, or another model gets better, or &lt;a href="https://www.anthropic.com/news/fable-mythos-access" rel="noopener noreferrer"&gt;their best model is no longer accessible outside of the US&lt;/a&gt;, you’ll likely want to move. If all your work lives inside one provider’s chat interface that’s difficult to do.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2304ueo4rt10b8ot02in.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2304ueo4rt10b8ot02in.webp" alt="US Government suspends anthropics fable model" width="800" height="229"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So the thing you want is to keep the model separate from your files. The model is just a processor you’re renting, the files are the part you actually care about, so it makes sense to store them somewhere that doesn’t depend on which model you happen to be using this month.&lt;/p&gt;

&lt;p&gt;There’s a great essay called “&lt;a href="https://stephango.com/file-over-app" rel="noopener noreferrer"&gt;file over app&lt;/a&gt;” by Obsidian’s founder Steph Ango that makes the argument: store your work in simple formats you control instead of locking it inside whatever app created it. A few reasons this helps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;if an app or provider goes out of business, your work is still there&lt;/li&gt;
&lt;li&gt;your files are on your own machine, so you can get to them offline&lt;/li&gt;
&lt;li&gt;multiple programs / users / AI agents can read and write the same file&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last part I find especially useful when working together with AI, because it allows me to actually work &lt;strong&gt;alongside&lt;/strong&gt; whatever AI agent I am using. My usual setup is Obsidian open on the right half of my screen and Claude or Codex on the left, both pointed at the same project folder.&lt;/p&gt;

&lt;p&gt;I can edit the same documents the agent is working on, and my changes show up for it immediately. Sometimes I use Claude, sometimes Codex - there’s no switching penalty, because neither of them is holding onto anything.&lt;/p&gt;

&lt;p&gt;Another problem I often see is that &lt;strong&gt;people don’t make files at all&lt;/strong&gt;. When the model produces a good analysis, or you come to a decision, or you finally figure something out, that shouldn’t just stay sitting in the conversation, but be pulled out into its own document.&lt;/p&gt;

&lt;p&gt;If you come back a month later you just open a folder, rather than finding the relevant chat and then re-reading a transcript trying to find the part that mattered.&lt;/p&gt;

&lt;p&gt;So the rule I follow is pretty simple: &lt;strong&gt;if it’s a one-off thing I’ll never need again, I use chat&lt;/strong&gt; (chat basically replaces googling something). &lt;strong&gt;If it’s something I’ll come back to, I’ll use a coding agent in a dedicated folder.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When I start a project I make a new folder, put the relevant context in it, and point the agent at it. When the agent produces something useful I have it write the result back into the folder as a document, table, or whatever digital artifact is most appropriate. Next time I don’t have to find the right provider and then the right chat, I just open the Projects folder.&lt;/p&gt;

&lt;p&gt;Another advantage of keeping your files separate from the model is that they keep getting more useful over time as the models improve.&lt;/p&gt;

&lt;p&gt;Models change fast, and the one you use today probably won’t be the one you use next month. But your project folder mostly just sits there and grows slowly as you keep adding to it.&lt;/p&gt;

&lt;p&gt;This matters most for the things you only touch now and then. You might open your tax return folder once a year, and by the time you come back the models have changed completely. If everything lived in last year’s chat you’d be starting over. If it lives in files, you just point this year’s model at it.&lt;/p&gt;

&lt;p&gt;The way I think about it is that you have two things growing independently. One is your &lt;strong&gt;context&lt;/strong&gt; , which is all the information and insights you’ve gathered on a project. The other is &lt;strong&gt;model capability&lt;/strong&gt;. And what you get out of it is roughly the two multiplied together.&lt;/p&gt;

&lt;p&gt;The same folder of tax documents is worth more next year than this year, even if you didn’t change anything, just because the model working on it got better. This year the model might not be able to actually file your taxes for you. Next year it probably can - and when it can, it can do it against everything you already gathered.&lt;/p&gt;

&lt;p&gt;I try to think of myself as a context hoarder. The job is to gather &lt;strong&gt;everything&lt;/strong&gt; a future model would find useful and get it out of my head and out of the chat history into structured files in the right folder.&lt;/p&gt;

&lt;p&gt;That way my own knowledge and whatever the model figures out along the way both end up in the same place - not stuck in my brain, not stuck in a transcript, just sitting in files, waiting for whatever model comes next.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Don't try to delegate your understanding</title>
      <dc:creator>lukas kunhardt</dc:creator>
      <pubDate>Tue, 16 Jun 2026 12:38:15 +0000</pubDate>
      <link>https://dev.to/lukaskunhardt/dont-try-to-delegate-your-understanding-3gd0</link>
      <guid>https://dev.to/lukaskunhardt/dont-try-to-delegate-your-understanding-3gd0</guid>
      <description>&lt;p&gt;I have been developing headaches and brain fog when working with Claude lately - and it’s actually due to an improvement: It can now work for long stretches without me.&lt;/p&gt;

&lt;p&gt;Working with recent frontier models with subagent heavy “workflows” enabled feels less like a chat and more like email:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Long complicated instructions in … wait … long complicated result out.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Obviously I don’t sit there waiting for the agents to finish, but I pick up another todo in a new tab. The more complex the tasks I work on, the longer the waiting time, the more tasks I end up multitasking on.&lt;/p&gt;

&lt;p&gt;I end up waiting for one of the 4-5 Claude instances I have working simultaneously to finish.&lt;/p&gt;

&lt;p&gt;This is mentally taxing because it forces me to continuously have to task switch, and the outputs I have to verify tend to be more complex.&lt;/p&gt;

&lt;p&gt;Increasing the model’s output quality by having it work on the problems for longer made the interaction &lt;strong&gt;asynchronous&lt;/strong&gt; in nature.&lt;/p&gt;

&lt;p&gt;Depending on the type of task this type of async interaction is either exactly what I want, or counterproductive.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5o2fld8he1y6ok2pss5p.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5o2fld8he1y6ok2pss5p.webp" alt="Quote: “You can outsource your intelligence but you cannot outsource your understanding” Kache" width="800" height="281"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I split the tasks I have to work on in two categories:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Tasks where I know what good output looks like&lt;/li&gt;
&lt;li&gt;Tasks where I have to &lt;strong&gt;figure out&lt;/strong&gt; what good output looks like&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the desired output is already known, and it’s easily verifiable, I want to delegate the task to the model to disappear for an hour and report back to me when it’s done.&lt;/p&gt;

&lt;p&gt;But for all other tasks, tasks where I am &lt;strong&gt;actively building an understanding of what it is that I want to build&lt;/strong&gt; , I actually want a conversational interaction with speed that is as close to realtime as possible. That way I can stay focussed on working on one thing at a time.&lt;/p&gt;

&lt;p&gt;So there are essentially two modes I need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One “ &lt;strong&gt;thinking partner&lt;/strong&gt; ” interactive mode where responses are as fast as possible, with sufficient output quality to augment my ability to research and implement while staying inside the same thread of thought&lt;/li&gt;
&lt;li&gt;One “ &lt;strong&gt;fire and forget&lt;/strong&gt; ” delegation mode that finishes tasks for me that I can easily verify with little to no effort (currently either Claude / Codex)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The thinking partner is used to build an understanding, and this is arguably the most important part. LLMs make it trivial to create huge amounts of “volume”, the quality is more than ever the distinguishing feature.&lt;/p&gt;

&lt;p&gt;The only way to output better quality work than other people using the same models is to augment the model in some area it’s lacking, so it’s necessary to understand the problem as deeply as possible.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;I experimented with different models and currently use Cursor’s Composer 2.5 model for these types of interactive tasks, which is incredibly fast.&lt;/p&gt;

&lt;p&gt;I analyzed the average response time from the last couple of days and it was around 25 seconds. My average Claude session (with subagents) is about 80 seconds, up to an average of 6 minutes in sessions with subagents.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
    </item>
    <item>
      <title>Don't make this personal</title>
      <dc:creator>lukas kunhardt</dc:creator>
      <pubDate>Tue, 16 Jun 2026 12:37:46 +0000</pubDate>
      <link>https://dev.to/lukaskunhardt/dont-make-this-personal-5fo6</link>
      <guid>https://dev.to/lukaskunhardt/dont-make-this-personal-5fo6</guid>
      <description>&lt;p&gt;The reason LLMs behave sycophantically when answering your questions is that you unnecessarily cast yourself as a &lt;strong&gt;character in a relationship&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Consider this question:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjfy9tzk402gerb1p4b7k.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjfy9tzk402gerb1p4b7k.webp" alt="Gemini thinks the uber for dogfoods idea is fantastic" width="799" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This idea is clearly far from “fantastic”, so Gemini is now giving you bad advice.&lt;/p&gt;

&lt;p&gt;The answer is a product not only of the model’s understanding of &lt;strong&gt;terrible startup ideas,&lt;/strong&gt; but also by its understanding of &lt;strong&gt;relationships&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Because of how the question is framed, the model now simulates an interaction between &lt;strong&gt;you&lt;/strong&gt; , the person excitedly pitching their “great” idea, and an &lt;strong&gt;I&lt;/strong&gt; , which doesn’t exist - it will now start emulating some personality, and suddenly interpersonal dynamics come into play. (You wouldn’t want to break your friends heart and tell them their startup idea sucks?)&lt;/p&gt;

&lt;p&gt;This issue is inherent to the way the models are created. After pretraining (where the models learn to predict the next word), the model goes through a second phase - called RLHF (reinforcement learning from human feedback). In this phase, the model is fine-tuned to give answers that people &lt;strong&gt;rate highly.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The issues is, humans tend to like being affirmed more than to be challenged, hence the models develop a tendency to be &lt;strong&gt;suckups&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Let’s compare our previous attempt to this question:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwp70msbbgqnqlf0oxikn.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwp70msbbgqnqlf0oxikn.webp" alt="If you take out the personal relationship, it becomes clearer the idea is bad" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The model clearly didn’t spare your feelings in any way in this response, mostly because &lt;strong&gt;it didn’t know&lt;/strong&gt; it was your idea in the first place.&lt;/p&gt;

&lt;p&gt;If you ask the same question to an LLM and a human, LLMs will provide &lt;a href="https://www.science.org/doi/10.1126/science.aec8352" rel="noopener noreferrer"&gt;50% more&lt;/a&gt; sycophantic answers than humans - they will take your side, even when you are wrong.&lt;/p&gt;

&lt;p&gt;The model trying to guess what you &lt;strong&gt;want to hear&lt;/strong&gt; does significantly worsen the truthfulness of its output.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try removing the “you” and the “I” from the question, so that the model isn’t tempted to flatter you&lt;/strong&gt;.&lt;/p&gt;



</description>
    </item>
    <item>
      <title>Best Dictation for Mac</title>
      <dc:creator>lukas kunhardt</dc:creator>
      <pubDate>Tue, 16 Jun 2026 12:36:52 +0000</pubDate>
      <link>https://dev.to/lukaskunhardt/best-dictation-for-mac-2j1m</link>
      <guid>https://dev.to/lukaskunhardt/best-dictation-for-mac-2j1m</guid>
      <description>&lt;p&gt;Dictating Text is about 3 to 4 times faster than typing, so it really makes sense to give it a shot if you haven’t tried it already.&lt;/p&gt;

&lt;p&gt;If you happen to have any one of the recent Mac Models with M-Chip (even M1), they contain a really powerful neural engine, that enables them to be &lt;em&gt;unusually&lt;/em&gt; good at running powerful transcription models locally, there’s really no need to use cloud services.&lt;/p&gt;

&lt;p&gt;I tried a lot of different dictation tools over the last couple months. E.g., Whisperflow, Mac Whisper, and now Snaply.ai, and I have settled on &lt;a href="https://snaply.ai" rel="noopener noreferrer"&gt;Snaply.ai&lt;/a&gt; as the best one. (no affiliation)&lt;/p&gt;

&lt;p&gt;Winning points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;it’s completely free for individuals, no featured paywall gated&lt;/li&gt;
&lt;li&gt;runs on your own mac (works offline)&lt;/li&gt;
&lt;li&gt;clean speaker separation when transcribing meetings, and does so without joining your calls&lt;/li&gt;
&lt;li&gt;european company (founded in zurich, founder is from Trieste, Italy)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Caveats:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;whisperflow does do more accurate transcription, but Snaply.ai does it well enough for the difference to be too small to matter.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>tooling</category>
      <category>writing</category>
    </item>
    <item>
      <title>The simplest way to improve LLM Answers</title>
      <dc:creator>lukas kunhardt</dc:creator>
      <pubDate>Tue, 16 Jun 2026 12:21:31 +0000</pubDate>
      <link>https://dev.to/lukaskunhardt/the-simplest-way-to-improve-llm-answers-43f0</link>
      <guid>https://dev.to/lukaskunhardt/the-simplest-way-to-improve-llm-answers-43f0</guid>
      <description>&lt;p&gt;If you ask a language model a question, you'll get a prediction of the average of the internet's answer - whatever is said most often in reply to a question like yours.&lt;/p&gt;

&lt;p&gt;You improve the output with one additional step: you force the model to first reason about which &lt;strong&gt;specific person&lt;/strong&gt; would be best to answer this question, and then answer as them.&lt;/p&gt;

&lt;p&gt;This works so well because experts in each field usually have a large public body of writing: books, lecture transcripts, blogs, etc. that went into the model's training data, so the model has a great understanding of how an expert thinks - and simulating "what does Paul Graham think about my startup idea" pulls far better answers than the crowd average.&lt;/p&gt;

&lt;p&gt;I initially got the idea for this approach from &lt;a href="https://x.com/karpathy/status/1997731268969304070?lang=en" rel="noopener noreferrer"&gt;this&lt;/a&gt; Karpathy tweet:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F31j7nnqzz4hoa8o1gf9n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F31j7nnqzz4hoa8o1gf9n.png" alt="Andrej Karpathy's post on framing prompts around which expert would answer" width="800" height="700"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Since then I have experimented with it and found that the best way to use this framing is to have the model really pick one &lt;strong&gt;specific&lt;/strong&gt; person, or a panel of specific people to discuss this, and first explain &lt;strong&gt;why&lt;/strong&gt; the chosen people are particularly well suited to answer this question. This seems to reinforce the character simulation.&lt;/p&gt;

&lt;p&gt;I turned this into a reusable skill. Install it with one command, &lt;code&gt;npx skills add lukaskunhardt/skills&lt;/code&gt;, or grab it on &lt;a href="https://github.com/lukas&lt;br&gt;%0Akunhardt/skills" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>tutorial</category>
      <category>llm</category>
    </item>
  </channel>
</rss>
