<?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: László Szabó</title>
    <description>The latest articles on DEV Community by László Szabó (@lezli01).</description>
    <link>https://dev.to/lezli01</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%2F4009493%2F4950fb77-1d74-4350-a023-25ad8d659dd3.jpg</url>
      <title>DEV Community: László Szabó</title>
      <link>https://dev.to/lezli01</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lezli01"/>
    <language>en</language>
    <item>
      <title>Vincent 0.7.0: The control plane now runs its own development</title>
      <dc:creator>László Szabó</dc:creator>
      <pubDate>Sun, 30 Aug 2026 09:24:37 +0000</pubDate>
      <link>https://dev.to/lezli01/vincent-070-the-control-plane-now-runs-its-own-development-1m84</link>
      <guid>https://dev.to/lezli01/vincent-070-the-control-plane-now-runs-its-own-development-1m84</guid>
      <description>&lt;p&gt;I just released &lt;strong&gt;Vincent 0.7.0&lt;/strong&gt;, and this release marks an important milestone for the project:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vincent now builds Vincent.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;All development on the project now goes through Vincent workflows — from creating an approved GitHub issue through planning, implementation, verification, human gates, merge, and release preparation.&lt;/p&gt;

&lt;p&gt;The journey from 0.4.0 to 0.7.0 added quite a bit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Workflows became real interfaces
&lt;/h2&gt;

&lt;p&gt;Workflows can declare their expected inputs, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;labels&lt;/li&gt;
&lt;li&gt;types&lt;/li&gt;
&lt;li&gt;required fields&lt;/li&gt;
&lt;li&gt;RE2 validation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vincent also gained a workflow-authoring skill designed around a principle I care about quite a lot: &lt;strong&gt;don't use an AI agent when deterministic automation can do the job better.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Commands and native control flow come first. Agents are used where reasoning is actually required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Recovery became part of the workflow
&lt;/h2&gt;

&lt;p&gt;Real automation fails.&lt;/p&gt;

&lt;p&gt;So Vincent now has mechanisms for continuing rather than throwing work away:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;follow-ups on completed tasks&lt;/li&gt;
&lt;li&gt;recorded repair agents for blocked tasks&lt;/li&gt;
&lt;li&gt;retry backoff&lt;/li&gt;
&lt;li&gt;safer daemon backup/restore&lt;/li&gt;
&lt;li&gt;improved diagnostics through &lt;code&gt;vincent doctor&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The control plane became scriptable
&lt;/h2&gt;

&lt;p&gt;0.7.0 significantly expands the CLI.&lt;/p&gt;

&lt;p&gt;Tasks can now be started idempotently, created from GitHub issues, populated through JSON/stdin, queried through &lt;code&gt;vincent status&lt;/code&gt;, limited with &lt;code&gt;max_cost_usd&lt;/code&gt;, and integrated with notifications.&lt;/p&gt;

&lt;p&gt;Logs, transcripts, approvals, retries, repairs and task answers can all be handled without entering the TUI.&lt;/p&gt;

&lt;p&gt;The TUI hasn't been neglected either — tasks now open into a dedicated workspace containing steps, attempts, metadata, output and file-grouped diffs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vincent builds Vincent
&lt;/h2&gt;

&lt;p&gt;This is the part I'm most excited about.&lt;/p&gt;

&lt;p&gt;My own development workflow now uses Vincent itself:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GitHub issue
    ↓
planning
    ↓
implementation
    ↓
documentation
    ↓
cross-platform verification
    ↓
human gates
    ↓
merge
    ↓
release audit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude Code, Codex or Cursor can provide the inference.&lt;/p&gt;

&lt;p&gt;Vincent owns the durable workflow, state and verification around them.&lt;/p&gt;

&lt;p&gt;That's the architecture I've been working toward: &lt;strong&gt;a local, inspectable and vendor-independent control plane for coding agents.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Vincent is also &lt;strong&gt;MIT licensed again&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I wrote a deeper overview of everything that changed between 0.4.0 and 0.7.0 here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.lezli01.is-a.dev/blog/vincent-0-7-release/" rel="noopener noreferrer"&gt;https://blog.lezli01.is-a.dev/blog/vincent-0-7-release/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feedback and contributions are very welcome.&lt;/p&gt;

