<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Shapovalov Valentine</title>
    <description>The latest articles on DEV Community by Shapovalov Valentine (@apovalov).</description>
    <link>https://dev.to/apovalov</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4137385%2Fd4bd3a61-6890-47bd-98e5-289c99a1e685.png</url>
      <title>DEV Community: Shapovalov Valentine</title>
      <link>https://dev.to/apovalov</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/apovalov"/>
    <language>en</language>
    <item>
      <title>REA: ask your coding agent how a finished app works</title>
      <dc:creator>Shapovalov Valentine</dc:creator>
      <pubDate>Sat, 17 Oct 2026 09:51:16 +0000</pubDate>
      <link>https://dev.to/apovalov/rea-ask-your-coding-agent-how-a-finished-app-works-1ebd</link>
      <guid>https://dev.to/apovalov/rea-ask-your-coding-agent-how-a-finished-app-works-1ebd</guid>
      <description>&lt;p&gt;I recently came across &lt;a href="https://github.com/morluto/rea" rel="noopener noreferrer"&gt;REA&lt;/a&gt;, short for Reverse Engineer Anything. It connects a coding agent to tools for inspecting a finished app, so you can ask how a particular feature works.&lt;/p&gt;

&lt;p&gt;REA is an open-source MCP server under the MIT license. It connects Claude Code, Codex, Cursor, Gemini CLI and other agents to reverse-engineering tools. You point the agent at an app, ask about one feature, and it traces the code behind it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I haven't run it myself yet. Everything below comes from the project's documentation, plus how I plan to check it.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What it can look at
&lt;/h2&gt;

&lt;p&gt;The documented targets include:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Target&lt;/th&gt;
&lt;th&gt;What comes back&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Native binaries&lt;/td&gt;
&lt;td&gt;Pseudocode, assembly, strings, symbols, calls and references (Hopper, Ghidra or IDA for deep analysis)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JavaScript and Electron apps&lt;/td&gt;
&lt;td&gt;Modules, imports, source maps, routes and IPC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;.NET assemblies&lt;/td&gt;
&lt;td&gt;Metadata and CIL instructions, static analysis only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Android APKs&lt;/td&gt;
&lt;td&gt;Manifest, classes and decompiled methods (needs JADX and a JDK)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Websites&lt;/td&gt;
&lt;td&gt;Page structure, scripts and network observations&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Setup
&lt;/h2&gt;

&lt;p&gt;With Node.js and npm installed, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx rea-agents setup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Review and approve the proposed configuration changes, then restart your agent. Setup registers the MCP server and installs matching workflow instructions. Static JavaScript and .NET analysis work without a native engine. The FAQ says analysis runs locally, although your agent still sends the tool results to its model provider.&lt;/p&gt;

&lt;h2&gt;
  
  
  Every finding comes with evidence
&lt;/h2&gt;

&lt;p&gt;REA returns each finding together with the evidence and the limitations behind it. &lt;a href="https://rea.tools/showcase/notion/" rel="noopener noreferrer"&gt;One showcase&lt;/a&gt; follows Notion's clipboard API from the renderer, through preload and IPC, into the main process. &lt;/p&gt;

&lt;p&gt;In &lt;a href="https://rea.tools/showcase/dx-ball/" rel="noopener noreferrer"&gt;another&lt;/a&gt;, REA supplies the instructions and data reads behind a sound-pan function in the old game DX-Ball, and a reconstruction project rewrites it in C. That version passes &lt;strong&gt;3,205 test cases&lt;/strong&gt; against the original x86 code and reproduces &lt;strong&gt;all 63 compiled bytes&lt;/strong&gt; of the function.&lt;/p&gt;

&lt;p&gt;That's the level of detail I want from an engineering agent. You can follow the path behind a feature and ask where each conclusion came from.&lt;/p&gt;

&lt;h2&gt;
  
  
  From explanation to your own feature
&lt;/h2&gt;

&lt;p&gt;The example prompt in the README asks the agent to understand how search works in the Notes app, show the evidence, and build a similar feature for your project. That gives the agent a way to use what it finds when writing an implementation. I'd still test that implementation against the behavior I wanted to reproduce.&lt;/p&gt;

&lt;h2&gt;
  
  
  Before you try it
&lt;/h2&gt;

&lt;p&gt;The README is explicit that REA is for lawful research, interoperability, software preservation, and software you own or are authorized to examine. Commercial tools such as IDA, Hopper and JEB need your own valid licenses.&lt;/p&gt;

