Senior AI product engineer · native iOS and macOS

Agents talk.
I build the app they talk in.

I spent the last ten weeks as the sole iOS engineer on a venture-backed agent-native team chat product, where Claude Code and Codex agents post straight into the conversation. My own workshop runs on agents too: Claude Code, eight MCP servers I wrote, 33 skills, hooks and subagents.

  • 10+ years shipping iOS
  • UTC-3 overlaps US hours
  • US LLC contracts through Binary Gap

Scene 01 · The run

How a job moves through my crew.

  1. A brief lands.

    You describe the problem once. In this run: an iOS chat screen where agents post into the conversation while people type.

  2. The orchestrator writes the plan.

    Numbered tasks, grouped by what can run in parallel. The hard task goes to Opus, the standard ones to Sonnet.

  3. Subagents take one task each.

    Each works in its own git worktree, so three branches move at once without stepping on each other.

  4. Nothing merges unreviewed.

    Finished work is handed to a reviewer agent. Whatever is not ready goes back to the agent that wrote it.

  5. The pieces snap together.

    Message list, inline agent cards, composer and keyboard: the same parts that made the real one hard.

  6. Then it ships.

    The real one went to TestFlight about 20 times in 10 weeks. Keep scrolling for how it was built.

Scene 02 · Exploded view

The real one, taken apart.

  1. An iOS client where the agent draws the UI.

    Ten weeks as the sole iOS engineer on a venture-backed agent-native team chat product. Agents and people share one conversation, so the app renders whatever an agent puts there, while it is still being written.

  2. Rows change height while you look at them.

    Streamed text grows, cards expand, blocks collapse. The list stays anchored to the newest message without shoving content out from under a thumb that is already dragging.

  3. The card is state, not a view.

    A prompt can be answered, abandoned, superseded by the agent finishing, or delivered twice on a reconnect. Every one of those was a bug before it was a behaviour.

  4. The keyboard is a third participant.

    A compose field, an interactive card and a scroll view all negotiating the same bottom inset is where most of the visible bugs lived.

  5. Ten weeks, one engineer.

    Message list rebuilt on an inverted collection view, cards inline in the transcript, and the release engineering to get builds out. Read the case study

Scene 03 · The workshop

The tools the crew runs on.

Station 01 · home base

Claude Code

Where every run starts. I extend it the way other people extend their editor: skills for repeat workflows, plugins to ship them, commands for the chores.

  • 33custom skills
  • 12self-authored plugins
  • 7slash commands

Station 02 · guard rails

Hooks

Event-driven hooks on four lifecycle events. PreToolUse checks shell calls before they run and stops the dangerous ones. UserPromptSubmit and Stop keep a running handoff file; SessionStart restores it.

  • 4lifecycle events
  • 19utility scripts

Station 03 · the plugs

MCP servers

Eight servers written from scratch so agents can search, run code, read old sessions and touch my reminders. Two of them drive a real browser over a shared automation library.

  • 8servers
  • 2,614LOC TypeScript
  • 887LOC Python

Station 04 · second opinion

Gemini CLI

gemini-mcp wraps the Gemini CLI as an MCP tool, so Claude can hand a large-context job to another model family and keep working. Claude model tiers map straight across. Open source on GitHub

  • 569LOC TypeScript
  • 3tiers mapped

Station 05 · agents in the product

Claude Code SDK and Codex

On my last contract the agents were the users. The product ran Claude Code SDK and Codex sessions in the cloud, and they posted straight into the team's conversation. My iOS app rendered what they posted, while they were still posting it.

  • 2agent runtimes
  • 1shared conversation

Station 06 · the relay

Subagents and handoffs

delegated-agents runs parallel background agents that hand off through files instead of chat. live-handoff keeps a running handoff file, so when one session's context fills up, a fresh one picks up exactly where it stopped. Watch the courier.

  • 2relay skills
  • 1running handoff file

Station 07 · on the Mac

On-device and local

whisper.cpp with Metal transcribes meetings on-device in Notably, no cloud round-trip. container-mcp runs agent code in isolated Apple containers. super-claude-code serves Claude Code agents as MCP tools and through an Ollama-compatible endpoint.

  • 0cloud round-trips to transcribe
  • 3server transports

05 · Job tickets

Four engagements, scoped and priced up front.

Each one has a fixed deliverable, a fixed price and an end date agreed before the first commit. Tell me the problem and I will say which of the four it is, or that it is none of them.

JOB-015 business days

App Store Release Readiness Audit

A code-verified list of everything blocking your app from passing App Store review, with each item priced to fix.

  • Info.plist usage descriptions, privacy manifests
  • Entitlements, code signing and provisioning
  • A written blocker report with a fix estimate per item
$2,500 – $4,000For teams with a TestFlight-only app and no iOS specialist.
JOB-023 – 4 weeks, part-time

TestFlight to App Store, Shipped

Your app is stuck in TestFlight. I get it approved and live for a fixed price, and I carry the rejection risk.

  • Everything in the audit, plus the fixes
  • Screenshots, store metadata, a Fastlane submission lane
  • One submission and up to two resubmissions
$9,000 – $14,000For pre-launch founders and teams whose contractor vanished mid-release.
JOB-042 – 3 weeks

Production MCP Server for Your Product

Your API exposed to Claude, Cursor and any other MCP client as a real server with auth, error handling and tests, not a weekend prototype.

  • Tool surface designed against your API
  • TypeScript or Python, with auth and request serialization
  • Test suite, install docs, a demo run against a real client
$6,000 – $10,000For developer-tool, API and platform teams.

Terms Scope agreed in writing before work starts. One figure before you commit. Remote from Brazil, contracting through a US LLC, with hours that overlap the US working day. All the details

06 · Service log

Ten-plus years of commits, newest first.

Over seven of those years in two long roles, at Pitstop and unspun. Lived in Canada from 2017 to 2024; now in Brasília, working US hours.

  1. 9f2c1abHEAD → now

    Binary Gap LLC Independent developer · Remote

    Sep 2025 to present

    Own products (Notably, Random Picker) plus contract engineering. Most recently sole iOS engineer on a venture-backed agent-native team chat product, Jun to Sep 2026.

  2. 4e81d07

    unspun Senior iOS Developer / Full-Stack Engineer · Remote, San Francisco

    Oct 2021 to Sep 2025 · 4 years

    FitOS 3D body scanning with LiDAR. An AI-powered garment measurement extractor on pgvector, Cloud Functions, Shopify and Stripe integrations.

  3. b73a5c2

    Pitstop Senior iOS Developer · Toronto

    May 2018 to Jun 2021 · 3 years 2 months

    Fleet diagnostics platform with OBD-II and Bluetooth integration.

  4. 1d09e64

    Virtual Salt iOS Developer · Waterloo

    Jul 2017 to Sep 2018

  5. c55f3e8

    Wiz Soluções iOS Developer · Brasília

    Feb 2017 to Jul 2017

  6. 70ab2f1

    Freelance Web and iOS · Brazil

    Jul 2016 to Feb 2017

  7. e3c8d90

    Thriade Consultoria Full-stack Developer · Brasília

    Feb 2015 to Jun 2016

  8. 0000001root

    Apple Developer Academy iOS Developer · Brasília

    2014 to 2015

08 · Your turn

Hand off the brief.

Describe the problem once. I will tell you which engagement it is, what it costs and when it ships. Remote from Brasília, UTC-3, contracting through Binary Gap LLC, a US company.