<?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>Forem: Ajiferuke Tomiwa</title>
    <description>The latest articles on Forem by Ajiferuke Tomiwa (@ajiferuke_tomiwa_6d18f131).</description>
    <link>https://forem.com/ajiferuke_tomiwa_6d18f131</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%2F3727050%2Fc97e5f15-7413-411f-ba0b-fa715eff8238.png</url>
      <title>Forem: Ajiferuke Tomiwa</title>
      <link>https://forem.com/ajiferuke_tomiwa_6d18f131</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/ajiferuke_tomiwa_6d18f131"/>
    <language>en</language>
    <item>
      <title>A “Junior Engineer” AI Agent for Deterministic Engineering Workflows</title>
      <dc:creator>Ajiferuke Tomiwa</dc:creator>
      <pubDate>Thu, 22 Jan 2026 20:48:03 +0000</pubDate>
      <link>https://forem.com/ajiferuke_tomiwa_6d18f131/a-junior-engineer-ai-agent-for-deterministic-engineering-workflows-3l2e</link>
      <guid>https://forem.com/ajiferuke_tomiwa_6d18f131/a-junior-engineer-ai-agent-for-deterministic-engineering-workflows-3l2e</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Originally published on Medium:&lt;/em&gt;&lt;br&gt;
&lt;a href="https://medium.com/@ajiferukeolatommy/a-junior-engineer-ai-agent-for-deterministic-engineering-workflows-b71fbdcb685d" rel="noopener noreferrer"&gt;https://medium.com/@ajiferukeolatommy/a-junior-engineer-ai-agent-for-deterministic-engineering-workflows-b71fbdcb685d&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Most AI developer tools aim too high.&lt;/p&gt;

&lt;p&gt;They try to behave like senior or principal engineers: proposing architectures, refactoring large codebases, or making design decisions that normally require deep domain context. That can be impressive — but it often targets the wrong layer of the problem.&lt;/p&gt;

&lt;p&gt;In practice, most engineering time isn’t spent on architecture. It’s spent on &lt;strong&gt;workflow execution&lt;/strong&gt;: selecting work, enforcing rules, moving tickets, triggering automation, and dealing with the fallout when automation behaves unpredictably.&lt;/p&gt;

&lt;p&gt;This post describes a different approach: a &lt;strong&gt;“Junior Engineer” AI agent&lt;/strong&gt; designed specifically for &lt;strong&gt;deterministic engineering workflows&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The goal isn’t to replace human judgment. It’s to execute process reliably, draft small changes, and return decision-making to humans.&lt;/p&gt;




&lt;h2&gt;
  
  
  The problem: workflow is where engineering time leaks
&lt;/h2&gt;

&lt;p&gt;Across many teams, engineers routinely lose time to tasks like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Determining which ticket is actually eligible to work on&lt;/li&gt;
&lt;li&gt;Verifying status, size, and flags&lt;/li&gt;
&lt;li&gt;Manually advancing tickets&lt;/li&gt;
&lt;li&gt;Triggering automation&lt;/li&gt;
&lt;li&gt;Debugging CI pipelines with unclear failures&lt;/li&gt;
&lt;li&gt;Writing glue code that exists only to satisfy process&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this work is especially creative — but it’s necessary. It’s also repetitive, error-prone, and a poor use of senior attention.&lt;/p&gt;

&lt;p&gt;Crucially, these tasks require &lt;strong&gt;precision&lt;/strong&gt;, not creativity. That makes them a poor fit for humans — and a strong fit for a constrained AI agent.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why a “Junior Engineer” agent?
&lt;/h2&gt;

&lt;p&gt;Junior engineers tend to be good at one thing many systems struggle with: &lt;strong&gt;following instructions literally and carefully&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;They read requirements closely, apply rules exactly, and debug failures step by step. They don’t rely on intuition or silently skip edge cases.&lt;/p&gt;

&lt;p&gt;That mindset is ideal for workflow execution.&lt;/p&gt;