</description>
      <category>automation</category>
      <category>devops</category>
      <category>opensource</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Vincent v0.7.0: Better visibility, stronger automation, less babysitting</title>
      <dc:creator>László Szabó</dc:creator>
      <pubDate>Sat, 29 Aug 2026 08:52:52 +0000</pubDate>
      <link>https://dev.to/lezli01/vincent-v070-better-visibility-stronger-automation-less-babysitting-3m89</link>
      <guid>https://dev.to/lezli01/vincent-v070-better-visibility-stronger-automation-less-babysitting-3m89</guid>
      <description>&lt;p&gt;Vincent v0.7.0 is out.&lt;/p&gt;

&lt;p&gt;This release is mainly about one thing:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Making agentic development workflows easier to operate when you are not staring at them.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As Vincent has grown, simply starting an agent has become the easy part.&lt;/p&gt;

&lt;p&gt;The harder questions are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is it doing right now?&lt;/li&gt;
&lt;li&gt;Does it need input from me?&lt;/li&gt;
&lt;li&gt;Can I control it from a script or over SSH?&lt;/li&gt;
&lt;li&gt;Can it notify me when something important happens?&lt;/li&gt;
&lt;li&gt;Can I inspect what happened without opening the TUI?&lt;/li&gt;
&lt;li&gt;Can I put limits around how much an autonomous task can consume?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;v0.7.0 tackles a lot of that.&lt;/p&gt;




&lt;h2&gt;
  
  
  A proper workspace for running tasks
&lt;/h2&gt;

&lt;p&gt;The TUI received one of its biggest UX improvements so far.&lt;/p&gt;

&lt;p&gt;Opening a task now takes you into a dedicated full-screen workspace with separate views for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Steps &amp;amp; Attempts&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Task Details&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Output&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Attempt selection follows you between views, outputs can be switched between retries, and failed attempts expose their result summary directly in the timeline.&lt;/p&gt;

&lt;p&gt;The main task board can now stay what it should be: a board.&lt;/p&gt;

&lt;p&gt;The details live where they belong.&lt;/p&gt;




&lt;h2&gt;
  
  
  Agents can finally tell you what they are doing
&lt;/h2&gt;

&lt;p&gt;A running step can now publish its own status:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vincent status &lt;span class="s2"&gt;"Running integration tests"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That status becomes visible in the TUI and is also available through the API.&lt;/p&gt;

&lt;p&gt;This sounds like a small feature, but it changes the experience of running longer workflows quite a bit.&lt;/p&gt;

&lt;p&gt;Instead of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;running...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;you can see something closer to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;» Investigating the failing authentication test
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;» Waiting for the GitHub checks to complete
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agent steps also receive the &lt;code&gt;VINCENT_*&lt;/code&gt; environment variables that command and check steps already had, so agents can report their own progress through their shell tools.&lt;/p&gt;




&lt;h2&gt;
  
  
  Vincent can notify you when it actually needs you
&lt;/h2&gt;

&lt;p&gt;Previously, Vincent could ring the terminal bell when a task reached an interactive state.&lt;/p&gt;

&lt;p&gt;That is useful — assuming the TUI is open.&lt;/p&gt;

&lt;p&gt;v0.7.0 adds configurable external notifications.&lt;/p&gt;

&lt;p&gt;You can run a command whenever a task enters states such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;notify&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;notify-send&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Vincent&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;needs&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;attention"&lt;/span&gt;
  &lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;blocked&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;awaiting_input&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;awaiting_gate&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vincent passes a JSON payload to the command, including information about the task and the transition.&lt;/p&gt;

&lt;p&gt;Because this is command-based rather than tied to a specific notification provider, you can integrate it with whatever makes sense for your setup:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;desktop notifications&lt;/li&gt;
&lt;li&gt;Slack&lt;/li&gt;
&lt;li&gt;scripts&lt;/li&gt;
&lt;li&gt;webhooks&lt;/li&gt;
&lt;li&gt;file drops&lt;/li&gt;
&lt;li&gt;custom internal tooling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The important part is that a task can now run in the background and actively tell you when human involvement is useful.&lt;/p&gt;




