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
Senior AI product engineer · native iOS and macOS
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.
Scene 01 · The run
You describe the problem once. In this run: an iOS chat screen where agents post into the conversation while people type.
Numbered tasks, grouped by what can run in parallel. The hard task goes to Opus, the standard ones to Sonnet.
Each works in its own git worktree, so three branches move at once without stepping on each other.
Finished work is handed to a reviewer agent. Whatever is not ready goes back to the agent that wrote it.
Message list, inline agent cards, composer and keyboard: the same parts that made the real one hard.
The real one went to TestFlight about 20 times in 10 weeks. Keep scrolling for how it was built.
Scene 02 · Exploded view
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.
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.
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.
A compose field, an interactive card and a scroll view all negotiating the same bottom inset is where most of the visible bugs lived.
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
Station 01 · home base
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.
Station 02 · guard rails
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.
Station 03 · the plugs
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.
Station 04 · second opinion
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
Station 05 · agents in the product
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.
Station 06 · the relay
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.
Station 07 · on the Mac
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.
04 · Own products
Binary Gap is where I build my own products. Same crew, same workshop, no client to blame.
macOS app · privacy-first Notably Records and transcribes meetings locally with Whisper and Metal acceleration. Zero cloud dependencies. Built solo: 39.5K lines hand-written across 2,058 commits. notably.binarygap.io
AI tooling · open source gemini-mcp MCP server that lets Claude Code delegate large-context work to Gemini through the Gemini CLI, with Claude model tiers mapped across. github.com/brenoxp/gemini-mcp
iOS and macOS · App Store Random Picker Wheels, lists, dice and teams for random selection, with physics-based animations. Rebuilt in 8 days and published on the App Store. View on the App Store 05 · Job tickets
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.
A code-verified list of everything blocking your app from passing App Store review, with each item priced to fix.
Your app is stuck in TestFlight. I get it approved and live for a fixed price, and I carry the rejection risk.
The chat screen for an AI product, built native: it stays anchored while replies stream, renders agent-generated cards inline, and does not fight the keyboard.
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.
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
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.
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.
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.
May 2018 to Jun 2021 · 3 years 2 months
Fleet diagnostics platform with OBD-II and Bluetooth integration.
Jul 2017 to Sep 2018
Feb 2017 to Jul 2017
Jul 2016 to Feb 2017
Feb 2015 to Jun 2016
2014 to 2015
07 · Writing
Real-time Whisper on-device: chunk size, VAD, and quantization, with numbers Benchmarking whisper.cpp for live meeting transcription on Apple Silicon: the ~1.6s latency floor, why VAD is a 28% win, why q5_0 is free, and why CoreML wasn't worth it. When SwiftUI stops being enough: rebuilding a chat message list in UIKit Why a chat list in a shipping iOS app moved from ScrollView to a y-inverted UICollectionView, the four animation systems you have to silence separately, and a keyboard bug that took four attempts.08 · Your turn
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.