<?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: Szymon Paluch</title>
    <description>The latest articles on DEV Community by Szymon Paluch (@szymonpaluch).</description>
    <link>https://dev.to/szymonpaluch</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%2F4033858%2F83ca0373-4fe9-4f36-ad35-29e23f9a3315.png</url>
      <title>DEV Community: Szymon Paluch</title>
      <link>https://dev.to/szymonpaluch</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/szymonpaluch"/>
    <language>en</language>
    <item>
      <title>Workflow Studio: observe and design Claude Code workflows</title>
      <dc:creator>Szymon Paluch</dc:creator>
      <pubDate>Fri, 24 Jul 2026 12:56:41 +0000</pubDate>
      <link>https://dev.to/szymonpaluch/workflow-studio-observe-and-design-claude-code-workflows-59k7</link>
      <guid>https://dev.to/szymonpaluch/workflow-studio-observe-and-design-claude-code-workflows-59k7</guid>
      <description>&lt;p&gt;Claude Code's Workflow tool fans out subagents in parallel and leaves the result on disk as raw logs. I built a local dashboard that reads those artifacts and renders the run, plus a block canvas that compiles back to a runnable script. Here is what it does, what it deliberately does not do, and how to install it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The short version:&lt;/strong&gt; Workflow Studio is a local companion for Claude Code's built-in Workflow tool. It has two halves — &lt;strong&gt;Observe&lt;/strong&gt;, a dashboard that reads Claude Code's own on-disk run artifacts and draws each multi-agent run as a phase graph and a wall-clock timeline, and &lt;strong&gt;Author&lt;/strong&gt;, a 12-block canvas that compiles to a real, runnable Workflow script. Both are exposed to the agent through an MCP server with nine tools. It runs on &lt;code&gt;127.0.0.1&lt;/code&gt;, it is MIT-licensed, and you install it with one paste. The current release is v0.2.0.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem: a multi-agent run is a black box
&lt;/h2&gt;

&lt;p&gt;Claude Code's Workflow tool is its deterministic multi-agent primitive: you write a small JS script that fans agents out in parallel, pipes a list through stages, gates on a value, loops until a condition holds. It works. The problem starts the moment the run finishes.&lt;/p&gt;

&lt;p&gt;A finished run leaves real artifacts on disk. Under &lt;code&gt;~/.claude/projects/&amp;lt;project&amp;gt;/&amp;lt;session&amp;gt;/subagents/workflows/wf_*/&lt;/code&gt; you get a &lt;code&gt;journal.jsonl&lt;/code&gt;, a per-agent transcript for every subagent, and a small metadata file each. That is a lot of ground truth. Nothing renders it. So you scroll. You cannot see the phases at a glance, how wide the fan-out actually went, how many tokens each agent burned, how long each one took, or which branch a gate picked when it mattered.&lt;/p&gt;

&lt;p&gt;That is the same shape of failure I wrote about in &lt;em&gt;silent failures in agentic systems&lt;/em&gt;: nothing crashes, so nothing tells you that eleven of your twelve verifiers returned an empty result. And it compounds on the authoring side — the only way to build one of these is to hand-write the script, and the only channel between the script you wrote and the agent that runs it is a &lt;code&gt;.js&lt;/code&gt; file dropped on disk.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Workflow Studio is
&lt;/h2&gt;

&lt;p&gt;A locally-run companion layer, not a runtime. It ships no agents of its own and defines no execution engine; it sits on top of the one you already have. Two surfaces plus a channel:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Observe&lt;/strong&gt; — a dashboard that passively reads Claude Code's run artifacts and renders each run as a phase/agent graph and a timeline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Author&lt;/strong&gt; — a no-code block canvas that compiles down to a real Workflow script.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP&lt;/strong&gt; — a stdio server with nine tools, so the same Claude Code agent that runs your workflows can also read your designs, inspect the observations, and write new designs back into your builder.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;12&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Block kinds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;9&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;MCP tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;127.0.0.1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Default bind&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MIT&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;License&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;One thing to be clear about up front, because it shapes everything else: &lt;strong&gt;Workflow Studio cannot start a run.&lt;/strong&gt; Not over MCP, not from the builder. It reads what Claude Code already produced and it hands the agent a script the agent runs with its own Workflow tool. That is a design decision, not a gap, and I explain why in the authoring section.&lt;/p&gt;

&lt;h2&gt;
  
  
  Observe: see what actually ran
&lt;/h2&gt;

&lt;p&gt;The dashboard turns a run into a graph you can read. Phases, the fan-out, tokens per agent, the branch taken, each agent's output. Click a node and the inspector shows what that agent was given and what it returned — its prompt, its thinking, its tool calls, its output, its model, its state and how long it took, and its spawn depth.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fte3e8c1qs5rq7yco3amz.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fte3e8c1qs5rq7yco3amz.webp" alt="Observe — phase graph of a real deep-research run" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Observe · a real deep-research run of mine — 111 agents across Scope → Search → Fetch → Verify → Synthesize, 3.7M tokens, about 22 minutes. One run on one machine, not a benchmark.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The timeline view answers the other question the graph does not: what overlapped with what. A fan-out that looks like one wide row in the graph is usually a staircase in wall-clock time, and seeing that is how you find out that your second fan-out was waiting on a single straggler from the first.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3ztgfl45179drnlc8j3k.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3ztgfl45179drnlc8j3k.webp" alt="Observe — the wall-clock timeline" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Observe · the wall-clock timeline — the Review fan-out runs first, then Verify staggers in as each agent lands.&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Honest by construction.&lt;/strong&gt; The numbers come from two different places and the dashboard says which. When Claude Code's own progress overlay is still on disk, labels, phases, states and token counts are read straight from it and the run is authoritative. When that overlay has already been garbage-collected, phases and labels are derived heuristically from the journal, and the run is flagged as such — tokens or timings that could not be measured are marked, never invented. A run still in flight is labelled &lt;code&gt;live&lt;/code&gt; and its elapsed times are lower bounds. You are never shown a number that looks measured but isn't.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Observing is also where the next workflow usually starts. When a run turns out well, you promote it to a reusable workflow in one click — the graph you were just reading opens in the builder as a starting point, so a good pipeline becomes a template instead of something you reconstruct from memory next month.&lt;/p&gt;

&lt;p&gt;Two practical notes. The dashboard refreshes by polling with a short cache, not by pushing — it catches up within a couple of seconds, it is not a socket. And it reads across all your projects and sessions, so old runs stay browsable long after the session that produced them is gone.&lt;/p&gt;

&lt;h2&gt;
  
  
  Author: build the recipe, not the boilerplate
&lt;/h2&gt;

&lt;p&gt;The other half is a canvas. You drop blocks, wire the ports, and Workflow Studio compiles the graph to a real Claude Code Workflow script — the native calls (&lt;code&gt;agent()&lt;/code&gt;, &lt;code&gt;phase()&lt;/code&gt;, &lt;code&gt;parallel()&lt;/code&gt;, &lt;code&gt;pipeline()&lt;/code&gt;, &lt;code&gt;log()&lt;/code&gt;) plus a sidecar comment holding the design. The round-trip is lossless: a compiled script reopens as the exact graph you drew, so you can edit it on the canvas, in the editor, or both, without either side losing work.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo14mp0dpzltz3wummroa.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo14mp0dpzltz3wummroa.webp" alt="Author — the block builder" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Author · the block builder — typed blocks compile to a runnable script.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;There are twelve block kinds. Each one declares the shape of its output, which is what lets a downstream block branch or map on a real field instead of on a string you hope is there:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Block&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;start&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The entry anchor. Two or more children run in parallel.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;agent&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;One agent with a prompt.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fan-out&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;N agents running the same prompt in parallel.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pipeline&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Each list item flows through the stages independently.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;loop&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Refine a result in place over N rounds, or until a condition holds.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Run a branch only if a declared field meets a condition.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;switch&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Branch on a declared enum value — a k-way router.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;filter&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Keep only list items matching a field. No agent involved.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;rank&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Sort a list by a field and keep the top N. No agent involved.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub-workflow&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A nested workflow reused as a single block.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;input&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A fixed list of items — a source for fan-out, pipeline or rank.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;param&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A named value you can @-mention inside prompts.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;You never start from an empty canvas. Every new workflow begins from one of seven built-in patterns that already exercise the dynamic primitives: &lt;strong&gt;Basic&lt;/strong&gt; (agent plus in-place iteration), &lt;strong&gt;Classify and act&lt;/strong&gt; (a classifier enum routing to one of several branches), &lt;strong&gt;Fan-out and synthesis&lt;/strong&gt;, &lt;strong&gt;Adversarial verification&lt;/strong&gt; (independent verifiers trying to refute the worker's result), &lt;strong&gt;Generate and filter&lt;/strong&gt;, &lt;strong&gt;Tournament&lt;/strong&gt;, and &lt;strong&gt;Loop until done&lt;/strong&gt;. Pick one, then edit it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The Run button does not run anything.&lt;/strong&gt; The builder has a Run action, and it does not execute your workflow. It opens a dialog that says so in plain words and hands you a phrase to paste into Claude Code, then watches for the run to show up in Observe. The reason is boring and load-bearing: a server-side shell-out would turn a loopback dashboard into an unauthenticated local exec surface. I rejected that in design review and I would reject it again. Execution stays where the permissions live — in your Claude Code session.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Install it in one paste
&lt;/h2&gt;

