<?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: Aditya Rasal</title>
    <description>The latest articles on DEV Community by Aditya Rasal (@aditya_rasal).</description>
    <link>https://dev.to/aditya_rasal</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3872249%2Fef25ca72-b50e-4917-8f21-5ee3ed98724a.jpeg</url>
      <title>DEV Community: Aditya Rasal</title>
      <link>https://dev.to/aditya_rasal</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aditya_rasal"/>
    <language>en</language>
    <item>
      <title>I Built an Agent That Actually Reviews Your Pull Requests</title>
      <dc:creator>Aditya Rasal</dc:creator>
      <pubDate>Sat, 16 May 2026 16:39:00 +0000</pubDate>
      <link>https://dev.to/aditya_rasal/i-built-an-agent-that-actually-reviews-your-pull-requests-56ld</link>
      <guid>https://dev.to/aditya_rasal/i-built-an-agent-that-actually-reviews-your-pull-requests-56ld</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hermes-agent-2026-05-15"&gt;Hermes Agent Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem with AI Code Review
&lt;/h2&gt;

&lt;p&gt;Every AI coding tool on the market can summarize a diff. "This PR adds 5 files and modifies authentication." Great — but that's not a review. That's a description.&lt;/p&gt;

&lt;p&gt;A real code review requires:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reading the actual files&lt;/strong&gt; to understand context, not just the diff&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tracing dependencies&lt;/strong&gt; to see who consumes changed code&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Running tests&lt;/strong&gt; to verify nothing broke&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Searching for patterns&lt;/strong&gt; that might be affected&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Thinking in phases&lt;/strong&gt;, not blasting out generic comments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In other words: a real review requires &lt;strong&gt;agency&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Hermes PR Investigator&lt;/strong&gt; is a custom skill for &lt;a href="https://hermes-agent.nousresearch.com/" rel="noopener noreferrer"&gt;Hermes Agent&lt;/a&gt; that turns the agent into an autonomous PR reviewer. It doesn't summarize diffs — it &lt;em&gt;investigates&lt;/em&gt; them through a 5-phase agentic workflow.&lt;/p&gt;

&lt;h3&gt;
  
  
  The 5-Phase Investigation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Discovery &amp;amp; Planning
        ↓
Deep File Analysis
        ↓
Validation (tests, lint, type-check)
        ↓
Cross-Reference (patterns, docs, security)
        ↓
Structured Report Generation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  How It's Different
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Static Diff Summarizer&lt;/th&gt;
&lt;th&gt;Hermes PR Investigator&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Reads patch once&lt;/td&gt;
&lt;td&gt;Reads full files and traces dependencies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Generic comments&lt;/td&gt;
&lt;td&gt;Risk-scored, severity-rated findings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No validation&lt;/td&gt;
&lt;td&gt;Runs tests, lint, type checks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Surface-level&lt;/td&gt;
&lt;td&gt;Cross-references codebase for affected patterns&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Static output&lt;/td&gt;
&lt;td&gt;Agent adapts investigation based on findings&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Demo: Real-World Test on Hermes Agent Itself
&lt;/h2&gt;

