<?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: Mounir L'bachir</title>
    <description>The latest articles on DEV Community by Mounir L'bachir (@mounirho22).</description>
    <link>https://dev.to/mounirho22</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%2F4124458%2F62b2a81d-ebed-481a-9200-1264a44e0526.jpg</url>
      <title>DEV Community: Mounir L'bachir</title>
      <link>https://dev.to/mounirho22</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mounirho22"/>
    <language>en</language>
    <item>
      <title>Building IndentAI: Scaling Differentiated CS Education with Amazon Bedrock and Nova Pro</title>
      <dc:creator>Mounir L'bachir</dc:creator>
      <pubDate>Mon, 14 Sep 2026 11:38:59 +0000</pubDate>
      <link>https://dev.to/mounirho22/building-indentai-scaling-differentiated-cs-education-with-amazon-bedrock-and-nova-pro-3m08</link>
      <guid>https://dev.to/mounirho22/building-indentai-scaling-differentiated-cs-education-with-amazon-bedrock-and-nova-pro-3m08</guid>
      <description>&lt;h2&gt;
  
  
  1. The Pedagogical Dilemma in Computer Science Classrooms
&lt;/h2&gt;

&lt;p&gt;Teaching computer science to a classroom of thirty students presents a fundamental structural challenge: skill distribution is rarely uniform. In any single introductory programming session, a subset of students struggles with foundational syntax and indentation semantics, while advanced learners complete the base prompt in minutes and require immediate algorithmic extension.&lt;/p&gt;

&lt;p&gt;When educators manually hand-craft differentiated exercises, diagnose abstract syntax errors, and scaffold problem sets in real time, cognitive overload inevitably causes a bottleneck. Generic, consumer-grade large language models frequently fail in classroom environments because they act as "answer dispensers," outputting copy-paste solutions that circumvent the cognitive friction required for true mastery.&lt;/p&gt;

&lt;p&gt;We engineered &lt;strong&gt;IndentAI&lt;/strong&gt; to solve this problem: an autonomous, agentic curriculum differentiation engine powered by &lt;strong&gt;Amazon Bedrock&lt;/strong&gt; and &lt;strong&gt;Amazon Nova Pro&lt;/strong&gt; (&lt;code&gt;us.amazon.nova-pro-v1:0&lt;/code&gt;). IndentAI diagnoses student code misconceptions via Abstract Syntax Tree (AST) inspection and dynamically synthesizes three tiered levels of pedagogical scaffolding, all governed through a real-time, human-in-the-loop Teacher Review Desk.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Architectural Blueprint
&lt;/h2&gt;

&lt;p&gt;IndentAI couples deterministic local evaluation with generative foundation model orchestration across three decoupling layers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Deterministic Static Analysis Layer:&lt;/strong&gt; Performs syntax parsing, node extraction, and execution safety checks via &lt;code&gt;app/interpreter/engine.py&lt;/code&gt; and &lt;code&gt;app/interpreter/evaluator.py&lt;/code&gt; before invoking generative models.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generative Agent Layer:&lt;/strong&gt; Uses Bedrock Foundation Models through streaming runtime protocols and containerized entrypoints in &lt;code&gt;agentcore/&lt;/code&gt; to synthesize contextual curriculum variants.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Control &amp;amp; Oversight Layer:&lt;/strong&gt; Exposes a FastAPI dashboard in &lt;code&gt;app/main.py&lt;/code&gt; where teachers monitor real-time student sessions, verify AST diffs, and authorize agent-generated modifications.&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F46gap81f1nzre7tjz9zx.png" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F46gap81f1nzre7tjz9zx.png" alt=" " width="800" height="516"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Integrating Amazon Bedrock &amp;amp; Amazon Nova Models
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Why Amazon Nova Pro?
&lt;/h3&gt;

&lt;p&gt;IndentAI uses &lt;strong&gt;Amazon Nova Pro&lt;/strong&gt; (&lt;code&gt;us.amazon.nova-pro-v1:0&lt;/code&gt;) as its primary reasoning engine. Differentiated instructional design requires strict adherence to schema output formats (JSON test fixtures, assertion suites, and hint progressions) while retaining conversational empathy. Nova Pro delivers low token-to-first-byte latency along with the logical depth required to dissect broken Python loops without inventing hallucinations.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Bedrock Runtime Client
&lt;/h3&gt;

