<?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: Krithika Murugesan</title>
    <description>The latest articles on DEV Community by Krithika Murugesan (@krithika_murugesan_0698b3).</description>
    <link>https://dev.to/krithika_murugesan_0698b3</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%2F4000605%2F54c005e4-1e17-438d-8618-c9762eb59e5a.png</url>
      <title>DEV Community: Krithika Murugesan</title>
      <link>https://dev.to/krithika_murugesan_0698b3</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/krithika_murugesan_0698b3"/>
    <language>en</language>
    <item>
      <title>How I Built a "Blind" AI Resume Screener to Fight Hiring Bias - and What AWS Taught Me Along the Way</title>
      <dc:creator>Krithika Murugesan</dc:creator>
      <pubDate>Wed, 01 Jul 2026 22:38:56 +0000</pubDate>
      <link>https://dev.to/krithika_murugesan_0698b3/how-i-built-a-blind-ai-resume-screener-to-fight-hiring-bias-and-what-aws-taught-me-along-the-way-2fg8</link>
      <guid>https://dev.to/krithika_murugesan_0698b3/how-i-built-a-blind-ai-resume-screener-to-fight-hiring-bias-and-what-aws-taught-me-along-the-way-2fg8</guid>
      <description>&lt;p&gt;&lt;em&gt;A real-world journey through Agentic AI, cloud infrastructure, and the messy details no tutorial covers.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We talk a lot about AI's potential to transform hiring. But potential without responsibility is just hype. Unconscious bias in recruitment is a well-documented problem - and it starts long before the first interview, often in the first 30 seconds a recruiter spends skimming a resume.&lt;/p&gt;

&lt;p&gt;So I built something to fix that.&lt;/p&gt;

&lt;p&gt;This is the story of how I designed an AI-Powered "Blind" Resume Screener using CrewAI, OpenAI's GPT-4o, and AWS - and the real lessons I learned getting it to production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Problem: Bias Sneaks In Before the Conversation Starts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Names, email addresses, schools, zip codes - these data points have nothing to do with whether a candidate can do the job. Yet research consistently shows they influence hiring decisions. A resume with a "white-sounding" name gets more callbacks than an identical resume with a "Black-sounding" name. A Gmail address reads differently than a&amp;nbsp;.edu one.&lt;/p&gt;

&lt;p&gt;If we want fairer hiring, we need to remove that signal from the equation - before any human (or AI evaluator) sees the document.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Architecture: How It&amp;nbsp;Works&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Step 1 - PII Redaction via&amp;nbsp;LLM&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before any evaluation happens, the system passes the raw resume text through an LLM-based redaction layer. It automatically identifies and strips:&lt;/p&gt;

&lt;p&gt;Names (first, last, full)&lt;br&gt;
Email addresses&lt;br&gt;
Physical addresses and zip codes&lt;br&gt;
Phone numbers&lt;/p&gt;

&lt;p&gt;The result is a clean, anonymized document that evaluators - human or AI - interact with exclusively.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2 - Agentic Evaluation with&amp;nbsp;CrewAI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is where it gets interesting. I used CrewAI to orchestrate a two-agent pipeline:&lt;br&gt;
Technical Skill Matcher - Compares the redacted resume against the job requirements, scoring alignment across skills, tools, and experience domains.&lt;br&gt;
Technical Interviewer - Generates targeted follow-up questions based purely on the technical content, as if preparing for a first-round screen.&lt;/p&gt;

&lt;p&gt;These agents run sequentially, each feeding context to the next, creating a structured evaluation report - all without ever knowing who the candidate is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3 - Cloud Storage &amp;amp; Notifications&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once the evaluation is complete:&lt;br&gt;
Results are archived in AWS DynamoDB under a CandidateScores table keyed by CandidateID&lt;br&gt;
A summary email is dispatched via Amazon SES to the hiring team the moment processing finishes&lt;/p&gt;

&lt;p&gt;The whole pipeline is event-driven - submit a resume, get a structured evaluation report in your inbox. No manual steps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Tech&amp;nbsp;Stack&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AI Agent Application&lt;br&gt;
│&lt;br&gt;
├── Agent Orchestration&lt;br&gt;
│ ├── CrewAI&lt;br&gt;
│ └── LangChain&lt;br&gt;
│&lt;br&gt;
├── Large Language Model (LLM)&lt;br&gt;
│ └── OpenAI GPT-4o&lt;br&gt;
│&lt;br&gt;
├── Cloud Storage&lt;br&gt;
│ └── AWS DynamoDB&lt;br&gt;
│&lt;br&gt;
├── Notifications&lt;br&gt;
│ └── Amazon SES&lt;br&gt;
│&lt;br&gt;
├── Security&lt;br&gt;
│ └── AWS IAM&lt;br&gt;
│ └── Custom Inline Policies&lt;br&gt;
│&lt;br&gt;
└── Programming Language&lt;br&gt;
&amp;nbsp;└── Python&lt;br&gt;
&amp;nbsp;└── Boto3 SDK&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lessons Learned - The Stuff No Tutorial&amp;nbsp;Covers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Strategic LLM Pivoting: Why I Left AWS&amp;nbsp;Bedrock&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I originally planned to use AWS Bedrock for the PII extraction layer. It made sense on paper - keep everything in the AWS ecosystem, simplify IAM, reduce external dependencies.&lt;/p&gt;

