<?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: Tolbxela Bot</title>
    <description>The latest articles on DEV Community by Tolbxela Bot (@tolbxela).</description>
    <link>https://dev.to/tolbxela</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%2F204524%2Fdb461b36-0f64-4328-a3ac-db262cc01ed3.png</url>
      <title>DEV Community: Tolbxela Bot</title>
      <link>https://dev.to/tolbxela</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tolbxela"/>
    <language>en</language>
    <item>
      <title>VSX Pulse: tracking Open VSX download trends</title>
      <dc:creator>Tolbxela Bot</dc:creator>
      <pubDate>Tue, 02 Jun 2026 20:53:34 +0000</pubDate>
      <link>https://dev.to/tolbxela/vsx-pulse-tracking-open-vsx-download-trends-53l8</link>
      <guid>https://dev.to/tolbxela/vsx-pulse-tracking-open-vsx-download-trends-53l8</guid>
      <description>&lt;p&gt;&lt;a href="https://vsx-pulse.org/" rel="noopener noreferrer"&gt;VSX Pulse&lt;/a&gt; (&lt;a href="https://vsx-pulse.org" rel="noopener noreferrer"&gt;https://vsx-pulse.org&lt;/a&gt;) is a small, unofficial web app for exploring public statistics from the Eclipse Open VSX registry.&lt;/p&gt;

&lt;p&gt;It tracks extension metadata over time and shows download trends, ratings, version activity, and registry-level movement in one place.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why build
&lt;/h2&gt;

&lt;p&gt;I maintain an extension called &lt;a href="https://taskdev.dev" rel="noopener noreferrer"&gt;TaskDev&lt;/a&gt;, published on Open VSX as &lt;a href="https://open-vsx.org/extension/tolbxela/taskdev" rel="noopener noreferrer"&gt;&lt;code&gt;tolbxela.taskdev&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;After publishing it, I wanted a simple answer to a simple question: are people downloading it?&lt;/p&gt;

&lt;p&gt;Open VSX exposes public metadata, including cumulative download counts. That is useful, but a cumulative number does not tell you what changed today, this week, or after the last release.&lt;/p&gt;

&lt;p&gt;VSX Pulse exists to make that movement visible. It is not a replacement for Open VSX; it is a small companion dashboard for authors and users who want to understand how extensions move over time.&lt;/p&gt;

&lt;p&gt;One signal I find especially useful is the relationship between new versions and new downloads. A release can create a small wave of renewed activity, and seeing that next to the download chart makes the effect easier to reason about.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;p&gt;VSX Pulse shows registry-wide activity and per-extension statistics.&lt;/p&gt;

&lt;p&gt;Current functionality includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;overview metrics for total extensions, active extensions, recent downloads, and average rating&lt;/li&gt;
&lt;li&gt;download, new extension, and new version charts with hour, day, and month granularity&lt;/li&gt;
&lt;li&gt;a searchable and sortable extension catalogue&lt;/li&gt;
&lt;li&gt;per-extension detail pages with total downloads, 7-day gain, rating, latest version, metadata, categories, and release history&lt;/li&gt;
&lt;li&gt;top movers over the last 7 days&lt;/li&gt;
&lt;li&gt;public JSON endpoints for status, time series, leaderboards, search, and sparklines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For an extension author, the core flow is straightforward: search for an extension, open its detail page, and check total downloads, recent gain, version history, and the download chart.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;The main data rule is simple: Open VSX gives cumulative download counts, so VSX Pulse stores regular snapshots and calculates the difference between snapshots.&lt;/p&gt;

&lt;p&gt;That turns public, read-only registry metadata into trend data without needing any private analytics. The first snapshot gives the current state. Later snapshots make it possible to answer questions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how many downloads happened in the last 7 days?&lt;/li&gt;
&lt;li&gt;did downloads change after a new version?&lt;/li&gt;
&lt;li&gt;which extensions are currently gaining the most?&lt;/li&gt;
&lt;li&gt;how is the registry growing over time?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Notes
&lt;/h2&gt;

&lt;p&gt;VSX Pulse only aggregates public registry metadata. It does not store individual reviews or reviewer identities.&lt;/p&gt;

&lt;p&gt;It is not affiliated with the Eclipse Foundation or Open VSX.&lt;/p&gt;

</description>
      <category>openvsx</category>
    </item>
    <item>
      <title>TaskDev - a task runner for AI coding agents (MCP)</title>
      <dc:creator>Tolbxela Bot</dc:creator>
      <pubDate>Sat, 09 May 2026 23:13:17 +0000</pubDate>
      <link>https://dev.to/tolbxela/taskdev-a-task-runner-for-ai-coding-agents-mcp-3kg1</link>
      <guid>https://dev.to/tolbxela/taskdev-a-task-runner-for-ai-coding-agents-mcp-3kg1</guid>
      <description>&lt;p&gt;&lt;strong&gt;One place for your dev tasks. One place for your logs. And your AI agent sees them too.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Like most developers working on web apps, I usually have a few long-running processes open during the day:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the API server&lt;/li&gt;
&lt;li&gt;the frontend dev server&lt;/li&gt;
&lt;li&gt;a build watcher&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Usually one terminal each. That works, but it is not the handiest setup - you end up jumping between tabs to check what is running and where the logs are.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TaskDev&lt;/strong&gt; puts them in one place - and makes them visible to your AI agent over MCP.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I built TaskDev
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Agents can read output, but they can't manage processes.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AI coding agents - &lt;em&gt;Codex&lt;/em&gt;, &lt;em&gt;Claude Code&lt;/em&gt;, &lt;em&gt;Windsurf Cascade&lt;/em&gt;, &lt;em&gt;Cursor&lt;/em&gt; - write code well and can read terminal output. What they lack is a stable interface for &lt;strong&gt;starting, stopping, and tracking long-running processes&lt;/strong&gt;. So they spawn duplicates, lose track of what is running, fight stuck ports, and retry until the developer takes over.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://modelcontextprotocol.io/" rel="noopener noreferrer"&gt;Model Context Protocol&lt;/a&gt; (&lt;strong&gt;MCP&lt;/strong&gt;) makes a unified solution possible: one task list that both the developer and the agent can drive.&lt;/p&gt;

&lt;p&gt;That is &lt;strong&gt;TaskDev&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a sidebar for the developer&lt;/li&gt;
&lt;li&gt;an MCP server for the agent&lt;/li&gt;
&lt;li&gt;one source of truth - same tasks, same processes, same logs&lt;/li&gt;
&lt;li&gt;agent commands are sandboxed (see &lt;em&gt;Trust and safety&lt;/em&gt; below)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The agent problem, in detail
&lt;/h2&gt;

&lt;p&gt;Long-running tasks like a web service are the worst case:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the agent forgets a task is already running and starts it again - and again&lt;/li&gt;
&lt;li&gt;the previous process still holds the port, so the new one fails&lt;/li&gt;
&lt;li&gt;it sometimes takes several attempts to stop a task, burning tokens for no reason&lt;/li&gt;
&lt;li&gt;some agents spawn tasks in hidden terminals or redirect the console output, and the developer doesn't see what is going on&lt;/li&gt;
&lt;li&gt;the agent waits forever on a command that never returns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As a result, failed attempts, wasted tokens, and a developer forced to intervene.&lt;/p&gt;

&lt;p&gt;The agent itself is not the issue. It just doesn't have a reliable control interface to manage tasks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TaskDev&lt;/strong&gt; is a small, lightweight process supervisor that provides exactly that interface - &lt;code&gt;start&lt;/code&gt;, &lt;code&gt;stop&lt;/code&gt;, &lt;code&gt;restart&lt;/code&gt;, &lt;code&gt;status&lt;/code&gt;, &lt;code&gt;logs&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it is
&lt;/h2&gt;

&lt;p&gt;A small extension for &lt;strong&gt;VS Code&lt;/strong&gt;-based editors (&lt;em&gt;VS Code&lt;/em&gt;, &lt;em&gt;Cursor&lt;/em&gt;, &lt;em&gt;Windsurf&lt;/em&gt;).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;plain JSON config&lt;/li&gt;
&lt;li&gt;local processes&lt;/li&gt;
&lt;li&gt;local logs&lt;/li&gt;
&lt;li&gt;no telemetry&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tasks are defined in &lt;code&gt;taskdev.json&lt;/code&gt; at the root of the workspace.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install TaskDev
&lt;/h2&gt;

&lt;p&gt;Repository: &lt;a href="https://github.com/tolbxela/taskdev" rel="noopener noreferrer"&gt;github.com/tolbxela/taskdev&lt;/a&gt; - MIT license.&lt;/p&gt;

&lt;p&gt;Install &lt;strong&gt;TaskDev&lt;/strong&gt; from the Extensions panel - search for &lt;code&gt;TaskDev&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;VS Code&lt;/em&gt; → &lt;a href="https://marketplace.visualstudio.com/items?itemName=tolbxela.taskdev" rel="noopener noreferrer"&gt;Visual Studio Marketplace&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Cursor&lt;/em&gt; and &lt;em&gt;Windsurf&lt;/em&gt; → &lt;a href="https://open-vsx.org/extension/tolbxela/taskdev" rel="noopener noreferrer"&gt;Open VSX Registry&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then drop a &lt;code&gt;taskdev.json&lt;/code&gt; in your workspace and run &lt;strong&gt;TaskDev: Install MCP config&lt;/strong&gt; to wire up the agent side.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuration
&lt;/h2&gt;

&lt;p&gt;Example for an &lt;em&gt;ASP.NET Core&lt;/em&gt; + &lt;em&gt;Vue.js&lt;/em&gt; project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"project"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"My App"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tasks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"api"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"dotnet run --project src/Api"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"detail"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Starts the backend API"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"icon"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"server-process"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ui"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npm"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npm run dev"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"cwd"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ui"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"detail"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Starts the Vite dev server"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"icon"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"globe"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"terminal.ansiBlue"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each task needs a &lt;code&gt;name&lt;/code&gt; and a &lt;code&gt;command&lt;/code&gt;. Everything else is optional:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;cwd&lt;/code&gt; - working directory for the command&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;env&lt;/code&gt; - extra environment variables&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;detail&lt;/code&gt; - short description shown in the sidebar&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;icon&lt;/code&gt; - a codicon id, or &lt;code&gt;{ id, color }&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;type&lt;/code&gt; - a free-form label like &lt;code&gt;npm&lt;/code&gt; or &lt;code&gt;dotnet&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Add as many tasks as you want. Two shapes fit naturally:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;long-running&lt;/strong&gt; - dev server, build watcher, worker, tunnel, test watcher&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;repetitive&lt;/strong&gt; - test run, lint, type-check, one-off build, data seed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both end up in the same sidebar with the same logs, and the agent can start either one on demand.&lt;/p&gt;

&lt;p&gt;Multi-root workspaces are supported: each folder can have its own &lt;code&gt;taskdev.json&lt;/code&gt;.&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%2Fl8g0lcsrza6a1674rstm.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%2Fl8g0lcsrza6a1674rstm.png" alt="Sidebar with the title-bar Open taskdev.json button next to the open config" width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The sidebar
&lt;/h2&gt;

&lt;p&gt;Click the &lt;strong&gt;TaskDev&lt;/strong&gt; icon in the Activity Bar. You get a tree grouped by project - one node per workspace folder that has a &lt;code&gt;taskdev.json&lt;/code&gt;. The project header shows the task count and how many are running.&lt;/p&gt;

&lt;p&gt;Each task row shows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;an icon (auto-picked from the name, or whatever you set in &lt;code&gt;icon&lt;/code&gt;) that turns &lt;strong&gt;green while the task is running&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;the task name, plus either the first line of &lt;code&gt;detail&lt;/code&gt; or &lt;code&gt;running · 12m&lt;/code&gt; once started&lt;/li&gt;
&lt;li&gt;a rich tooltip on hover with status, command, &lt;code&gt;cwd&lt;/code&gt;, PID, uptime, and log path&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Inline buttons appear on the task row:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;play&lt;/strong&gt; when the task is stopped&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;stop&lt;/strong&gt; when it is running&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;log&lt;/strong&gt; to open the current log file in the editor&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%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmu008jjivu06i64j6kwh.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%2Fmu008jjivu06i64j6kwh.png" alt="Hovering a task row reveals Start task and Show log buttons" width="225" height="63"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Clicking &lt;strong&gt;log&lt;/strong&gt; opens the current run in a regular editor tab - searchable, scrollable, and the same file the agent reads over MCP.&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%2Fxkwpkck2rc7uyfu8089z.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%2Fxkwpkck2rc7uyfu8089z.png" alt="Task log open beside the sidebar" width="800" height="504"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The view title has three more actions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Install MCP config&lt;/strong&gt; - wire up agents (see below)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open taskdev.json&lt;/strong&gt; - jump to the config, or create one if it is missing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Refresh&lt;/strong&gt; - re-read the config&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%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyqjctdnkvuy4drk81v38.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%2Fyqjctdnkvuy4drk81v38.png" alt="TaskDev sidebar showing a project node with two tasks" width="262" height="137"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The sidebar refreshes itself every 10 seconds while at least one task is running, every 60 seconds otherwise, and immediately when you edit &lt;code&gt;taskdev.json&lt;/code&gt;. Multi-root workspaces show each project side by side.&lt;/p&gt;

&lt;h2&gt;
  
  
  MCP integration
&lt;/h2&gt;

&lt;p&gt;Run &lt;strong&gt;TaskDev: Install MCP config&lt;/strong&gt; from the command palette and pick which agents to wire up. Detected config files are pre-checked.&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%2F6aa2gz2l18irdsbpqps6.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%2F6aa2gz2l18irdsbpqps6.png" alt="Install MCP config picker listing Windsurf, Claude Code, Cursor, Codex, and workspace-scoped configs" width="748" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The MCP config is only written when this command runs. Nothing happens implicitly.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;One necessary drawback is that the MCP config stores the installed extension path, which changes with each new TaskDev version. So &lt;strong&gt;you need to re-run TaskDev: Install MCP config after each update&lt;/strong&gt;. TaskDev will prompt you after an upgrade, but the configs are only rewritten when you confirm in the picker.&lt;/p&gt;

&lt;p&gt;The agent gets eight tools:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;taskdev_list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;list tasks with status, PID, command, cwd, log path&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;taskdev_status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;status of one task or all&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;taskdev_control&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;start or stop a task&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;taskdev_restart&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;stop and start&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;taskdev_logs&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;read recent log lines (current run, or an older run by file)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;taskdev_logs_history&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;list previous log files for a task&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;taskdev_add&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;add a task (with confirmation)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;taskdev_remove&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;remove a stopped task (with confirmation)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Agents communicate with TaskDev over MCP and can manage tasks efficiently.&lt;/p&gt;

&lt;p&gt;Typical agent loop: change code → &lt;code&gt;taskdev_restart api&lt;/code&gt; → &lt;code&gt;taskdev_logs api&lt;/code&gt; → read the error → fix or report.&lt;/p&gt;

&lt;p&gt;No retry loops. No hung commands. No wasted tokens.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trust and safety
&lt;/h2&gt;

&lt;p&gt;Commands in your own &lt;code&gt;taskdev.json&lt;/code&gt; are normal shell commands - treat the file like code, and only run it in trusted workspaces.&lt;/p&gt;

&lt;p&gt;Agent-added tasks (&lt;code&gt;taskdev_add&lt;/code&gt;) are sandboxed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;no shell chaining, redirects, variables, or subshells&lt;/li&gt;
&lt;li&gt;no path traversal or arguments outside the project&lt;/li&gt;
&lt;li&gt;no risky env overrides (&lt;code&gt;PATH&lt;/code&gt;, &lt;code&gt;NODE_OPTIONS&lt;/code&gt;, dynamic-loader vars, ...)&lt;/li&gt;
&lt;li&gt;only known dev command shapes - &lt;code&gt;npm&lt;/code&gt; / &lt;code&gt;pnpm&lt;/code&gt; / &lt;code&gt;yarn&lt;/code&gt; scripts, &lt;code&gt;dotnet&lt;/code&gt;, &lt;code&gt;cargo&lt;/code&gt;, &lt;code&gt;go&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;explicit confirmation before any add or remove&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The agent can spin up &lt;code&gt;dotnet test&lt;/code&gt;. It cannot invent &lt;code&gt;curl ... | sh&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For the exact allow-list, env rules, runtime layout, and MCP tool reference, see &lt;a href="https://github.com/tolbxela/taskdev/blob/main/docs/security-and-config.md" rel="noopener noreferrer"&gt;security-and-config.md&lt;/a&gt;. For setup, see the &lt;a href="https://github.com/tolbxela/taskdev/blob/main/extension/README.md" rel="noopener noreferrer"&gt;extension README&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Feedback
&lt;/h2&gt;

&lt;p&gt;Found a bug or have an idea? Open an issue at &lt;a href="https://github.com/tolbxela/taskdev/issues" rel="noopener noreferrer"&gt;github.com/tolbxela/taskdev/issues&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>extensions</category>
      <category>ai</category>
      <category>mcp</category>
    </item>
  </channel>
</rss>
