Lorong AI · The One About AI × SWE · 14 October 2026

Agentic engineering at AI Singapore

Learning at the edge, bringing it home

Najib NinabaHead of Platforms Engineering, AI Singapore
najibninaba.comgithub.com/najibninaba · x.com/najibninaba

© 2026 Najib Ninaba. All rights reserved.

Where I come from

Old HPC habits still apply

~2000
Linux HPC clusters in Singapore; Rocks tooling and packaging
2003
Co-founded Scalable Systems Pte Ltd, acquired by Platform Computing in 2006
2006–14
Platform Computing, then Revolution Analytics
2018
One of AI Singapore's original four engineers
2020
Head of Platforms Engineering
Performance and efficiency, while keeping results accurate
Scale and automate so infrastructure and tools do the heavy lifting
Split work into independent pieces that run in parallel, with map-reduce as a default pattern
Building AI platforms and tools with AI agents. Old HPC habits still apply.

Platforms Engineering, AI Singapore

A small team supporting many builders

9
people in Platforms Engineering
7+
teams we support
Platforms · Infrastructure · Operations
with mentoring and education running across all of it

AIAP apprentices

AI Apprenticeship Programme. Engineers trained through real project work.

AIEH engineers

Delivering 100E and SIP projects with industry sponsors.

And more

LADP batches, AIAP Core, AIxTech, and our PM and Admin teams.

Today

Four parts

01

How my practice changed

From watching, to evaluating, to running several agents in parallel

02

Patterns I learned

Building Orchard and contributing to RepoPrompt CE

03

Bringing it back to AISG

Access, environments, plugins, mentoring and assessment

04

Where AISG is now

Uneven adoption, and what we're still working out

01

How my practice changed

2023 to today: from watching, to learning to evaluate, to running agents in parallel.

2023–2024 · Watching from a platform view

Before coding agents

If Prompt Engineering is the new hype, how long before PromptOps becomes a thing...
Mar 2023
Azure OpenAI experiments
Sep 2023
Semantic Kernel and Prompt Flow sandboxes
2024
My outlook: small fine-tuned models, open-source LLMs, OpenAI-compatible adapters, LLM infrastructure platforms

Early to mid 2025 · First real use

Learning to evaluate, not vibe check

Learning to evaluate, early to mid 2025 Timeline of 2025: Claude Code in February after using Claude.ai for audit SOPs, the AI Evals For Engineers & PMs course by Hamel Husain and Shreya Shankar in June after mixed results, the first agent-written commit with a CLAUDE.md on 29 June, and a write-up on LinkedIn and X in August. Feb 2025 Claude Code After Claude.ai for writing audit SOPs. Jun 2025 AI Evals For Engineers & PMs Hamel Husain & Shreya Shankar · Maven 29 Jun 2025 First agent-written commit With a CLAUDE.md in the repo. Aug 2025 Wrote it up On LinkedIn and X.
Before, I was doing ‘vibe checks’: code looked right, tests passed, ship it. Now I understand why that fails.
Stop obsessing over perfect prompts. Start by systematically analyzing WHERE and WHY they fail.

2025 to 2026 · Trying each wave

Trying the field to see what holds up

Tool waves, 2025 to 2026 Five periods of trying coding tools: exploring chat and early agents in early 2025, Claude Code arriving from February to July 2025, a broad context-and-tools phase from August to October 2025, an own harness with Pi and project skills in February 2026, and Codex with Amp runners, Devin and RepoPrompt as the main surface by mid 2026. Early 2025 Exploring ChatGPT Claude desktop OpenHands Aider Feb–Jul 2025 Agents arrive Claude Code Conductor BMAD Aug–Oct 2025 Context and breadth RepoPrompt Codex CLI Cursor OpenCode Amp Feb 2026 Own harness Pi 30+ project skills overnight loops Mid 2026 Main surface Codex Amp runners Devin RepoPrompt

I put my own time and money into each wave, so I could see what holds up before bringing it to AISG.

