<?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: Sourik Ganguly</title>
    <description>The latest articles on DEV Community by Sourik Ganguly (@sourik_ganguly_574886f41c).</description>
    <link>https://dev.to/sourik_ganguly_574886f41c</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%2F4189411%2Faf24c74e-3483-4807-8719-83789639bd15.jpg</url>
      <title>DEV Community: Sourik Ganguly</title>
      <link>https://dev.to/sourik_ganguly_574886f41c</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sourik_ganguly_574886f41c"/>
    <language>en</language>
    <item>
      <title>I Built an Open-Source, Local-First Workbench to Coordinate AI Coding Agents</title>
      <dc:creator>Sourik Ganguly</dc:creator>
      <pubDate>Fri, 16 Oct 2026 18:36:38 +0000</pubDate>
      <link>https://dev.to/sourik_ganguly_574886f41c/i-built-an-open-source-local-first-workbench-to-coordinate-ai-coding-agents-5b84</link>
      <guid>https://dev.to/sourik_ganguly_574886f41c/i-built-an-open-source-local-first-workbench-to-coordinate-ai-coding-agents-5b84</guid>
      <description>&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxcke3p4pwsee5ecwvt07.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxcke3p4pwsee5ecwvt07.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;AI coding assistants have changed how I develop software.&lt;/p&gt;

&lt;p&gt;Instead of writing every line manually, I can ask an AI model to propose an implementation, generate code, review changes, or help diagnose failing tests.&lt;/p&gt;

&lt;p&gt;But as I started using more models and tools, I noticed a different problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Writing code was becoming easier. Coordinating the work was not.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A feature might involve several dependent tasks. One model could help design the implementation, another could write code, and another could review the result.&lt;/p&gt;

&lt;p&gt;But I still had to answer questions such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which task should run first?&lt;/li&gt;
&lt;li&gt;Which model is eligible for this task?&lt;/li&gt;
&lt;li&gt;Which agent is responsible?&lt;/li&gt;
&lt;li&gt;Which files may it change?&lt;/li&gt;
&lt;li&gt;What happens when the tests fail?&lt;/li&gt;
&lt;li&gt;How do I know the implementation is actually complete?&lt;/li&gt;
&lt;li&gt;Where do I keep the execution history?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted to connect these activities without introducing another mandatory cloud service.&lt;/p&gt;

&lt;p&gt;So I started building &lt;strong&gt;Accension&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It's an open-source, local-first AI model-routing and engineering orchestration platform written in Python.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/Jigsaw777/accension" rel="noopener noreferrer"&gt;https://github.com/Jigsaw777/accension&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  From model routing to an engineering Workbench
&lt;/h2&gt;

&lt;p&gt;The initial version of Accension focused on selecting AI models based on capabilities, quality evidence, privacy policies, and spending limits.&lt;/p&gt;

&lt;p&gt;The idea was straightforward: different tasks may benefit from different models, and routing should be governed by explicit constraints rather than an arbitrary recommendation.&lt;/p&gt;

&lt;p&gt;Version 1.1.0 extends that foundation with &lt;strong&gt;Accension Workbench&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Workbench introduces persistent projects, structured Product Requirements Documents (PRDs), Work Items, dependencies, agent assignments, execution attempts, and completion review.&lt;/p&gt;

&lt;p&gt;The important architectural decision was to reuse the existing execution engine instead of building a separate task executor.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Start with requirements, not prompts
&lt;/h2&gt;

&lt;p&gt;Consider a simple feature:&lt;/p&gt;

&lt;p&gt;"Create a greeting function that handles named and blank inputs, with tests and documentation."&lt;/p&gt;

&lt;p&gt;Instead of executing one large prompt, the requirement can be represented as a structured PRD.&lt;/p&gt;

&lt;p&gt;The PRD defines the objective, scope, functional requirements, and acceptance criteria.&lt;/p&gt;

&lt;p&gt;After reviewing the PRD, the work can be decomposed into smaller Work Items.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implement the greeting function.&lt;/li&gt;
&lt;li&gt;Add tests covering named and blank inputs.&lt;/li&gt;
&lt;li&gt;Document how to use it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These tasks can have dependencies.&lt;/p&gt;

&lt;p&gt;That matters because code execution should not be scheduled purely by the order in which tasks appear on a screen.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Make dependencies explicit
&lt;/h2&gt;

&lt;p&gt;Accension represents executable task plans using its existing AXIR and &lt;code&gt;ExecutionPlan&lt;/code&gt; contracts.&lt;/p&gt;

&lt;p&gt;The Workbench adds a persistent management layer above those plans.&lt;/p&gt;

&lt;p&gt;This distinction is useful.&lt;/p&gt;

&lt;p&gt;A Work Item represents an engineering obligation that can survive a restart or multiple execution attempts.&lt;/p&gt;

&lt;p&gt;An execution plan represents bounded work that can be carried out by the engine.&lt;/p&gt;

&lt;p&gt;The Workbench stores Work Item state and relationships while the existing execution infrastructure performs eligible, approved work.&lt;/p&gt;

&lt;p&gt;This avoids making the Kanban board a second execution engine.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Separate AI recommendations from authorization
&lt;/h2&gt;