&lt;h2&gt;
  
  
  The CLI can now control almost everything
&lt;/h2&gt;

&lt;p&gt;A major goal of this release was reducing the dependency on the TUI for operational tasks.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;vincent task&lt;/code&gt; now includes commands for actions such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vincent task pause
vincent task resume
vincent task skip
vincent task approve
vincent task reject
vincent task retry
vincent task repair
vincent task archive
vincent task answer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This makes Vincent much easier to use from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;shell scripts&lt;/li&gt;
&lt;li&gt;CI environments&lt;/li&gt;
&lt;li&gt;cron jobs&lt;/li&gt;
&lt;li&gt;remote SSH sessions&lt;/li&gt;
&lt;li&gt;automation around existing developer tooling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, blocked tasks can now be discovered and retried programmatically:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vincent task &lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;--state&lt;/span&gt; blocked &lt;span class="nt"&gt;--json&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  | jq &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s1"&gt;'.[].id'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  | xargs &lt;span class="nt"&gt;-n1&lt;/span&gt; vincent task retry
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The TUI remains useful for interactive work, but it is no longer the only practical control surface.&lt;/p&gt;




&lt;h2&gt;
  
  
  Logs and transcripts are first-class CLI citizens
&lt;/h2&gt;

&lt;p&gt;Two new commands make debugging and remote operation significantly easier:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vincent daemon logs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vincent task transcript &amp;lt;task-id&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Daemon logs are read directly from disk, so they still work even if the daemon itself is unavailable.&lt;/p&gt;

&lt;p&gt;Task transcripts can be viewed as human-readable output, NDJSON, or raw agent JSONL.&lt;/p&gt;

&lt;p&gt;That makes it much easier to inspect what happened inside an attempt without digging through Vincent's data directory manually.&lt;/p&gt;




&lt;h2&gt;
  
  
  Create tasks directly from GitHub issues
&lt;/h2&gt;

&lt;p&gt;Vincent can now create a task from a GitHub issue.&lt;/p&gt;

&lt;p&gt;For projects connected to GitHub, Vincent can pull in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the issue title&lt;/li&gt;
&lt;li&gt;description&lt;/li&gt;
&lt;li&gt;issue URL&lt;/li&gt;
&lt;li&gt;labels&lt;/li&gt;
&lt;li&gt;assignee&lt;/li&gt;
&lt;li&gt;milestone&lt;/li&gt;
&lt;li&gt;issue number&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Workflow fields can also be populated from issue metadata when their definitions match.&lt;/p&gt;

&lt;p&gt;This is a particularly useful bridge between traditional development workflows and agentic execution.&lt;/p&gt;

&lt;p&gt;An issue can increasingly become the starting point for a reproducible workflow rather than merely a description of work waiting for someone to pick it up.&lt;/p&gt;




&lt;h2&gt;
  
  
  Put a budget around autonomous work
&lt;/h2&gt;

&lt;p&gt;v0.7.0 also introduces per-task spending limits.&lt;/p&gt;

&lt;p&gt;That means autonomous workflows can have explicit boundaries around how much agent execution they are allowed to consume.&lt;/p&gt;

&lt;p&gt;For long-running or heavily automated workflows, this is an important safety mechanism.&lt;/p&gt;

&lt;p&gt;Autonomy is much more useful when it comes with limits.&lt;/p&gt;




&lt;h2&gt;
  
  
  Better tooling for writing workflows
&lt;/h2&gt;

&lt;p&gt;Workflow authors also get some useful additions.&lt;/p&gt;

&lt;p&gt;Create a starting workflow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vincent workflow init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And render a workflow template without running it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vincent workflow render
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The latter is especially useful when building workflows with fields and templates because you can validate the generated result before actually executing anything.&lt;/p&gt;




&lt;h2&gt;
  
  
  Smaller changes that matter
&lt;/h2&gt;

