<?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: Roman Studenikin</title>
    <description>The latest articles on DEV Community by Roman Studenikin (@justpresident).</description>
    <link>https://dev.to/justpresident</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4146054%2F200ea7ce-3f18-4e85-9755-bc2c90498600.png</url>
      <title>DEV Community: Roman Studenikin</title>
      <link>https://dev.to/justpresident</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/justpresident"/>
    <language>en</language>
    <item>
      <title>An easy way to make your agent predictably better</title>
      <dc:creator>Roman Studenikin</dc:creator>
      <pubDate>Tue, 29 Sep 2026 07:39:33 +0000</pubDate>
      <link>https://dev.to/justpresident/an-easy-way-to-make-you-agent-predictably-better-3ikk</link>
      <guid>https://dev.to/justpresident/an-easy-way-to-make-you-agent-predictably-better-3ikk</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/justpresident/your-coding-agent-has-a-builtin-task-manager-but-it-shreds-the-task-list-every-session-m9a" class="crayons-story__hidden-navigation-link"&gt;Your Coding Agent Has a Built-in Task Manager, But It Shreds the Task List Every Session.&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/justpresident" class="crayons-avatar  crayons-avatar--l  "&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4146054%2F200ea7ce-3f18-4e85-9755-bc2c90498600.png" alt="justpresident profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/justpresident" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Roman Studenikin
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Roman Studenikin
                
                
              
              &lt;div id="story-author-preview-content-4758135" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/justpresident" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4146054%2F200ea7ce-3f18-4e85-9755-bc2c90498600.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Roman Studenikin&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/justpresident/your-coding-agent-has-a-builtin-task-manager-but-it-shreds-the-task-list-every-session-m9a" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Sep 29&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/justpresident/your-coding-agent-has-a-builtin-task-manager-but-it-shreds-the-task-list-every-session-m9a" id="article-link-4758135"&gt;
          Your Coding Agent Has a Built-in Task Manager, But It Shreds the Task List Every Session.
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/showdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;showdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/agents"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;agents&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/productivity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;productivity&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/justpresident/your-coding-agent-has-a-builtin-task-manager-but-it-shreds-the-task-list-every-session-m9a#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            6 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>agents</category>
      <category>ai</category>
      <category>coding</category>
      <category>programming</category>
    </item>
    <item>
      <title>Your Coding Agent Has a Built-in Task Manager, But It Shreds the Task List Every Session.</title>
      <dc:creator>Roman Studenikin</dc:creator>
      <pubDate>Tue, 29 Sep 2026 07:20:00 +0000</pubDate>
      <link>https://dev.to/justpresident/your-coding-agent-has-a-builtin-task-manager-but-it-shreds-the-task-list-every-session-m9a</link>
      <guid>https://dev.to/justpresident/your-coding-agent-has-a-builtin-task-manager-but-it-shreds-the-task-list-every-session-m9a</guid>
      <description>&lt;p&gt;Do you need a task manager for your AI agent? It already has one. You just can’t access it.&lt;/p&gt;

&lt;p&gt;Give a coding agent something complex and watch what it does first: it splits the work into subtasks, shows you a checklist, and ticks items off as it goes. That checklist is a task manager. It’s also implicit and ephemeral. It dies when the agent decides the work is done, or when the session ends — and every design decision, rejected alternative and open question recorded along the way dies with it.&lt;/p&gt;

&lt;p&gt;It’s like tracking all your work on paper and shredding each page the moment the item feels complete. It might not be complete. Tomorrow you might find out a follow-up is needed, and by then the original design notes are gone. Months later, nobody — not you, not a colleague, not the next agent — can explain why the code ended up the way it did.&lt;/p&gt;

&lt;p&gt;This article is about making that task list explicit, external and permanent. And you don’t need a fleet of agents to benefit. One agent in one repository is enough, because a single agent is already a team: every new session is a new teammate who has never met the previous one.&lt;/p&gt;

&lt;h2&gt;
  
  
  The markdown trap
&lt;/h2&gt;

&lt;p&gt;Once you agree that decisions have to outlive the session, the obvious move is: “I’ll just have my agent keep documentation as it works.” That’s what most people do, and it works — for about a week.&lt;/p&gt;

