-
-
English is my work language, so I built my own speaking coach. Bee hears my day, and Spee sends one cue to my wrist when I slip.
-
Five unsure words in two minutes, so Bee carried one cue to my wrist. The Fire TV shows why, and when it landed: 30.1 s after the line.
-
Live coaching stays off until I ask Alexa. When it is on, the TV shows each cue as it fires. No cue in a conversation's first minute.
-
After the conversation, a short recap on my wrist: what ran above my usual, and my pace. Bee words it in its own voice.
-
Real data as of Oct 22. Filler "like" fell from 2.8 to 1.8 per 100 words after practice, and Spee still says no change. A pilot, not proof.
-
Bee grades every try, not the assistant. The "Not yet" overrule in my film comes from the simulator; the pass on my own Fire TV is real.
-
Left, the simulator with synthetic data: the assistant heard a pass, Bee heard "um", so not yet. Right, a real line on my Fire TV: passed.
-
Bee on my Apple Watch transcribes my day and tags my lines. Spee compares them with my usual and answers on my wrist, in Alexa and Fire TV.
-
vega-voice-bridge, the open-source part: I talk in Chrome, the words land on a Fire TV Stick, and the TV says the reply.
Inspiration
English is my second language, and my work language. Videos, courses and workshops help, but what helps most is feedback while I speak, and I never had it. I already wear Bee on my Apple Watch, so it hears my real workday: meetings, work talk, casual chats. I wanted a coach that stays with me through it, learns how I say things, tells me what to change while it still matters, builds my practice from my own lines, and checks whether the practice changed anything.
My own numbers show why. In my real stand-up on October 19, about one word in ten was a filler, 5.4 in every 100 were "like", and Bee counted 11 unsure words, such as "I think". Nobody had told me.
What it does
Spee is a speaking coach that stays on my wrist through the workday, and builds my practice from my own lines, compared with how I normally speak. Bee listens. Spee tells me what to change. I do the talking.
- It learns how I usually speak. From every line Bee tags as mine, plain code counts unsure words ("I guess", "kind of"), fillers ("like", "um"), vague answers ("that thing") and starting over ("the the"), plus my pace and any turn of 90 seconds or more. Each is compared with my usual for that setting: a meeting, work talk or casual.
- It tells me once, on my wrist. When I say unsure words or "like" more than I normally do, Bee carries one short cue to my Watch as a to-do alarm, 20 to 30 seconds after the line. Then it stays quiet: 3 minutes between nudges, at most 6 an hour, none at night. Live nudges are off until I turn them on.
- It recaps each conversation. What ran high against my usual, my pace, and one suggestion: one of my own lines said plainly.
- I practise with Alexa. "Alexa, ask Speech Coach to quiz me" reads one of my own fumbled lines, and I say it again. "How did I do?" gets the grade from the line Bee tagged as me, not from Alexa's preview: if Alexa heard a pass and Bee heard "um", Bee wins.
- Fire TV is where I see it. My wrist only buzzes and Alexa only talks, so the TV is the one screen that shows my week per habit, the line I'm drilling, and Bee's verdict on it: "You said it", then "Checked by Bee", then "Passed" or "Not yet". It also shows each nudge with its timing and the before/after check. It's a Vega OS app on a real Fire TV Stick, and it's the multi-modal part of Spee: I say the line to my phone or to Alexa, and the TV shows what Bee heard.
- It checks itself. Before my first practice, on October 16, I pre-registered two habits to practise, unsure words and the filler "like", and one to leave alone, starting over. Progress compares my real speech before and after, with 95% intervals, and says "too little data" until each side has 400 words. It is a two-tier pilot, not proof.
What makes it different: Spee is with me through the workday, not in a lesson. While Bee records, it hears my real meetings, work talk and casual chats, and with live coaching on it can nudge my wrist mid-conversation. My practice plan comes from my own data: the drills are lines I actually said, they come back on a spaced schedule (sooner when I fumble one or the habit shows up again), and every rate is checked against my own usual for that setting. Spee only coaches me: it keeps a line's text only when Bee tags it as mine, and other voices, and lines Bee doesn't tag, are only word counts; on October 16, Bee's live tag named me on 8 of 9 lines. The wrist cue isn't on a timer: it comes when I slip into a habit more than I normally do, at least twice my usual rate and never fewer than 3 unsure words or 4 "like"s inside 2 minutes. That gets one cue, then at least 3 minutes before any other nudge and 10 before the same one again.
For agents: a speaking-coach Agent Skill
skills/speaking-coach/SKILL.md lets an agent ask how my speaking is going, warm me up before a meeting, and send one if-then cue to my wrist 8 to 12 minutes before it. The cue goes through the same capped wrist queue and never carries the meeting's title.
Try it without a Bee
npm run setup && npm run demo starts every surface on synthetic data with a Bee event replay. No accounts, no keys. Every screen labels it SYNTHETIC DEMO DATA.
How we built it
Apple Watch (Bee) --bee stream: lines tagged as me--> Coach hub (Node, one port)
Coach hub --Bee to-do with an alarm--------> Apple Watch
Alexa skill "Speech Coach" <--/alexa--> Coach hub
Any MCP client, /sim/ <--/mcp---> Coach hub
Fire TV app (Vega) <--vega-voice-bridge+HTTP--> Coach hub
Phone page (drills, meters) <--vega-voice-bridge-----> Coach hub
- Bee is the input of record. The hub runs one
bee streamthrough the Bee CLI and keeps only lines Bee tags as the wearer. Other voices become word counts and are never stored. Bee to-dos with alarms carry nudges, recaps and cues to the wrist. - Code decides. Fixed word lists and timing measure the habits. The grader (
src/hub/grade.ts) is deterministic and names the rule behind every verdict. A policy module decides when to nudge from numbers only. - Alexa. A custom skill with two-turn drills and coaching questions, deployed with the ASK CLI and tested in the Alexa iPhone app. Alexa+ add-ons are partner-gated, so the same tools are also an MCP server;
/sim/is a browser MCP client with a keyword router standing in for Alexa+'s model. - Fire TV. A React Native for Vega app and a web TV built from the same views; a sync check keeps the 27 shared files byte-identical. It runs on the Vega Virtual Device and on a real Fire TV Stick.
- Phone. A web page for drills and practice meters (volume, pitch range, pace, pauses). Bee stores no audio, so pitch exists only here.
- vega-voice-bridge. Vega doesn't give apps speech-to-text or text-to-speech, so a TV app can't hear me. I needed that for the drill, so I built vega-voice-bridge: my phone's browser listens, the hub grades, and the TV shows the result. Spee's drill runs on it, and I published it separately (MIT, on npm), with a speak-back half too, so any Vega app can do the same.
- Amazon Bedrock. Offline, Claude drafts practice lines for my vague answers. Claude Haiku 4.5 can reword a recap (off by default); code checks its output and keeps the template if anything fails. The counting, grading and nudge files import no model client, and a test checks that.
- Honesty and privacy.
FACTS.mdlists every number the docs repeat, and a test fails when a doc drifts from it. A leak check scans every committable file for other speakers' words.
Challenges we ran into
- Alexa has 8 seconds, Bee needs more. A drill line can take up to about 20 s, because Bee may merge it with your next words, and Alexa must answer within 8 s, so the verdict comes on the next turn.
- The wrist cue is never instant. Bee needs about 5 seconds just to tag a line as mine, and the alarm adds more. On camera the cue reached my wrist about 30 seconds after the line, so Spee sends one cue each time I slip instead of a running commentary.
- Bee turned some of my French into English. I started with French drills. On my English-primary account, parts of my French came back translated, and most of my scripted mistakes never reached the transcript. I moved to English habits and pre-registered them before any practice.
- Mishearings look like mistakes. Bee transcripts carry no confidence and take no custom vocabulary, so "card" came back as "car". The grader matches words fuzzily and by coverage, and cuts the extra sentence when Bee merges my next words into the line.
- Who said it. Grading needs my lines only. Bee's live stream carries a wearer tag that the realtime docs don't describe. It named me on 8 of 9 lines when I measured it, so the coach uses it instead of guessing.
- Getting the TV to hear me. The phone is the microphone, through my bridge. On the Virtual Device, WebSocket frames over about 1.4 KB were dropped on the NAT path, so I use a reverse port forward. The real stick answered the CLI only after I switched its Connection Mode to TCP/IP.
Accomplishments that we're proud of
- The grade comes from Bee, not the microphone, and the screen shows when Bee overrules the preview.
- It runs on my real devices: Bee on an Apple Watch from Canada with no Bee hardware, Alexa in the iPhone app, and a Fire TV Stick on Vega OS.
- The before/after check was written down before the data, and it is allowed to say "no change".
- A friction log of 35 entries, and a docs fix filed upstream to Amazon's devices agent skills.
What we learned
- Write the test down before the data. Two practised habits against one control is one tier short of the standard design, so I call it a pilot.
- Latency shapes the product. Bee's delay is why the nudge comes once and the drill takes two turns.
- Wearable feedback on unwanted words isn't new; a 2025 study showed it helps. What I added is my usual for each setting as the yardstick, Bee as the grader, and drills from my own lines.
What's next for Spee
I want Spee to become a professional speaking coach that is on your wrist all through the workday: it hears how you speak at work, tells you one thing at the right moment, builds your practice plan from your own lines and patterns, and checks later whether it stuck. Two things come next:
- Coaching structure, not only words. Today Spee counts what I say: fillers, unsure words, pace, and how long I talk without a break. The next step is how I say it: did I lead with the point, or bury it after two minutes of context? Bee already tags which lines are mine and when each turn starts and ends, so Spee can measure that from the same data and drill it the same way, with my own lines.
- Language-learning coaching. My first test was a French script with planted learner mistakes, but Bee smoothed most of them out, so Spee started with English. If Bee keeps a learner's mistakes as they were said, the same loop works for a second language: Spee spots the mistake I keep making, Alexa drills me on my own sentence, and the TV shows whether it stopped coming back.
Built With
- alexa-skills-kit
- amazon-bedrock
- amazon-cloudfront
- amazon-polly
- amazon-web-services
- apl
- apple-watch
- ask-cli
- aws-cdk
- aws-cloudformation
- bee
- bee-cli
- fire-tv
- model-context-protocol
- node.js
- react
- react-native-for-vega
- react-native-web
- typescript
- vega-os
- vega-sdk
- vega-voice-bridge
Log in or sign up for Devpost to join the conversation.