&lt;p&gt;Instead of asking AI to reason like a senior engineer, this system intentionally constrains the agent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The agent is not allowed to:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Make architecture decisions&lt;/li&gt;
&lt;li&gt;Make product judgments&lt;/li&gt;
&lt;li&gt;Perform large refactors&lt;/li&gt;
&lt;li&gt;Invent “best practices” changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The agent &lt;em&gt;is&lt;/em&gt; allowed to:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Execute deterministic rules&lt;/li&gt;
&lt;li&gt;Make small, scoped changes&lt;/li&gt;
&lt;li&gt;Produce partial implementations&lt;/li&gt;
&lt;li&gt;Leave TODOs when requirements are ambiguous&lt;/li&gt;
&lt;li&gt;Fail loudly and explain why&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those constraints are what make the system reliable.&lt;/p&gt;




&lt;h2&gt;
  
  
  What this system does &lt;em&gt;not&lt;/em&gt; do
&lt;/h2&gt;

&lt;p&gt;This approach does not fix poor requirements, unclear ownership, or weak product decisions. It does not understand domain context automatically, and it does not eliminate the need for careful human review.&lt;/p&gt;

&lt;p&gt;The agent executes workflows faithfully — which means it will also faithfully surface ambiguity or inconsistency instead of silently “working around” it. That’s intentional. The goal is not to replace thinking, but to remove mechanical work and make gaps visible earlier.&lt;/p&gt;




&lt;h2&gt;
  
  
  Real-world architecture: a multi-repo agent system
&lt;/h2&gt;

&lt;p&gt;This is not a single script or a monorepo trick. The system spans multiple repositories, each with a clear responsibility.&lt;/p&gt;

&lt;h3&gt;
  
  
  Repository roles (anonymized)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;agent-controller-repo
│
├── standards-repo
│   ├── routing logic
│   ├── prompts
│   └── shared rules
│
├── frontend-repo
├── backend-repo
└── worker-repo (optional)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;High-level architecture of the “Junior Engineer” agent system.&lt;br&gt;
The controller executes workflow deterministically, routing work through a standards layer into product repositories, where automated review agents prepare PRs before human judgment.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Responsibility breakdown
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Responsibility&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;agent-controller&lt;/td&gt;
&lt;td&gt;Workflow execution, ticket selection, orchestration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;standards&lt;/td&gt;
&lt;td&gt;Centralized routing logic, prompts, guardrails&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;product repos&lt;/td&gt;
&lt;td&gt;Actual code changes (frontend, backend, services)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;review tooling&lt;/td&gt;
&lt;td&gt;Automated review before humans&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This separation is deliberate. It avoids tight coupling and keeps agent behavior auditable and versioned.&lt;/p&gt;




&lt;h2&gt;
  
  
  The agent crew (clear boundaries)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Junior Engineer Agent (controller)
&lt;/h3&gt;

&lt;p&gt;Runs in the &lt;strong&gt;agent-controller&lt;/strong&gt; repo and:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Queries the project system&lt;/li&gt;
&lt;li&gt;Applies strict eligibility rules&lt;/li&gt;
&lt;li&gt;Selects exactly one unit of work&lt;/li&gt;
&lt;li&gt;Claims it deterministically&lt;/li&gt;
&lt;li&gt;Dispatches downstream workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It does &lt;strong&gt;not&lt;/strong&gt; touch product code.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Standards router (coordinator)
&lt;/h3&gt;

&lt;p&gt;Lives in the &lt;strong&gt;standards&lt;/strong&gt; repo and:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Interprets ticket metadata&lt;/li&gt;
&lt;li&gt;Decides which repository should handle the work&lt;/li&gt;
&lt;li&gt;Selects the correct workflow and prompt&lt;/li&gt;
&lt;li&gt;Enforces consistency across teams&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This prevents every repo from inventing its own agent behavior.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Execution agents (product repos)
&lt;/h3&gt;

&lt;p&gt;Run inside &lt;strong&gt;frontend / backend / service repos&lt;/strong&gt; and:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Receive structured context&lt;/li&gt;
&lt;li&gt;Generate minimal diffs&lt;/li&gt;
&lt;li&gt;Add scaffolding or TODOs if unclear&lt;/li&gt;
&lt;li&gt;Open pull requests&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They are intentionally conservative.&lt;/p&gt;




