<?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: HARSHA GOPALKRISHNA PURANIK</title>
    <description>The latest articles on DEV Community by HARSHA GOPALKRISHNA PURANIK (@harsha_gopalkrishnapuran).</description>
    <link>https://dev.to/harsha_gopalkrishnapuran</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%2F3955986%2F55be9ef3-8207-4a85-b8a0-df00f7352bf7.png</url>
      <title>DEV Community: HARSHA GOPALKRISHNA PURANIK</title>
      <link>https://dev.to/harsha_gopalkrishnapuran</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/harsha_gopalkrishnapuran"/>
    <language>en</language>
    <item>
      <title>Hermes Agent vs. LangGraph, CrewAI, and AutoGen: A Technical Comparison for 2026</title>
      <dc:creator>HARSHA GOPALKRISHNA PURANIK</dc:creator>
      <pubDate>Sat, 30 May 2026 06:52:39 +0000</pubDate>
      <link>https://dev.to/harsha_gopalkrishnapuran/hermes-agent-vs-langgraph-crewai-and-autogen-a-technical-comparison-for-2026-2ok8</link>
      <guid>https://dev.to/harsha_gopalkrishnapuran/hermes-agent-vs-langgraph-crewai-and-autogen-a-technical-comparison-for-2026-2ok8</guid>
      <description>&lt;p&gt;A beginner's honest breakdown of what makes Hermes Agent different — and when it actually matters.&lt;/p&gt;

&lt;p&gt;Why I Wrote This as a Beginner&lt;br&gt;
I came into the agentic AI space with no prior framework allegiance. No deeply nested LangGraph pipelines. No CrewAI crews to defend. That neutrality is an advantage for a comparison piece: I evaluated each framework on documentation clarity, architectural philosophy, deployment model, and the one question that cuts through all the marketing —&lt;/p&gt;

&lt;p&gt;What happens to what the agent learns after the session ends?&lt;/p&gt;

&lt;p&gt;The short answer: most frameworks don't have a good answer. Hermes Agent does.&lt;/p&gt;

&lt;p&gt;The Frameworks Under Review&lt;br&gt;
FrameworkMaintainerLicensePrimary AbstractionHermes AgentNous ResearchMITClosed learning loop + persistent skillsLangGraphLangChain Inc.MITDirected graph with conditional edgesCrewAICrewAI Inc.MITRole-based agent crewsAutoGen / AG2MicrosoftMITConversational GroupChat&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Architecture and Mental Model
LangGraph
LangGraph models your agent as a directed graph. Agents, tools, and checkpoints are nodes; transitions between them are edges. You define the graph explicitly. This gives you fine-grained control over execution order, branching, and error recovery — it is the most explicit of the four frameworks.
The tradeoff: A simple agent takes roughly 40 lines in lighter frameworks and 120+ in LangGraph. You pay in boilerplate for what you gain in control. Right choice for production-grade, auditable workflows. Poor choice if you just want an agent to start working fast.
CrewAI
CrewAI thinks in roles. You define agents as team members (Researcher, Writer, QA), assign tasks, and let the framework handle sequencing. It is the most approachable mental model — it maps directly to how humans describe work delegation. The tradeoff is less control over execution and less nuanced state management compared to LangGraph.
AutoGen (AG2)
AutoGen's core abstraction is conversation: agents talk to each other. Its GroupChat and ConversableAgent patterns are powerful for multi-party reasoning, consensus-building, and debate. As of early 2026, Microsoft has shifted AutoGen to a maintenance-mode posture, so the strategic trajectory is less certain than the other options here.
Hermes Agent
Hermes Agent's architecture is different in kind, not just degree. The central concept is a closed learning loop with four components:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Persistent memory — stored in MEMORY.md and USER.md files on your own machine, curated across sessions&lt;br&gt;
Skills system — solved workflows are converted into reusable Python-based tools via skill_manage, compatible with the agentskills.io open standard&lt;br&gt;
Session search — past conversations are indexed using SQLite FTS5 with LLM-assisted summarization&lt;br&gt;
User modeling — a deepening representation of who you are, refined across interactions&lt;/p&gt;

