{"id":37084630,"url":"https://github.com/stiles/utilityman","last_synced_at":"2026-01-14T10:23:06.962Z","repository":{"id":313576863,"uuid":"1051905319","full_name":"stiles/utilityman","owner":"stiles","description":"Follow any MLB game from your terminal. Live play-by-play, compact scoreboard and scoring highlights. No browser, just baseball. ","archived":false,"fork":false,"pushed_at":"2025-09-20T02:20:49.000Z","size":958,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-28T10:17:33.453Z","etag":null,"topics":["baseball","cli","live","mlb","python"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/scorebug","language":"Python","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/stiles.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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-09-07T01:08:20.000Z","updated_at":"2025-09-20T02:20:52.000Z","dependencies_parsed_at":"2025-09-07T23:24:54.788Z","dependency_job_id":null,"html_url":"https://github.com/stiles/utilityman","commit_stats":null,"previous_names":["stiles/scorebug","stiles/utilityman"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/stiles/utilityman","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stiles%2Futilityman","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stiles%2Futilityman/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stiles%2Futilityman/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stiles%2Futilityman/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stiles","download_url":"https://codeload.github.com/stiles/utilityman/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stiles%2Futilityman/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28417021,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T10:18:03.274Z","status":"ssl_error","status_checked_at":"2026-01-14T10:16:11.865Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":["baseball","cli","live","mlb","python"],"created_at":"2026-01-14T10:23:06.308Z","updated_at":"2026-01-14T10:23:06.956Z","avatar_url":"https://github.com/stiles.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Utilityman\n\nFollow your favorite MLB teams with live play-by-play in the terminal. \n\n## Example output\n\n```\n⚾ Game On! ⚾\nTeams: Los Angeles Dodgers at Baltimore Orioles  \nPitchers: Clayton Kershaw vs. Tomoyuki Sugano\n📍 Oriole Park at Camden Yards\n🕐 Sun 10:35 AM PDT\n\n▲1  🔥 SHOHEI OHTANI HOMERS (47) ON A FLY BALL TO CENTER FIELD. (1 RBI) 🔥 (1-0, 2p) [1B:○ 2B:○ 3B:○]\n▲1  Mookie Betts strikes out swinging. (3-3, 5p) [1B:○ 2B:○ 3B:○]\n────────────────────────────────────────────────\n🏟️  ▲ Top 1\n     ⚾ LAD  1  (H: 1 E:0)\n     ⚾ BAL  0  (H: 0 E:0)\n```\n\n## Install\n\n- From PyPI\n  ```bash\n  pip install utilityman\n  ```\n\n- Local checkout (editable)\n  - Clone this repo\n  - pip install -e .\n\nRequires Python 3.9+.\n\n## Usage\n\n- Positional team or prompt\n\n```bash\nutilityman dodgers\n# or just run `utilityman` and enter a team when prompted\n```\n\n- Specific game  (`gamePk` id from [BaseballSavant](https://baseballsavant.mlb.com/gamefeed?gamePk=776443))\n\n```bash\nutilityman --gamepk 776443\n```\n\n- Show every pitch and start from the first at-bat\n\n```bash\nutilityman yankees --pitches --from-start\n```\n\n## What it does\n\n- Finds today's game for a team (or uses --gamepk)\n- Streams new at-bats and optionally every pitch as the game unfolds\n- Prints a compact scoreboard on change or inning transitions\n- Highlights scoring plays in real time\n- If no game is live, prints the last final and the next scheduled game\n\n## Outputs\n\n- Uses team abbreviations in the scoreboard\n- Shows ▲ for top and ▼ for bottom of the inning\n- Reprints a play if its description updates\n- Prints the scoreboard at start of halves and on End/Middle of innings\n- Prints an inning banner on half-inning transitions for readability\n- Colors: cyan for away, magenta for home\n- **Enhanced scoring plays**: 🔥 Home runs with fire emojis and ALL CAPS, ⚡ RBI plays with lightning bolts, 💥 Big RBI plays (3+) with explosions\n- **Better base runners**: Shows `[1B:Lindor 2B:Soto 3B:○]` with player names instead of just `◉◉○`\n- **Integrated pitch counts**: Clean `(2-1, 5p)` format combining ball-strike count with pitch count\n- Disable color with --no-color\n- Pre-game shows probable pitchers and local start time\n- If a team has multiple games today, you can select which one to follow\n\n## CLI reference\n\n- team: team id, abbr, or name (e.g., 119, LAD, Dodgers)\n- `--team`: same as positional team\n- `--date YYYY-MM-DD`: date to search (default: today in Los Angeles)\n- `--gamepk`: MLB gamePk to stream directly\n- `--interval`: poll seconds (default 2.5)\n- `--pitches`: print each pitch\n- `--from-start`: print all prior at-bats on first fetch\n- `--no-color`: disable ANSI color\n- `--scoring-only`: only print scoring plays and inning transitions\n- `--opponent TEAM`: disambiguate doubleheaders by opponent (id, abbr, or name)\n- `--log FILE`: append the live stream to a file\n- `--dump FILE`: write full game log for the selected game and exit\n- `--tz ZONE`: override local timezone (e.g., America/New_York)\n- `--line-score`: print inning-by-inning linescore under the scoreboard\n- `--box-interval N`: every N minutes, reprint the scoreboard even if unchanged\n- `--quiet`: only scoreboard and inning banners\n- `--verbose`: extra details (pitches and runners)\n\n## Notes\n\n- Data comes from MLB StatsAPI schedule and the v1.1 live feed\n- Uses If-None-Match to avoid reprinting unchanged states\n - Team IDs are cached in `~/.utilityman/teams-\u003cseason\u003e.json` to reduce API calls\n\n## Config (optional)\n\nCreate `~/.utilityman/config.toml` to set defaults:\n\n```toml\nteam = \"Dodgers\"          # default team\ntz = \"America/Los_Angeles\" # IANA timezone\ninterval = 2.5             # poll seconds\nno_color = false           # disable ANSI color\nline_score = true          # show inning-by-inning line score\nbox_interval = 5           # minutes between forced scoreboard prints\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstiles%2Futilityman","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstiles%2Futilityman","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstiles%2Futilityman/lists"}