&lt;p&gt;Install it only from the official sources (the &lt;a href="https://github.com/morluto/rea" rel="noopener noreferrer"&gt;GitHub repo&lt;/a&gt;, &lt;a href="https://rea.tools/" rel="noopener noreferrer"&gt;rea.tools&lt;/a&gt; or the &lt;code&gt;rea-agents&lt;/code&gt; npm package), because the project warns about look-alike repositories.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I'd test it
&lt;/h2&gt;

&lt;p&gt;I'd start with one narrow question on an Electron app I'm authorized to inspect: which code path produces this behavior? Then I'd check whether another engineer can reproduce the finding from REA's evidence alone, and whether the app behaves the way the explanation predicts when I change the input.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>mcp</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Claude Code skills: stop onboarding your agent every Monday</title>
      <dc:creator>Shapovalov Valentine</dc:creator>
      <pubDate>Wed, 07 Oct 2026 08:53:59 +0000</pubDate>
      <link>https://dev.to/apovalov/claude-code-skills-stop-onboarding-your-agent-every-monday-de9</link>
      <guid>https://dev.to/apovalov/claude-code-skills-stop-onboarding-your-agent-every-monday-de9</guid>
      <description>&lt;p&gt;Writing the same long prompt for the same task every time is like onboarding a new intern every Monday.&lt;/p&gt;

&lt;p&gt;Skills are how you stop.&lt;/p&gt;

&lt;p&gt;A skill sits somewhere between a program and a prompt. At its core is a &lt;code&gt;SKILL.md&lt;/code&gt; file of instructions for one specific job. It can also include reference material, templates, and scripts. The aim is a repeatable workflow, not a guarantee of an identical result.&lt;/p&gt;

&lt;p&gt;Claude Code has them. Anthropic &lt;a href="https://www.anthropic.com/news/skills" rel="noopener noreferrer"&gt;published the format as an open standard&lt;/a&gt; in December 2025. &lt;a href="https://developers.openai.com/codex/skills" rel="noopener noreferrer"&gt;Codex&lt;/a&gt; and &lt;a href="https://cursor.com/docs/skills" rel="noopener noreferrer"&gt;Cursor&lt;/a&gt; support skills too.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changes in practice
&lt;/h2&gt;

&lt;p&gt;Think about a skill for writing blog posts. Instead of leaving "write a post" open to interpretation, you can specify a workflow: read your previous posts, check for repeats, look for fresh data, ask a couple of clarifying questions, suggest a few options, then write in your voice. That's the difference between a stranger on the street and an assistant who's worked with you for six months.&lt;/p&gt;

&lt;p&gt;Describe the logic once, then invoke it when you need that job done.&lt;/p&gt;

&lt;p&gt;A monthly content plan. Sorting a folder full of documents. A proposal tailored to one client.&lt;/p&gt;

&lt;p&gt;One skill to start each workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why skills scale better than one long prompt
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://agentskills.io" rel="noopener noreferrer"&gt;Agent Skills standard&lt;/a&gt; uses progressive disclosure: the agent starts with skill names and descriptions, then loads the full instructions when a skill is activated. You can also invoke a skill directly.&lt;/p&gt;

&lt;p&gt;That keeps the full procedures out of context until you need them. The names and descriptions still take up space.&lt;/p&gt;

&lt;p&gt;For me, that's the reason to keep task-specific procedures in skills. I want the workflow for the current job loaded when I need it, rather than carrying every procedure into every conversation.&lt;/p&gt;

&lt;p&gt;Think of a tool as an action with a clear contract, like sending an email. A skill describes the workflow around those actions: what to check, which tools to call, and what the finished result should look like.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building your first one
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://code.claude.com/docs/en/skills" rel="noopener noreferrer"&gt;Claude Code documentation&lt;/a&gt; explains how to create and invoke skills. There are already skill packs for development, like &lt;a href="https://github.com/obra/superpowers" rel="noopener noreferrer"&gt;Superpowers&lt;/a&gt;. There are even skills for building skills.&lt;/p&gt;

&lt;p&gt;The ones I'd tried felt closer to one-shot generation than to working through the design with a brainstorming partner. I wanted a process that helped me decide what the skill should do before writing it.&lt;/p&gt;