November 2024 to October 2026 · From my receipts

Paying to learn early

My own money on AI tools, compute and courses.

US$11.9k
≈ S$16,000
Personal spend by category Of about US$11.9k in personal spend, about $7.9k went on models and agents, $1.9k on infrastructure and dev tools, and $2.1k on learning. Models and agents ~$7.9k ChatGPT Pro since Aug 2025 · Claude Max, then API credits · Devin, xAI, Warp Infra, dev tools ~$1.9k RepoPrompt, Exa, Greptile, others Learning ~$2.1k AI Evals course, a Maven AI course
Claude, before and after AISG's plan: Max $200 Max $100 Pro $20 once AISG's plan covered my work

December 2025 to March 2026 · Orchestration

Scale, once the workflow held

GitHub contributions by year Najib's GitHub contributions were 787 in 2018 and 136 or fewer a year from 2019 to 2024, then rose to 513 in 2025 and 6,071 in 2026 up to 11 October. GITHUB CONTRIBUTIONS BY YEAR 787 2018 25 2019 0 2020 136 2021 7 2022 96 2023 0 2024 513 2025 6,071 2026 TO 11 OCT
2.6B
tokens in 30 days, across 574 sessions
I plan with one model, implement with another, review with a third.
Model quality is improving quickly. Results still depend on workflow quality.

March to June 2026 · Structure

Adding structure around the agents

SPEC.md first

Written before any code

AGENTS.md by default

In every new repo

Workbench repos

Plans and saved exports beside each project

OpenSpec

Change packages with spec deltas

Validation gates

Review and checks before pushing, added in June 2026

August 2026 to now · Fan-out

Fan-out across runners

Fan-out across runners Najib plans, reviews and merges from Codex on a Mac Mini M2, which orchestrates Amp and Devin, with RepoPrompt supplying context. Amp runners run on Linux in AISG's on-prem infrastructure (a Proxmox VM with four H100s and an AMD W7900 workstation). Devin workers run on Macs: a Mac Studio M3 Ultra, also on-prem at AISG, and his own MacBook M3 Max. AISG ON-PREM RepoPrompt context · MCP Me, in Codex plan · review · merge MAC MINI M2 Amp runners · Linux Devin workers · macOS H100 VM 4 × H100 · Proxmox W7900 AMD GPU workstation Mac Studio M3 Ultra MacBook M3 Max · my laptop
Commits by quarter Commits in Najib's own repos grew from 13 in Q2 2025 and 27 in Q3 2025 to 345 in Q4 2025, then 1,886 in Q1 2026, 1,254 in Q2 2026 and 1,638 in Q3 2026. COMMITS IN MY REPOS, BY QUARTER 13 Q2 25 27 Q3 25 345 Q4 25 1,886 Q1 26 1,254 Q2 26 1,638 Q3 26
Commits with agent attribution, 2026Q2 1%Q3 13%Q4 28%
AI agents have helped me spend less time writing code directly and more time guiding the work.
02

Patterns I learned building with agents

Orchard is where I build. RepoPrompt CE is the tool I use and help build.

Orchard · kapitan.ai ↗ · github.com/kapitan-ai/orchard ↗

Local AI on our own hardware

It started as a request to run local AI on-prem, on eight Mac Studio M3 Ultras, 512 GB each.

  • One OpenAI-compatible endpoint on Apple Silicon
  • Workspace tokens; every model explicitly granted
  • Elixir/OTP control plane, MLX workers
  • Source-only pilot, Apache-2.0
~1,880
commits
7mo
since the first commit
93%
of commits mine, written with agents
Orchard Console · request detail
Orchard Console request detail showing token usage, time to first token and a request timeline

Pattern 1 · RepoPrompt · repoprompt.com ↗ · github.com/repoprompt/repoprompt-ce ↗

Context before action

With RepoPrompt, an open-source macOS app that builds context for coding agents.

