{"id":49308481,"url":"https://github.com/charlexh/codebuddy","last_synced_at":"2026-04-27T12:00:52.428Z","repository":{"id":352802011,"uuid":"1216668171","full_name":"CharlexH/CodeBuddy","owner":"CharlexH","description":"A StickS3 Codex companion adapted from Claude Desktop Buddy.","archived":false,"fork":false,"pushed_at":"2026-04-26T09:11:01.000Z","size":3759,"stargazers_count":19,"open_issues_count":1,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-26T11:25:56.288Z","etag":null,"topics":["buddy","claude-buddy","codebuddy","codex-buddy","codexbuddy"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CharlexH.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-21T05:58:36.000Z","updated_at":"2026-04-26T09:10:15.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/CharlexH/CodeBuddy","commit_stats":null,"previous_names":["charlexh/codebuddy"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/CharlexH/CodeBuddy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CharlexH%2FCodeBuddy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CharlexH%2FCodeBuddy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CharlexH%2FCodeBuddy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CharlexH%2FCodeBuddy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CharlexH","download_url":"https://codeload.github.com/CharlexH/CodeBuddy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CharlexH%2FCodeBuddy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32335297,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T23:26:28.701Z","status":"online","status_checked_at":"2026-04-27T02:00:06.769Z","response_time":128,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["buddy","claude-buddy","codebuddy","codex-buddy","codexbuddy"],"created_at":"2026-04-26T11:00:48.661Z","updated_at":"2026-04-27T12:00:52.410Z","avatar_url":"https://github.com/CharlexH.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"./README.md\"\u003e\n    \u003cimg alt=\"English\" src=\"https://img.shields.io/badge/English-111111?style=for-the-badge\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"./README.zh-CN.md\"\u003e\n    \u003cimg alt=\"简体中文\" src=\"https://img.shields.io/badge/简体中文-EAEAEA?style=for-the-badge\u0026labelColor=EAEAEA\u0026color=111111\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"screenshots/cover.webp\" alt=\"Code Buddy cover\" width=\"100%\" /\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eCode Buddy\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  A StickS3 Codex companion adapted from\n  \u003ca href=\"https://github.com/anthropics/claude-desktop-buddy\"\u003eClaude Desktop Buddy\u003c/a\u003e.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  Flash the device once, run \u003ccode\u003ecode-buddy\u003c/code\u003e once on macOS, then keep using \u003ccode\u003ecodex\u003c/code\u003e normally while approvals and live session status move to dedicated hardware.\n\u003c/p\u003e\n\n\u003e Building your own hardware client? See [firmware/REFERENCE.md](firmware/REFERENCE.md) for the BLE protocol and JSON payloads.\n\n## What ships\n\n- A macOS bridge that pairs with the StickS3, syncs time, installs the native BLE helper, and manages the local `codex` shim.\n- A StickS3 firmware build with status, approval, settings, and offline screens.\n- A daily workflow designed to stay out of the way: run `code-buddy` once, then just use `codex`.\n\n## Quick start\n\n### 1. Flash the StickS3\n\nDownload `code-buddy-sticks3-v{version}-full.bin` from GitHub Releases and flash it at `0x0`.\n\nPreferred path:\n\n- If a release includes a web flasher, use it and write the merged image at `0x0`.\n\nFallback:\n\n```bash\nesptool --chip esp32s3 --port /dev/cu.usbmodem101 --baud 460800 write_flash 0x0 code-buddy-sticks3-v0.1.2-full.bin\n```\n\nDeveloper release build:\n\n```bash\n./scripts/build-firmware-release.sh\n```\n\n### 2. Install on macOS\n\n```bash\nbrew install CharlexH/tap/code-buddy\ncode-buddy\n```\n\nOn first run, Code Buddy will:\n\n- install the native Bluetooth helper\n- pair with a `Codex-*` device\n- sync device time\n- install the launchd agent\n- install the local `codex` shim\n- add `~/.code-buddy/bin` to `~/.zprofile`\n\nIf you are already on the current StickS3 firmware, host-side fixes like BLE helper reconnect cleanup and oversized multilingual snapshot handling do not require reflashing the device.\n\n### 3. Use it normally\n\n```bash\ncodex\n```\n\nOpen a new shell after setup. From there, Code Buddy keeps the bridge alive and shows approval prompts on the StickS3 while you keep your normal CLI flow.\n\n## Controls\n\n|                         | Normal               | Pet         | Info        | Approval    |\n| ----------------------- | -------------------- | ----------- | ----------- | ----------- |\n| **A** (front)           | next screen          | next screen | next screen | **approve** |\n| **B** (right)           | scroll transcript    | next page   | next page   | **deny**    |\n| **Hold A**              | menu                 | menu        | menu        | menu        |\n| **Power** (left, short) | toggle screen off    |             |             |             |\n| **Power** (left, ~6s)   | hard power off       |             |             |             |\n| **Shake**               | dizzy                |             |             | —           |\n| **Face-down**           | nap (energy refills) |             |             |             |\n\nThe screen auto-powers off after 30 seconds of inactivity and stays on while an approval prompt is pending. Any button press wakes it.\n\n## Buddy states\n\n| State       | Trigger                     | Feel                        |\n| ----------- | --------------------------- | --------------------------- |\n| `sleep`     | bridge not connected        | eyes closed, slow breathing |\n| `idle`      | connected, nothing urgent   | blinking, looking around    |\n| `busy`      | sessions actively running   | sweating, working           |\n| `attention` | approval pending            | alert, **LED blinks**       |\n| `celebrate` | level up (50K tokens), Friday clock | confetti, bouncing          |\n| `dizzy`     | you shook the stick         | spiral eyes, wobbling       |\n| `heart`     | approved in under 5s        | floating hearts             |\n\nWhen the StickS3 is on USB power, has synced time, and has no running or waiting session, it can show the charging clock. On Fridays from 15:00 until midnight, the pet occasionally celebrates: about 4 seconds in each 12-second cycle.\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eCharacters and custom packs\u003c/strong\u003e\u003c/summary\u003e\n\nThe firmware ships with eighteen ASCII pets. Each one includes seven animations: `sleep`, `idle`, `busy`, `attention`, `celebrate`, `dizzy`, and `heart`.\n\nUse `menu -\u003e next pet` on the device to cycle through them. The selection is saved in device storage.\n\nIf you want a custom GIF character, create a pack with a `manifest.json` and 96px-wide GIFs for the same seven states:\n\n```json\n{\n  \"name\": \"bufo\",\n  \"colors\": {\n    \"body\": \"#6B8E23\",\n    \"bg\": \"#000000\",\n    \"text\": \"#FFFFFF\",\n    \"textDim\": \"#808080\",\n    \"ink\": \"#000000\"\n  },\n  \"states\": {\n    \"sleep\": \"sleep.gif\",\n    \"idle\": [\"idle_0.gif\", \"idle_1.gif\", \"idle_2.gif\"],\n    \"busy\": \"busy.gif\",\n    \"attention\": \"attention.gif\",\n    \"celebrate\": \"celebrate.gif\",\n    \"dizzy\": \"dizzy.gif\",\n    \"heart\": \"heart.gif\"\n  }\n}\n```\n\nNotes:\n\n- `idle` can be a single GIF or an array of GIFs.\n- Heights up to about 140px fit well on the StickS3 screen.\n- See [firmware/characters/bufo/](firmware/characters/bufo/) for a working example.\n- Use [firmware/tools/prep_character.py](firmware/tools/prep_character.py) and [firmware/tools/flash_character.py](firmware/tools/flash_character.py) to prepare and flash assets.\n\u003c/details\u003e\n\n## Recovery\n\n```bash\ncode-buddy doctor\ncode-buddy repair\ncode-buddy uninstall\n```\n\n`doctor` explains what is wrong, why it happened, and what to do next.\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eBuild from source\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\npython3 -m venv .venv\n.venv/bin/pip install -e '.[dev]'\n.venv/bin/code-buddy\n```\n\nVerification:\n\n- Host tests: `.venv/bin/pytest -q`\n- Firmware build: `cd firmware \u0026\u0026 pio run`\n\u003c/details\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcharlexh%2Fcodebuddy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcharlexh%2Fcodebuddy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcharlexh%2Fcodebuddy/lists"}