&lt;p&gt;You need &lt;code&gt;uv&lt;/code&gt; / &lt;code&gt;uvx&lt;/code&gt; on your &lt;code&gt;PATH&lt;/code&gt; and Python 3.9 or newer. Nothing else — the dashboard ships pre-built inside the package, so there is no Node step.&lt;/p&gt;

&lt;p&gt;You are probably already sitting in a coding agent. Hand it this and walk away:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Read https://github.com/hculap/workflow-studio/blob/main/AGENT_INSTALL.md
and set up Workflow Studio for me — run the steps, verify it,
and tell me whether to restart Claude Code.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Prefer to do it yourself? These two are slash commands you type in a Claude Code session — an agent cannot run them for you:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/plugin marketplace add hculap/workflow-studio
/plugin install workflow-studio@workflow-studio
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Claude Code 2.1 and newer there are shell equivalents (&lt;code&gt;claude plugin marketplace add …&lt;/code&gt;, &lt;code&gt;claude plugin install …&lt;/code&gt;), which is what the agent path uses. Either way, &lt;strong&gt;restart Claude Code afterwards&lt;/strong&gt; — the MCP tools and the &lt;code&gt;/workflow-studio:dashboard&lt;/code&gt; command only load on the next session. Verify with &lt;code&gt;claude mcp list&lt;/code&gt;; you want to see the server as connected. If it shows as failed, it is almost always &lt;code&gt;uvx&lt;/code&gt; missing from the &lt;code&gt;PATH&lt;/code&gt; a GUI-launched Claude Code inherited.&lt;/p&gt;

&lt;p&gt;You can also skip the plugin entirely:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# dashboard on http://127.0.0.1:8787/ (opens a browser)&lt;/span&gt;
uvx workflow-studio

&lt;span class="c"&gt;# MCP server on stdio — register it by hand&lt;/span&gt;
claude mcp add workflow-studio &lt;span class="nt"&gt;-s&lt;/span&gt; user &lt;span class="nt"&gt;--&lt;/span&gt; uvx workflow-studio mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One caveat worth knowing: &lt;code&gt;uvx&lt;/code&gt; pulls the package from PyPI and the plugin pins no version, so you pick up new releases silently.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it fits next to LangGraph, CrewAI and n8n
&lt;/h2&gt;