Context before action Four steps: the codebase feeds RepoPrompt's Context Builder that picks the files fitting a fixed token budget, assumptions and a plan are reviewed before any code is written, and only then does the agent act on that context. 01 Codebase files, CodeMaps, tree, Git diffs 02 REPOPROMPT Context Builder chooses the files that fit a fixed token budget 03 Assumptions and plan reviewed before any code is written 04 Agent acts implements against that context
I ask the coding agent to explain its assumptions before it starts writing code.
RepoPrompt CE ↗ · ~950 ★

I was the first contributor besides the author: PR #2, on 31 May 2026, the day it went open source.

Since then: Cursor agent support (#902, #960) and the Homebrew cask.

Pattern 2

Spec and plan first

$ git show --stat bb432055 bb432055 2026-03-08 init: orchard v2 — spec + agents guide SPEC.md | 2855 ++++++++++++++++++ AGENTS.md | +++ .gitignore | + # no code yet
  • Orchard's first commit held only the spec and the agent guide
  • Since June, changes trace to the spec through OpenSpec change packages
  • 36 ADRs record the decisions and their reasons
  • The spec is now 6,000+ lines, revised in 180+ commits

Pattern 3

Every codebase has collaborators, and agents are among them

Collaborators on a codebasePeople (engineers and reviewers) and agents (Codex, Claude, Amp) both read and write the same repo, which holds AGENTS.md, SPEC.md and ADRs, a glossary and context map, repo skills, preflight gates, and tests as contracts. WRITE READ WRITE READ COLLABORATOR People engineers, reviewers COLLABORATOR Agents Codex, Claude, Amp The repo AGENTS.md SPEC.md · ADRs glossary · context map repo skills preflight · gates tests as contracts

Orchard started as a solo project, built with my agents. Since July, it's two of us, each with our own agents.

  • One onboarding guide. Orchard's CLAUDE.md just points to AGENTS.md, so every agent reads the same thing.
  • Conventions agents can follow. RepoPrompt CE ships repo skills and a preflight every agent runs.
  • A shared vocabulary. Glossary, ADRs and a spec both people and agents read.
  • Tests state the contract, so an agent's change is checked like anyone's.

Pattern 4

Gates and evidence

Gates and evidence Every change to Orchard must pass five gates in order: format, compile with warnings as errors, Credo with checks for AI-style code, Dialyzer type checks, and tests with a regression test for every bug fix. REQUIRED FOR EVERY CHANGE 01 Format 02 Compile warnings as errors 03 Credo plus checks for AI-style code, from week one 04 Dialyzer types 05 Test a regression test for every bug fix
181k
lines of Elixir test code
127k
lines of Elixir application code (lib/)
The 2025 evals lesson, applied to code.

Pattern 5

Second opinions from other models

Second opinions from other models The same frozen input (context, plan or diff) goes to five models in separate lanes, Model A as the primary, and each returns its own answer; the five answers are not merged but read side by side by the engineer, who decides. ANSWER A ANSWER B ANSWER C ANSWER D ANSWER E Same frozen input context, plan or diff Model A primary lane Model B separate lane Model C separate lane Model D separate lane Model E separate lane I read and decide answers side by side, no merge

December 2025: a review on a second model found critical issues in code the first model wrote. Answers stay side by side and aren't merged. X · 4 December 2025 ↗

Pattern 6

Autonomy is earned, and a human approves the merge

Human in the loop first, then human on the loop. The autonomy is earned.
The agent can draft anything. I approve merges.
Orchard PR readiness packet
  • Exact head and base SHAs
  • Test results and CI status
  • Independent review, with counterexamples
  • “An accountable human contributor has reviewed and stands behind any AI-assisted work.”
Unattended loops

Ralph loop ↗Jul 2025

Geoffrey Huntley. One agent, the same prompt, fresh context each pass.

RepoPrompt Orchestrate ↗Apr 2026

Plan, delegate to sub-agents, verify, steer.

Codex /goal ↗Apr 2026

Iterates until the goal is judged done or the budget runs out.

Pattern 7

Scale out like a cluster

HPC clusterJob schedulerAgents · RepoPrompt CEconductor queues builds and tests, with one heavy slot per machine
HPC clusterNode isolationAgentsA cheap worktree for each agent, so parallel work stays isolated
HPC clusterAccountingAgentsA journal of protected changes agents make through MCP

The same problems we solved on HPC clusters (scheduling, isolation and accounting), now for agents.

Pattern 8

Plan for whoever runs it

AI made software cheap to build, not cheap to own.

Off by default

A new experimental backend shipped behind a switch, off by default.

Fail closed

Worker errors cross the boundary only as stable codes, never raw text.

Pattern 9

Stay model- and harness-agnostic

Bet on models and methodology, not wrappers.
MODELS
GPTClaude Opus / SonnetGLMDeepSeekQwen (local)
APIS
OpenAI-compatible (Orchard)
HARNESSES
CodexClaude CodeAmpDevinPiRepoPrompt (context)

My main surface so far: Claude Code, then Pi, now Codex.

03

Bringing it back to AISG

Access, environments, plugins, mentoring and assessment. Including what didn't stick.

How it flowed back

Not everything was ready for AISG

Bringing patterns back to AISG Timeline from July 2025 to September 2026 of patterns brought back to AISG: a Claude Code usage leaderboard and a BMAD AI/ML pack that did not stick, then the MLOps Week curriculum, a hosted Anthropic Claude Code session, a leaders workshop on AI and data infrastructure, an AGENTS.md template with the Orchard onboarding site, the Kopitiam internal Claude plugin marketplace, and LiteLLM gateways for apprentices. 2025 2026 Jul 2025 Didn't stick cc_leaderboard Claude Code usage, cost Too early to roll out Aug 2025 Didn't stick BMAD AI/ML pack AISG; some adoption. Not even for me. Aug 2025 MLOps Week Curriculum Oct 2025 Claude Code session By Anthropic, hosted at AISG Nov 2025 Leaders workshop AI & Data Infrastructure Jun 2026 AGENTS.md template and the Orchard onboarding site Jul 2026 Kopitiam Internal Claude plugin marketplace Sep 2026 LiteLLM gateways For apprentices

Access to coding agents and models

Each cohort, engineer or project gets its own model access

1
Foundry account per cohort or team, programme batch, engineer sandbox or engagement
Own
keys, capacity and cost tracking for each account

Running on AISG's Azure since June 2026.

GPT-5.xGPT-6DeepSeekClaude HaikuGLMembeddings
Claude Code through AISG's organisational plan
KSS (Kapitan Steady SelfServe) maps project roles to Azure roles
Project roleAzure role
MentorOwner
ApprenticeContributor
Project managerReader

Project environments

How a project gets started

How a project gets started Four separate tools set up a new project, Concierge for accounts and onboarding, KSS (Kapitan Steady SelfServe) for project records and cloud resources, git-qube-sync for repositories, and Otherside for the Coder workspace, with an operator handing off between each one because the tools do not call each other. 01 Concierge accounts and onboarding through Google Chat 02 KSS Kapitan Steady SelfServe project records, sponsor data, cloud resources, roles 03 git-qube-sync repositories and code-quality setup 04 Otherside standard Coder workspace and project services Operator handoff, done by hand. The tools don’t call each other.

Sponsor's infrastructure first; our GCP if they can't provide it. Otherside provides the tooling either way.

LiteLLM gateways for apprentices

Models for apprentices, with a view for mentors

Otherside gateway design

Otherside model gatewayEach apprentice runs Claude Code through claude-ds and a LiteLLM gateway with one personal key, which reaches one Foundry model per project, while a mentor reads usage and spend from the gateway. Claude Code Apprenticeruns claude-ds LiteLLM gatewayone personal key per apprentice Foundry modelone model per project Mentorreads usage and spend
Status

The Otherside gateway is in a small rollout. Separately, a LiteLLM gateway for AIAP23 has run on Azure since September.

Beyond training

We also use LiteLLM in our sponsor project work.

Kopitiam

Our internal Claude plugin marketplace

Our internal Claude plugin marketplace A plugin reaches Kopitiam in five steps: an AISG engineer opens a merge request, CI checks the manifest against the schema, a person on Platforms reviews and merges it, CI regenerates the marketplace catalogue, and engineers install it with the plugin install command. 01 Contributor any AISG engineer opens a merge request 02 CI validates manifest checked against the schema 03 Platforms a person reviews and merges 04 CI publishes marketplace catalogue regenerated 05 Engineers /plugin install <name>@kopitiam
# in Claude Code /plugin marketplace add git@…/aisg/kopitiam/kopitiam.git /plugin install howmuchisit@kopitiam

What engineers have packaged

Organisational know-how, as plugins

event-speaker-panel

Triage speaking invitations

howmuchisit

Infrastructure cost estimates

pay-me-now

Expense claims from receipts

sponsor-dd

Sponsor due diligence and meeting prep

scopeskills

Scoping AI and ML projects

How HowMuchIsIt is built
Python does the arithmetic. A script checks the output document.
A reviewer sub-agent sees only the report and the form; at most two fix cycles.
The author checked it against three human estimates. A fix for the miss landed the same day.

Mentoring with measurement

Gauntlet: an LLM serving exercise

  • Each apprentice serves a model on one L4 GPU with vLLM
  • Locust measures time to first token, throughput, latency and errors
  • Results go to a leaderboard
  • Checks against gaming: optional prompt fuzzing to defeat response caches, reported model IDs checked, and entries at 25% errors or more unranked
Gauntlet mentoring loop The Gauntlet mentoring loop runs Build, then Measure (TTFT, throughput, errors), then Discuss (mentor questions and a viva), then Revise, and back to Build. mentoring loop Build Measure TTFT, throughput, errors Discuss mentor questions, viva Revise

The numbers give the mentor and the apprentice something concrete to talk about.

Agents helping us assess MLOps work

Map-reduce, applied to assessment

Map-reduce, applied to assessment Scripts gather evidence from code, MLflow, GitLab, GCP and containers without exposing credentials to agents, about twenty Claude Code sub-agents each assess one apprentice, and mentors make the final call, deciding top scores and adjusting any score. Scripts gather evidence code, MLflow, GitLab, GCP, containers agents never see credentials ~20 sub-agents · one per apprentice Claude Code apprentice 1 Claude Code apprentice 2 Claude Code apprentice 3 Claude Code apprentice 4 Claude Code apprentice 5 … Mentors decide top scores are a mentor's call mentors adjust any score

Agents gather evidence and do the first reading. Mentors bring the results together and make the call.

Getting our platforms ready for agents

Agent-first where we can, with guardrails

FoundationWhat we have so farStill in progress
MCP endpoints and agent skillsKopitiam plugins and skills; Orchard's OpenAI-compatible APIMCP endpoints on KSS, Otherside and Concierge
Machine-readable docsAGENTS.md template; Orchard onboarding site; AGENTS.md in our reposPlatform docs agents can use directly
Guardrails for people and agentsKSS role mapping; per-apprentice gateway keys; Orchard's deny-by-default model grantsGateway budgets and rate limits
Explicit ownershipPlatforms reviews every Kopitiam pluginOwnership after publish; keeping plugins in sync
If an agent has to fight its way through your wiki, the platform isn't ready.

LLM red-teaming in 100E projects

Red-teamed before handover

Led by SAGE, our AI Safety & Governance Engineering team

Red-teaming in the 100E lifecycle A 100E project runs scope, build, red-team, evidence and handover, with SAGE attacking, grading and fixing the LLM app during development so the sponsor receives results anyone can re-run. 01 Scope the sponsor's use case 02 Build the LLM app, in the project repo 03 during development Red-team SAGE attacks, grades and fixes 04 Evidence results anyone can re-run 05 Handover to the sponsor

What it tests

AI safety: harmful or off-policy answers, jailbreaks. Security: prompt injection, data leaks, tool misuse. Governance: mapped to the EU AI Act, NIST AI RMF, ISO 42001, OWASP LLM Top 10 and MITRE ATLAS.

How it works

An attacker model, the project's app as target, and a grader model. /discover extracts the prompts; /attack generates tests, grades them, fixes failures and re-tests the fixes.

What it changes

Each finding is documented and walked through with the project team. Fixes go at the highest layer that can control the problem: architecture, then application controls, then prompt hardening.

04

Where AISG is now

People across AISG are picking up these tools at different paces. The platform team's job is to support each of them.

Adoption happens at different paces

Two tracks, both doing real work

A working model of the support people need, from my 2 March post

Two tracks of builders Two tracks: about 20% deep engineering, building and maintaining the core systems, and about 80% AI-enabled builders, solving real problems with AI tools and workflow automation without waiting for engineering. ~20% Deep engineering build and maintain the core systems ~80% AI-enabled builders solve real problems with AI tools and workflow automation, without waiting for engineering
Agents don't replace engineers. They create more builders.
1865

Jevons' paradox ↗. In The Coal Question, Jevons observed that more efficient use of coal led to more coal being used, not less. I expect something similar as building software gets cheaper.

What we're still working out

Open problems we're working on

  • Scaling past one person's dev environment. When anyone and their agents can implement anything, coordinating a small team is the open question.
  • Gateway budgets and rate limits for apprentices and projects.
  • Agent access to our platforms: MCP endpoints and machine-readable docs.

Why I stay at the edge

I invest in myself to work with the newest tools and models, learn the patterns early, and bring them back to my team and AISG.

Talent development, project delivery, and platform and infrastructure practices must be built together.

What carries across

Four things I'd take anywhere

Context and a plan first

before the agent acts

Write for every collaborator

people and agents

Evidence before acceptance

evaluate, don't vibe check

An accountable owner

for everything that ships

Q&A

Questions and discussion

My practice · Orchard and RepoPrompt CE · how AISG supports its builders

Thank you

© 2026 Najib Ninaba. All rights reserved.

Annex · Orchard architecture

Orchard, in one picture

Orchard, in one pictureClients with workspace tokens call the Elixir controller, which keeps its state in Postgres and drives one node agent per Mac over mTLS gRPC, and each node agent runs Python MLX workers on Apple Silicon. ADVISORY LOCKS Clientsapps and coding agentswith workspace tokens ControllerElixir/OTP, Phoenix LiveView Console/v1/responses, /v1/chat/completions Node agentone per MacmTLS gRPC MLX workersPythonApple Silicon Postgresthe only store
State

Postgres is the only store, with advisory locks. No Kubernetes, Redis or broker.

Access

Deny-by-default model grants; tool calls are returned to the client, never run on the server.

Status

0.5.0-dev pilot. Single-node path today; multi-node scheduling on the roadmap.

Annex · Model access on Azure, June to October 2026

Where model access sits

Training programmes

Accounts per AIAP cohort and team, and per programme batch

Engineer sandboxes

Per-engineer accounts with their own model mix

Engagements

Red-teaming and scoping environments, one account each

Platform team

Load tests, reproduction environments, Otherside devbox

GPT-5.xGPT-4.x / 4oembeddingsDeepSeekGPT-6o-seriesGLMClaude Haiku

Annex · The infrastructure we provide

Our own fleet, plus three clouds

H100
A few dozen H100 GPUs on a Proxmox cluster
8
Mac Studio M3 Ultras, 512 GB unified memory each
100sTB
storage
Azure · AWS · GCP
For 100E and SIP, the sponsor's infrastructure comes first
Earlier, at NUS

We once ran close to 300 nodes from a small OCP server farm, mainly for compute and storage. We decommissioned it when AISG moved to NTU.