&lt;p&gt;In practice, I ran into model availability restrictions in my target region and latency issues that slowed the redaction step significantly. After benchmarking, I pivoted to OpenAI's gpt-4o-mini for extraction - and the difference was immediate. Faster responses, cleaner redaction output, and no regional gatekeeping.&lt;/p&gt;

&lt;p&gt;The lesson: don't be dogmatic about staying in one vendor's ecosystem. The right tool for the job is the right tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. IAM: Moving Beyond "Full&amp;nbsp;Access"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you're learning AWS, the easiest path is attaching *FullAccess policies and moving on. I started there too.&lt;/p&gt;

&lt;p&gt;But as I got closer to a real deployment, I rebuilt my IAM policies from scratch using the Principle of Least Privilege. My agent's execution role now grants only:&lt;/p&gt;

&lt;p&gt;dynamodb:PutItem and dynamodb:GetItem on the specific CandidateScores table&lt;br&gt;
ses:SendEmail from a verified sender identity&lt;/p&gt;

&lt;p&gt;That's it. Writing custom inline JSON policies in the IAM console felt tedious at first, but it forced me to understand exactly what my system needed - and nothing more. In a real production environment handling candidate data, this isn't optional. It's the baseline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. DNS &amp;amp; Regional Configuration: The gaierror Rabbit&amp;nbsp;Hole&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This one cost me the better part of an afternoon.&lt;br&gt;
My local Python environment kept throwing gaierror - a socket-level DNS resolution failure - when trying to reach AWS service endpoints. The root cause was a regional mismatch: my boto3 client was initialized with one region, while my environment variables pointed to another.&lt;/p&gt;

&lt;p&gt;The fix sounds obvious in hindsight: standardize your region configuration across every layer. Pick a region, set it in your&amp;nbsp;.env, and make sure every boto3 client instantiation either reads from that env variable or has it hardcoded consistently.&lt;/p&gt;

&lt;p&gt;For SES specifically, there's an additional gotcha - email verification is case-sensitive and sandbox-scoped. In sandbox mode, both the sender and receiver addresses must be individually verified. And &lt;a href="mailto:Say2Name@gmail.com"&gt;Say2Name@gmail.com&lt;/a&gt; is not the same identity as &lt;a href="mailto:say2name@gmail.com"&gt;say2name@gmail.com&lt;/a&gt;. The console will accept your message, AWS will silently fail to deliver it, and you'll spend an hour wondering what went wrong.&lt;/p&gt;

&lt;p&gt;Check your spam folder. Check your verification status. Check your casing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What This Project Really Taught&amp;nbsp;Me&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Building this end-to-end forced me to stop thinking about AI and cloud infrastructure as separate disciplines. The agent logic is only as reliable as the infrastructure running beneath it. IAM policies shape what your agents can actually do. Regional misconfigurations break workflows that look perfectly correct in code.&lt;/p&gt;

&lt;p&gt;More importantly - building a responsible AI system requires more deliberate design than building a capable one. The PII redaction step doesn't make the pipeline smarter. It makes it fairer. That's a different optimization target, and it requires explicit architectural choices.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's Next&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A few directions I'm actively exploring:&lt;br&gt;
Bias audit layer - post-evaluation analysis to flag whether the scoring distribution shows demographic skew across a batch of candidates&lt;/p&gt;

&lt;p&gt;Structured output schemas - moving from free-text evaluation reports to JSON-schema-validated outputs for downstream ATS integration&lt;/p&gt;

