Risks raised in meetings, from your Risk flags and, for groups with “Add to Risk Log” on, auto-extracted from transcripts. Approve them on the meeting.
Closed (0)
Cross-team dependencies (from → to) raised in meetings, from your Dependency flags and, for groups with “Add to Dependency Log” on, auto-extracted from transcripts. Approve them on the meeting.
Closed (0)
Completed (0)
Rule (2026-09-08): processing waits for both the Fireflies and Hummingbird recordings of a meeting to be confirmed uploaded before generating anything - an unpaired meeting sits for at least 10 minutes first so its other half has time to land. Use "Reprocess" on a meeting to skip the wait. See the Automation tab for details.
One prep sheet per group, sorted by its next standing meeting - each pulls in the last meeting's recap plus anything relevant discussed elsewhere, ready to send before the meeting.
Default Group
Settings for meetings that aren't assigned to any group ("No Group"). Same options as a real group, minus scheduling and invitees.
Knowledge Base Categories
Standing knowledge bases (e.g. "Role & Team Onboarding") or group-owned ones (e.g. "Testing & QA Process"). Check a category on a group above to have that group's meetings feed it.
Live RAD
Auto-extracted every ~15s + your Risk/Action/Dependency flags. Unreviewed; the meeting summary is authoritative.
Risks
Action Items
Dependencies
Account Usage
Everything this project runs on, with live usage against each free-tier limit - so you never have to open another dashboard to know where you stand.
To unlock the numbers marked "connect a token" below
- Cloudflare API token (one token → real API requests, database size, database rows, R2 ops). Cloudflare dashboard → My Profile → API Tokens → Create Token → "Create Custom Token". Permissions:
Account·Account Analytics·Read, andAccount·D1·Read, andAccount·Workers Scripts·Read. Then:npx wrangler secret put CF_API_TOKEN(andCF_ACCOUNT_IDif not already set). - Fireflies API key (optional → transcripts + minutes used). Fireflies → Settings → Developer → copy the API key. Then
npx wrangler secret put FIREFLIES_API_KEY.
The Claude routine's actual token/session usage can't be metered - a Pro/Max subscription has no usage API. What the Worker CAN track is how often it fires the routine at all (see the "Claude routine fires" card below) - a hard-capped, self-reported count that catches a runaway-firing bug before it becomes a surprise usage limit.
Accounts & Services
Cloudflare Free tier
Workers (the API), D1 (database), R2 (audio relay bucket), one account. Live D1 + R2 meters below.
OneDrive (Microsoft Graph) Bundled
Permanent store for every meeting's .docx + audio. Covered by your existing Microsoft/Office plan; Graph API itself is free at this volume. Live quota meter below.
Microsoft Entra ID app registration Always free
The identity registration ("Hummingbird Sync") that lets the Worker reach your OneDrive. Permanently free, no cap you can reach - app registrations don't cost anything and the only limits are Microsoft Graph request throttling (per-app rate limits, not a quota, no billing). This app makes a handful of Graph calls per sync; it's nowhere near any throttle. Nothing to meter, nothing to watch.
Groq API Free tier
Whisper transcription (accuracy pass + near-live chunks) and the live RAD extraction (gpt-oss-120b). ~8 hrs audio/day free; no billing configured. No usage API; check the console.
Claude (Anthropic) cloud routine Bundled
Writes enhanced summaries / action items / flag proposals. Draws on your Claude Pro/Max plan usage, not billed API calls.
opencode Zen (Nemotron 3 Ultra) Always free Dev tool
Default model for opencode (the free backup coding tool). NVIDIA's 550B-param model, served free through opencode's own "Zen" gateway - no separate account or card. Labeled "trial use, limited time" by NVIDIA/opencode; could be pulled or start requiring payment without notice, in which case it just errors (no card is on file anywhere, so it can't silently bill). Falls back to Mistral/Gemini below if it ever stops working.
Mistral API Free tier, limited Dev tool
opencode fallback. Mistral's broad "all models free" tier no longer exists on this account - only mistral-small-latest is reachable for free; mistral-large-latest 403'd ("not available in your subscription tier"), and Mistral's pricing pages no longer describe a clear free allowance for it. Not part of the product, and not Groq.
Google AI Studio (Gemini) Free tier Dev tool
Second opencode fallback, picked manually via /models (google/gemini-3.6-flash, or gemini-3.x-pro for a harder task, ~100/day cap). Free tier: no card, resets midnight Pacific, trains on free-tier data. Exact Gemini model names get sunset by Google on their own schedule (no "-latest" alias) - expect to swap this string again eventually if opencode errors on it.
willowwhse.com, domain + shared web host Paid (flat)
Hosts this site (FTP to ftp.willowwhse.com), the ASR/diarization model archives, and /sd-wasm/. Provider not recorded here; check its cPanel for bandwidth. Domain registration renews separately.
Oracle Cloud (diart VM) Always Free
Real-time speaker diarization for the website's Live Transcribe (diarize.willowwhse.com) - an Ampere A1 VM (4 OCPU/24GB, the full free ARM allowance) running diart. $0 as long as usage stays within Always Free limits (not upgraded to Pay As You Go). Falls back to the old WASM rolling-window diarizer if this VM is unreachable.
HuggingFace Always free
Hosts the pyannote speaker-diarization models the diart VM downloads on startup (segmentation + embedding). A free account and a read token, no card. Not a running cost - the models are downloaded once and cached on the VM.
Fireflies.ai Paid (separate)
Records your actual meetings and exports summary/transcript .docx into OneDrive, which this app reads. Its own plan, not tracked here.
Tailwind + jsDelivr CDNs Always free
Public CDNs for the CSS runtime (cdn.tailwindcss.com), html-docx-js, and lamejs. No account, no bill, no quota. jsDelivr is a free open-source CDN with only fair-use abuse limits (millions of requests before anything trips); the Tailwind Play CDN is free forever. A project this size is invisible to both. Nothing to watch. (The only reason to move off the Tailwind CDN would be page-load speed, not cost.)
Live Metered Usage
Loading...
Automation & Processing
How meetings get turned into Knowledge Base entries, action items, risks, dependencies and the enhanced recap - what runs on a schedule, what you can trigger by hand, and what each one touches. This page is a static reference; it is kept in sync with the code by hand.
Last updated 2026-09-11: live speaker diarization during
Live Transcribe now streams to a real-time diart server on an Oracle Cloud VM
(diarize.willowwhse.com, see the Usage tab's infrastructure list) instead of
waiting on the rolling-window WASM diarizer - it only falls back to that WASM path if the VM
doesn't answer within 4 seconds.
Two schedules
1. The cloud routine (“Hummingbird Meeting Sync”) runs
on cron 0 11 * * 1-5, which is
6:00 AM US Central, Monday to Friday, once a day.
It does the full synthesis pass (Knowledge Base, action items, recap, risks, dependencies,
flag review) and draws on the Claude plan subscription, not billed API usage. Weekends it
does not run.
2. A worker cron runs
*/10 * * * *, which is
every 10 minutes, every day. No AI, nothing billed. It scans
OneDrive for new or changed files and runs meeting pairing. If a meeting just paired (its
Fireflies and Hummingbird recordings both confirmed present), it fires the cloud routine
immediately. Otherwise it waits - see the 10-minute rule below.
Business Hours (2026-09-09, Admin tab): the worker cron's unattended firing above only happens inside the hours configured there (off/24-7 by default). It never touches anything YOU trigger directly (Submit, Reprocess, approving a flag, the manual buttons below) or the separate 6 AM daily cloud routine.
Rule (2026-09-08): a new meeting is never processed the instant its first recording lands. The routine only fires right away once BOTH the Fireflies export and the Hummingbird recording are confirmed uploaded to OneDrive (pairing succeeds). If only one side has landed, the worker cron waits until the meeting has sat unprocessed for at least 10 minutes before generating anything, giving the other side time to arrive - this replaced firing instantly the moment any file synced, which once generated a summary from only the Fireflies (or only the Hummingbird) side of a meeting before its pair had finished uploading. If you don't want to wait, use “Reprocess” on the meeting to run it right now with whatever has landed so far.
Which manual action should I use?
- Nothing, usually. The 10-minute worker cron already pulls in new meetings and fires a run. Only reach for a button when you are impatient or re-running.
- “Run File Sync” (top nav). Checks OneDrive for new files right now and adds them to the list. Does not process them by itself. Cheap. The only reason to click it is to skip the up-to-10-minute wait for the cron.
- “Reprocess” (on one meeting). Rebuilds that one meeting's KB, action items and recap. The right tool when a single meeting looks wrong.
- “Refresh Group” (Groups & Categories tab). Re-applies name / invitee / title changes across one group, with an optional date range. Use it after you edit a group's roster.
- “Refresh Everything” (top nav). OneDrive sync, then works through every pending item of every type across all groups and history. This starts a full cloud routine run and uses real Claude plan usage, so treat it as a break-glass button, not a routine click. If one meeting is wrong, use “Reprocess” on it instead.
What a processing run does, in order
- OneDrive sync - reads the
/Firefliesfolders on OneDrive for new or changed summary / transcript files and registers them as meetings → Meetings tab - Knowledge Base - writes each new meeting’s content into its group’s KB → Knowledge Base tab
- Action items - extracts action items → Action Items tab
- Enhanced recap - the Claude-synthesised summary on each meeting → Meetings tab (meeting detail)
- Flag / note review - turns in-recording flags and notes into pending proposals → meeting’s Flagged Items section
- Risks & Dependencies - drafts risk / dependency proposals from the transcript → Risks / Dependencies tabs
- Glossary terms - grows the Live Transcribe term list used to improve future transcription
- Queued group refreshes - re-applies name / invitee / title changes across a group
Per-group gating: Action items, Risks and Dependencies are only extracted for a meeting whose group (or the “No Group” default) has the matching “Add to Action Log / Risk Log / Dependency Log” toggle on - set in the Groups & Categories tab. With a toggle off, that item type is simply skipped for that meeting; it is not “pending”. Knowledge Base and the enhanced recap always run. RAD flags you set during a recording are saved regardless of the toggles.
Site actions that start a run immediately
Each fires the routine within ~a minute (best effort - if it can’t, the work still runs at 6 AM).
| Action | Where | Touches OneDrive? | What it does |
|---|---|---|---|
| Submit a recording | Record tab / phone app | Writes .docx + audio to the Live Transcribe OneDrive folders (background) | Full processing for that one meeting: Knowledge Base, Action Items, Risks, Dependencies and the enhanced recap (each RAD type gated by the group’s toggle) |
| Change a meeting’s group | Meeting detail → group picker | No | Fires a run and re-files the meeting completely, automatically: its kb_processed flag is reset so the run writes it into the new group’s Knowledge Base, and a scope=kb refresh is queued for the old group so its KB is rewritten without it. Action Items, Risks and Dependencies follow the meeting on their own. A meeting that was skipped before (ungrouped / pending / toggle-off group) also gets its first-time extraction. Nothing manual required. |
| “Reprocess” | Meeting detail view | No | Rebuilds this meeting’s Knowledge Base, Action Items and enhanced recap. Deliberately does not re-run Risks / Dependencies or flag proposals - those are approval-gated, and re-running would create duplicates. |
| “Refresh Everything” | Top nav | Yes - re-scans OneDrive first | OneDrive sync, then works through every pending item of every type (KB, Action Items, Risks, Dependencies, recaps, flag review) across all groups and meetings |
| “Refresh Group” | Groups & Categories tab, per group | No | Re-applies invitee / name / title changes across that group’s Knowledge Base, Action Items, Risks, Dependencies and Meeting Prep. Optional date range. |
Moving a meeting between groups is fully automatic - the KB on both sides is rebuilt for you on the next run (a minute or two), you never need to hit Reprocess or Refresh Group yourself. One caveat if the old side was “No Group”: ungrouped meetings only have loose freeform KB entries, so there is no single old entry to rewrite - the new group still gets written correctly.
Actions that do not start a run
- “Run File Sync” (top nav) - reads OneDrive and adds any new Fireflies meetings to the list, but does not process them. New meetings show “Processing” until the next run.
- Approving or rejecting a flag - this un-blocks the meeting (its KB / recap will not finalise while flags are pending), but the routine is not re-fired, so it waits for the 6 AM run. Use “Reprocess” on that meeting if you want it sooner.
- Renaming a meeting - updates the title and (for Fireflies meetings) renames the OneDrive .docx files, but starts no processing.
- Editing a meeting’s time, or editing action items / KB entries directly - saved straight to the database, no run.
What touches OneDrive
- Reads: “Run File Sync”, “Refresh Everything”, and every scheduled run - they scan
/Fireflies/Fireflies Summaries,… Transcripts,… Recordings. - Writes: submitting a Live Transcribe recording uploads a .docx and the audio file to the app’s own (separate) Live Transcribe folders.
- Renames: renaming a Fireflies meeting renames its two .docx files in place.
- Fireflies → OneDrive itself is not part of this system - Fireflies delivers its own files to those folders on its own schedule. If a meeting never shows up, that delivery is the thing to check.
Why a meeting shows “⚙ Processing…”
One of: its Knowledge Base write, its action-item extraction, or its enhanced recap has not run yet. A brand-new meeting shows this until the next processing run touches it. If it is still showing hours later and a run has happened, that is worth investigating.
“⌛ Pending Flag Approval” is different - it means the routine drafted flag/note proposals and is waiting for you to accept or reject them before it finalises that meeting.
Fireflies + Hummingbird meeting pairing (added 2026-09-04)
When the same real meeting is captured by both Fireflies and a Hummingbird (app/site Live Transcribe) recording, they show up as two separate rows at first. After every OneDrive sync and every Live Transcribe submit, the worker compares transcript CONTENT (not the stored date/time, which can be wrong on a delayed submit) between unpaired opposite-source meetings. A strong match auto-links them; a weaker one shows as a “🔗 Possible match - confirm?” chip on the meeting card instead of linking automatically.
A confirmed pair shows as one card (Fireflies is always the primary when both exist), with “✓ Fireflies” / “✓ Hummingbird” chips, both transcripts available (Transcript = Fireflies, Hummingbird Transcript = the app/site recording), and one combined Knowledge Base entry / action-item set / enhanced recap written from both. Pairing (auto or manual) resets that meeting's processing and fires the routine. “Unlink” in the meeting modal splits a pair back into two independent meetings and reprocesses each on its own. “Link to...” lets you manually pair two meetings the matcher didn't catch.
Deleting one half of a pair automatically un-links the other half (it becomes independent again, not left pointing at a deleted row).
Admin
Site-level controls. Business Hours is the first one - added 2026-09-09 after an unattended background bug fired the Claude routine every 10 minutes overnight with nobody using the site (see the Usage tab's "Claude routine fires" card).
Business Hours
Confines the worker's unattended 10-minute background cron (OneDrive/pairing checks that would otherwise fire the Claude routine on their own) to the hours below. Anything YOU do on the site right now - Submit, Reprocess, approving a flag, Run File Sync, Refresh Everything - still works any time, this only stops the site from waking up the routine by itself while nobody's here. It does NOT change the separate once-daily 6 AM Central Mon-Fri cloud routine (ask to have that time changed directly if needed).
Timezone: America/Chicago
Dev tool commands (opencode)
Quick reference for the free backup coding tool. opencode runs on your machine (Mistral / Gemini free tiers, see the Usage tab), separate from the Claude routine that runs the product. Git push and pull are automatic: opencode commits and pushes after every turn, Claude Code pushes on commit and pulls on start, so switching between them just works as long as GitHub has your latest.
oc
PowerShell, from any window. Pulls the latest from GitHub, then opens opencode on its default model (Nemotron 3 Ultra, free via opencode's own Zen gateway) in the willowwhse-dev repo.
/models
Inside opencode. Switch the model, e.g. to google/gemini-3.6-flash if the default is unavailable.
/catchup
opencode or Claude Code. Reads the memory index, AGENTS.md and CLAUDE.md, then briefs you on where things stand. Makes no changes. Add a topic to focus it, e.g. /catchup routine firing.
/wrapup
opencode or Claude Code. Saves decisions, current status and gotchas into the memory files and CLAUDE.md, then commits and pushes. Run it before you close a session. If you forget, the session is still saved: reopen and run it later.
/clear / /new
/clear in Claude Code, /new in opencode. Starts a fresh session with empty context. Do /wrapup first so nothing worth keeping is left behind.
/exit
Quit opencode (or Ctrl+C twice). Any code the tool wrote is already committed and pushed.
Models (all use the keys already set, nothing new to install, switch with /models)
Think of these as workers with different strengths. Start on the default. If it is struggling with something, switch to the one that fits and ask again. Switching keeps your current session and context, so there is no need to /wrapup first. You cannot break anything and nothing costs money.
opencode/nemotron-3-ultra-free
The default, use it for almost everything. NVIDIA's large model, free through opencode's own gateway. Labeled "trial, limited time" - if it ever stops working it just errors, back out and pick Gemini below.
mistral/mistral-small-latest
Confirmed free, but the lightest option. Fine for small edits; struggles with anything that needs real judgment. Mistral's account no longer offers the bigger models free (Large/Codestral/Magistral all errored "not available in your subscription tier").
google/gemini-3.6-flash
The backup. Use it if Nemotron errors or Mistral rate-limits. About 250 goes per day, resets overnight. Google renames these models over time - if this one 404s, ask to check for a newer name.
google/gemini-...-pro
The smarter backup, exact name TBD. Better answers but only ~100 goes a day - check /models for the current Pro model name (Google renames these; the flash name above 404'd once already).
For the "opencode dev models" usage card to fill in, set the site password once on the machine that runs opencode: setx HUMMINGBIRD_KEY "the site password", then open a new shell. Without it, opencode still works, the usage card just stays at zero.