Skip to content
View victory-c's full-sized avatar

Highlights

  • Pro

Block or report victory-c

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
victory-c/README.md

header

Typing SVG


Fly Brain garmin_mcp #2 contributor FlowLens Venture Map


About

I study Data Science and Cognitive Science at UC Berkeley. I build tools and guardrails for AI agents — what they cost, where they break, and what stops them from doing damage.

Outside of that, I build tooling around my own training data, because I ride a lot and Garmin gets more wrong than you'd think.

🛡️ Agent guardrails  •  🤖 AI agent tooling  •  🚴 Endurance data  •  🔓 Open source

Cycling telemetry from Garmin, synced weekly


Things I've built

fly-brain — a fruit fly's whole central nervous system (166,700 neurons, male CNS v1.0 connectome) run as a spiking network in PyTorch, learning to ride a road bike in side gusts. The simulator reproduces Shiu et al. (Nature 2024) spike for spike against their Brian2 code, then batches many flies on one GPU.

token-counter — audits monthly AI coding-agent spend across Claude Code, Codex, Cursor, and Gemini, and flags every run that would have been fine on a cheaper model.

fitpet — a Claude Code status-line companion that grows from real Garmin training load.

vibeapply — an AI-native job-application copilot: a browser extension that rides along on job boards, backed by a structured candidate profile and evidence bank. Scaffolded with agents, then audited — all nine findings fixed before any feature work.

cal-dining-scanner — watches UC Berkeley dining menus for the foods you care about and emails you when they appear. One command to set up, runs free on GitHub Actions. A friend spun it off into Cal-Bite, a full-stack version.

magene-garmin-fix — Garmin inflates climb 10–70× for third-party bike computers by throwing away barometric altitude. This fixes it.

analyze-cycling-hr-thresholds — a Codex skill that reconciles Garmin field data with raw CPET gas-exchange data into heart-rate thresholds, Garmin-ready zones, and labeled FTP proxies. It analyzes each source on its own and refuses the tempting shortcuts — no converting heart rate straight to watts, no treating a lab report's conclusion as raw evidence.

bay-area-venture-map — interactive map of the Bay Area venture cluster; filter by AUM, stage, sector, and check size.

qosmic-audit-harness — contracts-first agent harness: every claim in a generated audit must cite a real crawled page, enforced by a validator that the writer and the evaluator share.

Open source

Taxuspt/garmin_mcp — 1.3k ★ · #2 contributor · 21 PRs merged

The most-used MCP server for Garmin Connect. Behind the maintainer, I'm its largest contributor: 21 merged PRs (+3.3k lines) spanning auth, FIT decoding, training analytics, workout scheduling and write safety. The pattern is the same throughout: find where an agent silently gets a plausible but wrong answer, prove it with a real payload, and ship the fix with a regression test.

#437 Analytics assumed 1 record = 1 second. With smart recording (a record every 1–8 s), a 20-min best of 300 W came out as 167 W, and climb VAM was off by 3×. Power curves, climbs and HR drift now use real timestamps.
#423 Told the agent a retry was safe when it wasn't. A 5xx that arrives after a write was sent may already be committed. It's now marked write_committed: "unknown", so an agent checks before it double-logs.
#419 Logged into the wrong account. With GARMINTOKENS set, password login silently reused another profile's tokens and wrote them into the new directory. Credentials now always win.
#418 Di2 shifts decoded with the bytes swapped, so a 50×21 read as "50/2t". The tests passed only because the mocks used the same wrong layout. Rebuilt against the FIT profile, and added L/R power balance.
#254 One stalled Garmin call froze the whole server for about 4 minutes. Every proxied call is now bounded on a worker thread, with a timeout an agent can retry.
#426 Memory leak in a login failure. Re-raising a stored exception grew its traceback without bound: 3,000 frames after 1,000 tool calls.
All 15 others
  • Courses #435: 5 of 8 sport types were mapped wrong (a gravel course saved as track running), GPX output was unescaped, and deleting now needs confirmation.
  • Analysis #436: bike power had leaked into running power curves, and HR drift is now labelled by its sign.
  • Workouts #433 · #434: one failed schedule_week entry no longer hides the ones that succeeded; strict date validation and full library paging.
  • Health, training and weight #429 · #427 · #430: readiness fields, lactate-threshold history, weigh-in timestamps, and deletes that silently did nothing.
  • Gear, devices, PRs and nutrition #250 · #431 · #424 · #432 · #428: gear notes from the v2 API, real activity typeIds, the actual solar payload, when each personal record was set, and rename-safe food edits.
  • Null-safety #253: Garmin sends an explicit null for empty sections, so .get(k, {}) returns None. Fixed five crashes of this kind, each with a regression test.
  • Auth and test infrastructure #425 · #416: token verification for profiles without a full name, and live e2e tests made opt-in.
  • #64036 — reasoning-visibility leak on Gemini/Vertex: with show_reasoning: false, users still got dozens of raw thought-summary blocks. Two causes — effort and visibility were coupled in the request builder, and Vertex returns summaries untagged unless you set thought_tag_marker, so nothing downstream could key on them. Splits the two knobs to match Google's own API.
  • #68524 — web_extract had one backend; expired credits or a rate limit meant total failure plus a gateway restart. Adds a configurable fallback chain.

SpencerLiang0114/RouteCraft — route planner for running, hiking, and cycling

  • #15 ✅ merged — session auth, saved routes owned by the user who created them, and share links that expire.
  • #14 ✅ merged — imperial conversions next to every metric route value.

Berkeley, CA — usually on a bike when I'm not here.

footer

Pinned Loading

  1. fly-brain fly-brain Public

    A fruit fly's whole central nervous system (166,700 neurons) as a spiking network in PyTorch, learning to ride a road bike. Reproduces Shiu et al. (Nature 2024) spike for spike.

    HTML

  2. token-counter token-counter Public

    Audits monthly AI coding-agent spend across Claude Code, Codex, Cursor, and Gemini, and flags every run that would have been fine on a cheaper model

    Python 1 1

  3. vibeapply vibeapply Public

    AI-native job-application copilot: a browser extension that rides along on job boards, backed by a structured candidate profile and evidence bank. Security-audited scaffold; AI pipelines in progress.

    TypeScript

  4. cal-dining-scanner cal-dining-scanner Public

    Watches UC Berkeley dining hall menus for the foods you care about and emails you when they appear. One-command setup; runs free on GitHub Actions.

    Python 5

  5. analyze-cycling-hr-thresholds analyze-cycling-hr-thresholds Public

    A Codex skill that reconciles Garmin field data with raw CPET gas-exchange data into defensible heart-rate thresholds, Garmin-ready zones, and labeled FTP proxies

    Python

  6. magene-garmin-fix magene-garmin-fix Public

    Garmin inflates climbing 10–70× on rides from Magene and other non-Garmin bike computers. Uploads the .fit and fixes elevation and activity type automatically. EN/中文 docs + Claude Code skill.

    Python