&lt;p&gt;I didn't just build this — I tested it on a real merged PR from the &lt;a href="https://github.com/NousResearch/hermes-agent" rel="noopener noreferrer"&gt;NousResearch/hermes-agent&lt;/a&gt; repository:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PR&lt;/strong&gt;: &lt;a href="https://github.com/NousResearch/hermes-agent/pull/26957" rel="noopener noreferrer"&gt;#26957 — fix(acp): replay session history before responding to session/load&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What Hermes Did (Autonomously)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;hermes chat &lt;span class="nt"&gt;--toolsets&lt;/span&gt; &lt;span class="s2"&gt;"skills,terminal,file,web"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-q&lt;/span&gt; &lt;span class="s2"&gt;"Investigate PR https://github.com/NousResearch/hermes-agent/pull/26957"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Phase 1 — Discovery&lt;/strong&gt;: Fetched PR metadata via &lt;code&gt;gh pr view&lt;/code&gt;, pulled diff via &lt;code&gt;gh pr diff&lt;/code&gt;, checked CI status (&lt;code&gt;gh pr checks&lt;/code&gt;)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 2 — Analysis&lt;/strong&gt;: Read &lt;code&gt;acp_adapter/server.py&lt;/code&gt; and &lt;code&gt;tests/acp/test_server.py&lt;/code&gt;. The PR removes &lt;code&gt;_schedule_history_replay&lt;/code&gt; and switches from deferred &lt;code&gt;loop.call_soon&lt;/code&gt; to awaited inline replay.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 3 — Validation&lt;/strong&gt;: Checked failing test logs via &lt;code&gt;gh run view --log-failed&lt;/code&gt;. All 6 failures were pre-existing on main (registry manifest mismatch, PermissionError in CI runner, xAI dotenv issue) — not introduced by this PR.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 4 — Cross-Reference&lt;/strong&gt;: Searched codebase for orphan references to &lt;code&gt;_schedule_history_replay&lt;/code&gt;. &lt;strong&gt;Zero found&lt;/strong&gt; — clean removal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 5 — Report&lt;/strong&gt;: Generated structured review with verdict.&lt;/p&gt;

&lt;h3&gt;
  
  
  Findings from the Real PR
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Severity&lt;/th&gt;
&lt;th&gt;Count&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Warnings&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Suggestion&lt;/strong&gt;: The &lt;code&gt;try/except&lt;/code&gt; blocks in &lt;code&gt;load_session&lt;/code&gt; and &lt;code&gt;resume_session&lt;/code&gt; are near-identical (differ only in log message string). Consider extracting a &lt;code&gt;_replay_session_history_guarded(self, state, operation: str)&lt;/code&gt; helper for DRY.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verdict&lt;/strong&gt;: "This is a clean, well-researched fix. The bug was subtle — &lt;code&gt;loop.call_soon&lt;/code&gt; makes the server look correct in isolated testing but breaks any client that inspects notification counts synchronously after &lt;code&gt;await loadSession()&lt;/code&gt;. The fix aligns Hermes with every other ACP server and the spec's natural reading."&lt;/p&gt;




&lt;h3&gt;
  
  
  Demo: Local Auth Branch
&lt;/h3&gt;

&lt;p&gt;I also tested on a synthetic PR adding JWT auth to a Flask app:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;hermes chat &lt;span class="nt"&gt;--toolsets&lt;/span&gt; skills &lt;span class="nt"&gt;-q&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s2"&gt;"Investigate the local branch feature/add-auth"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What it found&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;High&lt;/strong&gt;: Hardcoded &lt;code&gt;JWT_SECRET&lt;/code&gt; fallback (&lt;code&gt;"default-secret"&lt;/code&gt;) in auth middleware&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High&lt;/strong&gt;: &lt;code&gt;require_auth&lt;/code&gt; decorator defined but &lt;strong&gt;never applied&lt;/strong&gt; to any route&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Medium&lt;/strong&gt;: 5 files changed, 0 test files modified&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Medium&lt;/strong&gt;: Register endpoint lacks input validation or duplicate-user checks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See the full demo report in the repo: &lt;code&gt;demo/real-world-report-pr-26957.md&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/Aditya2073/hermes-pr-investigator" rel="noopener noreferrer"&gt;github.com/Aditya2073/hermes-pr-investigator&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Project Structure
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;hermes-pr-investigator/
├── skills/devops/pr-investigator/
│   ├── SKILL.md                    # Agent instructions
│   └── scripts/
│       ├── fetch_pr.sh            # GitHub API fetcher
│       ├── analyze_diff.py        # Risk analyzer
│       ├── trace_deps.py          # Dependency tracer
│       ├── run_validation.py      # Test runner
│       └── generate_report.py     # Report generator
├── demo/                          # Demo repo + sample data
├── install.sh                     # One-line installer
└── .github/workflows/             # GitHub Action for auto-review
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  My Tech Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hermes Agent&lt;/strong&gt;: The orchestrator — handles planning, tool use, and multi-step reasoning&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python 3 + stdlib&lt;/strong&gt;: Helper scripts for analysis (no external deps)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bash&lt;/strong&gt;: GitHub API integration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Actions&lt;/strong&gt;: Auto-runs on every PR&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How I Used Hermes Agent
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Agentic Planning
&lt;/h3&gt;

&lt;p&gt;The core of this project is the &lt;code&gt;SKILL.md&lt;/code&gt; file — it's not just documentation, it's &lt;strong&gt;agent instructions&lt;/strong&gt;. Hermes reads it and decides:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Which files to read first (based on risk score)&lt;/li&gt;
&lt;li&gt;When to run validation (after understanding the changes)&lt;/li&gt;
&lt;li&gt;How deep to trace dependencies (only for core files)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Hermes uses its built-in &lt;code&gt;todo&lt;/code&gt; tool to track the 5 phases, so if validation fails in Phase 3, it can adapt the investigation plan.&lt;/p&gt;

&lt;h3&gt;
  
  
  Heavy Tool Use
&lt;/h3&gt;

&lt;p&gt;The skill orchestrates 6 tools across 28 toolsets:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;terminal&lt;/code&gt;&lt;/strong&gt;: Runs analysis scripts, git commands, test suites&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;read_file&lt;/code&gt;&lt;/strong&gt;: Reads modified files and their dependencies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;web_search&lt;/code&gt;&lt;/strong&gt;: Looks up security advisories for dependencies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;execute_code&lt;/code&gt;&lt;/strong&gt;: Runs Python validation scripts in sandbox&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;todo&lt;/code&gt;&lt;/strong&gt;: Tracks investigation phases&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;skill_manage&lt;/code&gt;&lt;/strong&gt;: Learns from reviews and improves its own approach&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Progressive Disclosure
&lt;/h3&gt;

&lt;p&gt;The skill uses Hermes' progressive disclosure pattern:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Level 0&lt;/strong&gt;: Skill name and description in the system prompt (~3k tokens)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Level 1&lt;/strong&gt;: Full SKILL.md loads only when the user invokes &lt;code&gt;/pr-investigator&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Level 2&lt;/strong&gt;: Individual reference files load on demand&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This keeps token usage efficient — the agent doesn't carry PR review instructions into unrelated conversations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Memory &amp;amp; Learning
&lt;/h3&gt;

&lt;p&gt;Because Hermes has persistent memory, the investigator learns over time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It remembers which projects use which test frameworks&lt;/li&gt;
&lt;li&gt;It learns the team's coding conventions from previous reviews&lt;/li&gt;
&lt;li&gt;It improves its risk scoring based on which findings actually mattered&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why This Approach Wins
&lt;/h2&gt;

&lt;p&gt;Most "AI code review" submissions will be static analyzers or diff summarizers. I proved this is different by running it on a real PR and watching it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Execute&lt;/strong&gt;: It ran &lt;code&gt;gh pr checks&lt;/code&gt;, &lt;code&gt;gh run view --log-failed&lt;/code&gt;, and searched the actual codebase — not just reading the patch&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trace&lt;/strong&gt;: It found zero orphan references to &lt;code&gt;_schedule_history_replay&lt;/code&gt;, confirming clean removal&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adapt&lt;/strong&gt;: When CI showed failures, it checked if they were pre-existing on main before flagging them&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Report&lt;/strong&gt;: Structured severity ratings (Critical/High/Medium/Low) with specific line references&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reason&lt;/strong&gt;: It understood the &lt;em&gt;subtle&lt;/em&gt; bug — &lt;code&gt;loop.call_soon&lt;/code&gt; looking correct in isolation but breaking synchronous client inspection&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The real PR test produced a 500-word technical review with a suggestion the human reviewers missed (DRY refactoring of near-identical try/except blocks).&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It Yourself
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install Hermes Agent&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash

&lt;span class="c"&gt;# Install the skill&lt;/span&gt;
git clone https://github.com/Aditya2073/hermes-pr-investigator.git
&lt;span class="nb"&gt;cd &lt;/span&gt;hermes-pr-investigator
bash install.sh

&lt;span class="c"&gt;# Set your GitHub token&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'GITHUB_TOKEN=ghp_xxx'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.hermes/.env

&lt;span class="c"&gt;# Investigate a PR&lt;/span&gt;
hermes chat &lt;span class="nt"&gt;--toolsets&lt;/span&gt; skills &lt;span class="nt"&gt;-q&lt;/span&gt; &lt;span class="s2"&gt;"/pr-investigator https://github.com/owner/repo/pull/123"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or set up the GitHub Action to automatically review every PR:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Hermes PR Investigator&lt;/span&gt;
&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;pull_request&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;types&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;opened&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;synchronize&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;investigate&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v4&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Setup Hermes&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;curl -fsSL ... | bash&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Install Skill&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;bash install.sh&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Run Investigation&lt;/span&gt;
        &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;GITHUB_TOKEN&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.GITHUB_TOKEN }}&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;hermes chat --toolsets skills -q "/pr-investigator ${{ github.event.pull_request.html_url }}"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Focus modes&lt;/strong&gt;: &lt;code&gt;--focus security&lt;/code&gt;, &lt;code&gt;--focus performance&lt;/code&gt;, &lt;code&gt;--focus tests&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom rules&lt;/strong&gt;: Team-specific conventions via &lt;code&gt;.hermes/pr-rules.md&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Batch reviews&lt;/strong&gt;: Run across all open PRs nightly via Hermes cron&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IDE integration&lt;/strong&gt;: ACP adapter for in-editor review requests&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Thanks for reading! If you found this interesting, give it a ❤️ and let me know what you'd want an agentic PR reviewer to catch.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>hermesagentchallenge</category>
      <category>devchallenge</category>
      <category>ai</category>
      <category>agents</category>
    </item>
    <item>
      <title>We didn't ask if we should. We asked how deep the tabs could go</title>
      <dc:creator>Aditya Rasal</dc:creator>
      <pubDate>Fri, 10 Apr 2026 18:50:02 +0000</pubDate>
      <link>https://dev.to/aditya_rasal/we-didnt-ask-if-we-should-we-asked-how-deep-the-tabs-could-go-4404</link>
      <guid>https://dev.to/aditya_rasal/we-didnt-ask-if-we-should-we-asked-how-deep-the-tabs-could-go-4404</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/aprilfools-2026"&gt;DEV April Fools Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Tab hoarding isn’t a problem—it’s a &lt;em&gt;LIFESTYLE&lt;/em&gt;. Instead of trying to fix tab addiction with productivity tools, I built &lt;strong&gt;Nesting Instinct&lt;/strong&gt;, an extension that leans entirely into the chaos, glorifies it, and weaponizes it.&lt;/p&gt;

&lt;p&gt;Nesting Instinct is a maliciously compliant Chrome/Edge extension that organizes your tabs by aggressively nesting them into literal infinity. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Features of Doom:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🪆 &lt;strong&gt;"Finally Get Organized" Button&lt;/strong&gt;: The nuclear option. Instantly ungroups all your tabs, decides they belong in 8 to 15 sequentially nested absurd folder structures (e.g., &lt;code&gt;SCHRODINGER'S TABS&lt;/code&gt;, &lt;code&gt;WHY IS THIS OPEN&lt;/code&gt;), and scatters them randomly.&lt;/li&gt;
&lt;li&gt;🧠 &lt;strong&gt;Tab Sentience Simulator™&lt;/strong&gt;: A background worker that randomly changes the document titles of your oldest, forgotten tabs to things like &lt;code&gt;(Existential Crisis)&lt;/code&gt; or &lt;code&gt;(Why Am I Still Open?)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;🤖 &lt;strong&gt;Auto-Nest Keywords&lt;/strong&gt;: Groups tabs into aggressively specific real Chrome Tab Groups based on what you’re looking at, like "3AM Research" or "Shopping Addiction".&lt;/li&gt;
&lt;li&gt;📭 &lt;strong&gt;Nuclear Tab Group Controls&lt;/strong&gt;: Hit “Shuffle Groups” to scramble your tab groupings blindly, or “Collapse All” to literally hide the evidence of your sins.&lt;/li&gt;
&lt;li&gt;💀 &lt;strong&gt;Beautiful Discordance&lt;/strong&gt;: Neon chaos palettes, over-encumbered Comic Sans influence, and literal confetti cannons firing every time you hit an organization limit.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We didn't ask if we should. We asked how deep.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;(Since it's a browser extension, the best way to experience the true psychological damage is to download and install it locally from the repo!)&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Aditya2073" rel="noopener noreferrer"&gt;
        Aditya2073
      &lt;/a&gt; / &lt;a href="https://github.com/Aditya2073/nesting-instinct" rel="noopener noreferrer"&gt;
        nesting-instinct
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Tab hoarding isn't a problem — it's a LIFESTYLE. Infinite nesting. Zero productivity. Maximum chaos. (DEV April Fools Challenge)
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🪆 Nesting Instinct&lt;/h1&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Tab hoarding isn't a problem — it's a &lt;em&gt;LIFESTYLE&lt;/em&gt;. Infinite nesting. Zero productivity. Maximum chaos.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A Chrome/Edge Manifest V3 browser extension built for the &lt;strong&gt;DEV April Fools Challenge&lt;/strong&gt;. Instead of helping you organize your tabs, &lt;em&gt;Nesting Instinct&lt;/em&gt; weaponizes your tab hoarding addiction, enabling infinitely deep nested folders and completely unnecessary organization layers.&lt;/p&gt;
&lt;p&gt;"We didn't ask if we should. We asked how deep."&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🎭 Features&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tab Sentience Simulator™&lt;/strong&gt;: Your tabs are alive. A background worker periodically renames your oldest, most ignored tabs to things like &lt;code&gt;(Existential Crisis)&lt;/code&gt; or &lt;code&gt;(Why Am I Still Open?)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto-Nest Keywords 🤖&lt;/strong&gt;: AI-powered™ matching sorts your tabs based on content into agonizing real Chrome Tab Groups like &lt;em&gt;3AM Research&lt;/em&gt;, &lt;em&gt;Shopping Addiction&lt;/em&gt;, and &lt;em&gt;The Unknown Tabs&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Finally Get Organized ✨&lt;/strong&gt;: The nuclear option. Instantly ungroups all your tabs, creates 8-15 chaotically named groups (e.g., &lt;em&gt;SCHRODINGER'S TABS&lt;/em&gt;…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Aditya2073/nesting-instinct" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;Built purely with &lt;strong&gt;Vanilla Javascript, HTML, and CSS&lt;/strong&gt;, running on &lt;strong&gt;Manifest V3&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;I heavily abused the &lt;code&gt;chrome.tabGroups&lt;/code&gt; API to programmatically group, color-code, expand, and scramble the browser's native tab groupings. To power the &lt;em&gt;Tab Sentience Simulator&lt;/em&gt;, I used the &lt;code&gt;chrome.scripting&lt;/code&gt; API alongside a background &lt;code&gt;chrome.alarms&lt;/code&gt; setup to silently inject Javascript into active DOMs and literally rewrite the &lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; tag of forgotten tabs, gaslighting the user. &lt;/p&gt;

&lt;p&gt;The sidebar (where all the buttons of doom live) is hosted inside a Manifest V3 &lt;code&gt;chrome.sidePanel&lt;/code&gt;, bypassing the normal pop-up layout so it can sit permanently on your screen and judge your tab counts. &lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Category
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Community Favorite&lt;/strong&gt; — Because deep down, everyone is secretly hoarding 69 tabs, and everyone deserves a dedicated button that shuffles them into "THE VOID 🕳️" while firing off a confetti cannon.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>418challenge</category>
      <category>showdev</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