&lt;p&gt;The key distinction: when a session ends, Hermes has updated its skills and memory. The next session starts smarter. None of the other three frameworks have an equivalent native mechanism.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Memory and Persistence&lt;br&gt;
FrameworkCross-Session MemoryMechanismInspectable?LangGraphVia checkpointers (SQLite, Redis)External state stores, manually configuredDepends on backendCrewAILimited — requires third-party integrationsNo native persistent memoryNoAutoGenNoneStateless by defaultNoHermes AgentYes, nativelyMarkdown files + SQLite FTS5Yes — plain files on disk&lt;br&gt;
The Hermes approach deserves attention here. Memory is not a vector database you configure separately — it is a Markdown file you can open in any text editor. You can read exactly what the agent knows about you. You can edit it. You can delete it. This is a meaningful design philosophy: transparency over abstraction.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Deployment Model&lt;br&gt;
FrameworkWhere It RunsInfrastructure RequiredIdle CostLangGraphYour code / LangChain CloudLangChain dependenciesDepends on hostingCrewAIYour code / CrewAI+ cloudCrewAI+ for production featuresDepends on hostingAutoGenYour codeMinimalLowHermes AgentYour serverSingle curl installNear zero (serverless supported)&lt;br&gt;
Hermes installs with a single command — no sudo required — and runs on Linux, macOS, or WSL2. It supports 6 execution backends: local, Docker, SSH, Daytona, Singularity, and Modal. You can run it on a $5 VPS.&lt;br&gt;
The messaging integration is broader than any other framework reviewed: Telegram, Discord, Slack, WhatsApp, Signal, and CLI out of the box — all managed through a single gateway process. Your agent is reachable from your phone while it works on a remote server.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Model Flexibility&lt;br&gt;
FrameworkModel SupportLangGraphOpenAI, Anthropic, any LiteLLM-compatible modelCrewAIOpenAI, Anthropic, local models via OllamaAutoGenOpenAI, Anthropic, local modelsHermes Agent200+ models via OpenRouter, Nous Portal, NVIDIA NIM, OpenAI, Hugging Face, or custom endpoint&lt;br&gt;
Hermes switches models with a single command (hermes model) — no code changes, no reconfiguration. You are not locked into any one API provider.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Skills vs. Tools&lt;br&gt;
All four frameworks support tool use. The distinction with Hermes is skill creation: when the agent solves a problem, it codifies that solution into a reusable Python skill that persists across sessions and is compatible with the agentskills.io community standard.&lt;br&gt;
LangGraph, CrewAI, and AutoGen support tools — but those tools are written by the developer, not generated by the agent. Hermes blurs the line between agent user and agent developer: the system can extend itself.&lt;br&gt;
Skills are Python files stored on your disk. You can read them, edit them, or delete them at any time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When to Use Each Framework&lt;br&gt;
Use LangGraph when:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You are deploying to production with strict auditability requirements&lt;br&gt;
You need deterministic, graph-defined execution flows&lt;br&gt;
You are already inside the LangChain ecosystem&lt;/p&gt;

&lt;p&gt;Use CrewAI when:&lt;/p&gt;

&lt;p&gt;Your problem maps naturally to a team of specialized roles&lt;br&gt;
You want the fastest time from idea to working prototype&lt;br&gt;
Multi-agent coordination is the core requirement&lt;/p&gt;

&lt;p&gt;Use AutoGen when:&lt;/p&gt;

&lt;p&gt;Your use case centers on multi-agent conversation and debate&lt;br&gt;
You are running research experiments, not production deployments&lt;/p&gt;

&lt;p&gt;Use Hermes Agent when:&lt;/p&gt;

&lt;p&gt;You are deploying an agent to a server you control, long-term&lt;br&gt;
Cross-session learning and memory are requirements, not nice-to-haves&lt;br&gt;
You want zero vendor lock-in on model provider and hosting&lt;br&gt;
You want to build something that genuinely gets better over time&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Limitations Worth Naming
Hermes Agent is not without tradeoffs:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Native Windows is experimental — WSL2 is required on Windows&lt;br&gt;
Self-modifying behavior requires oversight — the skills system means the agent can write and store code; this warrants review in automated environments&lt;br&gt;
Smaller ecosystem than LangGraph — LangGraph has deeper enterprise adoption and a larger community&lt;br&gt;
Documentation is still maturing — launched in February 2026, some documentation lags the code&lt;/p&gt;

&lt;p&gt;Conclusion&lt;br&gt;
The agentic framework landscape in 2026 is genuinely crowded. LangGraph, CrewAI, and AutoGen each have strong cases for specific use cases. But Hermes Agent occupies a different design space entirely.&lt;br&gt;
The question it answers is not "how do I build an agent workflow?" — it is "how do I build an agent that remembers, learns, and runs on infrastructure I control?"&lt;br&gt;
For a beginner, the single-command install, file-based memory, and model-agnostic design make it the most approachable path to a long-running, genuinely persistent agent. The closed learning loop is not a marketing tagline — it is a concrete architectural choice with verifiable outputs on your own disk.&lt;/p&gt;

