<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Parallel AI Agents on Peter Fulop</title><link>https://peterfulop.tech/tags/parallel-ai-agents/</link><description>Recent content in Parallel AI Agents on Peter Fulop</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><copyright>Peter Fulop</copyright><lastBuildDate>Fri, 24 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://peterfulop.tech/tags/parallel-ai-agents/index.xml" rel="self" type="application/rss+xml"/><item><title>Orchestrating parallel subagents for data collection, exploration, and reporting</title><link>https://peterfulop.tech/p/orchestrating-parallel-subagents-for-data-collection-exploration-and-reporting/</link><pubDate>Fri, 24 Apr 2026 00:00:00 +0000</pubDate><guid>https://peterfulop.tech/p/orchestrating-parallel-subagents-for-data-collection-exploration-and-reporting/</guid><description>&lt;img src="https://peterfulop.tech/p/orchestrating-parallel-subagents-for-data-collection-exploration-and-reporting/orchestrating-parallel-subagents-data-collection-exploration-reporting.png" alt="Featured image of post Orchestrating parallel subagents for data collection, exploration, and reporting" /&gt;&lt;hr&gt;
&lt;p&gt;This project started with a simple question: can I use Codex subagents to run a complete data workflow from collection to reporting?&lt;/p&gt;
&lt;p&gt;
If you want to explore or reproduce it, the full project is here:
&lt;span style="display: inline-flex; align-items: center; gap: 0.35rem;"&gt;
&lt;img src="github.svg" alt="" width="18" height="18" aria-hidden="true"&gt;
&lt;a href="https://github.com/ipeterfulop/comext-analysis-codex"&gt;ipeterfulop/comext-analysis-codex&lt;/a&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;Not just &amp;ldquo;ask an agent to generate a chart.&amp;rdquo; Something closer to what we actually do:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;download multiple years of raw data&lt;/li&gt;
&lt;li&gt;normalize and unpack files&lt;/li&gt;
&lt;li&gt;aggregate the data&lt;/li&gt;
&lt;li&gt;split the report generation into independent chapters&lt;/li&gt;
&lt;li&gt;assemble a presentation&lt;/li&gt;
&lt;li&gt;start a preview server&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The result is a COMEXT energy-trade analysis built from Eurostat data. But the interesting part is not the analysis itself.&lt;/p&gt;
&lt;p&gt;It’s the workflow.&lt;/p&gt;
&lt;p&gt;This ended up being a solid demonstration of subagent orchestration. Not perfect — a few retries and inconsistencies showed up — but good enough to understand where this approach works and where it starts to stretch.&lt;/p&gt;
&lt;h2 id="running-this-in-codex-desktop"&gt;Running this in Codex Desktop
&lt;/h2&gt;&lt;p&gt;I used the Codex Desktop app to execute the workflow, and this part surprised me more than expected.&lt;/p&gt;
&lt;p&gt;The visibility into subagents is much better than it used to be.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://peterfulop.tech/p/orchestrating-parallel-subagents-for-data-collection-exploration-and-reporting/capture_plan_and_subagents_monitoring.png"
width="1668"
height="958"
srcset="https://peterfulop.tech/p/orchestrating-parallel-subagents-for-data-collection-exploration-and-reporting/capture_plan_and_subagents_monitoring_hu_25ef500b47d8eabd.png 480w, https://peterfulop.tech/p/orchestrating-parallel-subagents-for-data-collection-exploration-and-reporting/capture_plan_and_subagents_monitoring_hu_e53853202446fb3a.png 1024w"
loading="lazy"
alt="Execution plan and subagents statuses"
class="gallery-image"
data-flex-grow="174"
data-flex-basis="417px"
&gt;&lt;/p&gt;
&lt;p&gt;You can see:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;spawned subagents in real time&lt;/li&gt;
&lt;li&gt;which ones are running in parallel&lt;/li&gt;
&lt;li&gt;logs per subagent (not just merged output)&lt;/li&gt;
&lt;li&gt;project files alongside execution&lt;/li&gt;
&lt;li&gt;approval requests highlighted visually&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That last one matters more than it sounds. When multiple subagents are running, missing an approval prompt can stall the whole workflow.&lt;/p&gt;
&lt;p&gt;Also, having logs separated per subagent made debugging much easier. In earlier runs (CLI-based), it was hard to tell which agent produced which output.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://peterfulop.tech/p/orchestrating-parallel-subagents-for-data-collection-exploration-and-reporting/capture_parallel_subagents_in_codex_app.png"
width="1478"
height="736"
srcset="https://peterfulop.tech/p/orchestrating-parallel-subagents-for-data-collection-exploration-and-reporting/capture_parallel_subagents_in_codex_app_hu_ec975c7893391a4a.png 480w, https://peterfulop.tech/p/orchestrating-parallel-subagents-for-data-collection-exploration-and-reporting/capture_parallel_subagents_in_codex_app_hu_bea9c9322f6a633f.png 1024w"
loading="lazy"
alt="Detailed execution logs"
class="gallery-image"
data-flex-grow="200"
data-flex-basis="481px"
&gt;&lt;/p&gt;
&lt;p&gt;It’s still not perfect — some retries and partial failures are a bit awkward to trace — but it’s a big step forward.&lt;/p&gt;
&lt;h2 id="what-i-wanted-to-test"&gt;What I wanted to test
&lt;/h2&gt;&lt;p&gt;The goal was not to produce a high-quality business analysis of European energy trade.&lt;/p&gt;
&lt;p&gt;A serious report would need sharper questions and multiple validation loops with domain experts. This project had a different purpose.&lt;/p&gt;
&lt;p&gt;I wanted to see if a relatively complex workflow could be made explicit enough that Codex could execute it without constant intervention.&lt;/p&gt;
&lt;p&gt;The data domain helped. Eurostat COMEXT data is messy enough to be realistic — monthly archives, large tables, and a few annoying quirks around naming and structure.&lt;/p&gt;
&lt;h2 id="the-instruction-file-as-the-workflow-contract"&gt;The instruction file as the workflow contract
&lt;/h2&gt;&lt;p&gt;The whole project is driven by an &lt;code&gt;AGENTS.md&lt;/code&gt; file.&lt;/p&gt;
&lt;p&gt;In practice, this acts as a workflow contract. It defines:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;what needs to happen&lt;/li&gt;
&lt;li&gt;what can run in parallel&lt;/li&gt;
&lt;li&gt;what each subagent owns&lt;/li&gt;
&lt;li&gt;what outputs are expected&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Without this, earlier attempts drifted quite a bit. Subagents would start doing “extra helpful” work outside their scope.&lt;/p&gt;
&lt;p&gt;With constraints, the behavior became much more predictable.&lt;/p&gt;
&lt;h2 id="phase-1-parallel-data-collection"&gt;Phase 1: parallel data collection
&lt;/h2&gt;&lt;p&gt;The dataset covers five years (2021–2025), with 12 monthly archives per year.&lt;/p&gt;
&lt;p&gt;The workflow launches one subagent per year.&lt;/p&gt;
&lt;p&gt;Each subagent:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;downloads its assigned year&lt;/li&gt;
&lt;li&gt;reports success or failure&lt;/li&gt;
&lt;li&gt;does nothing else&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That isolation turned out to be important. In an earlier version, subagents stepped on each other’s outputs.&lt;/p&gt;
&lt;p&gt;Retries helped, but not perfectly. One corrupted archive passed the download step and only failed later during extraction — so failures can still cascade a bit.&lt;/p&gt;
&lt;h2 id="phase-2-parallel-report-generation"&gt;Phase 2: parallel report generation
&lt;/h2&gt;&lt;p&gt;The second phase builds the Slidev presentation.&lt;/p&gt;
&lt;p&gt;Four subagents generate four independent sections:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;requirements&lt;/li&gt;
&lt;li&gt;imports&lt;/li&gt;
&lt;li&gt;exports&lt;/li&gt;
&lt;li&gt;Hungary&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Splitting by chapter worked well. Each subagent had a clean scope.&lt;/p&gt;
&lt;p&gt;Outputs were not perfectly consistent on the first run though — some sections used slightly different wording or structure — so the lead agent had to normalize things before assembling the final deck.&lt;/p&gt;
&lt;h2 id="why-i-used-slidev"&gt;Why I used Slidev
&lt;/h2&gt;&lt;p&gt;I chose Slidev mostly for practical reasons.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://peterfulop.tech/p/orchestrating-parallel-subagents-for-data-collection-exploration-and-reporting/capture_report_chart.png"
width="3112"
height="1764"
srcset="https://peterfulop.tech/p/orchestrating-parallel-subagents-for-data-collection-exploration-and-reporting/capture_report_chart_hu_c02b30375615dd70.png 480w, https://peterfulop.tech/p/orchestrating-parallel-subagents-for-data-collection-exploration-and-reporting/capture_report_chart_hu_a38f6cc49ac55301.png 1024w"
loading="lazy"
alt="Chartjs generated chart in a Slidev slide"
class="gallery-image"
data-flex-grow="176"
data-flex-basis="423px"
&gt;&lt;/p&gt;
&lt;p&gt;It’s a strong fit for this kind of workflow:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Markdown-based → easy for agents to generate&lt;/li&gt;
&lt;li&gt;runs in the browser → instant preview&lt;/li&gt;
&lt;li&gt;easy to edit after generation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That said, it’s not “generate and present immediately” yet.&lt;/p&gt;
&lt;p&gt;Layouts and styling still need a bit of manual adjustment:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;some slides overflow&lt;/li&gt;
&lt;li&gt;spacing isn’t always right&lt;/li&gt;
&lt;li&gt;charts need tuning to look presentation-ready&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So it works well as a base, but still needs a quick polish pass before showing it in a meeting.&lt;/p&gt;
&lt;h2 id="what-the-report-contains"&gt;What the report contains
&lt;/h2&gt;&lt;p&gt;The generated deck focuses on COMEXT energy trade categories:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;SITC&lt;/th&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;Coal, coke and briquettes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;33&lt;/td&gt;
&lt;td&gt;Petroleum and related materials&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;34&lt;/td&gt;
&lt;td&gt;Gas, natural and manufactured&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;35&lt;/td&gt;
&lt;td&gt;Electric current&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;It includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;dataset overview&lt;/li&gt;
&lt;li&gt;imports and exports analysis&lt;/li&gt;
&lt;li&gt;a Hungary-focused section&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Enough for exploration — not for decision-making.&lt;/p&gt;
&lt;h2 id="the-important-limitation"&gt;The important limitation
&lt;/h2&gt;&lt;p&gt;This project is stronger as a workflow showcase than as an analytical tool.&lt;/p&gt;
&lt;p&gt;That tradeoff was intentional for this iteration.&lt;/p&gt;
&lt;h2 id="what-worked-well"&gt;What worked well
&lt;/h2&gt;&lt;p&gt;Parallelism helped in two places:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;data collection (per year)&lt;/li&gt;
&lt;li&gt;report generation (per chapter)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The lead agent stayed useful:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;starting tasks&lt;/li&gt;
&lt;li&gt;collecting results&lt;/li&gt;
&lt;li&gt;retrying failures&lt;/li&gt;
&lt;li&gt;assembling outputs&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That balance felt right in this setup.&lt;/p&gt;
&lt;h2 id="what-i-would-improve-next"&gt;What I would improve next
&lt;/h2&gt;&lt;p&gt;Two directions are clear:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Better data model (partner, product, monthly granularity)&lt;/li&gt;
&lt;li&gt;Slightly stricter output contracts between subagents&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The orchestration itself would likely stay similar.&lt;/p&gt;
&lt;h2 id="the-broader-lesson"&gt;The broader lesson
&lt;/h2&gt;&lt;p&gt;What worked here is treating the workflow as a system, not a prompt.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;explicit phases&lt;/li&gt;
&lt;li&gt;bounded subagents&lt;/li&gt;
&lt;li&gt;clear outputs&lt;/li&gt;
&lt;li&gt;a coordinating agent&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This won’t apply everywhere, but for this type of pipeline, it held up reasonably well.&lt;/p&gt;
&lt;h2 id="my-take"&gt;My take
&lt;/h2&gt;&lt;p&gt;This project shifted how I think about subagents.&lt;/p&gt;
&lt;p&gt;Less as a novelty, more as a way to express the structure of work.&lt;/p&gt;
&lt;p&gt;The lead agent coordinates.
Subagents execute narrow tasks.
The instruction file defines the contract.&lt;/p&gt;
&lt;p&gt;Still early, but this already feels closer to real engineering workflows than most prompt-heavy setups I’ve tried so far.&lt;/p&gt;</description></item></channel></rss>