&lt;h3&gt;
  
  
  4. Automated review agents
&lt;/h3&gt;

&lt;p&gt;Before humans see the PR:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI review (e.g., Codex-based review)&lt;/li&gt;
&lt;li&gt;Tools like CodeRabbit&lt;/li&gt;
&lt;li&gt;Tests, linters, and security checks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They surface issues — they do not approve changes.&lt;/p&gt;




&lt;h3&gt;
  
  
  5. Humans (final authority)
&lt;/h3&gt;

&lt;p&gt;Humans review:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Business logic&lt;/li&gt;
&lt;li&gt;Domain correctness&lt;/li&gt;
&lt;li&gt;Risk and deployment implications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No AI merges code.&lt;/p&gt;




&lt;h2&gt;
  
  
  End-to-end flow
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Trigger (manual / scheduled)
        ↓
agent-controller repo
  - pick ONE ticket
  - move to In Progress
  - dispatch standards router
        ↓
standards repo
  - determine target repo
  - select prompt + workflow
        ↓
product repo
  - generate draft PR (AI)
        ↓
automated review agents
        ↓
humans review &amp;amp; merge
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There’s no hidden state. Everything is visible through commits, pull requests, and logs.&lt;/p&gt;




&lt;h2&gt;
  
  
  Prerequisites (one-time setup)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Secrets
&lt;/h3&gt;

&lt;p&gt;In each repo that runs the execution agent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;OPENAI_API_KEY&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In controller, standards, and product repos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;GH_TOKEN&lt;/code&gt; (recommended for cross-repo workflow dispatch)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Variables
&lt;/h3&gt;

&lt;p&gt;Configuration such as project IDs, status field IDs, routing targets, and workflow names are stored as repository or organization-level variables. This keeps workflows generic and reusable across repos.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why this setup works (and stays safe)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Determinism&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The controller selects exactly one ticket&lt;/li&gt;
&lt;li&gt;The router selects exactly one target repo&lt;/li&gt;
&lt;li&gt;Execution agents produce small, scoped PRs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Safety&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No AI merges code&lt;/li&gt;
&lt;li&gt;Automated reviews run before humans&lt;/li&gt;
&lt;li&gt;Humans retain judgment over business logic and deployment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cost&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No workflow SaaS subscriptions&lt;/li&gt;
&lt;li&gt;Only CI minutes, API usage, and optional free review tools&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  How to run it
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Trigger the controller workflow (manual or scheduled)&lt;/li&gt;
&lt;li&gt;The controller claims one eligible ticket&lt;/li&gt;
&lt;li&gt;The standards router determines the target repo&lt;/li&gt;
&lt;li&gt;The execution agent drafts a PR&lt;/li&gt;
&lt;li&gt;Review agents comment&lt;/li&gt;
&lt;li&gt;Humans review and merge&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  The outcome
&lt;/h2&gt;

&lt;p&gt;Engineers stop spending time on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ticket triage&lt;/li&gt;
&lt;li&gt;Status churn&lt;/li&gt;
&lt;li&gt;Boilerplate automation&lt;/li&gt;
&lt;li&gt;Cross-repo coordination&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They spend time on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reviewing logic&lt;/li&gt;
&lt;li&gt;Understanding behavior&lt;/li&gt;
&lt;li&gt;Assessing risk&lt;/li&gt;
&lt;li&gt;Shipping confidently&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Final thought
&lt;/h2&gt;

&lt;p&gt;AI doesn’t need to think like a senior engineer to be useful.&lt;/p&gt;

&lt;p&gt;Sometimes the highest-leverage move is building:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a careful junior engineer&lt;/li&gt;
&lt;li&gt;coordinated by clear standards&lt;/li&gt;
&lt;li&gt;executing workflows deterministically&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;so humans can focus on judgment.&lt;/p&gt;

</description>
      <category>softwareengineering</category>
      <category>githubactions</category>
      <category>ai</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