&lt;p&gt;An AI model can propose how to divide a feature and what capabilities a worker should have.&lt;/p&gt;

&lt;p&gt;But a recommendation is not authorization.&lt;/p&gt;

&lt;p&gt;Accension applies eligibility, privacy, budget, repository permissions and execution-policy checks.&lt;/p&gt;

&lt;p&gt;In the Workbench, these concepts remain separate:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent:&lt;/strong&gt; A configured worker.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Model:&lt;/strong&gt; An inference backend.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Router:&lt;/strong&gt; The component that determines eligible models.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Execution approval:&lt;/strong&gt; A human decision authorizing the reviewed scope.&lt;/p&gt;

&lt;p&gt;The goal is to make assignments explainable and prevent an AI-generated plan from silently expanding its own permissions.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Treat validation as a separate engineering step
&lt;/h2&gt;

&lt;p&gt;One of the most important lessons from working with coding assistants is that a model's final message isn't reliable proof of completion.&lt;/p&gt;

&lt;p&gt;An AI can report success even when code fails to compile, tests fail, or the requirements were only partially implemented.&lt;/p&gt;

&lt;p&gt;Accension therefore records actual execution attempts and independent host-side validation.&lt;/p&gt;

&lt;p&gt;The system can preserve artifacts and execution receipts that describe what happened.&lt;/p&gt;

&lt;p&gt;Where human completion review is required, passing checks are necessary evidence but do not independently authorize completion.&lt;/p&gt;

&lt;p&gt;The Workbench also distinguishes PRD approval, task import, execution approval, and completion review.&lt;/p&gt;

&lt;p&gt;Those are different decisions.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Keep the architecture local-first
&lt;/h2&gt;

&lt;p&gt;Accension uses a Python backend, FastAPI, and SQLite with WAL storage.&lt;/p&gt;

&lt;p&gt;Its CLI, Workbench UI, and MCP interfaces interact with shared local application state.&lt;/p&gt;

&lt;p&gt;This design keeps installation relatively lightweight and avoids requiring a separate hosted database or message broker.&lt;/p&gt;

&lt;p&gt;The application can use local models, including through compatible local runtimes such as Ollama.&lt;/p&gt;

&lt;p&gt;It can also use configured cloud providers.&lt;/p&gt;

&lt;p&gt;That introduces an important privacy distinction: &lt;strong&gt;local project storage does not automatically mean all inference is local&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Authorized cloud requests can send permitted context outside the computer.&lt;/p&gt;

&lt;p&gt;The application also supports optional secured LAN access through HTTPS, pairing, and workspace grants.&lt;/p&gt;

&lt;p&gt;These capabilities are explicit configuration choices rather than a mandatory hosted service.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. A reproducible demonstration
&lt;/h2&gt;

&lt;p&gt;The repository includes a deterministic Workbench demonstration that does not require paid inference.&lt;/p&gt;

&lt;p&gt;From a development installation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python scripts/demo_workbench.py &lt;span class="nt"&gt;--feature&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The demo creates an isolated repository and profile, constructs dependent greeting tasks, uses mock model output, runs real local checks, and verifies persisted receipts.&lt;/p&gt;

&lt;p&gt;The resulting screenshots and metrics illustrate the workflow. They are not production-model benchmarks.&lt;/p&gt;

&lt;p&gt;For the full experience, follow the installation instructions in the README and open Workbench.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned
&lt;/h2&gt;

&lt;p&gt;A few architectural decisions stood out while building Accension.&lt;/p&gt;

&lt;p&gt;First, &lt;strong&gt;a task board should reflect real execution state&lt;/strong&gt;, not merely move cards around.&lt;/p&gt;

&lt;p&gt;Second, model selection and agent assignment are different responsibilities.&lt;/p&gt;

&lt;p&gt;Third, permissions and approval boundaries must be enforced by application logic, not by an LLM's instructions.&lt;/p&gt;

&lt;p&gt;Fourth, execution history and receipts are useful only when they represent real observed results.&lt;/p&gt;

&lt;p&gt;Finally, a developer tool needs to be usable even when every external AI provider is unavailable.&lt;/p&gt;

&lt;p&gt;That is why Workbench supports manual project and Work Item management without a model.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next?
&lt;/h2&gt;

&lt;p&gt;I'm interested in improving the experience around:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Local-model workflows.&lt;/li&gt;
&lt;li&gt;Agent adapters.&lt;/li&gt;
&lt;li&gt;Workbench usability.&lt;/li&gt;
&lt;li&gt;Execution verification.&lt;/li&gt;
&lt;li&gt;Documentation and onboarding.&lt;/li&gt;
&lt;li&gt;Contributor-friendly examples.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Accension is open source under the Apache 2.0 license.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href="https://github.com/Jigsaw777/accension" rel="noopener noreferrer"&gt;https://github.com/Jigsaw777/accension&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project was built with assistance from Codex Astra.&lt;/p&gt;

&lt;p&gt;I'd particularly appreciate feedback from developers using multiple coding assistants or experimenting with local AI models.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you were designing a local AI engineering Workbench, what would you consider the most important missing feature?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agentaichallenge</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
