[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-94493":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":14,"stars30d":15,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":16,"rankGlobal":9,"rankLanguage":9,"license":17,"archived":18,"fork":18,"defaultBranch":19,"hasWiki":20,"hasPages":18,"topics":21,"createdAt":9,"pushedAt":9,"updatedAt":29,"readmeContent":30,"aiSummary":31,"trendingCount":14,"starSnapshotCount":14,"syncStatus":32,"lastSyncTime":33,"discoverSource":34},94493,"vibewatch","GOROman\u002Fvibewatch","GOROman","A tactile M5Stack StopWatch controller for AI-assisted Vibe Coding",null,"C++",127,6,106,0,16,44.14,"MIT License",false,"main",true,[22,23,24,25,26,27,28],"ai","ble-hid","esp32-s3","m5stack","m5stack-stopwatch","platformio","vibe-coding","2026-08-24 04:01:22","# Vibe Watch\n\n**English** | [日本語](README.ja.md) | [简体中文](README.zh-CN.md)\n\n[![Firmware build](https:\u002F\u002Fgithub.com\u002FGOROman\u002Fvibewatch\u002Factions\u002Fworkflows\u002Ffirmware.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002FGOROman\u002Fvibewatch\u002Factions\u002Fworkflows\u002Ffirmware.yml)\n\n**A wearable, tactile control surface for AI-assisted Vibe Coding—built around the M5Stack StopWatch.**\n\nCreated for the [M5Stack Global Innovation Contest 2026](https:\u002F\u002Fm5stack.com\u002Fglobal-innovation-contest-2026).\n\n![Vibe Watch worn on the wrist, showing its tactile Vibe Coding action interface](docs\u002Fimages\u002Fvibe-watch-hero.jpg)\n\n## Video Demo\n\n[![Watch the Vibe Watch video demo](https:\u002F\u002Fimg.youtube.com\u002Fvi\u002FWta_rQDcs74\u002Fmaxresdefault.jpg)](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=Wta_rQDcs74)\n\n[Watch on YouTube](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=Wta_rQDcs74)\n\n## One Glance. One Action. Stay in the Flow.\n\nVibe Watch moves frequent AI-agent interactions away from crowded desktop UI and onto a dedicated wireless device. It keeps six agent states visible at a glance, makes approve\u002Freject decisions physical, and puts Plan mode, assistant access, and push-to-talk on the wrist.\n\nThe goal is simple: spend less attention operating the AI and more attention creating with it.\n\n## Why I Built It\n\nRunning multiple AI-agent sessions in parallel has become normal in Vibe Coding. That creates a new interaction problem: I want to know the instant a task finishes, select the right session, and speak the next prompt without searching across windows or returning to the keyboard.\n\nAfter purchasing an [OpenAI Codex Micro](https:\u002F\u002Flearn.chatgpt.com\u002Fdocs\u002Ffeatures\u002Fcodex-micro), I was inspired by the idea of dedicated hardware for AI coding. I believed the experience could become even smaller, more glanceable, and more expressive by combining a round display with direct controls, motion, sound, haptics, and voice input. That idea became Vibe Watch: a wearable AI cockpit for parallel sessions.\n\n## The Experience\n\nThe main **Agent layer** arranges six live agent indicators around the circular screen. Host-provided color, brightness, and animation communicate activity, while a fast spring motion moves the selection ring from one agent to the next.\n\nPressing both hardware buttons transforms the interface into the **Action layer**:\n\n| Control | Experience |\n|---|---|\n| **FAST** | Triggers a quick action |\n| **NG \u002F OK** | Rejects or approves with distinct square-wave sounds and haptics |\n| **PLAN** | Toggles Plan mode with a visible state change |\n| **AI** | Invokes the assistant |\n| **Center microphone** | Provides hold-to-talk control |\n\nThe orange left button maps to NG and the blue right button maps to OK. Colored rails visually join each physical button to its on-screen action, making the relationship understandable without instructions.\n\n## Interface Gallery\n\n\u003Ctable>\n  \u003Ctr>\n    \u003Ctd width=\"50%\" valign=\"top\">\n      \u003Cimg src=\"docs\u002Fimages\u002Fvibe-watch-startup.jpg\" alt=\"Vibe Watch animated startup screen with version and battery level\">\u003Cbr>\n      \u003Cstrong>Purpose-built startup\u003C\u002Fstrong>\u003Cbr>\n      A fading identity, original chiptune, and animated measured battery level.\n    \u003C\u002Ftd>\n    \u003Ctd width=\"50%\" valign=\"top\">\n      \u003Cimg src=\"docs\u002Fimages\u002Fvibe-watch-agent-layer.jpg\" alt=\"Vibe Watch Agent layer showing six parallel AI sessions\">\u003Cbr>\n      \u003Cstrong>Six parallel agents\u003C\u002Fstrong>\u003Cbr>\n      Live state and selection remain visible without covering the coding workspace.\n    \u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd width=\"50%\" valign=\"top\">\n      \u003Cimg src=\"docs\u002Fimages\u002Fvibe-watch-action-layer.jpg\" alt=\"Vibe Watch Action layer showing FAST, NG, OK, PLAN, AI, and push-to-talk\">\u003Cbr>\n      \u003Cstrong>Action layer\u003C\u002Fstrong>\u003Cbr>\n      FAST, NG, OK, PLAN, AI, and push-to-talk become immediate wrist controls.\n    \u003C\u002Ftd>\n    \u003Ctd width=\"50%\" valign=\"top\">\n      \u003Cimg src=\"docs\u002Fimages\u002Fvibe-watch-settings.jpg\" alt=\"Vibe Watch settings for Bluetooth pairing, sound, and vibration\">\u003Cbr>\n      \u003Cstrong>On-device settings\u003C\u002Fstrong>\u003Cbr>\n      Pairing, sound volume, vibration strength, and state-change haptics stay on the watch.\n    \u003C\u002Ftd>\n  \u003C\u002Ftr>\n\u003C\u002Ftable>\n\n## Designed as One Multisensory Interface\n\nVibe Watch is not a macro pad with a decorative screen. Its visual motion, audio cues, vibration, touch controls, and physical buttons all describe the same interaction state.\n\n- A rising square-wave phrase confirms **OK**; a descending phrase confirms **NG**.\n- Pairing success is acknowledged with both sound and vibration.\n- Agent-state updates can signal silently through adjustable haptics.\n- Sound volume, vibration strength, and state-change vibration are configurable on-device and retained after restart.\n\n## How the M5Stack Controller Is Used\n\nThe M5Stack StopWatch is the complete product interface—not a passive display attached to another controller.\n\n- Its **ESP32-S3** runs the UI, preferences, battery monitoring, and Bluetooth Low Energy HID communication.\n- The **466 × 466 round touchscreen** presents the six-agent spatial interface and action controls.\n- The two **physical buttons** provide eyes-free navigation and approve\u002Freject decisions.\n- The built-in **speaker** and **vibration motor** provide immediate, recognizable feedback.\n- The integrated **battery** makes the controller wireless and portable.\n\nThis tight hardware integration turns an off-the-shelf M5Stack controller into a purpose-built human–AI interface.\n\n## From StopWatch to Wristwatch\n\nVibe Watch repurposes the official [Watch Accessory Kit for the M5Stick Series](https:\u002F\u002Fshop.m5stack.com\u002Fproducts\u002Fwatch-accessory-kit-for-m5stick-series) as a wrist mount. The kit is designed for rectangular M5Stick devices, so its plastic Watch Mount Accessory needs a small physical modification before it can carry the round StopWatch.\n\n1. Remove the plastic mount from the device and strap before cutting.\n2. Use flush cutters or small nippers to cut away the raised M5Stick retaining hooks, removing a little material at a time.\n3. Trim any remaining burrs or sharp edges until the mount presents a flat bonding surface.\n4. Clean and completely dry both the mount and the flat rear surface of the StopWatch.\n5. Cut high-strength double-sided tape so it fits inside the mount footprint. Keep buttons, connectors, and openings clear.\n6. Center the mount on the rear of the StopWatch, press it down firmly, and allow the adhesive to reach its specified bond strength.\n7. Refit the nylon strap and perform a firm pull test before wearing it.\n\n### Wrist-Mount Build Photos\n\n\u003Ctable>\n  \u003Ctr>\n    \u003Ctd width=\"50%\" valign=\"top\">\u003Cimg src=\"docs\u002Fimages\u002Fwrist-mount-01-parts.jpg\" alt=\"M5Stack watch accessory kit parts and Vibe Watch\">\u003Cbr>\u003Cstrong>1. Choose the watch mount\u003C\u002Fstrong>\u003Cbr>Use the rectangular Watch Mount Accessory supplied with the official kit.\u003C\u002Ftd>\n    \u003Ctd width=\"50%\" valign=\"top\">\u003Cimg src=\"docs\u002Fimages\u002Fwrist-mount-02-cut-hooks.jpg\" alt=\"Cutting the M5Stick retaining hooks from the watch mount\">\u003Cbr>\u003Cstrong>2. Remove the retaining hooks\u003C\u002Fstrong>\u003Cbr>Cut each raised M5Stick hook carefully with small nippers.\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd width=\"50%\" valign=\"top\">\u003Cimg src=\"docs\u002Fimages\u002Fwrist-mount-03-trim-hooks.jpg\" alt=\"Trimming the remaining plastic hook material\">\u003Cbr>\u003Cstrong>3. Make the surface flat\u003C\u002Fstrong>\u003Cbr>Trim the remaining plastic and remove sharp edges.\u003C\u002Ftd>\n    \u003Ctd width=\"50%\" valign=\"top\">\u003Cimg src=\"docs\u002Fimages\u002Fwrist-mount-04-adhesive.jpg\" alt=\"Modified watch mount attached to the rear of Vibe Watch with strong double-sided tape\">\u003Cbr>\u003Cstrong>4. Bond and test\u003C\u002Fstrong>\u003Cbr>Attach the centered mount with high-strength double-sided tape, then pull-test it before wearing.\u003C\u002Ftd>\n  \u003C\u002Ftr>\n\u003C\u002Ftable>\n\nThe conversion preserves the original StopWatch case and uses only the modified kit part plus adhesive. It makes the interface instantly available while moving around, not only when sitting at a desk.\n\n## Impact and Usefulness\n\nVibe Watch removes tiny but frequent interruptions from AI-assisted work. It keeps multi-agent activity visible, reduces approval to a confident physical decision, and makes voice interaction instantly available—even away from the keyboard.\n\nThe same interaction model can extend beyond coding to accessibility tools, creative applications, multi-agent operations, and other workflows where attention is more valuable than screen space.\n\n## Hardware Used\n\n| Item | Quantity | Role |\n|---|---:|---|\n| [M5Stack StopWatch](https:\u002F\u002Fdocs.m5stack.com\u002Fen\u002Fcore\u002FStopWatch) | 1 | Controller, display, input, audio, haptics, BLE, and power |\n| [M5Stack Watch Accessory Kit for M5Stick Series](https:\u002F\u002Fshop.m5stack.com\u002Fproducts\u002Fwatch-accessory-kit-for-m5stick-series) | 1 | Nylon wrist strap and modified Watch Mount Accessory |\n| High-strength double-sided tape | 1 piece | Bonds the modified mount to the StopWatch |\n| macOS computer with Bluetooth | 1 | AI coding host |\n\nTools for the wrist conversion: flush cutters or small nippers, an optional fine file, and eye protection.\n\n## Build and Pair\n\nInstall [PlatformIO Core](https:\u002F\u002Fdocs.platformio.org\u002Fen\u002Flatest\u002Fcore\u002Finstallation\u002Findex.html), then clone and build the public repository:\n\n```sh\ngit clone https:\u002F\u002Fgithub.com\u002FGOROman\u002Fvibewatch.git\ncd vibewatch\npython3 -m platformio run -e m5stack-stopwatch\n```\n\nConnect the StopWatch and upload:\n\n```sh\npython3 -m platformio run -e m5stack-stopwatch --target upload\n```\n\nOpen Settings on Vibe Watch, select one of the three device slots, tap **PAIR**, and connect to `Vibe Watch #n` from macOS Bluetooth settings.\n\n## License\n\n[MIT License](LICENSE)\n\n## References\n\n- [M5Stack StopWatch — official documentation](https:\u002F\u002Fdocs.m5stack.com\u002Fen\u002Fcore\u002FStopWatch)\n- [M5Stack Watch Accessory Kit for M5Stick Series — official product page](https:\u002F\u002Fshop.m5stack.com\u002Fproducts\u002Fwatch-accessory-kit-for-m5stick-series)\n- [OpenAI Codex Micro — official documentation](https:\u002F\u002Flearn.chatgpt.com\u002Fdocs\u002Ffeatures\u002Fcodex-micro)\n","Vibe Watch 是一款基于 M5Stack StopWatch 硬件的可穿戴触觉控制器，专为 AI 辅助的 Vibe Coding 编程范式设计。它通过 ESP32-S3 芯片实现 BLE HID 无线通信，支持六路并行 AI 代理状态可视化、物理按键审批（OK\u002FNG）、Plan 模式切换、语音唤醒及震动反馈，所有交互围绕圆形屏幕与双按钮+麦克风硬件展开。项目采用 C++ 开发，基于 PlatformIO 构建，强调低注意力操作与编程流保持。适用于需要高频切换和确认多 AI 任务的开发者场景，如本地大模型编程助手协同、实时代码生成反馈闭环等。",2,"2026-08-10 02:30:07","CREATED_QUERY"]