&lt;p&gt;I spent time going through the documentation of all four &lt;br&gt;
frameworks as a complete beginner. What surprised me most &lt;br&gt;
was how differently each one thinks about the same problem.&lt;/p&gt;

&lt;p&gt;This post is my submission to the Write About Hermes Agent &lt;br&gt;
prompt of the Hermes Agent Challenge on DEV.to.&lt;/p&gt;

</description>
      <category>hermesagentchallenge</category>
      <category>devchallenge</category>
      <category>agents</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Smart Face Recognition Attendance System — No More Proxy Attendance</title>
      <dc:creator>HARSHA GOPALKRISHNA PURANIK</dc:creator>
      <pubDate>Fri, 29 May 2026 05:06:39 +0000</pubDate>
      <link>https://dev.to/harsha_gopalkrishnapuran/smart-face-recognition-attendance-system-no-more-proxy-attendance-2835</link>
      <guid>https://dev.to/harsha_gopalkrishnapuran/smart-face-recognition-attendance-system-no-more-proxy-attendance-2835</guid>
      <description>&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;Attendance Pro&lt;/strong&gt; — a Smart Face Recognition Attendance System for educational institutions that completely eliminates manual roll calls and proxy attendance.&lt;/p&gt;

&lt;p&gt;The idea came from a real daily frustration. Every class wastes 5–10 minutes on roll calls. Students mark proxies for absent friends. Teachers have zero real-time visibility. No one gets alerted until attendance is already critically low.&lt;/p&gt;

&lt;p&gt;So I built the fix — a cross-platform mobile app where a lecturer taps &lt;strong&gt;"Start Face Attendance"&lt;/strong&gt;, captures a photo, and the system automatically identifies the student using facial recognition and marks them present in under 2 seconds. No roll calls. No proxies. No manual errors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tech Stack:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📱 React Native + TypeScript (Expo) — Cross-platform mobile frontend&lt;/li&gt;
&lt;li&gt;⚙️ Node.js + Express — RESTful backend API&lt;/li&gt;
&lt;li&gt;🐍 Python + &lt;code&gt;face_recognition&lt;/code&gt; + OpenCV — Face detection &amp;amp; matching engine&lt;/li&gt;
&lt;li&gt;🗄️ MySQL 8.0 — Relational database with foreign key constraints&lt;/li&gt;
&lt;li&gt;📧 Nodemailer + Gmail SMTP — Automated shortage email alerts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Three fully built role-based interfaces:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎓 &lt;strong&gt;Student&lt;/strong&gt; — View attendance %, get below-75% shortage warnings, submit leave requests&lt;/li&gt;
&lt;li&gt;👩‍🏫 &lt;strong&gt;Lecturer&lt;/strong&gt; — Mark attendance via face recognition, approve/reject leaves, generate reports&lt;/li&gt;
&lt;li&gt;🛡️ &lt;strong&gt;Admin&lt;/strong&gt; — Full system oversight, manage users, export PDF/CSV reports, send bulk email alerts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This started as a college MAD (Mobile Application Development) project at RV University, Bengaluru. It grew into something I genuinely wanted to finish properly — a system that solves a real problem every student and teacher faces every single day.&lt;/p&gt;

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

&lt;p&gt;🔗 &lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/HarshaP28/Smart_Face_Attendance_System" rel="noopener noreferrer"&gt;Smart Face Recognition Attendance System&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📱 Built with Expo — tested on Android via Expo Go and EAS dev build&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fih4dzfkoxwwvh8oz2al1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fih4dzfkoxwwvh8oz2al1.jpg" alt="Lecturer dashboard with Start Face Attendance button" width="800" height="1762"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3i44pufxrbcxs16pmip3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3i44pufxrbcxs16pmip3.jpg" alt="Real-time attendance list after face recognition runs" width="800" height="1762"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6f6ng0vuebevgslitwjj.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6f6ng0vuebevgslitwjj.jpg" alt="Student dashboard showing attendance percentage and subject breakdown" width="800" height="1762"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fszofln2s838r9md3fkuw.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fszofln2s838r9md3fkuw.jpg" alt="Shortage report showing students flagged below 75 percent" width="800" height="1762"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmhmwe5966l9yc04ezp66.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmhmwe5966l9yc04ezp66.jpg" alt="Monthly attendance report with PDF and CSV export" width="800" height="1762"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fob60v18ru76e6avnjid5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fob60v18ru76e6avnjid5.jpg" alt="Admin class report with LOW indicators and email notify button" width="800" height="1762"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Comeback Story
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Before:&lt;/strong&gt; The app existed — but without its most important feature.&lt;/p&gt;