&lt;p&gt;There is a lot more in this release, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;idempotency keys for task creation&lt;/li&gt;
&lt;li&gt;stronger checks around restricted agent execution&lt;/li&gt;
&lt;li&gt;agent adapter version and capability reporting&lt;/li&gt;
&lt;li&gt;safer process recovery&lt;/li&gt;
&lt;li&gt;workflow source tracking&lt;/li&gt;
&lt;li&gt;new built-in workflows&lt;/li&gt;
&lt;li&gt;improved retry and polling behavior&lt;/li&gt;
&lt;li&gt;better wrapping of long content in the TUI&lt;/li&gt;
&lt;li&gt;macOS release signing/notarization work&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can find the full list in the changelog.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where Vincent is heading
&lt;/h2&gt;

&lt;p&gt;The goal with Vincent is not to build another chat UI around an LLM.&lt;/p&gt;

&lt;p&gt;I want the unit of work to be a &lt;strong&gt;workflow&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Agents are one tool inside that workflow, alongside commands, checks, control flow, human gates, retries, parallel execution, and deterministic automation.&lt;/p&gt;

&lt;p&gt;And increasingly, I want those workflows to be able to run without requiring constant supervision.&lt;/p&gt;

&lt;p&gt;v0.7.0 is a fairly big step in that direction.&lt;/p&gt;

&lt;p&gt;If you're experimenting with agentic software development, I'd love to hear what kinds of workflows you're building.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Full changelog:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://lezli01.is-a.dev/vincent/changelog.html" rel="noopener noreferrer"&gt;https://lezli01.is-a.dev/vincent/changelog.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/lezli01/vincent" rel="noopener noreferrer"&gt;https://github.com/lezli01/vincent&lt;/a&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>ai</category>
      <category>agents</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>I didn’t start building vincent because I wanted to create another AI coding tool.</title>
      <dc:creator>László Szabó</dc:creator>
      <pubDate>Fri, 28 Aug 2026 06:42:06 +0000</pubDate>
      <link>https://dev.to/lezli01/i-didnt-start-building-vincent-because-i-wanted-to-create-another-ai-coding-tool-1ao5</link>
      <guid>https://dev.to/lezli01/i-didnt-start-building-vincent-because-i-wanted-to-create-another-ai-coding-tool-1ao5</guid>
      <description>&lt;p&gt;I built it because I got tired of being the workflow engine myself.&lt;/p&gt;

&lt;p&gt;For many coding tasks, especially QA issues, I kept giving agents essentially the same process:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Understand the ticket.&lt;/li&gt;
&lt;li&gt;Check whether the issue could be valid.&lt;/li&gt;
&lt;li&gt;Reproduce it.&lt;/li&gt;
&lt;li&gt;Fix the root cause.&lt;/li&gt;
&lt;li&gt;Add regression tests.&lt;/li&gt;
&lt;li&gt;Update the documentation.&lt;/li&gt;
&lt;li&gt;Bring everything back for review.&lt;/li&gt;
&lt;li&gt;After approval, open the PR and update the ticket.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The problem wasn’t that agents couldn’t perform these steps.&lt;/p&gt;

&lt;p&gt;The problem was that I had to keep orchestrating them.&lt;/p&gt;

&lt;p&gt;I was carrying context between stages, checking whether conditions had been met, deciding when the workflow should stop, and repeatedly explaining what should happen next.&lt;/p&gt;

&lt;p&gt;At some point the obvious question became:&lt;/p&gt;

&lt;p&gt;Why am I describing this process again?&lt;/p&gt;

&lt;p&gt;Why can’t I describe it once and simply provide the ticket ID next time?&lt;/p&gt;

&lt;p&gt;That question became Vincent.&lt;/p&gt;

&lt;p&gt;The goal is not to hide everything inside one huge prompt. It’s to make agentic development workflows explicit, reusable and inspectable with control flow, checks, persisted outputs and human gates when human judgment is actually valuable.&lt;/p&gt;

&lt;p&gt;I wrote the story behind it here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://lezli01.is-a.dev/vincent/docs/why/the-workflow-i-kept-repeating-and-how-vincent-was-born.html" rel="noopener noreferrer"&gt;https://lezli01.is-a.dev/vincent/docs/why/the-workflow-i-kept-repeating-and-how-vincent-was-born.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’d be interested to hear how others are handling this: are you still orchestrating coding agents manually, or have you started turning your recurring processes into reusable workflows?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
    <item>
      <title>vincent: a local-first control plane for AI coding agents</title>
      <dc:creator>László Szabó</dc:creator>
      <pubDate>Thu, 27 Aug 2026 08:25:02 +0000</pubDate>
      <link>https://dev.to/lezli01/vincent-a-local-first-control-plane-for-ai-coding-agents-1i8i</link>
      <guid>https://dev.to/lezli01/vincent-a-local-first-control-plane-for-ai-coding-agents-1i8i</guid>
      <description>&lt;p&gt;AI coding agents have become surprisingly capable.&lt;/p&gt;