&lt;p&gt;Workflow Studio is not competing with those. They are a different layer of the stack. LangGraph, CrewAI, AutoGen, the OpenAI Agents SDK, n8n and Flowise each hand you a runtime to adopt, and each is portable across model providers — which is a genuine strength Workflow Studio does not have and is not trying to have. Workflow Studio assumes you already run Claude Code, and gives you a way to see what a run did and to author the next one visually.&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;What it is&lt;/th&gt;
&lt;th&gt;Authoring&lt;/th&gt;
&lt;th&gt;Observes real runs&lt;/th&gt;
&lt;th&gt;Local · no account&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Workflow Studio&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Observe + author layer for Claude Code's Workflow tool. Not a runtime.&lt;/td&gt;
&lt;td&gt;No-code canvas (12 blocks) compiling to a real Workflow script&lt;/td&gt;
&lt;td&gt;Yes — reads Claude Code's on-disk artifacts, no SDK, heuristics flagged&lt;/td&gt;
&lt;td&gt;Yes — loopback, no account, no telemetry&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;LangGraph + Studio&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Provider-agnostic framework for stateful graph agents (Py/JS)&lt;/td&gt;
&lt;td&gt;Code-first — you write the graph; Studio visualizes and debugs it&lt;/td&gt;
&lt;td&gt;Yes, and strongly — step and time-travel debugging, deep tracing via LangSmith&lt;/td&gt;
&lt;td&gt;Partial — library runs local; Studio wants a (free) LangSmith account&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CrewAI / AutoGen&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Code-first multi-agent frameworks&lt;/td&gt;
&lt;td&gt;Code (Python / YAML); AutoGen Studio adds a capable no-code GUI&lt;/td&gt;
&lt;td&gt;Yes or partial — you instrument the runtime (AutoGen via OpenTelemetry)&lt;/td&gt;
&lt;td&gt;Partial — libraries local; CrewAI observability hosted-first&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OpenAI Agents SDK&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Lightweight code-first framework&lt;/td&gt;
&lt;td&gt;Code only (Python / TS)&lt;/td&gt;
&lt;td&gt;Yes — built-in tracing, on by default&lt;/td&gt;
&lt;td&gt;Partial — traces default to a hosted dashboard; no bundled local UI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;n8n / Flowise&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Visual low-code platforms that are themselves the runtime&lt;/td&gt;
&lt;td&gt;Visual no-code / low-code canvas&lt;/td&gt;
&lt;td&gt;Yes — but of runs inside their own platform, not Claude Code runs&lt;/td&gt;
&lt;td&gt;Yes — self-hostable, usually via Docker&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That table reflects each tool's own positioning as of mid-2026, and licenses and project status change. Every one of them is capable in its niche — several have a more full-featured canvas or stronger tracing than a v0.2.0 side project, and all of them are portable across model providers, which Workflow Studio is not. The axis here is fit, not ranking. If you are not on Claude Code, none of this is for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Does Workflow Studio run my workflows?&lt;/strong&gt;&lt;br&gt;
No. It cannot start a run, from the builder or over MCP. It compiles a script and hands it to your Claude Code agent, which runs it with its own Workflow tool. A server-side shell-out would turn a loopback dashboard into an unauthenticated local execution surface, so execution stays inside your Claude Code session where the permission model lives.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What do I need to install it?&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;uv&lt;/code&gt; / &lt;code&gt;uvx&lt;/code&gt; on your &lt;code&gt;PATH&lt;/code&gt; and Python 3.9 or newer. Nothing else — the dashboard ships pre-built inside the package, so there is no Node step. Install it as a Claude Code plugin from the GitHub marketplace, or run it standalone with &lt;code&gt;uvx workflow-studio&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does any of my data leave the machine?&lt;/strong&gt;&lt;br&gt;
The application makes no outbound calls and collects no telemetry. It reads local run artifacts and binds to &lt;code&gt;127.0.0.1&lt;/code&gt; by default. Two caveats: &lt;code&gt;uvx&lt;/code&gt; downloads the package from PyPI on first run and on version bumps, and the local server has no authentication, so keep it on loopback unless you add your own auth in front of it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Are the dashboard's token and timing numbers real?&lt;/strong&gt;&lt;br&gt;
When Claude Code's progress overlay is still on disk, yes — they are read straight from it. When that overlay has been garbage-collected, phases and labels are derived heuristically from the run journal and the run is flagged as such. A run still in flight is labelled &lt;code&gt;live&lt;/code&gt; and its elapsed times are lower bounds. Nothing estimated is presented as measured.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is it an alternative to LangGraph, CrewAI or n8n?&lt;/strong&gt;&lt;br&gt;
No — it's a different layer. Those are runtimes you adopt, and they are portable across model providers. Workflow Studio ships no runtime and defines no agents; it sits on top of Claude Code's Workflow tool, which it assumes you already use. If you are not on Claude Code, it has nothing to offer you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is Workflow Studio open source?&lt;/strong&gt;&lt;br&gt;
It is MIT-licensed, with one nuance worth knowing: the GitHub repository is the Claude Code plugin marketplace — manifests, a skill, a command and documentation. The application source is distributed in the PyPI sdist rather than published as a browsable repository, so to read the code you unpack the package.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Links&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Landing page with interactive demos: &lt;a href="https://szymonpaluch.com/workflow-studio/" rel="noopener noreferrer"&gt;https://szymonpaluch.com/workflow-studio/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Plugin on GitHub (MIT): &lt;a href="https://github.com/hculap/workflow-studio" rel="noopener noreferrer"&gt;https://github.com/hculap/workflow-studio&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;PyPI: &lt;a href="https://pypi.org/project/workflow-studio/" rel="noopener noreferrer"&gt;https://pypi.org/project/workflow-studio/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you try it, tell me what your run graph looked like — I want to know how wide people are actually fanning out.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>opensource</category>
    </item>
    <item>
      <title>12 Rules for Building AI Agents That Survive Production</title>
      <dc:creator>Szymon Paluch</dc:creator>
      <pubDate>Fri, 17 Jul 2026 12:30:14 +0000</pubDate>
      <link>https://dev.to/szymonpaluch/12-rules-for-building-ai-agents-that-survive-production-4j9h</link>
      <guid>https://dev.to/szymonpaluch/12-rules-for-building-ai-agents-that-survive-production-4j9h</guid>
      <description>&lt;p&gt;I sat the Claude Certified Architect exam expecting questions about model parameters, context limits, and API flags. I got something else. The exam barely tests trivia. It tests judgment: given a broken agent and four plausible fixes, which one actually addresses the root cause?&lt;/p&gt;

