Working demo · built in four days

The assistant you described.
Already working.

You asked for an AI chief of staff that lives on your phone, hears you, checks your calendar, and acts on your behalf with your approval. Instead of telling you I could build it, I built the core of it. This page is the walkthrough.

The scenario, end to end

Walk out of a meeting late. Say one sentence.

"I'm running 10 minutes late for my 3pm with Dana, see if we can push it 30 minutes." The demo below is interactive. When the agent stops for approval, that click is you. Nothing sends without it.
It starts on its own as you scroll, or press Play
2:47
A
Aide Chief of staff · on duty
Listening
Ask Aide anything…
Activity
Receipts

That was a demo. This is the code.

Behind the visuals is a real agent I wrote in TypeScript: Claude choosing tools against a governed tool layer, with a human approval gate enforced in the runtime. Here's an actual captured run against the live Anthropic API, condensed to fit this page. The full transcript ships in the repo.

exec-agent · live run · claude-sonnet-5
you   I'm running 10 minutes late for my 3pm with Dana, see if we can push it 30 minutes.
  → tool get_calendar_events {"date":"today"}
  ← get_calendar_events: 5 events
  → tool find_contact {"query":"Dana Whitfield"}
  ← find_contact: 1 contact match(es)

aide  I found the meeting: your 3pm is "Product roadmap review" with
      Dana Whitfield (Northwind Partners). Heads up: pushing it 30 minutes
      would put it 3:30–4:00, which lands flush against your 4pm Board
      prep hard hold. I'll proceed with the 3:30 shift and text Dana since
      that's her preferred channel, unless you say otherwise.
  → tool move_meeting {"event_id":"evt_004","new_start":"…T15:30:00","tentative":true}

  ⛔ CONFIRMATION GATE · the agent wants to:
     Move "Product roadmap review" from 3:00 PM to 3:30 PM (tentative)
     Approve? [y/n] y
     ✓ approved by user
  → tool draft_message {"channel":"sms","body":"Hi Dana, Alex here. Running about 10 min behind…"}
  → tool send_message {"draft_id":"draft_1"}

  ⛔ CONFIRMATION GATE · the agent wants to:
     Send SMS to Dana Whitfield
     Approve? [y/n] y
     ✓ approved by user
  ← send_message: sent

aide  Done. I moved the 3pm Product Roadmap Review with Dana Whitfield
      to 3:30–4:00 (marked tentative) and texted her to confirm. One flag:
      that new end time lands right up against your 4pm Board prep hard
      hold, so there's no buffer.
  20.1s · 5 model call(s) · 16094 tokens · ~$0.0412
Swipe the panel sideways to read the full run →
5model calls, chosen by Claude, not scripted
20 secone command to task complete
$0.04model cost per completed task
2 / 0approvals required / actions taken without one

The gate isn't a prompt asking the model to behave. It's control flow: the send and the calendar write cannot execute without a human yes, and every read, draft, approval, and send lands in an audit trail. Decline a draft with a note and the agent revises and resends. I'll screen-share the repo and run it live on the call.

How it's built

Why this ships in weeks, not quarters

A frontier model, not a science project

Claude, on the Anthropic API or inside your AWS account via Bedrock. No model training and no RAG pipeline, because your calendar and contacts are live API calls. That subtraction is where the speed comes from.

One governed tool layer, every surface

In the production build, these five tools live on an MCP server (the open standard for agent tools) serving the phone, the web dashboard, and the texting surface alike. Add "book travel" once and every surface gets it the same day.

Trust is code, not vibes

Approval gates the model can't bypass, tentative moves until the other person confirms, and a full audit trail. The same human-in-the-loop pattern my RepBot runs in production today, booking real appointments.

The plan

Three weeks to a real loop. Then a real product.

The full vision (mobile, web, voice, autonomous decisioning, dashboards) is a serious product. The way to de-risk it is to ship the working loop first and let it earn every expansion.

Phase 1 · weeks 1 to 3

The loop is real

80 to 120 hours

Your assistant gets a phone number. Text or dictate to it from anywhere and it runs the late-meeting scenario against your live calendar, gates and audit included, closing the loop when the other person replies. You use it daily from week three.

Phase 2 · weeks 4 to 9

A product, not a demo

200 to 280 hours

The iOS app via TestFlight with true conversational voice under a two-second budget, more scenarios (schedule, cancel, daily brief), per-action autonomy rules, and the web dashboard. Two to five executives.

Phase 3 · weeks 10 to 17

Scale and earned autonomy

240 to 320 hours

Counterparty-aware autonomy, proactive conflict fixing, admin and governance, executive dashboards, and the messaging-platform decision made with data instead of guesses.

Who's sending you this

Kyle Bartlett · Bartlett Labs

I build and ship production agent systems. RepBot, my multi-tenant, HIPAA-ready AI voice receptionist, is the closest living relative of what you're after: it books appointments, sends SMS, and keeps a human approval step in the loop, in production today. Before going independent I was the AI Lead at Anker, where I ran enterprise AI adoption and governance and built over 300 business automations.

I work daily in Claude Code, TypeScript, and MCP, which happens to be exactly the stack this product wants. Everything on this page, the demo, the working agent, and the plan, was built in four days.

More at Portfolio.BartlettLabs.io, or reach me directly at kyle@bartlettlabs.io.

13live production web apps
over 300business automations shipped
7 agentsorchestration framework, over 20 autonomous jobs
4 daysfrom role description to this working demo

Give me 30 minutes.

I'll bring the working code and run it live, walk you through the one architecture decision that shapes everything (what "iMessage" really means for the build, and the three honest ways to get there), and leave you with a scoped plan that puts the working loop on your calendar in two to three weeks.

Straight to my inbox: kyle@bartlettlabs.io