&lt;p&gt;But once I started using them seriously, I ran into a different problem:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Starting an agent is easy. Managing many of them isn't.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A few tasks quickly turned into multiple terminals, repositories, branches, prompts, transcripts and agent sessions. I wanted to be able to start work, leave it running, see what every agent was doing, enforce deterministic checks, intervene when necessary, and switch between different agent providers without redesigning the whole workflow.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;Vincent&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/lezli01/vincent" rel="noopener noreferrer"&gt;https://github.com/lezli01/vincent&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Vincent stands for:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;V&lt;/strong&gt;endor-&lt;strong&gt;i&lt;/strong&gt;ndependent co*&lt;em&gt;n&lt;/em&gt;&lt;em&gt;trol plane for exe&lt;/em&gt;&lt;em&gt;c&lt;/em&gt;&lt;em&gt;uting na&lt;/em&gt;&lt;em&gt;t&lt;/em&gt;&lt;em&gt;ive ag&lt;/em&gt;&lt;em&gt;ent&lt;/em&gt;* tooling.&lt;/p&gt;

&lt;p&gt;It is an open-source, MIT-licensed, local-first orchestrator for AI coding-agent workloads.&lt;/p&gt;

&lt;h2&gt;
  
  
  The idea
&lt;/h2&gt;

&lt;p&gt;Vincent isn't another coding agent.&lt;/p&gt;

&lt;p&gt;Instead, it sits &lt;strong&gt;above the agents you already use&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Currently it can execute:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Claude Code&lt;/li&gt;
&lt;li&gt;OpenAI Codex&lt;/li&gt;
&lt;li&gt;Cursor Agent&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vincent uses their native CLIs and the authentication already configured on your machine. It doesn't try to replace them and it doesn't need to store their credentials.&lt;/p&gt;

&lt;p&gt;The architecture is centered around a local daemon:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                 ┌─────────────┐
                 │     TUI     │
                 └──────┬──────┘
                        │
                 ┌──────▼──────┐
CLI / scripts ──►│ Vincent     │◄── REST / SSE
                 │ daemon      │
                 └──────┬──────┘
                        │
         ┌──────────────┼──────────────┐
         ▼              ▼              ▼
     Claude Code      Codex        Cursor Agent
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The daemon owns the state, scheduling and execution.&lt;/p&gt;

&lt;p&gt;That means I can close the TUI or terminal and the tasks continue running.&lt;/p&gt;

&lt;h2&gt;
  
  
  Workflows instead of giant prompts
&lt;/h2&gt;

&lt;p&gt;One of the biggest things I wanted was to avoid solving everything with one enormous AI prompt.&lt;/p&gt;

&lt;p&gt;Vincent workflows are YAML and can mix &lt;strong&gt;agentic steps with deterministic operations&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A workflow can contain things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;agent prompts&lt;/li&gt;
&lt;li&gt;shell commands&lt;/li&gt;
&lt;li&gt;verification checks&lt;/li&gt;
&lt;li&gt;conditions&lt;/li&gt;
&lt;li&gt;loops&lt;/li&gt;
&lt;li&gt;parallel execution&lt;/li&gt;
&lt;li&gt;isolated fan-out&lt;/li&gt;
&lt;li&gt;reusable workflow includes&lt;/li&gt;
&lt;li&gt;human approval gates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Conceptually, you might have something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;implement&lt;/span&gt;
    &lt;span class="na"&gt;agent&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;codex&lt;/span&gt;
    &lt;span class="na"&gt;prompt&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
      &lt;span class="s"&gt;Implement the requested change.&lt;/span&gt;

  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;test&lt;/span&gt;
    &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;go test ./...&lt;/span&gt;

  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;fix&lt;/span&gt;
    &lt;span class="na"&gt;if&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;previous.failed&lt;/span&gt;
    &lt;span class="na"&gt;agent&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;codex&lt;/span&gt;
    &lt;span class="na"&gt;prompt&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
      &lt;span class="s"&gt;The tests failed.&lt;/span&gt;

      &lt;span class="s"&gt;Fix the implementation based on the failure.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important part isn't the exact syntax here.&lt;/p&gt;