&lt;p&gt;Then the files pile up. &lt;code&gt;PLAN.md&lt;/code&gt;, &lt;code&gt;PLAN-v2.md&lt;/code&gt;, &lt;code&gt;NOTES-auth-refactor.md&lt;/code&gt;. Nobody can tell which ones are still relevant and which outdated. The agent reads all of them and trusts the stale ones as much as the current ones, and at some point the notes start costing more than they save: they quietly poison the context of every session that loads them. Many of us have been there.&lt;/p&gt;

&lt;p&gt;The problem isn’t that the agent writes things down. It’s that a folder of prose has no status, no structure and no query. You can’t ask it “what’s still open?”, “what’s blocked on what?” or “why did we drop the SQLite backend?”&lt;/p&gt;

&lt;h2&gt;
  
  
  What a task manager really is, for an agent
&lt;/h2&gt;

&lt;p&gt;Some time ago I read Steve Yegge’s post about his task tracker designed for coding agents to use from the terminal. Around the same time I noticed that nearly every multi-agent orchestration tool has a task manager at its core. That’s not a coincidence. Tracking tasks is the tip of the iceberg. Underneath, a task manager is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Structured, queryable long-term memory. Decisions are attached to the work they were made for, and carry a status that says whether they still apply.&lt;/li&gt;
&lt;li&gt;A dependency graph. What has to happen before what — so “what should I do next?” has a computed answer instead of a guess.&lt;/li&gt;
&lt;li&gt;Auditable handover interface. Between agent and human, and between today’s session and tomorrow’s.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last one is why this matters for one agent and not only for fifty. A hand-off between sessions is still a hand-off. We coordinate our own work through task trackers; our agents should too.&lt;/p&gt;

&lt;p&gt;A real, queryable backlog: taska’s own store — open tasks and dependency tree:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr8qqfvddvul1x5vb4872.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr8qqfvddvul1x5vb4872.gif" alt=" " width="800" height="778"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Why I built my own
&lt;/h2&gt;

&lt;p&gt;When I read that post I got goosebumps — the feeling you get when you’ve just understood something important. I installed beads straight away and pointed my agents at it.&lt;/p&gt;

&lt;p&gt;I was disappointed quickly. In my setup its database kept drifting out of sync, records went missing, and my agent spent a lot of its time working out how to use the tool and recover lost records instead of doing the actual work. It also wanted a fairly invasive change to my git setup and a specific workflow. beads’ author did a great job on the features and thought deeply about agent integration — the ideas were right. The foundations just weren’t right for how I work.&lt;/p&gt;

&lt;p&gt;So I started building my own: simple, predictable, non-invasive, and fitting whatever workflow you already have. I’ve been building it for months, adding features only when they proved necessary. It’s called &lt;a href="https://github.com/justpresident/taska/" rel="noopener noreferrer"&gt;taska&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  The core idea: an append-only log, in your repo
&lt;/h2&gt;

&lt;p&gt;taska keeps the whole task database in your git tree, as an append-only log of mutation events — the same technique high-throughput databases use to absorb concurrent writes. Here the point isn’t throughput — it’s branch merging.&lt;/p&gt;

&lt;p&gt;Most in-repo trackers store tasks as markdown files or as one JSON file. If two branches touch the same task, that’s a merge conflict — and now your agent is resolving JSON conflicts by hand. beads sidesteps that by keeping its database out of your git history, synced through a git ref of its own.&lt;/p&gt;

&lt;p&gt;taska’s model is simpler. &lt;code&gt;ta init&lt;/code&gt; registers a git merge driver that handles exactly one file — the task log — and sees nothing else. When branches merge, it combines both sides’ events and settles them per field: “the agent set &lt;code&gt;status=review&lt;/code&gt; on its branch” and “I set &lt;code&gt;priority=high&lt;/code&gt; on mine” both survive. No database, no daemon, no git hooks, no server — and no way for it to corrupt any of your other files.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fjustpresident%2Ftaska%2Fmaster%2Fdocs%2Fdemo.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fjustpresident%2Ftaska%2Fmaster%2Fdocs%2Fdemo.gif" alt="Two branches edit the same task, and git merges both edits" width="790" height="1277"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Your fields, one syntax
&lt;/h2&gt;