&lt;p&gt;Multi-model evaluation - running parallel evaluations across different LLMs and comparing scoring consistency&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try It&amp;nbsp;Yourself&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The full codebase is available on GitHub: &lt;a href="https://lnkd.in/dMJ-8aAH" rel="noopener noreferrer"&gt;https://lnkd.in/dMJ-8aAH&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're working on responsible AI applications or building agentic systems on AWS, I'd love to hear what you're building. Drop a comment or connect.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>python</category>
      <category>aws</category>
    </item>
    <item>
      <title>CrewAI Installation Guide: How I Set Up a Multi-Agent System and Fixed Common Errors</title>
      <dc:creator>Krithika Murugesan</dc:creator>
      <pubDate>Wed, 24 Jun 2026 12:41:47 +0000</pubDate>
      <link>https://dev.to/krithika_murugesan_0698b3/crewai-installation-guide-how-i-set-up-a-multi-agent-system-and-fixed-common-errors-1le8</link>
      <guid>https://dev.to/krithika_murugesan_0698b3/crewai-installation-guide-how-i-set-up-a-multi-agent-system-and-fixed-common-errors-1le8</guid>
      <description>&lt;p&gt;Subtitle: A beginner-friendly walkthrough of CrewAI installation, multi-agent workflows, and the troubleshooting steps that helped me get started.&lt;/p&gt;

&lt;p&gt;When I first tried CrewAI, I expected the hardest part to be building the agents. The surprise was that the installation itself became the most useful part of the learning process. Small issues like correct python version installation , file naming, virtual environment setup, and command formatting made the experience feel more real than any smooth tutorial could.&lt;/p&gt;

&lt;p&gt;This guide covers the basics of CrewAI installation, explains why multi-agent systems matter, and walks through the mistakes I ran into along the way.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CrewAI: Installation, Use Cases, and Troubleshooting&lt;br&gt;
Why CrewAI matters&lt;/strong&gt;&lt;br&gt;
CrewAI matters because it gives structure to AI workflows. Instead of asking one model to do everything, you can divide the work into smaller roles such as research, summarization, planning, and review.&lt;/p&gt;

&lt;p&gt;That structure is especially helpful for tasks that happen in stages. It makes the workflow easier to follow, easier to debug, and easier to scale.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What CrewAI is&lt;/strong&gt;&lt;br&gt;
CrewAI is a framework for building multi-agent systems. Each agent has a role, and the agents work together to complete a task.&lt;/p&gt;

&lt;p&gt;That is what makes CrewAI different from a normal chatbot prompt. You are not just generating output — you are designing a workflow with collaboration built in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use CrewAI&lt;/strong&gt;&lt;br&gt;
CrewAI is a good fit when a problem can be broken into steps. It works well for research tasks, content creation, report writing, automation, and internal knowledge workflows.&lt;/p&gt;

&lt;p&gt;It is also useful when you want visibility into how the final result is created. A multi-agent setup gives you a clearer process instead of one black-box answer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How I installed it&lt;/strong&gt;&lt;br&gt;
My setup started with creating a Python virtual environment, activating it, checking the Python version, and installing the required packages. This is the safest way to keep dependencies isolated and avoid conflicts.&lt;/p&gt;

&lt;p&gt;bash&lt;br&gt;
python3.11 -m venv venv&lt;br&gt;
source venv/bin/activate&lt;br&gt;
python --version&lt;br&gt;
pip install tiktoken&lt;br&gt;
pip install crewai&lt;/p&gt;

&lt;p&gt;After that, I could run the script that defined the agent workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common errors I hit&lt;/strong&gt;&lt;br&gt;
The first issue I ran into was a filename spacing problem. Python tried to open only part of the script name because the filename had a space in it.&lt;/p&gt;

&lt;p&gt;The fix was simple: quote the filename or rename it so it does not contain spaces. It was a small mistake, but it stopped the script from running completely.&lt;/p&gt;

&lt;p&gt;The second issue was more about command formatting and environment clarity. Even a small typo can make setup confusing when you are still getting used to the terminal and virtual environment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lessons learned&lt;/strong&gt;&lt;br&gt;
The biggest lesson was that installation is not just a setup step. It is part of the development process.&lt;/p&gt;

&lt;p&gt;If the Python version, virtual environment, and file names are not handled carefully, the rest of the workflow becomes harder to trust. Once those basics are in place, CrewAI becomes much easier to understand and use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where CrewAI fits&lt;/strong&gt;&lt;br&gt;
CrewAI is well suited for workflows that need task decomposition and collaboration between specialized agents. It is a strong choice for research assistants, content pipelines, planning tools, and automation projects.&lt;/p&gt;

&lt;p&gt;For beginners, it is also a good introduction to multi-agent design because it shows how responsibilities can be separated in a practical way.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final takeaway&lt;/strong&gt;&lt;br&gt;
CrewAI is worth exploring if you want to move beyond one-off prompts and into more organized AI workflows. The installation process may seem simple, but it often teaches the most important lessons about environment setup and debugging.&lt;/p&gt;

&lt;p&gt;In my case, the mistakes were frustrating at first, but they made the learning experience more useful. That is what makes this kind of post valuable: it is not just about getting CrewAI installed, but about understanding what it takes to make a multi-agent system work.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>multiagentsystems</category>
      <category>crewai</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