&lt;p&gt;Our runtime integration communicates with Bedrock through the &lt;code&gt;ConverseStream&lt;/code&gt; and &lt;code&gt;InvokeModel&lt;/code&gt; APIs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;botocore.exceptions&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ClientError&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;BedrockCurriculumProvider&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;region&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AWS_REGION&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;us-east-1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;BEDROCK_MODEL_ID&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;us.amazon.nova-pro-v1:0&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;service_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bedrock-runtime&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;region_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;region&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;generate_differentiated_scaffold&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;student_code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;error_context&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;system_prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You are an expert Computer Science Pedagogical Agent. &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Analyze the student&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s code and runtime error context. &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Generate three distinct pedagogical exercise tiers: Foundational, Core, and Advanced. &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Never give away the final solution outright. Adhere strictly to the requested JSON schema.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;prompt_body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Student Code:&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;```
&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;endraw&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;
python&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;student_code&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;
&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;raw&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;
```&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Diagnosis: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;error_context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;messages&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt_body&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;]&lt;/span&gt;

        &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;converse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="n"&gt;modelId&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;system&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;system_prompt&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;
                &lt;span class="n"&gt;inferenceConfig&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;temperature&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;maxTokens&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2048&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;output_text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;output&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;message&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output_text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="n"&gt;ClientError&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;_handle_runtime_fallback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;student_code&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;error_context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  4. Resilience by Design: Dual-Engine Architecture
&lt;/h2&gt;

&lt;p&gt;School district IT infrastructure is notoriously brittle: proxy firewalls, bandwidth bottlenecks, or intermittent cloud outages cannot be allowed to disrupt an active programming lesson.&lt;/p&gt;

&lt;p&gt;To solve this, IndentAI incorporates a &lt;strong&gt;Dual-Engine Architecture&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cloud Mode (&lt;code&gt;MODEL_PROVIDER=bedrock&lt;/code&gt;):&lt;/strong&gt; Connects to Amazon Bedrock Nova Pro to generate custom, unbounded classroom exercises in real time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deterministic Local Mode (&lt;code&gt;MODEL_PROVIDER=mock&lt;/code&gt;):&lt;/strong&gt; An offline AST fallback generator that evaluates student code structures and selects verified, pre-computed scaffolding tiers from a local SQLite repository at &lt;code&gt;data/lessons.db&lt;/code&gt;[cite: 2].&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This approach guarantees that if network connectivity drops or account-level service quarantines occur, the educator's dashboard and student test runner continue operating with zero downtime.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Human-in-the-Loop: The Teacher Review Desk
&lt;/h2&gt;

&lt;p&gt;A foundational rule of the &lt;strong&gt;Agents for Humans&lt;/strong&gt; paradigm is that autonomous agents must empower people rather than replace them. In IndentAI, generative outputs are never blindly pushed to a student's terminal:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Escalation Triggers:&lt;/strong&gt; When a student fails a test assertion three consecutive times, the autonomous engine flags the session and routes the diagnostic state to the &lt;strong&gt;Teacher Review Desk&lt;/strong&gt;[cite: 2].&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pedagogical Inspection:&lt;/strong&gt; The teacher sees the student’s current code, the AST node breakdown, and Nova Pro’s recommended 3-tier scaffolding plan.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Granular Intervention:&lt;/strong&gt; With a single click, the educator can approve the agent’s suggestion, edit the hint parameters, or trigger an in-person conference.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  6. Verification and Containerized Deployment
&lt;/h2&gt;

&lt;p&gt;To ensure production stability, the repository includes a self-contained container runtime defined in &lt;code&gt;agentcore/Dockerfile&lt;/code&gt;, automated pre-flight checks in &lt;code&gt;verify.py&lt;/code&gt;, and an end-to-end integration test suite[cite: 2]:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Verify local AST engine and pipeline assertions&lt;/span&gt;
python verify.py
pytest tests/

&lt;span class="c"&gt;# Execute containerized runtime test&lt;/span&gt;
docker build &lt;span class="nt"&gt;-t&lt;/span&gt; indentai-agentcore agentcore/
docker run &lt;span class="nt"&gt;-p&lt;/span&gt; 8000:8000 indentai-agentcore
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  7. Looking Forward
&lt;/h2&gt;

&lt;p&gt;Generative AI in education must move beyond generic chatbots. By anchoring high-performance foundation models like &lt;strong&gt;Amazon Nova Pro&lt;/strong&gt; behind deterministic AST parsers and educator review desks, systems can deliver individualized instruction at scale while protecting the classroom's pedagogical integrity.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/Mounirho22/IndentAI" rel="noopener noreferrer"&gt;https://github.com/Mounirho22/IndentAI&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built For:&lt;/strong&gt; AWS Agents for Humans Hackathon (Devpost)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>python</category>
      <category>aws</category>
      <category>awschallenge</category>
      <category>amazonbedrock</category>
    </item>
  </channel>
</rss>
