Hearsay turns what you say into work. Bee (on an Apple Watch or a Bee device) transcribes what you say during the day. Hearsay listens to that stream, extracts the commitments buried in it — "after lunch I need to fix the login redirect bug", "remind me to email Professor Kim tomorrow at ten" — and turns each one into a Bee todo, a GitHub issue, or a note, with a macOS notification so you know it landed. A companion Claude Code skill lets your coding agent pick those issues up with the spoken context attached.
Built for the Bee track of the Build, Ship, Shape: Amazon Developer Hackathon (October 2026).
Apple Watch (Bee app) ──► Bee cloud transcription
│
▼ bee stream --json --types new-utterance,...
hearsay watch
│ buffers utterances per conversation
│ (20 s of silence, or 6 utterances)
▼
LLM intent extraction (claude -p │ Gemini │ fake)
│ {type: issue|todo|note, title, due, quote}
┌───────────────┼──────────────────┐
▼ ▼ ▼
bee todos create gh issue create ~/.hearsay/log.md
└───────── macOS notification ─────┘
Everything the project knows about you comes from Bee at runtime: the live stream (bee stream),
recent conversations (bee now), and the todo API (bee todos). Nothing is mocked in normal use.
- Node.js 20+ (tested on 24), no npm dependencies
- Bee CLI:
npm i -g @beeai/cli, thenbee login(enable Developer Mode in the Bee iOS app first: Settings → tap Version five times) - One LLM backend:
claude(default): the Claude Code CLI on your PATH, logged ingemini:GEMINI_API_KEYsetfake: keyword heuristics, offline, for tests and demos
- Optional: GitHub CLI logged in, for issues
git clone https://github.com/1jsjs/hearsay && cd hearsay
npm link # puts `hearsay` on your PATH
npm test# Live: listen to Bee and act on what you say
hearsay watch --repo 1jsjs/my-project
# Same, but only print what it would do
hearsay watch --dry-run
# Catch up on the last two hours of conversations (no live stream needed)
hearsay replay --minutes 120
# Try the extractor on a sentence
hearsay extract "After lunch I need to fix the login redirect bug"
# Run the full pipeline against a bundled sample stream, offline
HEARSAY_LLM=fake hearsay watch --dry-run --input fixtures/live-shape.jsonl --window 1| Option / env | Meaning | Default |
|---|---|---|
--repo, HEARSAY_REPO |
GitHub repo (owner/name) that receives issues. Without it, issues become Bee todos |
— |
--window |
seconds of silence before a conversation window is processed | 20 |
--max |
utterances that force processing early | 6 |
--input |
JSONL file to replay instead of the live stream | — |
HEARSAY_LLM |
claude, gemini or fake |
claude |
HEARSAY_HOME |
where state, raw events and the log live | ~/.hearsay |
State (state.json) remembers which utterances were handled and the last 50 titles, so restarting
or replaying never files the same task twice. Every raw stream event is appended to events.jsonl
for debugging.
skills/hearsay/SKILL.md teaches Claude Code to read your recent Bee context through the Bee MCP
server (bee mcp connect claude-code) and start on the issues Hearsay filed. See that file for setup.
Hearsay only reads your own Bee account through the official CLI. Transcripts are sent to the LLM
backend you choose for extraction and are otherwise kept locally under ~/.hearsay.
Tell the people around you that Bee is listening.
MIT