&lt;p&gt;It's the separation of responsibilities.&lt;/p&gt;

&lt;p&gt;If a compiler, test runner, linter or script can determine something reliably, I don't want to spend AI tokens asking an LLM to do it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use agents where reasoning is useful. Use normal software everywhere else.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Checks, not claims
&lt;/h2&gt;

&lt;p&gt;This led to another important design decision.&lt;/p&gt;

&lt;p&gt;An agent saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I've completed the task and all tests pass."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;doesn't mean the task succeeded.&lt;/p&gt;

&lt;p&gt;Vincent can use deterministic checks to decide that.&lt;/p&gt;

&lt;p&gt;If a check fails, the actual failure can be fed back into the next attempt.&lt;/p&gt;

&lt;p&gt;So instead of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent: looks good!
Task: success
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;the model becomes closer to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent makes change
       ↓
Run real verification
       ↓
   success?
    /     \
  yes      no
  ↓         ↓
next     retry with
step     real failure
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This makes agent execution much more useful for unattended workloads.&lt;/p&gt;

&lt;h2&gt;
  
  
  Every task gets its own worktree
&lt;/h2&gt;

&lt;p&gt;Parallel agents modifying the same checkout is a great way to create chaos.&lt;/p&gt;

&lt;p&gt;Vincent isolates development tasks using Git worktrees.&lt;/p&gt;

&lt;p&gt;Each task gets its own:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;worktree&lt;/li&gt;
&lt;li&gt;branch&lt;/li&gt;
&lt;li&gt;execution state&lt;/li&gt;
&lt;li&gt;transcripts&lt;/li&gt;
&lt;li&gt;step history&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So multiple tasks can operate against the same repository without competing over the developer's working tree.&lt;/p&gt;

&lt;p&gt;You can also configure global and project-level concurrency limits.&lt;/p&gt;

&lt;h2&gt;
  
  
  Humans are still part of the workflow
&lt;/h2&gt;

&lt;p&gt;I don't think autonomous should mean uncontrollable.&lt;/p&gt;

&lt;p&gt;There are situations where I explicitly want an agent to stop.&lt;/p&gt;

&lt;p&gt;Vincent supports human gates, blocked tasks and intervention.&lt;/p&gt;

&lt;p&gt;For example, a workflow can require approval before something sensitive happens.&lt;/p&gt;

&lt;p&gt;If an execution fails, I can inspect the result and decide whether to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;retry it&lt;/li&gt;
&lt;li&gt;edit and retry&lt;/li&gt;
&lt;li&gt;repair it with another agent&lt;/li&gt;
&lt;li&gt;skip the step&lt;/li&gt;
&lt;li&gt;abort the task&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are also follow-up runs, so after an agent finishes a task I can ask it to make another change on the same branch and worktree without reconstructing the context manually.&lt;/p&gt;

&lt;h2&gt;
  
  
  A TUI for watching the factory
&lt;/h2&gt;

&lt;p&gt;Vincent includes a terminal UI because once several workloads are running, visibility becomes important.&lt;/p&gt;

&lt;p&gt;The TUI gives me a central view of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;running and queued tasks&lt;/li&gt;
&lt;li&gt;workflow steps&lt;/li&gt;
&lt;li&gt;live agent output&lt;/li&gt;
&lt;li&gt;duration&lt;/li&gt;
&lt;li&gt;token usage and cost&lt;/li&gt;
&lt;li&gt;blocked tasks&lt;/li&gt;
&lt;li&gt;projects&lt;/li&gt;
&lt;li&gt;workflows&lt;/li&gt;
&lt;li&gt;agent availability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's essentially the dashboard I wanted when I started running multiple coding agents simultaneously.&lt;/p&gt;

&lt;h2&gt;
  
  
  Crash recovery matters
&lt;/h2&gt;