&lt;p&gt;So I built my own: &lt;a href="https://github.com/apovalov/superskill-creator" rel="noopener noreferrer"&gt;SuperSkill Creator&lt;/a&gt;. You answer questions, it checks for overlap with existing skills, and it helps you choose ready-made building blocks. Then it writes the skill, pressure-tests it with you, and saves it. The design happens in conversation; you do not have to hand-write the instructions.&lt;/p&gt;

&lt;p&gt;If you want agents to take over everyday work and you'd rather not write code, skills are where I'd start. Pick one task you do every week and make it your first skill.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to tell if your AI agent actually got better</title>
      <dc:creator>Shapovalov Valentine</dc:creator>
      <pubDate>Wed, 23 Sep 2026 20:40:15 +0000</pubDate>
      <link>https://dev.to/apovalov/how-to-tell-if-your-ai-agent-actually-got-better-2p12</link>
      <guid>https://dev.to/apovalov/how-to-tell-if-your-ai-agent-actually-got-better-2p12</guid>
      <description>&lt;p&gt;People keep asking me how you actually know an agent got better. I collected my answers to the most common questions in one place.&lt;/p&gt;

&lt;h2&gt;
  
  
  Isn't it obvious from the answers?
&lt;/h2&gt;

&lt;p&gt;No. The agent says "You're booked for Thursday," and that sentence tells you nothing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.anthropic.com/engineering/demystifying-evals-for-ai-agents" rel="noopener noreferrer"&gt;Anthropic's guide on agent evals&lt;/a&gt; shows it with a flight-booking agent: it may say "Your flight has been booked," but the outcome is whether a reservation actually exists in the database. What counts is the state the agent leaves behind, not what it says.&lt;/p&gt;

&lt;p&gt;So the questions that matter are boring. Did the row appear in the database? Did the tool call fire with the right arguments?&lt;/p&gt;

&lt;p&gt;A demo watches the reply. An eval watches the system. That is why demos always look great.&lt;/p&gt;

&lt;h2&gt;
  
  
  Doesn't an LLM judge solve this?
&lt;/h2&gt;

&lt;p&gt;Partly. The judge brings its own bias.&lt;/p&gt;

&lt;p&gt;In June a &lt;a href="https://arxiv.org/abs/2606.19544" rel="noopener noreferrer"&gt;study of 21 LLM judges&lt;/a&gt; came out, Claude Opus 4.6 and GPT-5.4 among them. One of the tests: show the judge two answers, then swap their order and ask again. A good judge should not care which one came first.&lt;/p&gt;

&lt;p&gt;On the easier benchmark, the median judge flipped its verdict 9% of the time. On the harder one it was 17%, and some judges went as high as 38%. The harder the task, the closer the judge gets to a coin toss.&lt;/p&gt;

&lt;p&gt;The unpleasant part is that rerunning does not help. On a rerun, the same judge gives the same verdict roughly nine times out of ten or more, bias included. Stable is not the same as correct, so the only way to catch the bias is to calibrate the judge against human labels.&lt;/p&gt;

&lt;h2&gt;
  
  
  Should I score from 1 to 10?
&lt;/h2&gt;

&lt;p&gt;Binary. Pass or fail.&lt;/p&gt;

&lt;p&gt;The gap between a 3 and a 4 is a matter of taste, and everyone hides their uncertainty in the middle of the scale. A binary verdict makes you name the reason something failed instead of quietly giving it a 7.&lt;/p&gt;

&lt;h2&gt;
  
  
  How many cases do I need?
&lt;/h2&gt;

&lt;p&gt;Dozens, not thousands. Start with 20 to 50 tasks pulled from real failures.&lt;/p&gt;

&lt;p&gt;Thirty ugly cases from production beat a thousand synthetic ones.&lt;/p&gt;

&lt;h2&gt;
  
  
  So evals come before prompts?
&lt;/h2&gt;

&lt;p&gt;It sounds logical, like TDD. For capabilities it can work: writing the eval first pins down what done means, and the Anthropic guide recommends exactly that.&lt;/p&gt;

&lt;p&gt;For failures, no. An LLM can break in practically endless ways, so whatever you write upfront covers the failures you imagined, not the ones that will happen.&lt;/p&gt;

&lt;p&gt;For failures the order is different:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ship → read the traces → write an eval for a failure that really happened.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;While you are looking at replies, you are not measuring the agent, you are measuring its politeness.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>llm</category>
      <category>testing</category>
    </item>
  </channel>
</rss>