&lt;p&gt;The log is what makes taska robust. What makes it pleasant is that it doesn’t put you in a box.&lt;/p&gt;

&lt;p&gt;Every tracker I tried came with a fixed set of fields — title, priority, owner — and a flag for each: &lt;code&gt;-t my-task -p high -o alice&lt;/code&gt;. In taska you decide what fields a task has: declare a strict schema in the config, or let it grow as you go. Either way, creating, updating and filtering use one syntax:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;ta create fix-login &lt;span class="nv"&gt;title&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;”Fix login redirect” &lt;span class="nv"&gt;priority&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;high &lt;span class="nv"&gt;owner&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;alice &lt;span class="nv"&gt;notes&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;”Suspect the session cookie”
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;ta update fix-login &lt;span class="nv"&gt;status&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;review notes+&lt;span class="o"&gt;=&lt;/span&gt;”Root cause: stale cookie, fixed &lt;span class="k"&gt;in &lt;/span&gt;auth.rs”
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;ta list &lt;span class="nv"&gt;priority&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;high &lt;span class="nv"&gt;status&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;review
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No flags to memorize — not for you, and not for your agent. And when you or an agent mistypes a field name, the write is refused instead of silently inventing a new field:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;ta update fix-login &lt;span class="nv"&gt;titel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;”oops”
&lt;span class="go"&gt;error: `titel` is not a field any task uses — did you mean `title`? (pass — new-field to add it as a new column)
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Arbitrary fields, one syntax for writing and filtering, and a typo caught with a did-you-mean&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed with a single agent
&lt;/h2&gt;

&lt;p&gt;I’ve used taska on personal projects and at work for months now, and I keep using it because it makes a real difference:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Decisions survive sessions&lt;/strong&gt;. A new session picks up where the last one stopped, including why it stopped there. Can query anytime, months later.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ideas stop getting lost&lt;/strong&gt;. A thought that comes up mid-task becomes a task that is impossible to lose.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Technical debt gets filed instead of buried&lt;/strong&gt;. This one surprised me. Agents take shortcuts, sometimes deliberately. With a tracker in the loop they file follow-up tasks for that debt before reporting completion — so it gets fixed later instead of silently disappearing inside a long session.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The code gets better&lt;/strong&gt;. Mostly as a consequence of the three above.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fey8vqgmci1e9qik8289f.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fey8vqgmci1e9qik8289f.gif" alt="Searching inside notes an agent wrote months ago, then reading the reasoning back" width="800" height="598"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;taska tracks its own development this way. Since May: 136 tasks, 130 of them closed, and every design decision still queryable.&lt;/p&gt;

&lt;h2&gt;
  
  
  And when one agent becomes many
&lt;/h2&gt;

&lt;p&gt;The same properties that help one agent are what a multi-agent setup needs. I recently added features for exactly that and tested them with 14 agents running at once, handing work to each other through taska. Your workflow can scale to as many agents as you want, taska will never be a bottleneck.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/justpresident/taska/master/scripts/install.sh | bash
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;your-project &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; ta init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;(Or &lt;code&gt;cargo install taska&lt;/code&gt;. Windows binaries are on the &lt;a href="https://github.com/justpresident/taska/releases/latest" rel="noopener noreferrer"&gt;releases page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Then restart your agent. &lt;code&gt;ta init&lt;/code&gt; adds a short section to your &lt;code&gt;AGENTS.md&lt;/code&gt; or &lt;code&gt;CLAUDE.md&lt;/code&gt;, so the agent knows how to use the tracker from its very first session. On Claude Code there’s also a plugin: &lt;code&gt;/plugin marketplace add justpresident/taska&lt;/code&gt;, then &lt;code&gt;/plugin install taska@justpresident&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Give it something non-trivial to plan, then look at &lt;code&gt;ta list&lt;/code&gt; and &lt;code&gt;ta dep tree&lt;/code&gt; yourself. You’ll look at agent workflows differently after a week of this — I’m fairly sure of it.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>agents</category>
      <category>ai</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