&lt;p&gt;The interesting part was how few ideas the whole thing rests on. The same handful of rules kept deciding the "right" answer, and they are the same rules that decide whether an agent holds up once real users touch it. Below are the twelve I kept running into, plus the four traps that look like solutions and are not.&lt;/p&gt;

&lt;p&gt;This is my own study material, derived from publicly available exam guidance. It reflects how I build, not an official Anthropic position.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The twelve rules&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Enforce determinism in code, not in prompts&lt;br&gt;
If a rule has to fire every single time, it is not a job for a prompt. A prompt is a suggestion the model usually follows. "Usually" is not a guarantee. When you need a guarantee, put it in a hook, a gate, or an allowlist. Code enforces. Prose requests.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pick the cheapest fix that hits the root cause&lt;br&gt;
Before you build a subsystem, try the levers that cost minutes: a sharper tool description, an explicit acceptance criterion, a config change. Most "we need to build X" moments dissolve once you test the cheap fix first. Reach for the classifier only after the one-line change fails.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Bad tool selection? Start with the descriptions&lt;br&gt;
When an agent keeps picking the wrong tool, the description is almost always the culprit, not the model. Tool descriptions are the primary signal the model uses to choose. Rewrite them to say exactly when to use the tool and when not to, before you go anywhere near few-shot examples.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Over-engineering is almost always the wrong answer&lt;br&gt;
Narrowing scope and improving the prompt beat a new subsystem far more often than engineers expect. Every subsystem you add is one more thing to debug, monitor, and keep in sync. Complexity is a cost you pay forever, not once.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A bigger context window does not fix attention&lt;br&gt;
Stuffing more into the window does not make the model pay better attention to what matters. It often does the opposite. Decomposition and structure fix attention: smaller tasks, cleaner inputs, explicit boundaries. "Just use the model with the larger context" is a non-answer.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Model confidence and tone are not signals&lt;br&gt;
A confident-sounding answer is not a correct one. Self-assessed confidence is poorly calibrated, and on the hard cases the model is often most sure precisely when it is wrong. Never gate a decision on how certain the model claims to be. Verify with something external.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;An independent instance beats self-review&lt;br&gt;
A model grading its own work is biased toward its own work. A fresh instance, with no memory of having produced the output, catches far more errors. If you want a real review step, spin up a separate reviewer, do not ask the author to check itself.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Least privilege for tools&lt;br&gt;
Give each agent role only the tools it needs, roughly four to five. This is not only a security point. More tools measurably degrade selection quality: the model gets worse at choosing when the menu is longer. Fewer, sharper tools beat a giant toolbox.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Structure beats free text, everywhere&lt;br&gt;
Structured errors, structured outputs, structured handoffs between agents, all with explicit provenance. Free-text prose between components is where information quietly rots. When agent A hands to agent B, pass a schema, not a paragraph.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Do not suppress errors, and do not panic&lt;br&gt;
Handle transient failures locally: retry the flaky network call, back off, move on. For everything else, escalate with context so the coordinator can decide. The two failure modes to avoid are swallowing the error silently and blowing up the whole run over something recoverable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Match the API to your latency requirement&lt;br&gt;
The Batch API costs about half as much but can take up to 24 hours. That is great for an overnight job and useless for anything a human is waiting on. Pick synchronous calls for human-blocking tasks and batch for the rest. Cost and latency are a trade you make on purpose.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A retry fixes format, not missing data&lt;br&gt;
Retrying a call can correct a malformed structure. It cannot conjure information that was never in the source. If the data is not there, running it again just wastes tokens and time. Know which problem you have before you hit retry.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The four traps&lt;br&gt;
These are the answers that feel smart in the moment and cost you later. Every one of them showed up as a tempting-but-wrong option.&lt;/p&gt;

