<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Alex Honchar on Medium]]></title>
        <description><![CDATA[Stories by Alex Honchar on Medium]]></description>
        <link>https://medium.com/@alexhonchar?source=rss-1b1fb9c5ea70------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*iNhT3ND48_WSNLMz44OnzA.jpeg</url>
            <title>Stories by Alex Honchar on Medium</title>
            <link>https://medium.com/@alexhonchar?source=rss-1b1fb9c5ea70------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Tue, 10 Nov 2026 05:50:03 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@alexhonchar/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[My AI Agent is in Top-0.01% of WorldQuant Challenge #5: Harness Engineering]]></title>
            <link>https://medium.com/data-science-collective/my-ai-agent-is-in-top-0-01-of-worldquant-challenge-5-harness-engineering-464fa07f984c?source=rss-1b1fb9c5ea70------2</link>
            <guid isPermaLink="false">https://medium.com/p/464fa07f984c</guid>
            <category><![CDATA[finance]]></category>
            <category><![CDATA[ai-agent]]></category>
            <category><![CDATA[investing]]></category>
            <category><![CDATA[quantitative-finance]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <dc:creator><![CDATA[Alex Honchar]]></dc:creator>
            <pubDate>Tue, 13 Oct 2026 09:22:55 GMT</pubDate>
            <atom:updated>2026-10-13T09:22:55.965Z</atom:updated>
            <content:encoded><![CDATA[<h4>Why I think the harness matters more than the model in investment research</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*pd3g6xw1LCguaAKNElGPVA.png" /></figure><p>Earlier this year I started competing at <a href="https://worldquantbrain.com/">WorldQuant BRAIN</a>. My philosophy is to do it part-time and in an AI-native way: I design the system and decide what it is allowed to do, while the agents do the investment research. At the moment of writing, 10th October 2026, my public leaderboard position is <strong>13 / 151816, approximately the top-0.01%.</strong></p><p>This is a series for individuals and organizations doing quantitative finance research who want to adopt an AI-native approach:</p><ol><li><a href="https://medium.com/data-science-collective/my-ai-agent-is-in-top-0-04-of-worldquant-challenge-1-introduction-55d5ee85caf8">Introduction</a></li><li><a href="https://medium.com/data-science-collective/my-ai-agent-is-in-top-0-04-of-worldquant-challenge-2-alpha-knowledge-graph-4090738f39c5">Alpha Knowledge Graph</a></li><li><a href="https://medium.com/data-science-collective/my-ai-agent-is-in-top-0-04-of-worldquant-challenge-3-fighting-overfitting-a77bf286321e">Fighting Overfitting</a></li><li><a href="https://medium.com/data-science-collective/my-ai-agent-is-in-top-0-01-of-worldquant-challenge-4-context-engineering-c8880027bac8">Context Engineering</a></li><li>Harness Engineering (this article)</li><li>Loops Engineering</li><li>Open Source LLMs and Harness</li><li>Future of Quantitative Research</li></ol><p>In the previous articles, I described the economic knowledge, statistical methods, and context behind my research system. Having those things available does not mean the agent uses them. It can read the knowledge graph, generate a familiar formula anyway, run a backtest, and tell me that it found something promising. The missing part is how the research actually gets done.</p><p>My starting point was <strong>Claude Code as the base harness</strong>. It gave me a working agent environment that could read files, run tools, and delegate tasks. I expanded it with my own research skills, specialist sub-agents, code, hooks, economic knowledge, and persistent research records.</p><p>I believe this surrounding system matters more than the choice of model once the model is capable enough to do the work. To explain why, I will first describe the architecture behind a harness, then show how I built on Claude Code for WorldQuant and what those choices meant for real submitted signals.</p><h3>The architecture around the model</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*pQSQI1IKGwGlFWUsP_DPEw.gif" /><figcaption><em>The model proposes the next step. The harness decides what evidence it sees, what actually runs and what happens to the result.</em></figcaption></figure><p>Claude Code could already read files, run commands and ask another agent for help. I could get a backtest started. But when was it actually finished? Did the signal add anything to my existing book? Which lesson from yesterday’s experiments should guide today’s work? <strong>Those decisions became the system I built around Claude Code.</strong></p><p>By <strong>harness</strong>, I mean everything around the model that determines what it knows, what it can do, and what counts as a finished result. The basic action–observation loop is familiar from <a href="https://arxiv.org/html/2210.03629v3">ReAct</a>. <a href="https://arxiv.org/html/2309.02427v3">CoALA</a> adds a useful way to think about memory and decisions. In my research system, that comes down to six jobs:</p><ul><li><strong>Skills</strong> give the agent a research method, including when to use it and what a finished result must contain.</li><li><strong>Sub-agents</strong> give design, execution and submission separate tasks and contexts.</li><li><strong>Memory and context</strong> bring earlier experiments and economic knowledge into the next decision.</li><li><strong>Tools and code</strong> run the repeatable work and return states the agent can actually interpret.</li><li><strong>Verification and feedback</strong> turn measurements into a reason to revise, stop or move on.</li><li><strong>Authority and budgets</strong> decide which actions the agent may take, especially when they change the submitted book.</li></ul><p>These are not six neat boxes in a diagram. A skill may launch a specialist; a hook may call code. What I care about is simpler: <strong>can I follow a signal from the economic idea to the measured result and the decision to submit it?</strong></p><h3>Why I put the harness ahead of model choice</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6IvrTrUw2ZyvkuOrCDHZeg.png" /><figcaption><em>In this 100-task coding study, improving the harness with a fixed model added 8.5–13 percentage points; switching models within a harness changed scores by 2.5–5 points. Two runs were made per configuration; cost and compute also changed. </em><a href="https://arxiv.org/html/2605.23950v1#S4.SS2"><em>Source, Table 2.</em></a></figcaption></figure><p>The <a href="https://www.stateof.ai/State-of-AI-Report-2026.pdf#page=8">State of AI Report 2026</a> has a line I keep coming back to: <strong>“Same model, better harness = stronger agent.”</strong> In the coding study behind its example, GLM-5.1 solved 52.5% of tasks with a minimal harness and 65.5% with a fuller one. Context, tools, verification and recovery all changed together. There is no honest way to credit that gain to one trick.</p><p>I have not run the equivalent controlled comparison on my WorldQuant system, so I won’t pretend the coding result measures my own uplift. But it captures a problem I see every day: a capable model can reason about a signal and still get nowhere if the workflow gives it half a result or forgets the last experiment. The report also warns that <a href="https://www.stateof.ai/State-of-AI-Report-2026.pdf#page=15">stronger models can outgrow their harnesses</a>. <strong>More checks are not automatically a better harness; better decisions are.</strong></p><h3>1. Skills and sub-agents: a claim before a formula</h3><h4>What I added to Claude Code</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*1PX9EOp5V7Y3QNaIT1qLXg.png" /><figcaption><em>Claude Code is the runtime. The research procedure, evidence stores, simulation code and submission policy are my additions.</em></figcaption></figure><p>I started with <a href="https://code.claude.com/docs/en/how-claude-code-works">Claude Code’s agent loop and tools</a>, then added my own skills, specialist roles, code and hooks using its <a href="https://code.claude.com/docs/en/features-overview">extension points</a>. Tell a general agent to “find a good alpha” and it can produce one quickly. The harder questions are left hanging: which part of the portfolio needs help, what economic claim are we testing, and what result would make us change our minds?</p><p>My research-cycle skill puts those questions into the procedure. It tells the supervisor what evidence to fetch and what each stage owes the next one. Then a specialist receives a narrower brief and its own context. <strong>The skill carries the method; the sub-agent does a particular job.</strong> Reusable skills and explicit agent conversations have precedents in <a href="https://arxiv.org/html/2305.16291v2">Voyager</a> and <a href="https://arxiv.org/html/2308.08155v2">AutoGen</a>. I had to make that arrangement work for financial research.</p><h4>A claim before a formula</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*kb--S6T9REgQBDsnQ3qjPQ.gif" /><figcaption><em>A measured result can go back to modeling for a different construction. A settings adjustment stays with the experiment stage.</em></figcaption></figure><p>Here is how one cycle works. The analyst looks at the submitted book and at what we already tried. The hypothesis specialist states an economic mechanism and explains what a new signal might add. Modeling turns the claim into candidate constructions; experiment runs them and brings back measurements. Only then is there a submission decision. The diagram shows these handoffs.</p><p>The hypothesis handoff normally contains <strong>no formula</strong>. I want an explanation of who might be slow to react to information, and why, before the agent reaches for familiar operators. If a construction nearly works, experiment can try a bounded settings change. If the idea needs another construction, modeling gets the actual measurement back, not a vague instruction to “improve it.”</p><p>There is a slower loop too. As the book and experiment history change, the analyst refreshes the opportunity map. We can reuse a good idea; we cannot keep judging it against a portfolio that existed several submissions ago.</p><h3>2. Memory and context: what should the next run remember?</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Ab8Y_YXPiC9Or-Y2ifZWGg.gif" /><figcaption><em>The store keeps observations, economic knowledge and lessons. The next task sees only the pieces selected for it.</em></figcaption></figure><p>“The agent has memory” sounds nice. I care more about whether yesterday’s result changes what it tries today. I keep the current task, measured experiments, economic knowledge and conditional lessons distinct. <strong>A backtest is an observation; a lesson is an interpretation.</strong> If I mix the two, one local result can quietly turn into a rule the evidence never justified.</p><p><a href="https://arxiv.org/html/2310.08560v2">MemGPT</a> distinguishes working context from stored memory, and <a href="https://arxiv.org/html/2303.11366v4">Reflexion</a> explores carrying evaluation into later attempts. For me the practical question is: <strong>which record is the agent looking at?</strong> A batch export says what happened in an experiment; a submission record says what entered the book. A correlation number also needs its date and the book state against which it was measured.</p><p>I found automatic closures that said little more than “ran.” That tells me an action happened, not what we learned. I want the next agent to see the condition, the measurement and the limit of the inference. In the alpha example at the end, you can see an earlier recipe make it into a later modeling task.</p><h3>3. Tools and code: an accepted request is not a finished backtest</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wkDKoiwyVZAUNR70pKjTqg.gif" /><figcaption><em>A simulation request, its checks and its time series can finish at different times. The tool reports each state separately.</em></figcaption></figure><p>Here is a problem that sounds boring until it ruins a research decision. WorldQuant can accept a simulation request while the calculation is still running. The backtest can arrive before its correlation check; the time series may need another retrieval attempt. <strong>Accepted is not finished.</strong> If my tool reports “success” at the first response, the agent starts judging a result it does not yet have.</p><p>Claude Code runs the command; my code handles the sequence. It checks inputs, starts and polls the calculation, resolves platform checks, retrieves available series and saves them alongside the design. Pending work stays pending; a missing result stays missing. <a href="https://arxiv.org/html/2405.15793v3">SWE-agent</a> studied how much an agent’s tool interface can affect its performance in software tasks. I see the same issue when the agent has to wait for a real backtest rather than a tidy one-line response.</p><p>The measurements still need interpretation. Passing the ordinary checks says something about the backtest. It does not establish the economic story or show that the signal improves the book. The tool’s job is to show what is ready and <strong>what we still do not know</strong>.</p><h3>4. Hooks and feedback: what does the result change?</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*SUpEBaDOYKaUuU9x9EHdVA.gif" /><figcaption><em>Hooks put a check where the next action is chosen: on launch, before execution and after a result returns.</em></figcaption></figure><p>A check matters only if it changes the next action. I use Claude Code hooks to record specialist dispatches, inspect some actions before they run, and prompt reflection after experiments. Session start and compaction events help carry unfinished work into another context. None of this makes a bad idea good. It does give the supervisor a chance to notice a missing prerequisite or a promising near-miss before moving on.</p><p>If a result narrowly misses a settings threshold, the experiment stage can try a small rescue. If the construction itself is the problem, the supervisor sends the measured value, the required limit and the attempts already made back to modeling. Now the next specialist has <strong>a specific result to beat</strong>, not just “try again.”</p><p>I also keep the agent’s account of its progress separate from the measurements. <a href="https://arxiv.org/html/2604.25850v1">Agentic Harness Engineering</a> makes this distinction explicit for tracers and verifiers. In my system, I want to see the platform checks and experiment records even when the agent sounds very sure of itself.</p><h3>5. Permission: when can a signal enter the book?</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*HJpf-dZNuHZWnPXwo21hJA.gif" /><figcaption><em>A candidate needs current quality evidence and permission before it becomes part of the submitted book.</em></figcaption></figure><p>I am happy to let agents explore ideas and run authorized research cycles. <strong>Submission is a different decision.</strong> It changes an append-only book, and the next candidate will be judged against that new book. Claude Code’s tool permissions alone cannot decide whether a particular signal belongs there.</p><p>Sometimes I approve named candidates. At other times I authorize a standing routine with a daily allowance. Either way, the permission must point back to my actual decision. The book changes after every submission, so the platform checks have to be fresh. If two workers can submit, they must share the same remaining allowance. In the case below, the planner used <strong>one of two available slots</strong>.</p><h3>6. One alpha, from idea to submission</h3><h4>Competitor-network peak freshness</h4><p>Let me take one submitted signal through the whole system. The idea was that investors might be slow to price a change in a company’s influence within its competitor network. PageRank gives one measure of that influence, but <strong>we were not simply buying the most central firms</strong>. The signal asks how recently each firm’s centrality reached a rolling peak, compares that freshness with its own recent history, then ranks it against industry peers. Higher relative freshness points toward the long side under industry neutralization. There is a subtlety: the clock can reset when an old maximum leaves the window, even without a new high.</p><p>The previous day’s research had left us a peak-timing recipe and input constraints. I saved them, and the supervisor included them in the modeling specialist’s brief with the registered hypothesis. The specialist returned 28 initial designs. An experiment specialist ran them through the simulation code; hooks recorded the dispatches, and the measurements stayed linked to each design. <strong>The memory actually changed the next run.</strong></p><p>Some variants passed ordinary quality checks but looked too much like what was already in the book. That finding sent the work back for two more rounds, changing the timing horizons and group adjustments. Across all three rounds, 55 variants completed. We had predicted self-correlation of <strong>0.42</strong> for this hypothesis; the selected signal measured <strong>0.6919</strong> on the platform, just inside the 0.70 limit. Its in-sample Sharpe was <strong>1.93</strong> and fitness <strong>1.54</strong>. The different input field had not made the return stream as different as we expected.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*T4lTQZK8ABxDbPfLhe0qPg.png" /><figcaption><em>Filled dots passed ordinary quality checks. The selected signal’s measured correlation was 0.6919, against a 0.42 prediction; unresolved checks appear separately.</em></figcaption></figure><p>I had given standing permission for at most two submissions that day. Three candidates looked individually eligible, but they overlapped heavily with one another. <strong>The planner chose one, not three.</strong> The platform accepted it on <strong>September 21, 2026</strong>, and the submission receipt was checked and saved.</p><p>I like this example because you can see the whole chain: an earlier idea reached the next specialist, experiments changed the construction, the platform measurement checked our prediction, and permission narrowed the final choice. But I would not call it proof of out-of-sample performance. The backtest covers 2019–2023 <strong>in sample</strong>; I have no measured 2024 result for this signal. Fifty-five completed variants also bring selection risk. And after the 0.42 versus 0.6919 miss, I would check diversification against the actual book again before trusting the story about a new data channel.</p><h3>What’s next</h3><p>What should the system carry into tomorrow? The correlation miss, the reusable construction and the 55 tried variants are three different kinds of information. I want the next research decision to reflect that difference. That’s the subject of the next article: the loops that turn recorded results into new work.</p><p>If you are working in a more traditional way and you think you need support in building and designing such AI-native investment research systems, let’s talk about how we can collaborate together. <strong>I am helping financial institutions personally and within a consulting </strong><a href="https://neurons-lab.com/"><strong>company I co-founded</strong></a><strong> to adopt AI for many years, and will be glad to help you do the same</strong>. You can reach out to me on <a href="https://www.linkedin.com/in/alexandr-honchar/">Linkedin</a>, <a href="https://x.com/rachnogstyle">X</a>, and <a href="http://alexandr.honchar@gmail.com/">email</a> as well.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=464fa07f984c" width="1" height="1" alt=""><hr><p><a href="https://medium.com/data-science-collective/my-ai-agent-is-in-top-0-01-of-worldquant-challenge-5-harness-engineering-464fa07f984c">My AI Agent is in Top-0.01% of WorldQuant Challenge #5: Harness Engineering</a> was originally published in <a href="https://medium.com/data-science-collective">Data Science Collective</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[My AI Agent is in ~Top-0.01% of WorldQuant Challenge #4: Context Engineering]]></title>
            <link>https://medium.com/data-science-collective/my-ai-agent-is-in-top-0-01-of-worldquant-challenge-4-context-engineering-c8880027bac8?source=rss-1b1fb9c5ea70------2</link>
            <guid isPermaLink="false">https://medium.com/p/c8880027bac8</guid>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[quantitative-finance]]></category>
            <category><![CDATA[investing]]></category>
            <category><![CDATA[algorithmic-trading]]></category>
            <dc:creator><![CDATA[Alex Honchar]]></dc:creator>
            <pubDate>Sun, 13 Sep 2026 19:37:11 GMT</pubDate>
            <atom:updated>2026-09-13T19:37:11.837Z</atom:updated>
            <content:encoded><![CDATA[<h4>Building a quantitative research agent that never forgets and is always on point</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*zV9g8eKGTJxL-5DT5yvVKw.png" /></figure><p>A couple of months ago I started competing at the <a href="https://worldquantbrain.com/">WorldQuant BRAIN</a> — the largest global quantitative finance competition. At the moment of writing, my rank is <strong>24 / 207115</strong> and growing (~top 0.01% globally, you can check <a href="https://platform.worldquantbrain.com/profile/public/OH58245">my account here</a>). My philosophy is doing it part-time and in 100% AI-native way — absolutely zero manual work. This is a series for individuals and organizations doing quantitative finance research who want to adopt an AI-native approach:</p><ol><li><a href="https://alexhonchar.medium.com/my-ai-agent-is-in-top-0-04-of-worldquant-challenge-1-introduction-55d5ee85caf8">Introduction</a></li><li><a href="https://alexhonchar.medium.com/my-ai-agent-is-in-top-0-04-of-worldquant-challenge-2-alpha-knowledge-graph-4090738f39c5">Alpha Knowledge Graph</a></li><li><a href="https://alexhonchar.medium.com/my-ai-agent-is-in-top-0-04-of-worldquant-challenge-3-fighting-overfitting-a77bf286321e">Fighting Overfitting</a></li><li>Context Engineering (this article)</li><li>Harness Engineering</li><li>Loops Engineering</li><li>Open Source LLMs and Harness</li><li>Future of Quantitative Research</li></ol><p>Before I created specialist agents, lifecycle checks or an autonomous research loop, I had a more basic problem: <strong>what exactly should the system be allowed to believe? </strong>I had collected four very different kinds of material.</p><ol><li>First, there were the <strong>official WorldQuant BRAIN and tournament documents</strong>: how the expression language works, which operators and datasets exist, valid simulation settings, and so on.</li><li>Second, I added theory and research methods. Three <a href="https://www.amazon.es/stores/author/B001K15Z08">books</a><strong> by Marcos López de Prado</strong> provided tools for thinking about backtest statistics, strategy risk, multiple testing, portfolio structure and falsification. <a href="https://www.amazon.es/Finding-Alphas-Quantitative-Approach-Strategies/dp/1119057868">Finding Alphas</a>,<strong> by Igor Tulchinsky</strong>, added practical material about idea construction, turnover, correlation, overfitting, biases and robustness.</li><li>Third, <strong>I collected papers and deep research</strong> about economic anomalies, market participants and information flows. As I explained in the <a href="https://medium.com/data-science-collective/my-ai-agent-is-in-top-0-04-of-worldquant-challenge-2-alpha-knowledge-graph-4090738f39c5">knowledge graph article</a>, this material became a graph of axioms, theories, anomalies, mechanisms and implementation shapes.</li><li>Finally, the <strong>project started producing its own evidence</strong>: simulation responses, daily profit-and-loss series, portfolio correlations, robustness statistics, platform checks, experiment histories, operational events, failed constructions and lessons derived from them.</li></ol><p>All four are context. They are not all truth. And they do not fit naturally into one prompt, one document format or even one database. That is where context engineering started for me — not with deciding how many tokens fit into a model, but with <strong>designing levels of proof and the data systems that preserve them</strong>.</p><h3>Designing levels of proof</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*qP8hEspcT8VYGDCtZRIIqQ.png" /><figcaption>On the left is my first version: rules, books, papers and my own results flattened into one prompt, all with the same authority. On the right, every claim keeps its level. The rules are the walls, beliefs suggest tests, observations narrow beliefs, and nothing inside can rewrite the rules.</figcaption></figure><p>I use “proof” here in an engineering sense: what evidence is sufficient to support a particular claim, who owns that evidence, and what is allowed to overturn it. The first three levels of my architecture answer those questions.</p><h4><strong>L1 is static truth:</strong></h4><p><em>what the platform says the game is</em>. It contains official platform and tournament material. If I ask which settings exist, what an operator means, what checks a candidate must clear or how the tournament score is calculated, the agent should read this layer. The local copy can become stale, but a surprising experiment cannot rewrite a rule.</p><h4>L2 is dynamic truth:</h4><p><em>what the system actually observed.</em> A simulation result belongs here. So do a daily PnL series, the current portfolio, a platform check, an operational event and the latest leaderboard state. Every measurement needs an observation time. Rerunning an experiment creates another observation; it does not edit the previous one until history looks cleaner.</p><h4>L3 is inductive bias:</h4><p><em>what we currently believe is useful</em>. This is where the books, papers, economic theories, specifications, knowledge-graph interpretations, recorded lessons and scoped falsifiers belong. They guide the next action, but they can be overturned.</p><p>This is not a simple ranking where L1 is always “better” than L2 and L2 is always “better” than L3. The levels answer different questions. When two sources answer the same factual question, I use the strongest direct source. An official rule beats a restatement in an agent prompt. A measured platform response beats my expectation from a book. <strong>But when the question is what to test next, rules and measurements are insufficient: the system needs L3 to make a reasoned bet.</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*WDIMEnoNxh2fkmVBzUrp_A.png" /><figcaption>A falsifier didn’t kill post-earnings drift: it pointed at the construction that had failed, so I anchored the idea on analyst revisions, and two versions were submitted. The peer-basket idea started as a belief with zero evidence and still made it. The dividend clock failed all 10 constructions, and the lesson narrowed the belief to dividend dates only. Green squares passed the platform checks, rose ones failed, grey ones have no checks stored, and ringed ones were submitted.</figcaption></figure><p>One database can hold both a measurement (L2) and my interpretation of it (L3), so the level belongs to the claim, not to where it is stored. The minimum context record is therefore more than text. It needs a claim, epistemic level, source, owner, scope, observation or review time, uncertainty, stable identifier and the evidence that could update it. For dynamic facts, I increasingly want two data streams: when the event was true and when my system learned it. That distinction matters when APIs arrive late or historical data is backfilled.</p><h3>Context is a data platform, not a folder</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*A5hwEZD7SlOdlAJ2rfb3og.png" /><figcaption>I drew each store the way it behaves: the ledger keeps evidence in layers that one lineage chain crosses, old events fade out, the graph is two tables that become a multigraph in memory, and files are grouped by lifecycle. Stable IDs connect them. And the daily PnL is still sitting where my own spec says it no longer is.</figcaption></figure><p>Once I adopted the proof hierarchy, <em>a second problem became obvious: context is not one corpus. It is a small data platform</em>. The <strong>first and largest component</strong> is the <strong>research ledger.</strong> On the workstation I inspected for this article, it is a transactional SQLite database. This is not just an experiment table. It is an evidence ledger with several families of data:</p><ul><li><strong>Research intent</strong>: mechanisms, hypotheses, predictions and implementation lineage.</li><li><strong>Measurement</strong>: platform responses, in-sample statistics, checks, daily PnL and robustness metrics.</li><li><strong>Interpretation</strong>: attributions, lessons and scoped falsifiers.</li><li><strong>Governance</strong>: candidate decisions, approvals and submission outcomes.</li><li><strong>Materialized analysis</strong>: portfolio deltas, correlation screens, pattern caches and robustness summaries that can be regenerated from canonical inputs.</li></ul><p>Writing this article exposed a gap: my own design doc says daily PnL was moved out to Parquet files, but the database still holds all of it. The doc is a belief (L3), the database is an observation (L2), and the observation wins.</p><p>The <strong>second component</strong> is the <strong>operational event store</strong>. It is a separate SQLite database. An event can carry a cycle, batch, candidate, hypothesis, agent and process identifier plus a versionable JSON payload. Why not keep this in the research ledger? Because the retention semantics are different. <em>Research evidence is canonical and should survive. Debug logs, dispatch events, queue transitions and temporary interventions can grow quickly and may be compacted or expired</em>. Separating them means an observability flood cannot bloat or lock the scientific record.</p><p>The <strong>third component </strong>is the <strong>knowledge graph</strong>: a transactional property graph. It uses a simple but effective physical model: one node table, one edge table and JSON attributes for type-specific evidence, loaded into an in-memory graph for traversal. The transactional store prevents the corruption and concurrency problems I had with a large YAML file; the in-memory graph keeps reasoning convenient.</p><p>Finally, the <strong>filesystem is still a data system</strong>. The repository contains immutable platform documents, books, papers and derived reports. These files should not all be “ingested into memory.” Each class has a different lifecycle:</p><ul><li><strong>Platform documents</strong> are immutable source material.</li><li><strong>Specifications</strong> are version-controlled design priors.</li><li><strong>Reports</strong> are derivations with inputs and a regeneration method.</li><li><strong>Memory files</strong> are compact human-readable routes to reusable lessons.</li><li><strong>Queue files, caches and logs</strong> are disposable operational state.</li><li><strong>Model binaries</strong>, PnL exports and large snapshots are artifacts that belong in object storage, not Git.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*0ewToHN-YtqgUZ7dQ_8xpQ.png" /><figcaption>One of my best alphas almost got thrown away: the ledger said every check passed, but my script was reading a run file that showed Sharpe 0. An early winner had no decision record until reconciliation filled it in six weeks later. The betting-against-beta verdict lived only in a Markdown memory file, so nothing in the ledger would have stopped a retry.</figcaption></figure><p>The result is a multi-type context system even though most of it still runs on one laptop. SQLite owns transactions, the graph owns relationships, Parquet is the intended shape for large time series, Markdown owns reviewable knowledge, and transient files coordinate local processes.</p><h3>Stable IDs are here to stitch all the context together</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*YSIOZpz4RLheC_EjyKBOHw.png" /><figcaption>One real mechanism from my system, with names removed: its ancestry in the knowledge graph on the left, and every hypothesis, experiment and candidate that tested it on the right. Some failures repeated across every construction, others belonged to one implementation. The two sides share nothing but the ID on the seam, and that is enough to join them into a small context packet.</figcaption></figure><p><strong>Mechanisms are the bridge between the two stores: the same mechanism appears in the graph as an economic idea with its sources, and in the ledger as a label on every hypothesis and candidate that tested it.</strong> Empirical summaries can be reconciled back onto the graph for navigation, but those summaries are mirrors. The experiment database remains their canonical home.</p><p><em>Because both stores share this ID, the system can answer much better questions:Which theories support this mechanism? Which hypotheses implemented it? Which experiments tested those hypotheses? What happened in each test? Which failure was implementation-specific, and which repeated across distinct constructions? Which graph branch has strong theoretical grounding but little empirical coverage?</em></p><p>A <strong>useful context packet can therefore be assembled as a join across systems</strong>: a small graph neighborhood, source provenance, current empirical rollups, recent scoped failures and the relevant platform constraints. <strong>The model does not need the entire graph or every PnL row. It needs the shortest evidence path that supports the decision.</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2PcSkeff9Yk4Vy4Q-EIvfg.png" /><figcaption>When the graph and the ledger share a mechanism ID, I can see a whole branch at once: the theory, the experiments, every candidate, and a summary on the graph node that matches the ledger. The buyback-authorization idea came straight from a 1995 paper but was never connected to the share-repurchase branch, so none of its results are visible from the graph.</figcaption></figure><p>There are several data contracts I would make stricter next:</p><ul><li>First, every cross-store object should carry an <strong>explicit JSON schema version</strong></li><li>Second, <strong>every derived metric should identify the code version</strong>, source snapshot and method version that produced it.</li><li>Third, every experiment should have a <strong>content-addressed reproducibility manifest</strong>: code commit, environment digest, platform settings, hypothesis and implementation IDs, etc</li><li>Fourth, <strong>reconciliation should be tested as data quality</strong>, not trusted as plumbing</li></ul><p>In other words, the knowledge graph is context. The research ledger is context. The link between them is also context — and deserves the same engineering discipline as model code.</p><h3>The harness gives each agent only what it needs</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*qzJCdpJCt1wNfhy-W3p8DQ.png" /><figcaption>A request never gets whole stores. Each store gives a thin slice to a typed packet, and each specialist receives only what it needs. Results go back by type to their proper homes, the rules are never written, and two loops feed the next packet at different speeds.</figcaption></figure><p><strong>This is the boundary between context engineering and harness engineering:</strong></p><ul><li><strong>Context management owns L1–L3</strong>. It preserves sources, measurements, priors, provenance, timestamps, scope and stable identifiers</li><li><strong>L4 is the agentic harness</strong>. It decides which evidence to retrieve, how much may cross a stage boundary, which specialist receives it and which conclusions are legal</li></ul><p>Below it are <strong>L5 source code, L6 local infrastructure and L7 distributed infrastructure</strong>. They can execute a bad decision perfectly; they do not decide whether an input was a rule, an observation or a belief.</p><p>My first version ignored this split: the main instruction file grew into a 627-line wiki that mixed tournament rules, live status, methods and yesterday’s lessons. I cut it down to a small router, and context now arrives in four ways: a short always-on layer, a startup packet with recent lessons and warnings, rules that load only when a task touches their area, and specialist roles and memories retrieved on demand.</p><blockquote>Consider the request: <strong>“What should I try next?”</strong></blockquote><p><strong>The harness first composes a preflight packet:</strong></p><ol><li>From <strong>L1</strong> it gets the relevant expression, setting and scoring constraints.</li><li>From <strong>L2</strong> it gets the current portfolio, recent measurements, search coverage and unresolved outcomes.</li><li>From <strong>L3</strong> it gets the most relevant graph branch, theoretical provenance, scoped falsifiers, research specifications and empirical lessons.</li></ol><p><strong>Then, subagents go into play:</strong></p><ol><li>The <strong>hypothesis specialist</strong> uses this packet to propose several economic angles without hiding weak reasoning behind formulas.</li><li>After one angle is selected, the <strong>modeling specialist</strong> receives the registered hypothesis and constructs genuinely different implementations.</li><li>The <strong>experiment specialist</strong> receives that implementation tree plus the relevant platform constraints and records measured outcomes.</li></ol><p><strong>Then, every stage writes to a different part of the data plane:</strong></p><ul><li>Raw platform results and normalized measurements go to L2 in the research ledger.</li><li>Run starts, tool calls, retries and coordination events go to the operational store.</li><li>A lesson or scoped falsifier derived from the result goes to L3.</li><li>Graph rollups are reconciled from the ledger rather than edited independently.</li><li>Large PnL series, plots and fitted models become referenced artifacts.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*OmFfV5puBiW-5iWeLwyq-A.png" /><figcaption>Both submitted alphas started from a packet that already carried evidence: one family had improved my portfolio before, and the other idea reused a construction that had already produced uncorrelated alphas. The rating-change idea got a packet too, an untested cell of the opportunity map plus a past winner to copy, and all 18 constructions failed.</figcaption></figure><h3>How I would evolve this data architecture further</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*USEmVUmeSg5SIkiGfskodw.png" /><figcaption>I would not move everything at once. Each lane changes at its own phase, and the hollow gates open only when a measurable trigger earns it. On the right is the one write path I trust (commit, outbox, exporter, projection) instead of a dual write that creates two competing truths.</figcaption></figure><p>The current local architecture is more capable than it may look. SQLite is an excellent default for a single researcher: transactions are real, backups are simple, local queries are fast and there is almost no operational burden. B<strong>ut the limits are becoming visible. A multi-gigabyte research database is carrying tens of millions of time-series rows. Several workers can contend for local writes. Runtime events are growing. Artifacts and database snapshots are tied to one machine. Reproducing a result elsewhere requires more implicit state than I want.</strong> I would evolve it in five phases:</p><ul><li><strong>Phase 0: reconcile design with reality.</strong> Before adding a cloud, I would finish or deliberately roll back the incomplete PnL migration, then make the state audit compare documentation with live storage automatically.</li><li><strong>Phase 1: externalize heavy artifacts.</strong> Daily PnL, plots, model files, large reports and database snapshots belong in S3-compatible object storage. PnL should be partitioned into compressed Parquet with immutable manifests, checksums and lifecycle rules.</li><li><strong>Phase 2: move metadata only when concurrency requires it.</strong> When remote workers, multiple machines or collaborators need to write concurrently, I would move the research ledger and operational store to managed PostgreSQL, probably as separate databases or at least separate schemas with different retention policies.</li><li><strong>Phase 3: add MLOps as a projection, not as the source of truth</strong>. Weights &amp; Biases or MLflow would be useful, but I would not ask either product to replace the research ledger or knowledge graph.</li><li><strong>Phase 4: separate orchestration from state.</strong> Research workers should run in containers and receive immutable job manifests. A queue or workflow engine should assign idempotent jobs, leases, retries and timeouts.</li><li><strong>Phase 5: add richer analytical infrastructure only after the workload earns it.</strong> A lakehouse table format, a dedicated graph database or streaming platform may eventually help. I would adopt them only when concrete queries become painful: cross-experiment scans over billions of observations, many concurrent graph traversals, schema evolution across large Parquet collections or low-latency event consumers.</li></ul><p>I can’t claim this architecture raised performance by a precise percentage, because I never isolated its effect. What it does is let the system disagree with itself honestly: a paper suggests, a simulation contradicts, a falsifier narrows, and the tournament rule stays the rule.</p><h3>What’s next?</h3><p>This article was about what the agent should know. The next one, <strong>Harness Engineering</strong>, is about what it is allowed to do. I’ll show how the rules from this article became code the agent can’t skip. When the agent kept ignoring an instruction, I replaced it with a check that blocks the action. And nothing permanent, like submitting an alpha, happens without my explicit yes.</p><p>If you are working in a more traditional way and you think you need support in building and designing such AI-native investment research systems, let’s talk about how we can collaborate together. <strong>I am helping financial institutions personally and within a consulting </strong><a href="https://neurons-lab.com/"><strong>company I co-founded</strong></a><strong> to adopt AI for many years, and will be glad to help you do the same</strong>. You can reach out to me on <a href="https://www.linkedin.com/in/alexandr-honchar/">Linkedin</a>, <a href="https://x.com/rachnogstyle">X</a>, and <a href="http://alexandr.honchar@gmail.com/">email</a> as well.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c8880027bac8" width="1" height="1" alt=""><hr><p><a href="https://medium.com/data-science-collective/my-ai-agent-is-in-top-0-01-of-worldquant-challenge-4-context-engineering-c8880027bac8">My AI Agent is in ~Top-0.01% of WorldQuant Challenge #4: Context Engineering</a> was originally published in <a href="https://medium.com/data-science-collective">Data Science Collective</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[My AI Agent is in Top-0.04% of WorldQuant Challenge #3: Fighting Overfitting]]></title>
            <link>https://medium.com/data-science-collective/my-ai-agent-is-in-top-0-04-of-worldquant-challenge-3-fighting-overfitting-a77bf286321e?source=rss-1b1fb9c5ea70------2</link>
            <guid isPermaLink="false">https://medium.com/p/a77bf286321e</guid>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[quantitative-finance]]></category>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[trading]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <dc:creator><![CDATA[Alex Honchar]]></dc:creator>
            <pubDate>Wed, 05 Aug 2026 05:36:15 GMT</pubDate>
            <atom:updated>2026-09-16T05:48:00.317Z</atom:updated>
            <content:encoded><![CDATA[<h4>How to perform out of sample when you don’t have access to this time period data, and actually, no access to raw data at all?</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*jmAd0OSZaiZq1LOsPR54Tg.png" /></figure><p>A couple of months ago I started competing at the <a href="https://worldquantbrain.com/">WorldQuant BRAIN</a> — <strong>the largest global quantitative finance competition</strong>. At the moment of writing, <strong>my rank is 78 / 223470 and growing (top ~0.04% globally, </strong>you can check <a href="https://platform.worldquantbrain.com/profile/public/OH58245">my account here</a><strong>)</strong>. My philosophy is doing it part-time and in 100% <strong>AI-native way — absolutely zero manual work</strong>. This is a new series of articles for individuals and organizations doing quantitative finance research who want to adopt AI-native approach:</p><ol><li><a href="https://alexhonchar.medium.com/my-ai-agent-is-in-top-0-04-of-worldquant-challenge-1-introduction-55d5ee85caf8">Introduction</a></li><li><a href="https://alexhonchar.medium.com/my-ai-agent-is-in-top-0-04-of-worldquant-challenge-2-alpha-knowledge-graph-4090738f39c5?sharedUserId=alexhonchar">Alpha Knowledge Graph</a></li><li>Fighting Overfitting (this article)</li><li><a href="https://medium.com/@alexhonchar/my-ai-agent-is-in-top-0-01-of-worldquant-challenge-4-context-engineering-c8880027bac8?sharedUserId=alexhonchar">Context Engineering</a></li><li>Harness Engineering</li><li>Loops Engineering</li><li>Open Source LLMs and Harness</li><li>Future of Quantitative Research</li></ol><p>Previous 2 articles were introduction to the challenge and defining graph-based reasoning structure for our AI agent. Now we can proceed to the practical part of any investment strategy development — ensuring that it will perform out of sample as good as in sample, taking into account WorldQuant BRAIN platform constraints: <strong>no access to the raw data to do any kind of cross-validation and results validation limited only to the 5 years in-sample period</strong>. Of course, in the real world where you have access to raw data, I recommend you to design a solid cross-validation and simulation pipeline, as I described previously in this blog: <strong>“How to finally believe your backtests” series</strong> (<a href="https://alexhonchar.medium.com/ai-in-finance-how-to-finally-start-to-believe-your-backtests-1-3-1613ad81ea44?source=user_profile_page---------25-------------1b1fb9c5ea70----------------------">part 1</a>, <a href="https://alexhonchar.medium.com/ai-in-finance-how-to-finally-start-to-believe-your-backtests-2-3-adfd13da20ec?source=user_profile_page---------24-------------1b1fb9c5ea70----------------------">part 2</a>, <a href="https://alexhonchar.medium.com/ai-in-finance-how-to-finally-start-to-believe-your-backtests-3-3-2f3b4d875842?source=user_profile_page---------23-------------1b1fb9c5ea70----------------------">part 3</a>), <strong>“feature importance as a backtest tool”</strong> (<a href="https://alexhonchar.medium.com/ai-in-finance-advanced-idea-research-and-evaluation-beyond-backtests-d4d7bb185854?source=user_profile_page---------28-------------1b1fb9c5ea70----------------------">link</a>) and some other earlier work.</p><h3>Defence 1: economic grounding as an out-of-sample prior</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*9c6gYCBfeN3_Wv17-Iq3CQ.png" /><figcaption>Statistically, from different Claude-generated ideas and simulations, ~2x more ideas were accepted by the platform that were grounded in knowledge graph economic reasoning compared to purely “vibe researched” ideas</figcaption></figure><p>Even before WorldQuant, I learned it the hard way: <strong>a pattern found by random search has no reason to persist</strong>. A pattern that exists because a specific participant is structurally unable to arbitrage it away has a mechanism for persisting and surviving out of sample. So before any simulation runs, every hypothesis must register an economic claim with four key elements: the economic anomaly, the information channel, why it’s mispriced, and why nobody else has taken it. This is the hard gate for my agents to proceed or not with the hypothesis.</p><p>Does it work? The honest test isn’t performance — it’s whether the work survives at all. Of 20,542 alphas built on a written economic claim, 209 made it into the live book. Of 5,199 built on a mechanism the system clustered automatically with no claim recorded, 28 did. <strong>That’s 1.02% against 0.54% — grounded ideas reach the book at roughly twice the rate</strong>.</p><p>The figure above shows three of each. The rejections are instructive: two died on LOW_SUB_UNIVERSE_SHARPE — the edge existed only in the liquid core — and one on LOW_FITNESS, carrying Sharpe 2.19 but fitness 1.08 at 38% turnover. The return didn&#39;t survive its own trading. Grounding doesn’t make an alpha good. It changes the odds that the work survives.</p><h3>Defence 2: refusing to search hyperparameters</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*WdL4jDpYTmca_Rk81DHyKA.png" /><figcaption>You never know which kind of idea you’re testing — the one on the left that doesn’t really depend on the hyperparameters, or the right one — where you select the highest Sharpe option from the sweep, but it will fail the fitness test. The answer is — stop doing this hyperparameter search at all</figcaption></figure><p>The most seductive kind of overfitting isn’t just a bad idea. It’s a bad idea, tried 200 ways with different lookbacks and fields, until one of them happens to look great. So the 2nd rule is a strict one too: <strong>hypotheses have to come from first principles, not from noticing a pattern in past results. At most two decay variants per hypothesis</strong>.</p><p>Let’s look at a real example. Take one alpha shape — the same formula skeleton, with different fields and lookback windows plugged in. That’s what a sweep is: one idea, tried 20–30 ways. Now ask the obvious question: which variant is “the best”? The natural move is to sort by Sharpe and take the top one. I checked whether that move is safe, on two real sweeps:</p><ul><li>In the first, it was. The variant with the best Sharpe was <em>also</em> the variant with the best Fitness — BRAIN’s other main quality measure, roughly “is this return earned cleanly, or just by trading constantly.” Same alpha, either way you sort. No ambiguity.</li><li>In the second, it wasn’t. The best-Sharpe variant had a Sharpe of 2.46 — and a fitness of 0.93. BRAIN’s fitness floor is 1.0. Sort by Sharpe, ship the “winner,” and BRAIN rejects it. The variant that was actually best — fitness 2.01, at a quarter of the turnover — was a <em>different alpha</em>, sitting further down the Sharpe ranking where nobody would have looked.</li></ul><p><strong>I ran this check across 25 sweep families. The Sharpe-winner and the fitness-winner were the same alpha in only 7 of them.</strong> Eighteen times out of twenty-five, “the best variant in the sweep” wasn’t a fact about the alphas — it was a fact about which column you happened to sort by.</p><p><strong>And you can’t tell in advance which kind of family you’re in.</strong> Every extra variant you generate costs you something for certain — it inflates the trial count that the <em>Deflated Sharpe Ratio</em> (see below) then penalizes you for — in exchange for a benefit you can’t verify until it’s too late to matter.</p><h3>Defence 3: De Prado statistics as stability gates</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*m-wIGNeSR2hNAMD51lCH-g.png" /><figcaption>Seemingly great by the conventional standards alphas (2+ Sharpe, ~2 fitness) very likely won’t perform out of sample, because their probabilistic Sharpe ratio (PSR) and the pessimistic-case Sharpe (P5) are much lower</figcaption></figure><p>The machinery, straight out of López de Prado’s <a href="https://www.wiley.com/en-us/shop/general-finance-investments/advances-in-financial-machine-learning-p-9781119482086">Advances in Financial Machine Learning</a>:</p><ul><li><strong>Probabilistic Sharpe Ratio</strong> computes P(true SR &gt; SR*) from the Sharpe ratio’s asymptotic distribution, corrected for the return series’ actual skewness and kurtosis rather than assuming Gaussian returns. A backtest with fat tails or negative skew needs a much higher raw Sharpe to hit the same PSR as a well-behaved one.</li><li><strong>Deflated Sharpe Ratio</strong> — the same PSR calculation, but the benchmark SR* is replaced with the <em>expected maximum</em> Sharpe ratio you’d get from N independent trials under the null of zero skill, a function of N and the variance of Sharpe ratios across those trials. The more variants tested, the higher the bar a real signal has to clear to be distinguished from the best of pure noise.</li><li><strong>Probability of Backtest Overfitting </strong>— Combinatorially Symmetric Cross-Validation splits the PnL history into S groups, forms every train/test combination, and for each one checks whether the in-sample-best configuration still ranks above median out-of-sample. PBO is the fraction of splits where it doesn’t — an overfit strategy ranks well in-sample and effectively at random out-of-sample.</li><li><strong>P[failure] </strong>— derived from the strategy’s hit rate and its average-win-to-average-loss ratio, this is the probability that a betting process with those parameters produces a below-target Sharpe over a finite run. It’s a risk-of-ruin estimate, independent of whichever specific path the backtest happened to realize.</li><li><strong>Šidák-corrected dominance threshold, P5</strong> — draws many synthetic return paths for the alpha and takes the 5th-percentile Sharpe across them, then compares it against a threshold inflated by the Šidák correction, 1 − (1−α)^(1/m), which controls the family-wise error rate across m simultaneous alpha comparisons instead of testing each one at the nominal α.</li></ul><p>Three are hard gates — PSR ≥ 0.90, P5 ≥ 1.25, P_fail &lt; 0.20 — and the submission gate fails closed: a candidate with no computed de Prado cannot be cleared. Missing evidence counts as failing evidence.</p><p><strong>Of 4,778 alphas with these statistics computed, 801 clear all three. 16.8% — which I consider as not bad rate at all, very likely thanks to strong economic grounding of every idea. </strong>Five of every six things that looked good enough to measure were not stable enough to keep.</p><p>The illustration above clearly illustrates the difference between traditional in-sample BRAIN metrics and De Prado metrics: all six alphas sit at Sharpe 2.05–2.30 and fitness 1.45–2.22 — very similar to each other. But De Prado statistics disagree about three of them. Note the blocked alpha in the first row: fitness 2.22, the highest of all six. The platform likes it more than anything in the passing column, and its P5 is 1.17.</p><h3>Defence 4: path-shape checks</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*AIEswnE8nheB4RPd1xHPNw.png" /><figcaption>Some of the best (nominally) alphas with 3+ Sharpe and 3+ fitness were slowly dying even with a quick visualization check. Of course, I cannot look manually at the scale of 25k+ alphas, so I needed a precise machinery for path shape checks</figcaption></figure><p>De Prado’s statistics all treat returns as a <em>distribution</em> . <strong>But a stream that earned steadily and one that earned everything in year one and nothing since can have the identical distribution and pass the identical gates from Defence 3</strong>. One more check looks at the path instead of the distribution, because that’s the only way to catch an edge that already died before the window ended:</p><ul><li><strong>Persistence</strong>. Instead of one Sharpe averaged over five years, compute the Sharpe on just the recent stretch and compare it to how the alpha performed earlier. Still earning at the same rate → ALIVE. Fading → SOFTENING. Recent stretch flat or negative while the five-year average still looks fine → DECAYING: an edge that&#39;s already dead, wearing a healthy headline number.</li></ul><p>That recent-stretch number is what the figure above shows, labeled “Sharpe, last stretch,” sitting right beside the five-year Sharpe in the metrics next to it. <strong>All six alphas clear Sharpe 3.0 on the five-year number and clear every gate from Defence 3 — the only thing separating them is that one recency figure.</strong></p><p>The metric that would normally make it my best alpha is the one hiding that it stopped working. And it isn’t one unlucky alpha — it’s structural. Below Sharpe 2.5, under 1% of my alphas are decaying. Above Sharpe 3.5, 44% are. Of the 16 alphas in my corpus with in-sample Sharpe ≥ 3.5, not one is still rated ALIVE. <strong>A five-year Sharpe is an average — by construction it cannot tell you the edge died in year four. Only a check that looks at the path can.</strong></p><h3>What’s next?</h3><p>We now have a way to generate economically-grounded ideas using knowledge graphs and a 4 defence mechanisms (for WorldQuant BRAIN, in real investment world we have many more!) to judge whether they’ll survive. <strong>This gives us strong and economically grounded set of inputs for our agents and mathematically rigorous mechanism to judge the outputs.</strong> Next articles will be about designing the agent in between them: how it consumes context, how it uses tools as a harness, how to make it work in the loops and many more modern agentic engineering items.</p><p>If you are working in a more traditional way and you think you need support in building and designing such AI-native investment research systems, let’s talk about how we can collaborate together. <strong>I am helping financial institutions personally and within a consulting </strong><a href="https://neurons-lab.com/"><strong>company I co-founded</strong></a><strong> to adopt AI for many years, and will be glad to help you get it done with you too</strong>. You can reach out to me on <a href="https://www.linkedin.com/in/alexandr-honchar/">Linkedin</a>, <a href="https://x.com/rachnogstyle">X</a>, and <a href="http://alexandr.honchar@gmail.com/">email</a> as well.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a77bf286321e" width="1" height="1" alt=""><hr><p><a href="https://medium.com/data-science-collective/my-ai-agent-is-in-top-0-04-of-worldquant-challenge-3-fighting-overfitting-a77bf286321e">My AI Agent is in Top-0.04% of WorldQuant Challenge #3: Fighting Overfitting</a> was originally published in <a href="https://medium.com/data-science-collective">Data Science Collective</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[My AI Agent is in Top-0.04% of WorldQuant Challenge #2: Alpha Knowledge Graph]]></title>
            <link>https://medium.com/data-science-collective/my-ai-agent-is-in-top-0-04-of-worldquant-challenge-2-alpha-knowledge-graph-4090738f39c5?source=rss-1b1fb9c5ea70------2</link>
            <guid isPermaLink="false">https://medium.com/p/4090738f39c5</guid>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[investing]]></category>
            <category><![CDATA[quantitative-finance]]></category>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <dc:creator><![CDATA[Alex Honchar]]></dc:creator>
            <pubDate>Fri, 31 Jul 2026 06:05:11 GMT</pubDate>
            <atom:updated>2026-09-16T05:48:55.774Z</atom:updated>
            <content:encoded><![CDATA[<h4>Teaching an agent to think in economic theories instead of generating AI slop</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*DMZyxc3JYeDDMPMXAA3Nog.png" /></figure><p>A couple of months ago I started competing at the <a href="https://worldquantbrain.com/">WorldQuant BRAIN</a> — <strong>the largest global quantitative finance competition</strong>. At the moment of writing, <strong>my rank is 97 / 246073 and growing (top ~0.04% globally, </strong>you can check <a href="https://platform.worldquantbrain.com/profile/public/OH58245">my account here</a><strong>)</strong>. My philosophy is doing it part-time and in 100% <strong>AI-native way — absolutely zero manual work</strong>. This is a new series of articles for individuals and organizations doing quantitative finance research who want to adopt AI-native approach:</p><ol><li><a href="https://alexhonchar.medium.com/my-ai-agent-is-in-top-0-04-of-worldquant-challenge-1-introduction-55d5ee85caf8">Introduction</a></li><li>Alpha Knowledge Graph (this article)</li><li><a href="https://medium.com/@alexhonchar/my-ai-agent-is-in-top-0-04-of-worldquant-challenge-3-fighting-overfitting-a77bf286321e?sharedUserId=alexhonchar">Fighting Overfitting</a></li><li><a href="https://medium.com/@alexhonchar/my-ai-agent-is-in-top-0-01-of-worldquant-challenge-4-context-engineering-c8880027bac8?sharedUserId=alexhonchar">Context Engineering</a></li><li>Harness Engineering</li><li>Loops Engineering</li><li>Open Source LLMs and Harness</li><li>Future of Quantitative Research</li></ol><p>In this article we will focus on one of the central ideas of my approach — <strong>using knowledge graphs to make agents actually reason in economic terms</strong> and not just hallucinate things.</p><h3>Reasoning “in economic terms”</h3><h4>Naive “vibe research” approach</h4><p>What happens if you just open Claude Code with the state-of-the-art model like Fable 5 and just ask it to generate an “alpha”? This was of course my first approach, and this immediately led to multiple issues:</p><ul><li><strong>“monoculture trap”</strong> and fixation on alphas that overfit — even LLMs like Claude Opus will struggle to generate truly different alphas and highly likely the ideas will not perform well out of sample</li><li><strong>very naive fixes and suggestions</strong> — highly likely LLM won’t go beyond ideas like “revert”, and linear additions / removals of new fields from new datasets without deep reasoning</li><li>even harder will be to push raw LLM to <strong>generate deeply decorrelated ideas</strong> from your existing portfolio unless you will add harness elements for your book analysis</li></ul><h4>First principles of alpha generation</h4><p>So to fix these and many other issues, I had to rethink the whole concept of “alpha generation” from the first principles. In general, we can “beat the market” (i.e. get money from other market participants) in 3 ways:</p><ul><li><strong>be faster </strong>(not available to us in this competition, we’re not going to do any HFT play)</li><li><strong>have different / better information </strong>(for example most of people analyse only stock prices, but we can also look into fundamentals, sentiment data, etc — available to us thanks to WorldQuant datasets)</li><li><strong>model / process information better </strong>(i.e. use non-linear modeling instead of linear models — partially available to us thanks to WorldQuant operators)</li></ul><p>So what we need to do, is to encode who are the other market participants, what data they might have and how they might process it and build hypotheses how we can use more / better data and model it better to extract money from other data participants. So, essentially, alpha appears when we:</p><ol><li><strong>know other participants</strong> (I looked into 26 types of them ~ nodes in the graph) like HFT firms, sell side analysts, corporate insiders, options market makers, volatility sellers, etc and how they act</li><li><strong>understand how we can act against them</strong> with new data and new modelling, for example understand how information diffuses differently, or what heterogeneous beliefs, biases are present, etc (~ edges in the graph)</li></ol><p>This thinking map should be encoded as a knowledge graph as a structured map of who believes what and why they’d be wrong.</p><h3>Knowledge graph architecture</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*jfeej_c4jv-bEy4hgPDa7g.png" /><figcaption>Example of an ontology for reasoning with different levels of hierarchy, all connected</figcaption></figure><p>To facilitate reasoning from the first principles, I introduced a hierarchy of concepts in a knowledge graph:</p><ol><li><strong>Axioms level (7 axioms):</strong> the assumptions the textbook market is supposed to run on — rationality of investors, no arbitrage, risk aversion, market clearing, etc. What makes them useful isn’t the list, it’s that each axiom carries two kinds of edges: grounds, pointing at the theories that assume it, and violated_by, pointing at the places it demonstrably breaks. Alpha lives in that second set of edges.</li><li><strong>Grand theories level (7 theories):</strong> APT, CAPM, EMH, behavioral finance and some others that arise from the axioms. The graph doesn’t store these as labels but as assumption-sets — EMH stands on all five of rationality, rational expectations, no arbitrage, market clearing and homogeneous expectations, while behavioral finance is defined by the three it <em>violates</em>. That makes “what breaks if investors aren’t rational?” a graph traversal instead of an essay.</li><li><strong>Theory extensions level (39 extensions):</strong> information diffusion, limits to arbitrage, market infrastructure, factor crowding theory, etc. Each extension hangs off the specific axiom it breaks — limits to arbitrage approximately violates no-arbitrage, microstructure violates market clearing, etc. This level is the actual inventory of tradeable market failures: not “markets are inefficient”, but <em>which assumption fails, and in which documented way</em>.</li><li><strong>Anomalies level (94 families):</strong> theories and their extensions represent 26 market participants using 20 WorldQuant datasets that are connected with different relational edges. This is the last purely-literature level in the graph: everything above it is what academia believes, everything below it is what I actually built and measured.</li><li><strong>Mechanisms level (3,432 mechanisms):</strong> an anomaly family tells you <em>that</em> something is mispriced — post-earnings drift exists, revisions underreact. It doesn’t tell you how to take money out of it. A mechanism is one specific, falsifiable claim about harvesting one anomaly with the fields actually available on the platform</li><li><strong>Operator skeletons level (5,323 skeletons):</strong> a skeleton is an alpha with all of its content removed — the abstract syntax tree normalized down to a shape, with placeholders where the data goes: &lt;f&gt; for a field, &lt;i&gt; for a lookback, &lt;neut&gt; for a grouping. So group_rank(ts_delta(&lt;f&gt;, &lt;i&gt;), &lt;neut&gt;) is a shape realized by 599 of my alphas at a best Sharpe of 2.10.</li></ol><p>To build the graph, I ran a deep research pass to find what the literature already had, posing the same question in parallel to Claude, Gemini and Parallel and reconciling the three answers against each other. Two findings shaped everything:</p><ol><li><strong>No published theory-level knowledge graph of asset pricing exists.</strong> The finance ontologies that do exist (FIBO, OntoFINE) model instruments, risk and value — entities, not theories — and the LLM-finance graph papers use graphs as feature extractors rather than as representations of what the field believes. So the top four levels were greenfield.</li><li>But, <strong>Jensen–Kelly–Pedersen’s </strong><a href="https://www.nber.org/system/files/working_papers/w28432/w28432.pdf"><strong><em>Is There a Replication Crisis in Finance?</em></strong></a><strong> (2023)</strong> clusters 153 firm characteristics into 13 themes, replicated in-sample and validated out-of-sample across 93 countries, with a <a href="https://jkpfactors.com/">live data portal</a> — and it maps almost directly onto the anomaly layer. That became the backbone for my graph, supplemented by some other papers.</li></ol><h3>Knowledge graph use and updates</h3><h4>Inference via graph</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*hr4QlBdMpImCMjMAqPuvfQ.png" /><figcaption>Two examples of reasoning paths from axioms to the specific WorldQuant alphas expressions</figcaption></figure><p>The graph isn’t a reference the agent consults if it feels like it — it’s a mandatory rule for every reasoning pass. A hypothesis that can’t land on a node is rejected before we even start any WorldQuant simulation. Every proposal has to arrive carrying:</p><ul><li>the <strong>mechanism node</strong> it extends, and that node’s current empirical status</li><li><strong>which axiom is violated</strong>, through which extension — not “markets are inefficient” but <em>market clearing fails in this specific documented way</em></li><li>the <strong>counterparty</strong> — who’s on the other side, and why they structurally can’t stop</li></ul><p>The traversal is the same every time: an axiom is violated by an extension, the extension manifests as an anomaly family, the family is implemented as a mechanism, the mechanism is realized as a shape. For example:</p><ul><li><strong>Short-term reversal:</strong> market clearing is approximately violated by microstructure → whoever absorbed last week’s forced selling provided liquidity and deserves paying for it → counterparty, market makers.</li><li><strong>Variance risk premium: </strong>options pricing is extended by the Bollerslev–Carr–Wu branch → implied vol exceeds realized because someone’s paying for crash insurance → counterparty, volatility sellers.</li></ul><h4><strong>The graph updates itself</strong></h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*5icym0J1C8RMZgk80WLHfw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*SfKRep5GboT0paCZWsMyCA.png" /><figcaption>Graph updates itself and adds confirmation or denial edges based on the actual simulations. The illustrations above visualize both scenarios as paths in the graph, where in the end are empirical simulations</figcaption></figure><p>Mechanism nodes carry their verdict in the same row as their claim — status, graveyard flag, and a re-open condition written in advance. An attribution engine walks results back up, so status is <em>derived</em> from the results of simulation on WorldQuant, not asserted by whoever wrote the hypothesis. Two real updates:</p><ul><li><strong>Promoted.</strong> Betting-against-beta entered as a proposed claim from the literature. 435 alphas eventually attached to it, enough cleared the bar, status changed to <em>confirmed</em>.</li><li><strong>Buried.</strong> The net-operating-assets over-investment anomaly failed across three genuinely distinct constructions and went to the graveyard, with its re-open condition recorded at burial: a new construction, or corroboration from two independent factor models.</li></ul><p>Alongside sit 425 <strong>falsifiers</strong> — <em>this was tried, here’s how it failed</em> — each scoped, and the scope guarded: the broader the claim, the more independent failures it needs.</p><h3>Technical implementation</h3><p>Simple <a href="https://sqlite.org/">SQLite</a> with two tables: nodes(id, kind, label, attrs) and edges(src, dst, etype, attrs), with the edge primary key being the whole triple — so one pair can be joined by several relation types at once, and re-asserting a known fact doesn&#39;t duplicate it. Filtered columns are indexed columns; everything else lives in a <a href="https://sqlite.org/json1.html">JSON</a> blob so a new field isn&#39;t a migration. V1 was YAML files, until one interrupted truncate-and-rewrite left me holding half an ontology.</p><p>Traversal materialises into a <a href="https://networkx.org/">NetworkX</a> <a href="https://networkx.org/documentation/stable/reference/classes/multidigraph.html">MultiDiGraph</a> on demand — SQL is the truth, the graph is a disposable read model. Three things come free: <a href="https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.dag.ancestors.html">nx.ancestors</a> turns &quot;is this grounded?&quot; into a set-membership test; 1 − <a href="https://en.wikipedia.org/wiki/Jaccard_index">Jaccard</a> overlap of two mechanisms&#39; ancestors gives a decorrelation prior <em>before</em> simulating; and anomaly families with no mechanism child are the frontier, found by topology rather than by asking a model what&#39;s missing — ask a model that, and it points at wherever it just was.</p><h3>A note: this is one ontology, not the ontology</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7GUGMEWvLmc3wWNdOFjbog.png" /><figcaption>There are different ways to think about the market and encode this thinking as a graph — my approach is only one of many</figcaption></figure><p>I organised the graph around <strong>economic theory</strong> because my binding constraint was out-of-sample performance on WorldQuant, and theory is the only thing that tells you <em>why</em> an edge should still exist next year. But that choice is not obvious, and it’s not the only one. Four genuinely different architectures I could have built instead:</p><ul><li><strong>Participant-first (a flow-of-funds graph).</strong> Nodes are who trades and what forces them to —index reconstitutions, redemption cycles, margin rules, tax-loss windows, rating triggers. Edges are <em>forced to sell by</em>, <em>must buy at</em>, <em>cannot hold</em>. Alpha is anticipating a trade that has to happen regardless of price.</li><li><strong>Information-supply-chain.</strong> Nodes are facts about the world and everything that stands between a fact and its price: who records it, with what lag, who revises it, who proxies it. Edges are <em>is measured by</em>, <em>lags</em>, <em>is revised by</em>. Alpha is the gap between when something becomes true and when it becomes priced.</li><li><strong>The economy itself.</strong> Nodes are firms; edges are supply relationships, shared customers, competitors, common ownership. Alpha is information propagating along that network faster than the market propagates it.</li><li><strong>Pure geometry, no economics.</strong> Nodes are functional forms and transformations; edges are <em>is a special case of</em>, <em>spans the same subspace as</em>. Alpha is an unoccupied direction in a well-defined function space. This is the factor-zoo view, and note that it’s my <em>bottom</em> layer promoted to be the backbone of a new architecture.</li></ul><p>The thing to understand is that whatever you choose as the spine, you get cheap reasoning along it and expensive reasoning across it. My theory-first graph makes “why should this survive OOS?” a one-call traversal — and makes “who is on the other side of this trade <em>today</em>?” an expensive lookup bolted on the side. A flow-first graph would be exactly the opposite. The ontology isn’t a description of the domain; it’s a decision about which questions you want to be able to ask cheaply.</p><h3>What’s next?</h3><p>In this article we focused on making an LLM thinking structurally to avoid so-called “AI slop” generation which in the investing world is very dangerous. In the next article, we will review another side of overfitting, which is related more to time series analysis of generated alphas. After that, having a strong reasoning framework to generate ideas amd strong analysis framework to judge them, we will proceed to agent design articles.</p><p>If you are working in a more traditional way and you think you need support in building and designing such AI-native investment research systems, let’s talk about how we can collaborate together. <strong>I am helping financial institutions personally and within a consulting </strong><a href="https://neurons-lab.com/"><strong>company I co-founded</strong></a><strong> to adopt AI for many years, and will be glad to help you get it done with you too</strong>. You can reach out to me on <a href="https://www.linkedin.com/in/alexandr-honchar/">Linkedin</a>, <a href="https://x.com/rachnogstyle">X</a>, and <a href="http://alexandr.honchar@gmail.com/">email</a> as well.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4090738f39c5" width="1" height="1" alt=""><hr><p><a href="https://medium.com/data-science-collective/my-ai-agent-is-in-top-0-04-of-worldquant-challenge-2-alpha-knowledge-graph-4090738f39c5">My AI Agent is in Top-0.04% of WorldQuant Challenge #2: Alpha Knowledge Graph</a> was originally published in <a href="https://medium.com/data-science-collective">Data Science Collective</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[My AI Agent is in Top-0.04% of WorldQuant Challenge #1: Introduction]]></title>
            <link>https://medium.com/data-science-collective/my-ai-agent-is-in-top-0-04-of-worldquant-challenge-1-introduction-55d5ee85caf8?source=rss-1b1fb9c5ea70------2</link>
            <guid isPermaLink="false">https://medium.com/p/55d5ee85caf8</guid>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[quantitative-finance]]></category>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[investing]]></category>
            <dc:creator><![CDATA[Alex Honchar]]></dc:creator>
            <pubDate>Mon, 27 Jul 2026 12:39:53 GMT</pubDate>
            <atom:updated>2026-09-16T05:49:39.789Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*pz6nb8UJDCihTchTlPACkQ.png" /></figure><p>A couple of months ago I started competing at the <a href="https://worldquantbrain.com/">WorldQuant BRAIN</a> — <strong>the largest global quantitative finance competition</strong>. At the moment of writing, <strong>my rank is 103 / 258835 and growing (top ~0.04% globally, </strong>you can check <a href="https://platform.worldquantbrain.com/profile/public/OH58245">my account here</a><strong>)</strong>. My philosophy is doing it part-time and in 100% <strong>AI-native way — absolutely zero manual work</strong>. This is a new series of articles for individuals and organizations doing quantitative finance research who want to adopt AI-native approach:</p><ol><li>Introduction (this article)</li><li><a href="https://alexhonchar.medium.com/my-ai-agent-is-in-top-0-04-of-worldquant-challenge-2-alpha-knowledge-graph-4090738f39c5?postPublishedType=initial">Alpha Knowledge Graph</a></li><li><a href="https://medium.com/@alexhonchar/my-ai-agent-is-in-top-0-04-of-worldquant-challenge-3-fighting-overfitting-a77bf286321e?sharedUserId=alexhonchar">Fighting Overfitting</a></li><li><a href="https://medium.com/@alexhonchar/my-ai-agent-is-in-top-0-01-of-worldquant-challenge-4-context-engineering-c8880027bac8?sharedUserId=alexhonchar">Context Engineering</a></li><li>Harness Engineering</li><li>Loops Engineering</li><li>Open Source LLMs and Harness</li><li>Future of Quantitative Research</li></ol><h3>What is a WorldQuant BRAIN platform?</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*YgbuPaqq-lCLm-wfvTURPA.png" /><figcaption><a href="https://worldquantbrain.com/consultant">https://worldquantbrain.com/consultant</a></figcaption></figure><p><a href="https://worldquantbrain.com/">WorldQuant BRAIN</a> is a platform that allows participants to create investment strategies (what they call <em>alphas</em>) across multiple universes, multiple data sets, data fields, and possible combinations on the platform. As a participant, you need to think of an idea, check the datasets, pick the right fields and combine them with the right mathematical operators.</p><p>It is later judged by the platform 1) individually by Sharpe ratio, returns, turnover, drawdowns, and 2) how it impacts your existing set of alphas that you already submitted, so you have to think in terms of the portfolio, correlation between the alphas you create and the residual impact is also very important, and of course everything is against other participants who are doing it in their own way.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*xLADMy2IlM2QDEAkw4wJPw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*DxkwdSAnjEBhGZNT7BZDGA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7OShj59ChVuszOFUjbdcRw.png" /><figcaption>WorldQuant allows competing via writing algebraic formulas on their web platform. You can immediately see the results of one specific alpha, how it impacts your portfolio, and what you should do to fix it</figcaption></figure><p>What makes work quite easy is that they provide platform datasets and an FEL (fast expression language) to model interactions between different fields in the datasets. You do need to deal with data procurement and cleaning. You can participate even without any technical knowledge.</p><p>What is hard, especially if you think about the real-world trading, is that the out-of-sample is not visible and is judged only on the additional competitions like the IQC separately. Also, BRAIN doesn’t allow access to the underlying raw data, so you cannot do traditional data analysis. You should think more in terms of economic theories, delegating data analysis to the WorldQuant platform, which is a trade off to accept.</p><p>I am not diving into the details of <strong>WorldQuant BRAIN platform</strong> on purpose here, because <strong>they have amazing tutorials</strong> on the <a href="https://worldquantbrain.com/">platform</a> when you register and excellent in-depth <a href="https://www.youtube.com/@WorldQuantCareers">YouTube series</a> as well. In this series we will focus more on the agentic systems design, assuming data and backtesting routines already being developed and deployed in your team.</p><h3>My AI-native research philosophy</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ira9yYp3ZVvn-UYnAI3g0Q.png" /><figcaption>I apply human judgment only at the level of system design and irreversible decision-making. Everything else inside the agent within my philosophy should be done by the agent itself</figcaption></figure><p>WorldQuant’s interest in making this platform accessible to the public is in <strong>scouting talented individuals and researchers</strong>. That’s why the consultant program exists, and people get rewarded for creating good investment ideas. The current educational system at the platform is focused on manual competition. Of course, some people have started using large language models (LLMs) in the recent years. A couple of interesting <a href="https://github.com/zhutoutoutousan/worldquant-miner">open-source projects</a> and <a href="https://arxiv.org/html/2602.07085v3">research articles</a> demonstrate how large language models can develop algebraic alphas.</p><p>The AI-native and AI agent approach is rarer, but based on my conversations with some of the people at the IQC, it’s becoming more and more popular. <strong>I chose the AI agent path because I am building a generalizable financial research machine, not just a WorldQuant bot</strong>. I find their algebraic alpha system extremely interesting, but my goal is to build a research agent system that will work with other data and on other platforms as well.</p><p>It’s still a debatable question: where is human judgment placed in AI agent system design? Many people find human judgment crucial, but I’m taking a bit of a maximalist stance. <strong>I have to confess that I personally didn’t dive into the BRAIN system at all.</strong> <strong>I delegated to my AI agent(s) absolutely everything about learning the platform, finding strategies, and some elements of self-improvement as well.</strong> As you’ll see later, I gave the system maximum autonomy for alpha generation and execution, running multi-hour sessions without my involvement at all. <strong>Where I see human involvement is</strong>:</p><ul><li><strong>Irreversible decision-making</strong>, which in the brain case is the alpha submission. In the real-world case, it is the investment decision and execution.</li><li><strong>System design</strong>. A lot of my judgment and knowledge went into the system design, but not into individual investment strategy generation.</li></ul><h3>High-level architecture review</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*_cL_5tkgP0JubcCCZvKgCg.png" /><figcaption>These are the key elements of the investment research agentic system that I build and use</figcaption></figure><p>The system designed this way allowed me to test ~2000 hypotheses with ~30&#39;000 simulations and learn ~12&#39;000 lessons about the USA market reflected in the knowledge graph. 200+ alphas are submitted on the platform, with average Sharpe ratio ~1.8, ~10.5% turnover and ~5.5% max drawdown. My best alphas have 3+ Sharpe ratio.<strong> Full portfolio performance (at the IQC competition): 4.91 Sharpe, 8.94% annualized returns, 2.5% max drawdown, 9.1% turnover (5 years of in-sample data)</strong>. All of this just over a couple of months of part-time work. Here are the core elements of the agentic system I’ve built:</p><h4>1. Static context</h4><p>First of all, we need to ground an agent in the tournament rules, which are saved as .md files in the platform documentation: data set documentation, operator documentation, FAQs, the forum data, etc. This is the immutable layer that is never edited.</p><h4>2. Dynamic context</h4><p>There is a context that is changing depending on my behavior and other participants’ behavior. There are databases for: all the simulations and experiments that I do, submissions that they do, the pipeline state, memory, constantly updated information about the tournament and its participants so I understand my position and the stage of the competition.</p><h4>3. Knowledge graph</h4><p>The know-how I am bringing to this competition is the construction of a knowledge graph. I will dive into this in the next articles. In a nutshell, the idea is that they need to guide agents to reason in economic terms and search for sources of alphas. No single prompt skill or even a multi-agent architecture can embed this structure into reasoning. I have collected multiple academic papers describing many different economic theories and constructed a knowledge graph that my agent uses every time it creates a new idea, all the time, it is economically grounded in it.</p><h4>4. AI agent harness</h4><p>The raw LLM is almost destined to fail and not deliver the results expected for such a complex job as investment research. That’s why, around the Claude Code, I have built a rich ecosystem of agents with multiple skills, added many hooks for protecting key workflow decisions, and wrapped it all in self-improving loops that don’t stop after finding one idea that doesn’t work. Instead, they push until success is achieved. Typically, the definition of success is a new alpha that is better than my previous alphas, de-correlated, genuinely improves my portfolio, and works well against my competitors.</p><h4>5. Code</h4><p>100% of the code was designed, written and tested by Claude Code. I used <a href="https://openspec.dev/">openspec</a> to define the functionalities I needed, yet quite honestly, I even didn’t do manual code review. Code included but wasn’t limited to: portfolio analysis, knowledge graph routines, CLI around WorldQuant API, mathematical methods for alpha quality assessment and overfitting analysis.</p><h4>6, 7. Local and cloud infrastructure</h4><p>This is the part we will completely ignore in this series. Too much just depends on WorldQuant and how they organize their data and backtesting. And it’s just enough to know that some things I run locally, and some in the cloud :)</p><h3>How you can use this series of articles</h3><p>If you read <a href="https://medium.com/@alexhonchar">my previous blog articles</a> on Medium, you could have noticed that I’m always trying to accompany my work <a href="https://github.com/Rachnog/">with open-source code</a>. In recent years, I started to find it really unnecessary because AI is getting much better at generating code, and what<strong> you really need is a good specification (i.e. context) and good harness for your agentic coding system</strong>.</p><p>In this series of articles, I want to share with you exactly that. If you are an expert already on the frontier of quantitative finance research, it is very likely that <strong>it will not be hard for you to take these articles and work with the AI system of your choice to use it as a specification and upgrade your system</strong>. And I am absolutely happy with that. I would love to hear examples of people and teams using my work in such an AI-native way to improve their investment research.</p><p>If you are working in a more traditional way and you think you need support in building and designing such AI-native investment research systems, let’s talk about how we can collaborate together. <strong>I am helping financial institutions personally and within a consulting </strong><a href="https://neurons-lab.com/"><strong>company I co-founded</strong></a><strong> to adopt AI for many years, and will be glad to help you get it done with you too</strong>. You can reach out to me on <a href="https://www.linkedin.com/in/alexandr-honchar/">Linkedin</a>, <a href="https://x.com/rachnogstyle">X</a>, and <a href="http://alexandr.honchar@gmail.com">email</a> as well.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=55d5ee85caf8" width="1" height="1" alt=""><hr><p><a href="https://medium.com/data-science-collective/my-ai-agent-is-in-top-0-04-of-worldquant-challenge-1-introduction-55d5ee85caf8">My AI Agent is in Top-0.04% of WorldQuant Challenge #1: Introduction</a> was originally published in <a href="https://medium.com/data-science-collective">Data Science Collective</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Agentic SDLC: Strategic Reading List for CTOs, Tech Leads and Engineers in H1 2026]]></title>
            <link>https://medium.com/data-science-collective/agentic-sdlc-strategic-reading-list-for-ctos-tech-leads-and-engineers-in-h1-2026-29fe06630e72?source=rss-1b1fb9c5ea70------2</link>
            <guid isPermaLink="false">https://medium.com/p/29fe06630e72</guid>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[engineering]]></category>
            <category><![CDATA[business-strategy]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[software-development]]></category>
            <dc:creator><![CDATA[Alex Honchar]]></dc:creator>
            <pubDate>Wed, 27 May 2026 05:52:23 GMT</pubDate>
            <atom:updated>2026-05-27T05:52:23.017Z</atom:updated>
            <content:encoded><![CDATA[<h4>A roadmap from strategy to agents harness and individual skills</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*n2J74zjrjXrj9TGkE0CFAQ.png" /><figcaption>The photo is actually from another workshop we have run in London for execs earlier this year :)</figcaption></figure><p>Last week I was running an executive workshop for CTOs of companies in a single PE group. One of the questions that I’ve been asked there and at other events is “what is the key critical reading list” for my technical staff team? The speed of changes doesn’t allow me to give you a single evergreen list, but here is my answer for May 2026.</p><h3>Chief Technology Officers / VPs of Engineering</h3><p>CTOs need to understand the brutal truth about ROI of AI integration. Most of the studies show that it’s not about augmenting engineers with copilots, but building secure autonomous workflows or agents and remove humans from the loop and your work as CTOs is to build governance around it.</p><ul><li><strong>Read three things together</strong> that triangulate the autonomy thesis: (a) <a href="https://resources.anthropic.com/hubfs/2026%20Agentic%20Coding%20Trends%20Report.pdf">Anthropic 2026 Agentic Coding Trends Report</a>, (b) <a href="https://www.mckinsey.com/capabilities/tech-and-ai/our-insights/the-ai-revolution-in-software-development">McKinsey “AI revolution in software development</a>”, <a href="https://getdx.com/blog/ai-assisted-engineering-q4-impact-report-2025/">DX Q4 2025 AI-Assisted Engineering Impact Report</a>.</li><li><strong>Adopt the DX AI Measurement Framework</strong> — but <a href="https://getdx.com/research/measuring-ai-code-assistants-and-agents/">measure</a> the <em>autonomy</em> metrics (% of merged PRs agent-authored, hours of human review eliminated, end-to-end task cycle time), not just utilization.</li><li><strong>Pick one vendor governance posture for autonomous fleet operations</strong>: <a href="https://github.blog/news-insights/company-news/welcome-home-agents/">GitHub Agent HQ</a> + <a href="https://agents.md/">AGENTS.md</a>, <a href="https://kiro.dev/">AWS Kiro</a> spec-driven, or Anthropic <a href="https://code.claude.com/docs/en/overview">Claude Code</a> + custom MCP. Running multiple agent platforms in parallel beyond a 6-month pilot is expensive and dilutes the autonomy curve.</li><li><strong>Threshold to escalate / re-evaluate</strong>: if after 6 months &lt;5% of merged PRs are agent-authored, the bottleneck isn’t the tool — it’s the absence of specs, harness, or review structure that lets agents work autonomously. Fix those before buying more capacity. Read DX — <a href="https://newsletter.getdx.com/p/ai-productivity-gains-more-modest-than-expected">AI productivity gains: More modest than expected</a> (read as a <em>diagnostic</em> — modest gains = stuck in assistant mode).</li></ul><h3>Tech Leads / Architects</h3><p>Tech Leads need to design company harness for agents orchestrator. I often hear opinions from experiences SWEs that “<a href="https://www.linkedin.com/feed/#">OpenAI</a> Codex is better for X, <a href="https://www.linkedin.com/feed/#">Cursor</a> is better for Y and <a href="https://www.linkedin.com/feed/#">Anthropic</a> Claude Code is better for Z”. It seems like this to you only because you haven’t built a proprietary harness around it. You want to have a set of skills, specs, subagents etc that ANY tool will give you more or less the same result, ideally an equal result.</p><p>The job is no longer reviewing AI-generated code one PR at a time — it’s designing the system that lets many agents run safely in parallel. Master these five primitives:</p><ol><li><strong>Spec-driven development</strong> — the human’s highest-leverage activity becomes writing precise specs agents execute against. I personally recommend starting with <a href="https://github.com/Fission-AI/OpenSpec">OpenSpec</a> by Fission-AI.</li><li><strong>Memory management</strong> — agents without persistent task memory forget across sessions and across the team; this is the biggest unlock once you trust the model. Claude Code has solid native memory system, but <a href="https://steve-yegge.medium.com/introducing-beads-a-coding-agent-memory-system-637d7d92514a">Beads</a> is worth giving a try too.</li><li><strong>AGENTS.md</strong> — the de-facto open standard for repo-level agent context (adopted by GitHub, OpenAI, Anthropic, Cursor, Sourcegraph, Jules, Factory).</li><li><strong>Background agents running asynchronously</strong> — the dominant 2026 workflow; you delegate, they ship PRs. Check out Cursor’s <a href="https://docs.cursor.com/background-agents">Background Agents docs</a> and Anthropic’s <a href="https://www.anthropic.com/news/claude-code-on-the-web">Claude Code on the web</a><em>.</em></li><li><strong>Context engineering</strong> — the engineering discipline of feeding agents the right code, docs, static-analysis signals, and tests at the right time. I recommend reading <a href="https://www.thoughtworks.com/insights/podcasts/technology-podcasts/context-engineering-tackling-legacy-systems-generative-ai">Thoughtworks — Context engineering: Tackling legacy systems with generative AI</a>.</li></ol><h3>Software Engineers</h3><p>Engineers have to master foundations and one single tool very well. I believe first principles thinking is even more important than before and learning new frameworks or new tools is a futile idea for most of the people doing hands-on work. Master one agentic tool. Master CS foundations. Master your domain.</p><p>Pick one platform and master it. Anthropic has the strongest ecosystem of free courses to understand what’s actually inside AI agents — useful both as a coding engineer and as a stepping stone into AI engineering. I personally focus on Claude Code as a main tool and I adopted it at <a href="https://neurons-lab.com/">Neurons Lab</a> as a CTO, so I recommend completing these four Anthropic Skilljar courses in order:</p><ol><li><strong>Introduction to Agent Skills</strong> — <a href="https://anthropic.skilljar.com/introduction-to-agent-skills">https://anthropic.skilljar.com/introduction-to-agent-skills</a></li><li><strong>Building with the Claude API</strong> — <a href="https://anthropic.skilljar.com/claude-with-the-anthropic-api">https://anthropic.skilljar.com/claude-with-the-anthropic-api</a></li><li><strong>Introduction to Model Context Protocol</strong> — <a href="https://anthropic.skilljar.com/introduction-to-model-context-protocol">https://anthropic.skilljar.com/introduction-to-model-context-protocol</a></li><li><strong>Claude Code in Action</strong> — <a href="https://anthropic.skilljar.com/claude-code-in-action">https://anthropic.skilljar.com/claude-code-in-action</a></li></ol><p>Of course, of all the elements I describe here, they work only together. If your technical team is measured in dozens of people, all the elements have to be very well aligned. During the workshop with the private equity group, I could see the symptoms of misalignment on what to measure, zoo of different tools and no strategy on how to educate individual contributors to see real gains for your company. All can be fixed, but it starts with education and alignment.</p><p>Let’s chat if you’re working on building Agentic SDLC at your company as well — will be happy to help!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=29fe06630e72" width="1" height="1" alt=""><hr><p><a href="https://medium.com/data-science-collective/agentic-sdlc-strategic-reading-list-for-ctos-tech-leads-and-engineers-in-h1-2026-29fe06630e72">Agentic SDLC: Strategic Reading List for CTOs, Tech Leads and Engineers in H1 2026</a> was originally published in <a href="https://medium.com/data-science-collective">Data Science Collective</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Just published my first Udemy course: “Practical Intro to AI Agents & Agentic AI with Claude…]]></title>
            <link>https://alexhonchar.medium.com/just-published-my-first-udemy-course-practical-intro-to-ai-agents-agentic-ai-with-claude-128e7816c855?source=rss-1b1fb9c5ea70------2</link>
            <guid isPermaLink="false">https://medium.com/p/128e7816c855</guid>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[ai-agent]]></category>
            <category><![CDATA[education]]></category>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[learning]]></category>
            <dc:creator><![CDATA[Alex Honchar]]></dc:creator>
            <pubDate>Tue, 19 May 2026 02:10:40 GMT</pubDate>
            <atom:updated>2026-05-19T02:10:40.091Z</atom:updated>
            <content:encoded><![CDATA[<h3>Just published my first Udemy course: “Practical Intro to AI Agents &amp; Agentic AI with Claude Cowork”</h3><h4>A quick announcement and I hope you’ll enjoy the materials!</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*DX_ZdkBcfcdY9ty41qKJpw.png" /></figure><p>This is a very brief announcement for people who follow me for a while.</p><p>You know that I started this blog about AI a long time ago when LLMs and LLM agents simply didn’t exist.</p><p>You know that I was among the first practitioners sharing how to <a href="https://alexhonchar.medium.com/multi-step-multi-pdf-q-a-system-with-llms-and-langchain-c53d5225509e?source=user_profile_page---------10-------------1b1fb9c5ea70----------------------">build RAG systems</a> and <a href="https://alexhonchar.medium.com/how-to-compete-when-you-can-copy-an-ai-startup-with-whisper-and-chatgpt-in-3-minutes-27ac9a783be8?source=user_profile_page---------9-------------1b1fb9c5ea70----------------------">vibe code startups</a>. Then, I was the first one writing about <a href="https://alexhonchar.medium.com/intro-to-llm-agents-with-langchain-when-rag-is-not-enough-7d8c08145834?source=user_profile_page---------8-------------1b1fb9c5ea70----------------------">building LLM agents</a> and why they’re more powerful than the RAG systems. Then I shared <a href="https://alexhonchar.medium.com/large-and-opinionated-guide-to-using-ai-by-the-end-of-2025-22d580d39b57?source=user_profile_page---------3-------------1b1fb9c5ea70----------------------">my philosophy</a> for building personalized AI assistants and shared a couple of specific implementations for <a href="https://alexhonchar.medium.com/claude-code-for-life-1-managing-my-health-and-wellness-cae435c77030?source=user_profile_page---------1-------------1b1fb9c5ea70----------------------">health</a> and <a href="https://alexhonchar.medium.com/claude-code-for-life-2-a-personal-ai-chief-of-staff-for-daily-work-357b6c35573f?source=user_profile_page---------0-------------1b1fb9c5ea70----------------------">personal productivity</a>.</p><p>The technology is changing so fast, so <strong>the only way you can keep up is grounding yourself with first principles thinking and always practicing to stay on the top of the things.</strong></p><p>Having this in mind, together with <a href="https://www.linkedin.com/in/igor-sydorenko/">Igor</a> and <a href="https://www.ligency.com/">Ligency</a> we decided to create a practical Udemy course for building AI Agents with <a href="https://claude.com/product/cowork">Claude Cowork</a> and <a href="https://github.com/different-ai/openwork">Openwork</a> as a free, open-source alternative. <strong>Not chasing the most hyped tool or buzzword. But building strong foundations so you can master any tool and any hype wave.</strong></p><p>You can find the course by the link below with <strong>40% discount promo code active for ~30 days after publishing this article:</strong></p><p><a href="https://www.udemy.com/course/practical-intro-to-ai-agents-agentic-generative-ai-with-claude-cowork/?couponCode=GO_AGENTIC">Practical Intro to AI Agents &amp; Agentic AI with Claude Cowork</a></p><p>Enjoy and see you soon!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=128e7816c855" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Claude Code for Life #2: A Personal AI Chief of Staff for Daily Work]]></title>
            <link>https://medium.com/data-science-collective/claude-code-for-life-2-a-personal-ai-chief-of-staff-for-daily-work-357b6c35573f?source=rss-1b1fb9c5ea70------2</link>
            <guid isPermaLink="false">https://medium.com/p/357b6c35573f</guid>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[ai-agent]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[claude-code]]></category>
            <category><![CDATA[productivity]]></category>
            <dc:creator><![CDATA[Alex Honchar]]></dc:creator>
            <pubDate>Mon, 30 Mar 2026 07:15:34 GMT</pubDate>
            <atom:updated>2026-04-08T18:15:32.898Z</atom:updated>
            <content:encoded><![CDATA[<h4>Save hours daily after giving Claude Code control over your Email, Calendar, Notion, WhatsApp, Linkedin and other workspaces</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*opY9NvyGmzc50Rvf_3tKrw.png" /></figure><p>Hello everyone! This is a continuation of my new series related to a broad topic of <strong>agentizing personal life</strong>. First article was related to <a href="https://medium.com/data-science-collective/claude-code-for-life-1-managing-my-health-and-wellness-cae435c77030">management of my health and wellness</a>. Before that I <a href="https://alexhonchar.medium.com/large-and-opinionated-guide-to-using-ai-by-the-end-of-2025-22d580d39b57">wrote one article</a> on the overall philosophy and architecture of modern AI agents and a bit <a href="https://medium.com/data-science/intro-to-llm-agents-with-langchain-when-rag-is-not-enough-7d8c08145834">more technical deep dive</a> there as well that provides useful background if you want to dive deeper into modern AI agents.</p><p>Today, I want to share with you a more work-related setup of how I have built a <strong>personal AI Chief of Staff that helps me dozens and hundreds inputs daily and frees at least a couple of hours every day</strong>. I chose <a href="https://code.claude.com/">Claude Code</a> to be my main workhorse platform, but the very same setup can be easily replicated in user-friendly <a href="https://claude.com/product/cowork">Claude Cowork</a> or more sophisticated personal assistant setup like <a href="https://openclaw.ai/">OpenClaw</a>. As always, I <a href="https://github.com/Rachnog/alex-honchar-claude-for-life">open-source the skills in my repository</a>.</p><h3>My regular review flow</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*AvgnjiOn6snXlRDZTMRX8g.png" /><figcaption>Illustrated by Claude, as you can imagine :)</figcaption></figure><p>When I do this work myself, I typically do it on the daily, weekly, and monthly basis before I do any focused work or have any meetings. You can find my freely available Notion templates for <a href="https://alexhonchar.gumroad.com/l/monthly-and-weekly-check-ins-template">weekly and monthly reviews here</a>.</p><ol><li><strong>Housekeeping</strong>: read and clean up my emails, my social media and messengers, my Slack and, finally, my Apple Notes. This prepares to do any daily work without thinking that I forgot anything. <a href="https://gettingthingsdone.com/">GTD</a> in action.</li><li><strong>Briefing and planning</strong>: analyze my Calendar events and time spent in Rize, my Clay (Mesh) events, HubSpot deals and my Notion tasks backlog. This is about setting up the stage for my work with needed context.</li><li><strong>Drafting and acting:</strong> plan the tasks in my Notion, setting up priorities, answering and sending key messages, and, finally, act on my tasks.</li></ol><h3>Data sources, MCPs and Claude skills</h3><h4>Work environments</h4><p>My main environments where a lot of work that I want to automate happens:</p><ol><li><strong>Communications</strong> — Gmail, Slack, Socials and Messengers (from Linkedin to WhatsApp)</li><li><strong>People and Scheduling</strong> — Calendar, <a href="https://rize.io/">Rize</a>, Clay (recently became <a href="https://me.sh/">Mesh</a>), HubSpot</li><li><strong>Information</strong> — Notion, <a href="https://obsidian.md/">Obsidian</a>, Apple Notes, Google Drive, <a href="https://remarkable.com/">Remarkable</a></li></ol><p>Of course, there is a lot of other software specific for focus tasks, i.e. Github for software engineering, <a href="https://ashbyhq.com/">Ashby</a> for hiring and others. However, I want my Chief of Staff to help me navigate faster the most mundane pieces of work related to just getting through all the inputs I receive continuously.</p><h4>MCPs and connectors that I need</h4><ul><li><strong>Layer 1: claude.ai Built-in Connectors</strong>. Enable at claude.ai/settings/integrations. No additional setup is needed: Gmail, Google Calendar, Slack, Notion, Clay, HubSpot, Canva and other standard connectors in Claude.</li><li><strong>Layer 2: Native MCP Servers</strong></li></ul><p><strong>Google MCP. </strong>One server, all Google products, all accounts. Gmail, Calendar, Drive, Docs, Sheets, Slides.</p><pre>brew tap ngs/tap<br>brew install google-mcp-server<br><br>claude mcp add-json google --scope user &#39;{<br>  &quot;command&quot;: &quot;/opt/homebrew/bin/google-mcp-server&quot;,<br>  &quot;env&quot;: {<br>    &quot;GOOGLE_CLIENT_ID&quot;: &quot;YOUR_CLIENT_ID.apps.googleusercontent.com&quot;,<br>    &quot;GOOGLE_CLIENT_SECRET&quot;: &quot;YOUR_CLIENT_SECRET&quot;<br>  }<br>}&#39;</pre><p><strong>Slack (per workspace). </strong>Token from api.slack.com/apps → OAuth &amp; Permissions. You added all User Token Scopes for full access. Team ID from the workspace URL.</p><pre>claude mcp add slack-neurons-lab -e SLACK_BOT_TOKEN=xoxb-your-token -e SLACK_TEAM_ID=TKB19144W -- npx -y @modelcontextprotocol/server-slack</pre><p><strong>Notion (per workspace). </strong>Token from notion.so/profile/integrations → New internal integration. Critical step: share each top-level page with the integration via ... → Connections.</p><pre>claude mcp add notion-personal -e NOTION_TOKEN=ntn_your_token -- npx -y @notionhq/notion-mcp-server</pre><p><strong>Apple Notes. </strong>Required granting macOS Accessibility and Full Disk Access permissions to node.</p><pre>claude mcp add apple-notes -- npx -y @ailenshen/apple-notes-mcp@latest</pre><p><strong>reMarkable. </strong>Alternative with full-text search index: uvx rm-mcp@latest with REMARKABLE_INDEX_PATH and REMARKABLE_INDEX_REBUILD=1.</p><pre># Cloud mode (no SSH needed):<br>uvx rm-mcp@latest --setup   # opens browser for auth, prints token<br>claude mcp add remarkable -e REMARKABLE_TOKEN=&#39;your-token&#39; -e REMARKABLE_OCR_BACKEND=sampling -- uvx remarkable-mcp</pre><p><strong>Rize. </strong>No pre-built MCP existed. I had to <a href="https://github.com/Rachnog/rize-io-mcp-server">create and open-source one</a>.</p><pre>claude mcp add-json rize-tracker &#39;{&quot;type&quot;:&quot;stdio&quot;,&quot;command&quot;:&quot;uv&quot;,&quot;args&quot;:[&quot;run&quot;,&quot;--directory&quot;,&quot;/path/to/rize-mcp&quot;,&quot;server.py&quot;],&quot;env&quot;:{&quot;RIZE_API_KEY&quot;:&quot;your-key-here&quot;}}&#39;</pre><p><strong>Obsidian. </strong>No MCP needed. Claude Code reads the vault directly from the filesystem when you cd into it.</p><ul><li><strong>Layer 3: Chrome Extension. </strong>Covers everything without an MCP: LinkedIn, WhatsApp, X, Instagram, Telegram. Pair in Claude Desktop → Settings → Chrome Extension.</li></ul><h4>Claude skills architecture</h4><p>Continuing the approach from my <a href="https://medium.com/data-science-collective/claude-code-for-life-1-managing-my-health-and-wellness-cae435c77030">previous article</a>, skills for my Claude Chief of Staff will be part of a “work” plugin, where work is a separate broad life area I maintain with AI. As always, <a href="https://github.com/Rachnog/alex-honchar-claude-for-life">you can find the skills described in this repository</a>.</p><h3>Examples of AI Chief of Staff work</h3><h4>Complete inbox triage</h4><p>Just after asking Triage my emails, slack messages and unread meassages in messengers, waiting for some time (15 minutes, but it could take me an hour easily without AI) and asking for a anonymized version for my blog article, I will get the following result:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*AzwcO3BX0BQO0JWAd00izw.gif" /><figcaption>Result of my weekly inputs triage</figcaption></figure><h4>Daily / weekly brief</h4><p>Just after asking Can you give me a weekly brief for my upcoming meetings with all the needed context from Slack, Notion, Clay and other systems, waiting for some time (~5 minutes for AI, something that I could do for 20–40 minutes) and asking for a anonymized version for my blog article, I will get the following result:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wu6LeYBxO5gamiG-wBJVmg.gif" /><figcaption>Results of my weekly planning based on my calendar and additional context</figcaption></figure><h4>Backlog planning</h4><p>Just after asking Take my tasks in personal Notion, and assign to them a project, priority and task type if not assigned yet, waiting for some time (~4 minutes for AI, I personally could spend maybe 5–10 minutes on it too, but I don’t have to anymore) and asking for a anonymized version for my blog article, I will get the following result:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*WPtWxspd-6mIr9tyvG8kAQ.png" /><figcaption>Tasks I created very quickly in Notion now have all the attributes to be ready to work with</figcaption></figure><p>Of course, the main changes I can see in my Notion, where all the tasks I created quickly without setting up project, priority and type is now done and pretty well done.</p><h4>Cross-environment meetings preparation</h4><p>In this example, I have asked my assistant to act on a task in Notion. It was about a review of a WhatsApp thread that contains Loom videos, documents, and links. I asked it to summarise it for me so I do not necessarily have to watch it all if I do not have enough time.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*iSv4CSl80snyK1vbkeGOog.gif" /><figcaption>Whatsapp, Documents and Loom videos summarization for me</figcaption></figure><h3>Next steps</h3><p>First of all, I definitely want my AI Chief of Staff agent <strong>to be more proactive and run in background</strong>. I already run the inbox triage with a /loop Claude Code command on schedule so I know it’s dealing with my emails and other messages proactively and manages my inbox but I definitely want to extend this system to other actions.</p><p>Also, with so many moving parts the system is a little bit shaky. Ideally it would be good to <strong>reduce the number of environments and variables</strong> for example by moving everything I have from Notion to Obsidian and getting rid of Apple Notes to make the work for the agent easier. Last but not least, the <strong>token usage is still sub-optimal so I’ll have to work on optimization as well</strong>.</p><p>I will write about it in the next sessions while working on making Claude Code dealing with my other life areas or work activities. <strong>Knowledge management, finances, investments, relationships and many others — I still have to make AI help me with them</strong> :) You can text me on <a href="https://x.com/rachnogstyle">X</a> or <a href="https://www.linkedin.com/in/alexandr-honchar/">LinkedIn</a> if you’re interested in building similar systems for you personally or in your business and need support. Let’s stay in touch!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=357b6c35573f" width="1" height="1" alt=""><hr><p><a href="https://medium.com/data-science-collective/claude-code-for-life-2-a-personal-ai-chief-of-staff-for-daily-work-357b6c35573f">Claude Code for Life #2: A Personal AI Chief of Staff for Daily Work</a> was originally published in <a href="https://medium.com/data-science-collective">Data Science Collective</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Claude Code for Life #1: Managing my Health and Wellness]]></title>
            <link>https://medium.com/data-science-collective/claude-code-for-life-1-managing-my-health-and-wellness-cae435c77030?source=rss-1b1fb9c5ea70------2</link>
            <guid isPermaLink="false">https://medium.com/p/cae435c77030</guid>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[claude-code]]></category>
            <category><![CDATA[health]]></category>
            <category><![CDATA[sports]]></category>
            <category><![CDATA[wellness]]></category>
            <dc:creator><![CDATA[Alex Honchar]]></dc:creator>
            <pubDate>Sun, 01 Mar 2026 19:02:35 GMT</pubDate>
            <atom:updated>2026-03-03T19:15:42.642Z</atom:updated>
            <content:encoded><![CDATA[<h4>Taking data from Garmin watch, Oura ring, Withings scales, Yazio app and local data in Obsidian</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*VMfipUBDvjTzD0g8LEFcNQ.png" /></figure><p>Hello everyone! I want to start the new series related to a broad topic of <strong>agentizing personal life</strong>. I already <a href="https://alexhonchar.medium.com/large-and-opinionated-guide-to-using-ai-by-the-end-of-2025-22d580d39b57">wrote one article</a> on the overall philosophy and architecture of modern AI agents and how to use different currently available commercial tools in practise. Also, a couple of years ago I was among the first practitioners building custom AI agents for our clients, so there is a bit <a href="https://medium.com/data-science/intro-to-llm-agents-with-langchain-when-rag-is-not-enough-7d8c08145834">more technical deep dive</a> there as well.</p><p>Today, with the increased popularity of Claude, which is really well deserved, I want to show you how I am building a <strong>Personal Life Management agent following the architecture and understanding described in previous articles</strong>, but with very specific down-to-earth personal life applications. I will open source all the work I am doing on the way so you can follow my guide and use it as well. Let’s start with a cornerstone of a good life, which is <strong>physical health and wellness</strong> :)</p><h3>Obsidian and Claude Code</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*-MKp-sjhSd5ujR0Yu41KQA.png" /><figcaption>High-level Obsidian setup with Claude opened in the terminal</figcaption></figure><p>I believe that <a href="https://claude.com/product/claude-code">Claude Code</a> requires no introduction :) I’m a long-time <a href="https://obsidian.md/">Obsidian</a> user as my <strong>personal knowledge management system</strong>, mainly because I like to have full control and all the data locally. Also, I have a mix of different files (PDFs, text files, Excels, EPUBs, and other formats) to deal with.</p><p>With the Claude philosophy to have everything locally and dealing with the .md files, it became a very natural choice to combine both tools together to allow Claude to use my local data. Of course, I also need to add all the external data sources to be queried on demand without cluttering my actual knowledge base.</p><p>The specific setup is inspired first of all by <a href="https://fortelabs.com/blog/para/">Thiago Forte’s PARA method</a> and a bit more recent and <a href="https://www.curiouslychase.com/posts/ai-native-obsidian-vault-setup-guide">AI-native Chase Adams’ setup</a>. By the way, to run the terminal as an Obsidian tab, you can use <a href="https://github.com/polyipseity/obsidian-terminal">this Obsidian community plugin</a>.</p><h3>Model Context Protocols (MCPs)</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/972/1*m4C63L6KIqXdp2Ed7BiQxw.png" /><figcaption>After typing /mcp in my Claude terminal, I can see my main health systems connected and ready to work</figcaption></figure><p>First, I need to ensure that my agent has access to all the external data sources and can query them on demand. In my case, I track my body composition with <a href="https://www.withings.com/">Withings</a> scales, my sleep and recovery with <a href="https://ouraring.com/">Oura Ring</a>, all my exercises with <a href="https://www.garmin.com/">Garmin Watch</a> and my food intake with <a href="https://www.yazio.com/">Yazio</a> app.</p><h4>Withings MCP Server (body composition)</h4><p><strong>Package</strong>:gchallen/withings-mcp.First, you need to get API credentials. Go to <a href="https://developer.withings.com/">Withings Developer Portal</a> and create an application, note your Client ID and Client Secret and you’ll need to complete an OAuth flow to get your access token. Then, register your MCP in Claude with the following command:</p><pre>bashclaude mcp add withings — npx -y @gchallen/withings-mcp \<br> -e WITHINGS_CLIENT_ID=’your_client_id’ \<br> -e WITHINGS_CLIENT_SECRET=’your_client_secret’ \<br> -e WITHINGS_ACCESS_TOKEN=’your_access_token’</pre><h4>Oura Ring MCP Server (sleep and recovery)</h4><p><strong>Package:</strong> elizabethtrykin/oura-mcp. <strong>This one requires cloning and building from source</strong> — it does NOT work as a direct npx install. Go to <a href="https://cloud.ouraring.com/personal-access-tokens">Oura Developer Portal</a> and create a <strong>Personal Access Token.</strong></p><pre># Clone the repository<br>cd ~/mcp-servers # or wherever you keep your MCP servers<br>git clone https://github.com/elizabethtrykin/oura-mcp.git<br>cd oura-mcp<br># Install dependencies and build<br>npm install<br>npm run build<br># Add to Claude Code - point to the built server<br>claude mcp add oura - node /full/path/to/oura-mcp/dist/index.js \<br> -e OURA_ACCESS_TOKEN=&#39;your_personal_access_token&#39;</pre><h4>Garmin Connect MCP Server (exercises)</h4><p><strong>Package:</strong> garmin-connect-mcp. You use your regular Garmin Connect email and password (the same ones you use to log into connect.garmin.com).</p><pre>claude mcp add garmin -- npx -y garmin-connect-mcp \<br>  -e GARMIN_EMAIL=&#39;your_email@example.com&#39; \<br>  -e GARMIN_PASSWORD=&#39;your_garmin_password&#39;</pre><h4>Yazio MCP Server (diet and nutrition)</h4><p><strong>Package:</strong> yazio-mcp. <strong>This uses an unofficial reverse-engineered API</strong> — Yazio does not provide an official API. The MCP server could break if Yazio changes their internal endpoints. Fine for personal use, just know the risk.</p><pre>claude mcp add -s user yazio \<br>  -e YAZIO_USERNAME=&#39;your_email@example.com&#39; \<br>  -e YAZIO_PASSWORD=&#39;your_yazio_password&#39; \<br>  -- npx -y yazio-mcp</pre><h3>Claude marketplace, plugins and skills</h3><p>In order to ensure that I can work on my agentic reasoning system separately from my files and the actual applications, I decided to create a <a href="https://github.com/Rachnog/alex-honchar-claude-for-life">personal marketplace</a> and make it available to the public, in which I will create plugins with different life areas, which will contain different skills. You can find an example of a single skill below:</p><pre>---<br>name: body-exercise<br>description: Analyze exercise consistency, training progression, and workload management from Garmin. Trigger on: exercise, workout plan, gym consistency, training volume, training frequency, cardio, strength progress, mobility, &quot;am I training enough&quot;, or any question about training habits and execution.<br>---<br><br># Body — Exercise<br><br>Analyze exercise behavior and training consistency with a focus on execution<br>against defined habits and systems.<br><br>## MCP Server<br><br>garmin-mcp — pull workout history, training load, training status, steps,<br>activity sessions, and related performance signals.<br><br>## Goals<br><br>Read goals from 300 Areas/Body/CLAUDE.md before every analysis.<br>Prioritize alignment with:<br>- gym 4x+ per week habit<br>- strength/cardio/mobility balance<br>- sustainable progression over intensity spikes<br><br>## Analysis<br><br>- Pull current week and last 4 weeks from garmin-mcp<br>- Evaluate session frequency against weekly habit target<br>- Compare recent load vs historical baseline to flag over/under-loading<br>- Assess pattern consistency (missed streaks, irregular session timing)<br>- Distinguish volume progress from random single hard sessions<br>- Correlate training pattern with sleep/recovery context when relevant<br>- For planning questions, recommend next 7 days intensity mix:<br>  - hard / moderate / light / rest distribution<br><br>## Resources<br><br>Before giving recommendations, search 400 Resources/ for relevant material:<br>1. Use find and grep to locate files related to the current query<br>2. Read .md and .txt files directly<br>3. For PDFs, extract text and scan for relevant sections<br>4. For Excel files, read and parse relevant sheets<br>5. Prioritize newer files over older ones<br>6. Cite which resource informed your recommendation<br><br>Search broadly — file names may not be descriptive. Look at actual content.<br><br>## Tone<br><br>Quant analyst reviewing a dashboard. Numbers first, brief context, no fluff.<br><br>## Schema<br><br>Reference ../../schemas/exercise.json for field definitions.</pre><p>With this architecture, I can be sure that I can work separately on the Marketplace plugin and skills, and it is decoupled from my agent, which actually does the work. <strong>You can find git with this marketplace</strong> <a href="https://github.com/Rachnog/alex-honchar-claude-for-life">here</a> with all the skills described included, and this is where you add it to your Claude:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*w1tkyKoLfe7WBu05DSlljA.png" /><figcaption>After typing /plugin in Claude terminal you will be able to add a new marketplace and take plugins with skills from it</figcaption></figure><h3>Use case examples</h3><h4>Simple data queries</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7Zuqb3EENViIBJhBghNOqg.gif" /><figcaption>Just asking about my medical documents</figcaption></figure><p>As expected, Claude is able to access my local data very easily and provide the answers around them. The same works with data sources from the MCP servers.</p><h4>Deep analysis and comparisons</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*-VwdHrnnf3pp_6uOn9Vxew.gif" /><figcaption>A bit more complex query on the intersection of different data sources and different time frames</figcaption></figure><p>This is a more interesting case that requires Claude’s reasoning — knowing which data sources to pull, what to prioritize, and how to guide the comparisons and analysis. Thanks to MCPs and skills it was done perfectly!</p><h4>References grounding and strategy</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*orJ3L1W0V-5X7o_U_FnW9Q.gif" /><figcaption>Asking to ground the diet question in my local notes</figcaption></figure><p>In many cases I want to push Claude to think within some boundaries, i.e. my saved resources in Obsidian (think of my saved notes, articles, courses etc) instead of its own reasoning. This can be done very good as well.</p><h3>Next steps</h3><p>Of course, the very obvious next step is the <strong>creation of new life areas with corresponding skills and adding new MCPs</strong> to work with my created engine. A couple of other subtle details that became apparent and are important to fix to make everything work even better:</p><ol><li><strong>All the data has to be in a Claude-friendly data format</strong>. As you could see, scanned local PDFs are not so easy to recognise natively with Claude, so I either need to turn them into .md files or to find some other tool or MCP that is better in OCR.</li><li>For many things, I need a better interaction on the web, and <strong>I will need to use our MCP or a tool that allows a direct browser interaction and use</strong>.</li></ol><p>I will write about it in the next sessions. You can text me on <a href="https://x.com/rachnogstyle">X</a> or <a href="https://www.linkedin.com/in/alexandr-honchar/">LinkedIn</a> if you’re interested in building similar systems for you personally or in your business and need support. Let’s stay in touch!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=cae435c77030" width="1" height="1" alt=""><hr><p><a href="https://medium.com/data-science-collective/claude-code-for-life-1-managing-my-health-and-wellness-cae435c77030">Claude Code for Life #1: Managing my Health and Wellness</a> was originally published in <a href="https://medium.com/data-science-collective">Data Science Collective</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to build AI agents to evaluate AI agents for investment management with A2A protocol]]></title>
            <link>https://alexhonchar.medium.com/how-to-build-ai-agents-to-evaluate-ai-agents-for-investment-management-with-a2a-protocol-6f3c765f8443?source=rss-1b1fb9c5ea70------2</link>
            <guid isPermaLink="false">https://medium.com/p/6f3c765f8443</guid>
            <category><![CDATA[finance]]></category>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[investing]]></category>
            <dc:creator><![CDATA[Alex Honchar]]></dc:creator>
            <pubDate>Mon, 12 Jan 2026 11:20:24 GMT</pubDate>
            <atom:updated>2026-01-12T11:20:24.794Z</atom:updated>
            <content:encoded><![CDATA[<h4>The submission to AgentX competition on AgentBeats platform</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*fHxpVppGfpH20yp1U-DWGQ.png" /></figure><p>Hello everyone! In this article I want to share what I’ve been researching lately: <strong>how to evaluate AI agents for portfolio construction and investment decision support</strong>.</p><p>I’ve worked in AI + finance for years, long before LLMs made it fashionable. And one thing that’s been constant in this space is that <strong>evaluation is the real battleground</strong>. In the classic machine learning era, the workflow was familiar: collect a dataset, split into train/validation/test, run simulations, optimize clear numerical metrics.</p><p>LLMs changed that. The output stopped being purely numerical and became <em>language, reasoning, and judgment</em>. Suddenly “accuracy” wasn’t a single number anymore. Over the last year, one practical answer has emerged: <strong>LLM-as-a-judge</strong>. We’ve used it at <a href="https://neurons-lab.com/">Neurons Lab</a> across multiple client projects, and it works, but it comes with a catch: you still need <strong>high-quality evaluation data</strong>, and in finance, that’s often the hardest thing to get.</p><p>That’s where <a href="https://agentbeats.dev/">AgentBeats</a> became interesting to me. I discovered it through <a href="https://agenticai-learning.org/f25">Berkeley’s AI agents course</a>, and the premise is almost a meta shift: instead of building a dataset and hand-crafting metrics first, you build an <strong>evaluator agent</strong> — an agent whose job is to test, challenge, and score other agents.</p><h3>1. The setup: AI agent to build AI agent to evaluate AI agent</h3><h4>Agentic AI coding at its fullest</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*lZHTGhqPqzZyLjHp8tqYCg.png" /><figcaption>Initial materials collected and structured for Claude Code as a part of context engineering task</figcaption></figure><p>For this project I added one rule for myself: <strong>I wouldn’t write any code by hand. </strong>I only gave instructions, and an AI coding agent (<a href="https://code.claude.com/">Claude Code</a>) built everything for me. That sounds unreliable, but it did all the work perfectly. Of course, I still had to do the hard part: <strong>be clear about what I want</strong>, collect the right context, and define the system in a way an “assistant engineer” can execute. So before the build, I gathered a bunch of inputs and dropped them into the repo:</p><ul><li>Discord chats from the competition (where the real problems show up)</li><li>Workshop videos + transcripts</li><li>The official docs and Github repositories</li><li>Working examples from people who submitted before me</li><li>My own rough description of what the agents should do</li></ul><p>This was enough to build the system practically end-to-end.</p><h4>One agent builds, one agent judges</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*s8o48Dk2G5NgGCwh_mM6ng.png" /><figcaption>Illustration from <a href="https://docs.agentbeats.dev/">https://docs.agentbeats.dev/</a></figcaption></figure><p>At a high level, the system is simple: <strong>Purple agent = does the job, Green agent = judges the job. </strong>In my case, the “job” is <strong>goal-based portfolio recommendations</strong>. The purple agent gets a short story like “I want to buy a house in 10 years”, “I’m saving for retirement”, “I’m planning for my child’s education” with some numerical inputs like savings. It then returns which assets/tickers to use, the allocation weights and a short explanation. You can find <a href="https://github.com/Rachnog/agentbeats-portfolio-assessment">purple’s agent code here</a>.</p><p>For the first version, I kept it purple agent intentionally basic: <strong>LLM generates the portfolio without tools.</strong> In real portfolio management you’d add lots of logic like constraints, risk models, backtests, taxes, and so on. But that’s not the point yet. First I wanted the full pipeline running end-to-end. Then the green agent takes the goal, the portfolio, the reasoning and gives an estimate like: <strong>how likely is this plan to reach the goal?</strong></p><p>That’s the core idea I’m exploring: instead of needing a perfect dataset upfront, you can build an <strong>evaluator agent</strong> that applies consistent rules and judgment and keep improving it over time.</p><h3>2. The build: evaluation logic for investment management</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/616/1*JFcBn3iRwM1bLw0u-hpEbA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*XopUJSu4Nge49gYu864gUA.png" /><figcaption>Purple and green agents architectures as Mermaid diagrams</figcaption></figure><p>Next I focused on building the <strong>Green Evaluator</strong> agent. At the beginning, the first baseline was also <strong>purely LLM-based</strong>. I did that on purpose, not because it’s the best evaluator, but because I needed to first polish the infrastructure: GitHub Actions, Docker, and making sure everything actually runs end-to-end on the <a href="https://agentbeats.dev/">AgentBeats</a> platform. And honestly, the only way to make that smooth was to study multiple working examples from other participants and copy the patterns that already worked.</p><p>Once the whole workflow was stable, I added the <strong>quantitative part</strong>. I used <strong>Yahoo Finance</strong> to download historical data for the tickers, estimated basic performance parameters from history, and ran forward simulations to approximate how likely the portfolio is to hit the goal. Then, as a sanity check, I sometimes double-checked specific things using <strong>Google Search</strong> as a tool.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bo-M1cD1vZa7-AXgdvrwBQ.png" /><figcaption>Final solution architecture as Mermaid diagram</figcaption></figure><p>So at this point the evaluator stopped being “just text.” It became a more <strong>agentic setup</strong> that uses multiple tools: market data, Python code execution, and web search. In the end, I could set up my own leaderboard around this idea: people can build their own <strong>purple agents</strong> that design portfolios better than a raw LLM, submit them, and my <strong>green agent</strong> scores them using simulations — producing a single score that reflects the <strong>probability of achieving the goal</strong>. You can find <a href="https://github.com/Rachnog/agentbeats-portfolio-assessment">the code for the green agent here</a>.</p><h3>Next steps and improvements</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2QOaqflQtmEoAl-_RC56XQ.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*z7DSczos4Wf5lRkttouGug.png" /><figcaption>Submissions of purple and green agents to AgentBeats platform</figcaption></figure><p>Of course, this submission is just a <strong>proof of concept</strong>. It’s not how real production agents in investment management should look.</p><p>In the real world, “here are some tickers and weights” is not enough. A portfolio has to fit the <strong>investment policy</strong> of the firm, and the policy isn’t just a PDF — it’s the operating system of the business. Things like:</p><ul><li>rebalancing rules</li><li>tax strategy</li><li>additional asset classes (beyond a simple ETF mix)</li><li>the client’s liabilities and cashflows</li><li>constraints you can’t break (exposure limits, banned assets, concentration rules)</li></ul><p>The evaluator also has to go much deeper than my first version. If you want something closer to professional investment research, you’d at least move toward approaches like <a href="https://en.wikipedia.org/wiki/Black%E2%80%93Litterman_model">Black–Litterman</a> (or more modern): <strong>combining historical data with market “views”.</strong> And those views can come from internal research, external signals, or even the internet — but they need to be explicit and testable.</p><p>Same for simulations: forward-simulating with basic assumptions is a start, but a serious evaluator would model a wider range of regimes and shocks. That might mean more advanced stochastic models, scenario generation, or even generative ML models that can produce richer “possible futures” than simple historical replay.</p><p>And finally: risk preferences are not always a single number. Many investors care about specific exposures — geographies, sectors, asset classes, or event risks — and those constraints need to be reflected both in portfolio construction and in evaluation.</p><p>I’ll keep working on this. And I’m very likely to bring this “agentic evaluation” approach into real client work at <a href="https://neurons-lab.com/">Neurons Lab</a>, because it solves a problem we see all the time: teams need to iterate fast, but the data needed for perfect evaluation is often messy, incomplete, or simply unavailable.</p><p>Thanks for reading!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=6f3c765f8443" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>