Aaron SawitSecurity engineer · Singapore

AI

I build with AI, and I put limits on it

I use AI every day, and I don't trust it by default. Everything here has a limit, a test or a person checking the model's work, because that's the bit most AI projects skip.

Play "Break my bot" → a prompt-injection game. Get a chatbot to give up its password, past six real defences.

What I've built

  1. Versed

    AI inside a free product for kids

    An AI helper in Versed Study with a hard cap on it, and AI-built flashcard decks in Versed Learn. Both are in tools students use.

    The guardrailLimits per visitor and per day live in a Durable Object, after I proved a KV counter can't hold a rate limit. A deck costs about 3 cents to generate, so the free tier has a real number behind it. No user photo uploads on public content, and chat goes through a word filter with reporting.

    Write-up: the rate limit that did not limit
  2. DART assignment, 2025

    AI marking for a selection exam

    I rebuilt an early prototype into an AI marking system for a cybersecurity bootcamp's selection exam: Claude on AWS Bedrock, versioned prompts and an evaluation harness. It marked several hundred scripts, past papers and live applicants.

    The guardrailI didn't trust anything I hadn't measured. Every prompt change got re-run against the instructors' marking, and agreement went from about 60% to about 77%. That number is the point. The model is a fast first marker, not the judge, and the disagreements are where a person needs to look.

    On my CV
  3. GitHub, open source

    Open-source tools for AI security

    Three small tools that came out of my own AI work: regression tests for prompt-injection defences, a bit-level check of a model file against the base it claims, and a probe that tells you if a model really calls tools.

    The guardrailAll three grade on facts, not opinions. A random token either came back or it didn't. A bit either changed or it didn't. None of them needs a second model to judge the first, and each README says what it can't do, including the case the model audit can't see.

    Code and passing tests on GitHub
  4. blue-team-ai, open source

    An LLM in a security pipeline

    Syslog triage where the detection rules and threat-intel matches go first, and a language model only gets what the rules couldn't settle.

    The guardrailTemperature zero and one fixed answer format. Anything off-format gets thrown away. If the API is down, it falls back to the rule results instead of falling over. 36 offline tests with the model client faked.

    Code and passing tests on GitHub
  5. Home server, 2x GTX 1080 Ti

    Running large models on my own hardware

    A 35-billion-parameter model running at home, feeding a chat interface and an agent workspace, on nine-year-old GPUs that current toolkits have given up on.

    The guardrail46 to 71 tokens a second, and every change that got it there was measured. A 48K context passed every normal check, then crashed mid-generation, so now I only ship configs that finish a full-depth run. A script frees up GPU memory when a game starts.

    Write-up: the benchmarks, including what made it worse
  6. CSIT TISC 2026

    A national CTF with AI as a teammate

    TISC is Singapore's yearly solo capture-the-flag: ten levels that get harder as you go. In 2026 AI tools were allowed, as long as you could explain everything they did. I only started on the last day, and cleared four levels before it closed.

    The guardrailSeveral challenges planted fake answers aimed at AI agents, so I treated everything a challenge said as untrusted input. None of the decoys got submitted. I kept notes for each level in my own words, because if I can't explain a step, I don't understand it yet.

    Read my write-up
  7. Self-hosted agent workspace

    Debugging an agent that talked instead of acting

    My local AI agent kept announcing which tools it was about to use, then didn't use any of them.

    The guardrailBefore touching anything, I tested all seven models with a raw tool-call request on both API paths. Every one passed, so the model wasn't the problem. The real causes were two layers up: a hidden text-based tool-calling mode, and tool definitions quietly cut off by a context-size mismatch.

    Write-up: test the layers before theorising
  8. Futures trading bot, paper traded

    An LLM as a bounded decision-maker

    An opening-range-breakout strategy. Code filters the setups, and a language model makes the final yes-or-no call.

    The guardrailDrawdown, daily loss and position limits live in code, whatever the model thinks. One trade a day. A cooldown blocks repeat calls unless the market has actually moved, which also cut the API bill. Every decision gets logged and reviewed twice a week by a separate analysis run.

    Ask me about it
  9. Versed content pipeline

    Agents doing real weekly work

    A scheduled agent pipeline that researches, drafts and builds a week of educational content for Versed, then publishes a page for review.

    The guardrailThe repeatable steps are scripts run by a cheap model. The expensive model gets used once, for the writing. Every research citation is checked against a literature database before a deck can ship. And a few hard rules: no made-up users, numbers or quotes.

    See the products it supports
  10. How this site and Versed get made

    Building with AI coding agents

    I work with AI coding agents the way I'd run a small team: written specs, project notes that stick around, review, and tests that have to pass in public.

    The guardrailNothing ships just because an agent says it's done. Claims on this site were checked against the real repos, which is how five stale tests and one detector that didn't do what its README said got found and fixed.

    The repositories, with green builds