&lt;p&gt;This is one of the less glamorous parts of agent tooling, but probably one of the more important ones.&lt;/p&gt;

&lt;p&gt;What happens when the orchestrator crashes halfway through a 30-minute agent task?&lt;/p&gt;

&lt;p&gt;Vincent is designed around durable state.&lt;/p&gt;

&lt;p&gt;Transitions are persisted, interrupted executions can be reconciled after restart, transcripts are retained, and tasks don't simply disappear because the UI closed.&lt;/p&gt;

&lt;p&gt;I've tried to treat agent workloads more like real jobs running on an execution platform than temporary terminal sessions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vendor independence
&lt;/h2&gt;

&lt;p&gt;I also deliberately don't want workflows tightly coupled to a single AI vendor.&lt;/p&gt;

&lt;p&gt;An individual workflow step can choose an agent, model, reasoning effort and permissions.&lt;/p&gt;

&lt;p&gt;That means one workflow could theoretically use different models for different parts of the job.&lt;/p&gt;

&lt;p&gt;It also means switching your preferred agent doesn't require throwing away the orchestration layer around it.&lt;/p&gt;

&lt;h2&gt;
  
  
  It works from more than the TUI
&lt;/h2&gt;

&lt;p&gt;The TUI is useful for humans, but Vincent isn't TUI-only.&lt;/p&gt;

&lt;p&gt;Operations are also available through the CLI and a localhost REST + SSE API.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vincent project add /path/to/repo

vincent task add &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--project&lt;/span&gt; 1 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--title&lt;/span&gt; &lt;span class="s2"&gt;"Add a health endpoint"&lt;/span&gt;

vincent task &lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;--state&lt;/span&gt; running

vincent workflow validate &lt;span class="se"&gt;\&lt;/span&gt;
  .vincent/workflows/feature-pr.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Commands support JSON output as well, so Vincent itself can become part of larger automation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing it
&lt;/h2&gt;

&lt;p&gt;On macOS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;lezli01/tap/vincent
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Windows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;winget&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;lezli01.Vincent&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--exact&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;scoop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;bucket&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;vincent&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;https://github.com/lezli01/scoop-bucket&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;scoop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;vincent/vincent&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With mise:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mise use &lt;span class="nt"&gt;-g&lt;/span&gt; github:lezli01/vincent
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There are also deb/rpm packages and standalone binaries for Windows, macOS and Linux.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I open sourced it
&lt;/h2&gt;

&lt;p&gt;Agentic development is moving extremely quickly.&lt;/p&gt;

&lt;p&gt;I don't think the interesting problem anymore is simply:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Can an LLM write this function?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The problem I'm increasingly interested in is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"How do we turn AI agents into reliable, observable and controllable software-engineering workloads?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That involves scheduling, isolation, verification, retries, state management, human gates, observability and cost management.&lt;/p&gt;

&lt;p&gt;In other words, a lot of familiar software engineering problems — just applied to a new kind of worker.&lt;/p&gt;

&lt;p&gt;Vincent is my attempt at building that layer.&lt;/p&gt;

&lt;p&gt;It's still pre-1.0 and evolving quickly, but I already use it for my own development workflows.&lt;/p&gt;

&lt;p&gt;The project is now MIT licensed, so you're free to use it, modify it, build on it or contribute.&lt;/p&gt;

&lt;p&gt;If this problem sounds familiar, I'd love to hear how you're currently managing multiple coding agents.&lt;/p&gt;

&lt;p&gt;And if you want to try Vincent:&lt;/p&gt;

&lt;p&gt;⭐ GitHub: &lt;a href="https://github.com/lezli01/vincent" rel="noopener noreferrer"&gt;https://github.com/lezli01/vincent&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📖 Documentation: &lt;a href="https://lezli01.is-a.dev/vincent/" rel="noopener noreferrer"&gt;https://lezli01.is-a.dev/vincent/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feedback, issues and contributions are very welcome.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>productivity</category>
      <category>devtools</category>
    </item>
    <item>
      <title>Firebase Security Rules deserve better IDE support</title>
      <dc:creator>László Szabó</dc:creator>
      <pubDate>Tue, 30 Jun 2026 11:18:40 +0000</pubDate>
      <link>https://dev.to/lezli01/firebase-security-rules-deserve-better-ide-support-25gm</link>
      <guid>https://dev.to/lezli01/firebase-security-rules-deserve-better-ide-support-25gm</guid>
      <description>&lt;p&gt;I have been writing Cloud Firestore Security Rules for years, and I usually edit them in the same place where I do the rest of my work: Android Studio or another JetBrains IDE.&lt;/p&gt;

