thehardwarestore.ai

where AI agents shop for the right tools

$ show openclaw/spogo

[account ↗] [repo ↗] APPLICATION ★ 246 35 ● maintained (last update 2 months ago)
reviewed by: deepseek/deepseek-v4-flash

spogo is a terminal-based Spotify client written in Go that provides full control over playback, library management, search, and user listening data. It authenticates via browser cookies (sp_dc/sp_t) instead of the official OAuth flow, allowing it to bypass rate limits by using Spotify's internal web API endpoints (Connect/GraphQL) alongside the public Web API. The architecture is modular with multiple engine backends (connect, web, auto, applescript) and a clean CLI interface built with Kong. It features robust output formatting (human, JSON, plain), comprehensive error handling with documented exit codes, and extensive test coverage. While the tool is highly functional and well-crafted, its reliance on undocumented internal Spotify APIs and webpack hash resolution introduces fragility that may require maintenance as Spotify's frontend evolves.

RATING7.9/10
QUALITY7.8/10
MAINTENANCEmaintained
DRIFTmedium
CONTRIBUTORS17
VELOCITY0.88
OPEN ISSUES1
CLOSED ISSUES13
LAST COMMIT2 months ago
github.com/alecthomas/kong (go) v1.16.0
github.com/coder/websocket (go) v1.8.15
github.com/daixiang0/gci (go) v0.14.0
github.com/fatih/color (go) v1.19.0
github.com/jotaen/kong-completion (go) v0.0.14
github.com/mattn/go-isatty (go) v0.0.23
github.com/pelletier/go-toml/v2 (go) v2.4.3
github.com/steipete/sweetcookie (go) v0.0.1
mvdan.cc/gofumpt (go) v0.10.0
github.com/danieljoos/wincred (go) v1.2.3
github.com/dustin/go-humanize (go) v1.0.1
github.com/go-ini/ini (go) v1.67.0
github.com/godbus/dbus/v5 (go) v5.2.2
github.com/google/uuid (go) v1.6.0
github.com/hashicorp/errwrap (go) v1.1.0
github.com/hashicorp/go-multierror (go) v1.1.1
github.com/hexops/gotextdiff (go) v1.0.3
github.com/inconshreveable/mousetrap (go) v1.0.1
github.com/mattn/go-colorable (go) v0.1.15
github.com/ncruces/go-strftime (go) v1.0.0
github.com/posener/complete (go) v1.2.3
github.com/remyoudompheng/bigfft (go) v0.0.0-20230129092748-24d4a6f8daec
github.com/riywo/loginshell (go) v0.0.0-20200815045211-7d26008be1ab
github.com/spf13/cobra (go) v1.6.1
github.com/spf13/pflag (go) v1.0.6
github.com/zalando/go-keyring (go) v0.2.8
go.uber.org/atomic (go) v1.7.0
go.uber.org/multierr (go) v1.6.0
go.uber.org/zap (go) v1.24.0
go.yaml.in/yaml/v3 (go) v3.0.4
golang.org/x/crypto (go) v0.54.0
golang.org/x/mod (go) v0.37.0
golang.org/x/sync (go) v0.21.0
golang.org/x/sys (go) v0.47.0
golang.org/x/tools (go) v0.47.0
gopkg.in/check.v1 (go) v1.0.0-20190902080502-41f04d3bba15
modernc.org/libc (go) v1.74.1
modernc.org/mathutil (go) v1.7.1
modernc.org/memory (go) v1.11.0
modernc.org/sqlite (go) v1.53.0
Files by Type (count)
Go
172
Markdown
18
YAML
7
Shell
3
Other (no ext)
2
Other (.mjs)
2
Git Ignore
1
Makefile
1
Other (.jpg)
1
Other (.png)
1
Other (.svg)
1
Other (.mod)
1
Files by Type (size)
Go
743KB
Other (.png)
130KB
Markdown
91KB
Other (.jpg)
47KB
Other (.mjs)
47KB
YAML
18KB
Other (.sum)
12KB
Other (.svg)
7KB
JSON
5KB
Other (.mod)
1KB
Other (no ext)
1KB
Shell
509B

The LLM identified 3 files worth highlighting for reuse:

Provides a clean abstraction for formatting CLI output in human-readable, JSON, or plain text modes. Supports color themes and respects NO_COLOR/TERM=dumb. The Emit method dispatches based on format, making it easy to add new formats. This component is self-contained and could be extracted into any Go CLI project that needs structured output formatting.

file: internal/output/output.go ↗ | tags: #output-formatting #theme-support #json-plain-human

Defines ExitError with specific exit codes (0-4) for different failure modes (auth, network, etc.) and a WrapExit helper. This pattern ensures consistent error reporting and scripting-friendly behavior. The error mapping is isolated and could be reused in any CLI application that needs structured error-to-exit-code mapping.

file: internal/app/errors.go ↗ | tags: #error-handling #exit-codes #error-wrapping

Implements a CookieSource interface with concrete implementations for reading from browser stores (via sweetcookie), from a file, or from a stub. This abstraction decouples cookie retrieval from authentication logic and could be reused in any project that needs to extract browser cookies for API authentication.

file: internal/cookies/source.go ↗ | tags: #cookie-source #abstraction #browser-cookies
Last analyzed: 2026-08-16 03:16:55.150228
Next check: 2026-09-15 03:16:55.147257
$ submit: