Michael Surtees
Signal — the Now page, full briefing
Signal
2026 · Built with Claude Code
— a personal AI health agent I built and use daily.

A personal AI agent built on years of Whoop, Strava, and Apple Health data. Looks at what's happening to my body, finds what's worth noticing, says it in plain language. Used every morning, on real data.

01

What I set out to build

I heard Greg Brockman on a podcast describing AI at its best as a team of doctors in your pocket — there for you, thinking continuously about how to help. The phrase stuck. I read it less as inspiration and more as a design problem.

Most health apps display data. A doctor pays attention. Those are different products.

I had been tracking myself for years — Whoop, Strava, Apple Health, all collecting data I rarely looked back on. I was curious to use that data as a way to learn what it would actually mean to have a personal doctor in my pocket. I built Signal in conversation with Claude Code. What follows is the result — and, where it helps, the conversations that produced it.

02

The daily briefing

The home page — called Now — opens with one sentence: the agent's headline observation for today. On this Friday morning it surfaced a pattern no individual tracking app would produce: skin temperature, resting heart rate, and heart rate variability were all drifting the same direction at once — early illness signs. Three separate metrics, one conclusion, before any single number looked alarming on its own.

Below the headline, the Read paragraph does temporal work that's easy to miss. "Sleep debt now governs — the planned 70-minute ride today will feel substantially harder than yesterday despite calmer metrics." The phrase despite calmer metrics is doing real work — the agent refusing to be reassured by a surface that reads fine, insisting that accumulated sleep debt is the variable that decides today, expressed as natural prose rather than meta-commentary.

This voice didn't appear by default.

Me: "Give the agent permission to make recommendations when the data is unambiguous. Today's data is unambiguous — sleep debt, HR drift, three consecutive elevated rides. The Read should be willing to say so."

Claude Code: "Be careful about boldness and continuity of voice. The agent reasons like a doctor but hedges like an app. The next move isn't structural, it's prompt-level. Give the agent voice-level continuity — a sense that it has been observing you across days, expressed in how it writes, not just in metadata."

Three iterations later, the difference between "Recovery is moderate" and "Sleep debt now governs the session" was the difference. Voice is a designed object. The design happens in prose.

Signal — Now page on mobile
fig.01Now · mobile
03

Long-term context, surfaced selectively

Below the daily Read sits the long-term context layer. Connects to TodayWalking HR has shifted -16.0 bpm this past month — could be improved fitness or a slower walking pace. The agent surfaces ambiguity rather than picking a story. Most days this section is quiet, by design. Long-term observations only surface when they actually inform today's interpretation.

The Watch List below operates by the same principle. Each item has a state (W watching, N notice, F fading) and a day count. They don't fire as alerts; they have lifecycles. Anything competing for the user's attention has to earn its place.

Now page — long-term context layer (CONNECTS TO TODAY and KEEPING AN EYE ON)
fig.02Detail · CONNECTS TO TODAY + KEEPING AN EYE ON

The decision to combine the old two-label treatment into the single "CONNECTS TO TODAY" header was the result of seeing three prototypes the AI built side by side.

Me: "Create a prompt to show a proto of each of these to review."

Claude Code: "Good move. Seeing the three side by side is way better than deciding from descriptions."

The AI built all three competently. The choice — which one was right — was mine alone. That moment clarified the division of labor: the AI does competent execution across parallel possibilities; the designer picks which possibility is right for the product.

04

Asking deeper questions

Signal isn't chat-first, but chat exists as a depth mechanism. When the briefing surfaces something, the user can tap to ask more. The chat opens with suggested questions drawn from today's data, so the user rarely starts from a blank prompt.

Chat overlay — suggested questions about today
fig.03aChat · the prompt, pre-seeded from today

The agent's answers cite specific data points by number. "You've slept 6.2 hours but need 10.7 — a 4.5-hour gap — and over the past 7 days you've accumulated roughly 28 hours of sleep debt." Each cited claim has a numbered footnote linking to the underlying record.

Chat overlay — answer with cited sources
fig.03bChat · answer with sources cited