&lt;p&gt;"Just write in the prompt that it is mandatory." Shows up exactly when you need determinism, which is the one thing a prompt cannot give you. See rule 1.&lt;br&gt;
"Add few-shot examples." Genuinely useful for ambiguous judgment calls. Useless for hard rules, where it creates the illusion of a guarantee without the guarantee.&lt;br&gt;
"Build a classifier." A heavy solution reached for before anyone tested the cheap levers. Sometimes correct, usually premature. See rule 2.&lt;br&gt;
"Make one tool that does everything." Merging tools feels like simplification. It makes selection worse, because now the model has to guess intent inside a single overloaded tool. See rule 8.&lt;br&gt;
It collapses into three ideas&lt;br&gt;
Strip away the specifics and the twelve rules are really three:&lt;/p&gt;

&lt;p&gt;What must always work goes in code, not in a request. Determinism is an architecture decision, not a wording decision.&lt;br&gt;
Match the complexity of the fix to the size of the problem. Cheap lever first, subsystem last.&lt;br&gt;
Pass structure, not prose. Between components, schemas beat sentences.&lt;br&gt;
None of this is exotic. It is the difference between an agent that demos well and one that is still running in three months. The exam rewards it because production rewards it.&lt;/p&gt;

&lt;p&gt;Szymon Paluch. I work with teams on agentic system strategy, taking Claude Code and agents from demo to production.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://szymonpaluch.com/blog/posts/agentic-design-rules" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fszymonpaluch.com%2Fblog%2Fimages%2Fagentic-design-rules-en.jpg" height="450" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://szymonpaluch.com/blog/posts/agentic-design-rules" rel="noopener noreferrer" class="c-link"&gt;
            12 rules for building AI agents | Szymon Paluch
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            The full cheat-sheet from prepping for the Claude Certified Architect exam: 12 rules, 7 recurring traps, the specifics of all 5 domains, and a facts table. The rules that decide whether an agent survives production.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fszymonpaluch.com%2Ffavicon.svg" width="64" height="64"&gt;
          szymonpaluch.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>agents</category>
      <category>ai</category>
      <category>architecture</category>
      <category>claude</category>
    </item>
  </channel>
</rss>