&lt;p&gt;I had login screens, dashboards, leave requests, shortage reports, and an admin panel. Everything was wired up and working. But attendance was still being marked manually. It was a &lt;em&gt;face recognition attendance system&lt;/em&gt; with no face recognition. The core feature — the entire reason the project existed — was missing.&lt;/p&gt;

&lt;p&gt;The repo sat untouched for weeks. Every time I opened it, I'd stare at the half-finished &lt;code&gt;recognize.py&lt;/code&gt; file and close the laptop.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;After:&lt;/strong&gt; Attendance Pro is now fully complete and working end-to-end.&lt;/p&gt;

&lt;p&gt;Finishing it meant building and integrating the full face recognition pipeline:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Lecturer captures a photo via the device camera (expo-camera)&lt;/li&gt;
&lt;li&gt;Image is uploaded to the Node.js backend via multipart form&lt;/li&gt;
&lt;li&gt;Node.js calls &lt;code&gt;recognize.py&lt;/code&gt; using &lt;code&gt;child_process.spawn()&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Python loads the image, extracts facial encodings via &lt;code&gt;face_recognition&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Compares against reference images in &lt;code&gt;known_students/&lt;/code&gt; with a strict tolerance of &lt;code&gt;0.5&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Returns matched student roll number as JSON back to Node.js&lt;/li&gt;
&lt;li&gt;Node.js inserts the attendance record into MySQL instantly&lt;/li&gt;
&lt;li&gt;The attendance list updates in real time on the lecturer's screen&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The hardest part was making the &lt;strong&gt;Node.js ↔ Python bridge&lt;/strong&gt; reliable. Handling edge cases — "no face detected", "face not in database", "already marked today" — required careful error handling on both sides. Tuning the tolerance value (&lt;code&gt;0.5&lt;/code&gt;) to balance accuracy against false rejections took real-world testing with actual photos in different lighting conditions.&lt;/p&gt;

&lt;p&gt;The moment it worked — when the app correctly identified a student from a live camera capture and marked them present automatically — the whole system finally felt like what it was always supposed to be.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;30 test cases. All passed.&lt;/strong&gt; Login, registration, face recognition, leave management, report generation, admin operations — all verified and working.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Experience with GitHub Copilot
&lt;/h2&gt;

&lt;p&gt;I used GitHub Copilot as a focused accelerator — not for the hard decisions, but for the parts where I knew exactly what I needed but didn't want to spend time typing it out.&lt;/p&gt;

&lt;p&gt;The single most valuable moment was the &lt;code&gt;recognize.py&lt;/code&gt; ↔ Node.js integration. I knew I needed to call Python from Node, but wasn't sure of the cleanest pattern. Copilot suggested &lt;code&gt;child_process.spawn()&lt;/code&gt; immediately and then autocompleted the stdout buffering and JSON parsing logic. That one suggestion saved at least 30–40 minutes of documentation searching.&lt;/p&gt;

&lt;p&gt;Other areas where it helped:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SQL queries for attendance percentage calculations (the &lt;code&gt;CASE WHEN&lt;/code&gt; + &lt;code&gt;NULLIF&lt;/code&gt; pattern)&lt;/li&gt;
&lt;li&gt;Express route handler scaffolding for the leave request and login APIs&lt;/li&gt;
&lt;li&gt;React Native &lt;code&gt;useEffect&lt;/code&gt; + &lt;code&gt;fetch&lt;/code&gt; patterns for the dashboard data loading&lt;/li&gt;
&lt;li&gt;Nodemailer transporter configuration for the shortage email alerts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For everything that actually mattered — the tolerance tuning, the RBAC architecture, debugging the face encoding mismatch between registration and recognition — I worked through those manually. Copilot is best when you know what you want and just need it written fast. That's exactly how I used it: it handled the repetitive parts so I could stay focused on the parts that required actual thinking.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubfinishupathon</category>
      <category>ai</category>
      <category>githubchallenge</category>
    </item>
  </channel>
</rss>