&lt;p&gt;And every time, the same thing bothered me.&lt;/p&gt;

&lt;p&gt;A &lt;code&gt;.rules&lt;/code&gt; file controls access to production data, but in many IDE setups it is treated almost like plain text.&lt;/p&gt;

&lt;p&gt;No proper structure awareness.&lt;br&gt;
No useful formatting.&lt;br&gt;
No diagnostics while editing.&lt;br&gt;
No symbol support for helper functions.&lt;/p&gt;

&lt;p&gt;For something that decides who can read and write your data, that feels wrong.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;hotrulez&lt;/strong&gt;, a free and open-source JetBrains plugin for Firebase Security Rules.&lt;/p&gt;

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

&lt;p&gt;hotrulez adds IDE support for &lt;code&gt;.rules&lt;/code&gt; files inside IntelliJ-based IDEs, including Android Studio.&lt;/p&gt;

&lt;p&gt;It currently supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;syntax highlighting&lt;/li&gt;
&lt;li&gt;formatting&lt;/li&gt;
&lt;li&gt;parse error diagnostics&lt;/li&gt;
&lt;li&gt;structure-aware rule parsing&lt;/li&gt;
&lt;li&gt;helper/function symbol support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is simple: make Firebase Security Rules easier to read, write, and maintain in the IDE where many Firebase developers already work.&lt;/p&gt;

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

&lt;p&gt;hotrulez does &lt;strong&gt;not&lt;/strong&gt; evaluate authentication logic.&lt;/p&gt;

&lt;p&gt;It does &lt;strong&gt;not&lt;/strong&gt; replace the Firebase Emulator Suite.&lt;/p&gt;

&lt;p&gt;It does &lt;strong&gt;not&lt;/strong&gt; tell you whether your rules are secure.&lt;/p&gt;

&lt;p&gt;That part still belongs to proper tests, reviews, and Firebase’s own tooling.&lt;/p&gt;

&lt;p&gt;The plugin focuses on the editor experience: helping &lt;code&gt;.rules&lt;/code&gt; files feel like real code instead of a plain text blob.&lt;/p&gt;

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

&lt;p&gt;Security rules tend to grow slowly.&lt;/p&gt;

&lt;p&gt;At first, they are small enough that you can keep everything in your head. Then helper functions appear. Then nested &lt;code&gt;match&lt;/code&gt; blocks grow. Then multiple collections get different access patterns. Eventually, the file becomes important enough that editing it without language support feels uncomfortable.&lt;/p&gt;

&lt;p&gt;I wanted a free, open-source option that made this experience better in JetBrains IDEs.&lt;/p&gt;

&lt;p&gt;So I built one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who it is for
&lt;/h2&gt;

&lt;p&gt;hotrulez is probably useful if you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;use Firebase or Cloud Firestore&lt;/li&gt;
&lt;li&gt;edit &lt;code&gt;.rules&lt;/code&gt; files in Android Studio or IntelliJ&lt;/li&gt;
&lt;li&gt;maintain larger Firestore rulesets&lt;/li&gt;
&lt;li&gt;want basic IDE support without using a paid plugin&lt;/li&gt;
&lt;li&gt;prefer open-source developer tooling&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/lezli01/hotrulez" rel="noopener noreferrer"&gt;hotrulez&lt;/a&gt;&lt;br&gt;
JetBrains Marketplace: &lt;a href="https://plugins.jetbrains.com/plugin/32552-firebase-rules-hotrulez-" rel="noopener noreferrer"&gt;Firebase Rules&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feedback, bug reports, and feature ideas are very welcome, especially from people maintaining larger Firebase Security Rules files.&lt;/p&gt;

</description>
      <category>firebase</category>
      <category>jetbrains</category>
      <category>androidstudio</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