The same flow on mobile — the question, then the answer with its citations — proving the pattern holds in the place most of these checks actually happen.

Chat — suggested questions on mobile
fig.03cChat · mobile prompt
Chat — answer with cited sources on mobile
fig.03dChat · mobile answer

The cited-sources pattern is one of the more important design moves in the product. An agent that asserts without showing its math is hard to trust. An agent that asserts with a footnote is easier to evaluate. The user can decide whether the evidence supports the conclusion, rather than just trusting the prose.

05

Time horizons deserve different surfaces

An agent paying attention across time can't live on a single screen. Signal has four surfaces, each calibrated to a different rhythm of attention. The labels themselves took three passes to get right.

Me: "If it is called Signal and I'm currently thinking of Today, Week, Drift, Log, what could be made to make it more specific?"

Claude Code: "If the doctor-in-pocket vision is fundamentally about attention across time, the navigation could name the attention horizons explicitly. Now / Recent / Long View / Memory. Memory is particularly nice for the log because it's true — the page literally is the agent's memory of its own observations."

Each label names what the agent is paying attention to at that scale, not just what time period the page covers.

Now — mobile
fig.05aNow
Recent — mobile
fig.05bRecent
Long View — mobile
fig.05cLong View
Memory
fig.05dMemory
Recent — desktop
fig.06Recent · weekly synthesis

Recent is the weekly synthesis. The strain-and-recovery arc, the weekly Take organized into load/recovery/sleep threads, the resolved watch items, the cross-week swimlanes. Open on a Sunday — or, in this case, a Friday when the weekly arc has become the dominant story.

Long View — desktop
fig.07Long View · multi-month

Long View is the multi-month picture. Resting heart rate over 90 days. Walking heart rate trending down with the ambiguity acknowledged in plain text. VO₂ Max as a sparse 24-month line. Mindfulness as a 12-week calendar heatmap.

Memory — desktop
fig.08Memory · the agent's transcript

Memory is the agent's working transcript. Every check, every observation, every table. The principle: agents users can't inspect are agents users can't trust.

06

The control surface

Most AI products either hide all their controls or expose so many they're unusable. Signal resolves this by separating what the agent generates from what gets surfaced at all. Each card has an AI/DATA pill at the top — AI controls govern generation (tone, length, voice continuity); DATA controls govern the deterministic rules that decide what qualifies for the agent's attention.

AI Settings — the control surface
fig.09AI Settings · control surface

When you change a setting, you preview the effect against current data before committing. Current / Preview / Diff. The save button reads "Looks good — save" instead of "Save" — framing the commit as confirmation that the preview looked right, not as a default action.

This page is where the labeling discipline of the rest of the product compounds.

Me: "Change Today's Brief to Today's Signal, change Context to Background, change Watch List to Keeping an Eye On, change Today's State to Today in Context, change Inputs for today's analysis to data behind this, change Yesterday to yesterday in context."

Claude Code: "Good batch. A clear voice direction shows up across these renames. The labels are getting warmer, more human, and more interpretive. The mixed-casing pattern — Title Case for prominent sections, lowercase for supplementary ones — is actually a smart hierarchy decision."

AI products default to a system-y register because that's what their training data sounds like. Pulling them toward warmth has to happen explicitly, and it compounds across the product.

07

What's not solved

Updates on the horizon.

A feedback loop. The agent has no way to know whether its daily reads are landing. A thumbs-up/down stored over time, fed back into the prompt as calibration, would close the most important loop the product is missing.

Persistent life-context. The agent knows my training routine and today's plan, but doesn't know about work stress, travel, or illness. A small notes field for non-physiological context would substantially improve the daily reads on weeks when something unusual is happening.

08

How this was built

The whole project was specified in prompts that read more like rigorous design specs than instructions — scoped, with explicit constraints, anticipated failure modes, and "don't do this" sections that were often more important than the positive direction.

The exercise gave me real insight into how design iteration through prompting produces a faster path to a working product. The artifacts are screens; the work is in the dialogue.