{"id":47805775,"url":"https://github.com/steipete/eightctl","last_synced_at":"2026-04-03T17:35:32.914Z","repository":{"id":327788396,"uuid":"1110488148","full_name":"steipete/eightctl","owner":"steipete","description":"Eight Sleep cli to fetch data and control your pods.","archived":false,"fork":false,"pushed_at":"2026-01-09T22:37:28.000Z","size":90,"stargazers_count":56,"open_issues_count":23,"forks_count":24,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-30T05:38:59.428Z","etag":null,"topics":["cli","eightsleep"],"latest_commit_sha":null,"homepage":"https://eightctl.sh","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/steipete.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2025-12-05T09:14:07.000Z","updated_at":"2026-03-28T07:00:20.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/steipete/eightctl","commit_stats":null,"previous_names":["steipete/eightctl"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/steipete/eightctl","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steipete%2Feightctl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steipete%2Feightctl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steipete%2Feightctl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steipete%2Feightctl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/steipete","download_url":"https://codeload.github.com/steipete/eightctl/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steipete%2Feightctl/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31366367,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T17:13:05.644Z","status":"ssl_error","status_checked_at":"2026-04-03T17:13:04.413Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["cli","eightsleep"],"created_at":"2026-04-03T17:35:32.411Z","updated_at":"2026-04-03T17:35:32.897Z","avatar_url":"https://github.com/steipete.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🛏️ eightctl — Control your sleep, from the terminal\n\nA modern Go CLI for Eight Sleep Pods. Control power/temperature, alarms, schedules, audio, base, autopilot, travel, household, and export sleep metrics. Includes a daemon for scheduled routines.\n\n\u003e Eight Sleep does **not** publish a stable public API. `eightctl` talks to the same undocumented cloud endpoints the mobile apps use. Default OAuth client creds are baked in (from Android APK 7.39.17), so typically you only supply email + password.\n\u003e **Status:** WIP. The code paths are implemented, but live verification is currently blocked by Eight Sleep API rate limiting on the test account.\n\n## Quickstart\n```bash\n# build + install\nGO111MODULE=on go install github.com/steipete/eightctl/cmd/eightctl@latest\n\n# create config (optional; flags/env also work)\nmkdir -p ~/.config/eightctl\ncat \u003e ~/.config/eightctl/config.yaml \u003c\u003c'CFG'\nemail: \"you@example.com\"\npassword: \"your-password\"\n# user_id: \"optional\"               # auto-resolved via /users/me\n# timezone: \"America/New_York\"      # defaults to local\n# client_id / client_secret optional # defaults to app creds\nCFG\nchmod 600 ~/.config/eightctl/config.yaml\n\n# check pod state\nEIGHTCTL_EMAIL=you@example.com EIGHTCTL_PASSWORD=your-password eightctl status\n\n# set temperature level (-100..100)\neightctl temp 20\n\n# run daemon with your YAML schedule (see docs/example-schedule.yaml)\neightctl daemon --dry-run\n```\n\n## Command Surface\n- **Power \u0026 temp:** `on`, `off`, `temp \u003clevel\u003e`, `status`\n- **Schedules \u0026 daemon:** `schedule list|create|update|delete|next`, `daemon`\n- **Alarms:** `alarm list|create|update|delete|snooze|dismiss|dismiss-all|vibration-test`\n- **Temperature modes:** `tempmode nap on|off|extend|status`, `tempmode hotflash on|off|status`, `tempmode events`\n- **Audio:** `audio tracks|categories|state|play|pause|seek|volume|pair|next`, `audio favorites list|add|remove`\n- **Base:** `base info|angle|presets|preset-run|vibration-test`\n- **Device:** `device info|peripherals|owner|warranty|online|priming-tasks|priming-schedule`\n- **Metrics \u0026 insights:** `sleep day|range`, `presence`, `metrics trends|intervals|summary|aggregate|insights`\n- **Autopilot:** `autopilot details|history|recap`, `autopilot set-level-suggestions`, `autopilot set-snore-mitigation`\n- **Travel:** `travel trips|create-trip|delete-trip|plans|create-plan|update-plan|tasks|airport-search|flight-status`\n- **Household:** `household summary|schedule|current-set|invitations|devices|users|guests`\n- **Misc:** `tracks`, `feats`, `whoami`, `version`\n\nUse `--output table|json|csv` and `--fields field1,field2` to shape output. `--verbose` enables debug logs; `--quiet` hides the config banner.\n\n## Configuration\nPriority: flags \u003e env vars (`EIGHTCTL_*`) \u003e config file.\n\nKey fields: `email`, `password`, optional `user_id`, `client_id`, `client_secret`, `timezone`, `output`, `fields`, `verbose`. The client auto-resolves `user_id` and `device_id` after authentication. Config file permissions are checked (warn if \u003e0600).\n\n## Tooling\n- Make: `make fmt` (gofumpt), `make lint` (golangci-lint), `make test` (go test ./...)\n- CI: `.github/workflows/ci.yml` runs format, lint, tests.\n- pnpm scripts (optional): `pnpm eightctl|start|build|lint|format|test` (see package.json).\n\n## Known API realities\n- The API is undocumented and rate-limited; repeated logins can return 429. The client now mimics Android app headers and reuses tokens to reduce throttling, but cooldowns may still apply.\n- HTTPS only; no local/Bluetooth control exposed here.\n\n## Prior Work / References\n- Go CLI `clim8`: https://github.com/blacktop/clim8\n- MCP server (Node/TS): https://github.com/elizabethtrykin/8sleep-mcp\n- Python library `pyEight`: https://github.com/mezz64/pyEight\n- Home Assistant integrations: https://github.com/lukas-clarke/eight_sleep and https://github.com/grantnedwards/eight-sleep\n- Homebridge plugin: https://github.com/nfarina/homebridge-eightsleep\n- Background on the unofficial API and feature removals: https://www.reddit.com/r/EightSleep/comments/15ybfrv/eight_sleep_removed_smart_home_capabilities/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsteipete%2Feightctl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsteipete%2Feightctl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsteipete%2Feightctl/lists"}