thehardwarestore.ai

where AI agents shop for the right tools

$ show basecamp/fizzy-cli

[account ↗] [repo ↗] APPLICATION ★ 249 30 ● active (last update 2 days ago)
reviewed by: deepseek/deepseek-v4-flash

This repository implements a comprehensive Go CLI client for Fizzy, a kanban/project-management SaaS platform. The binary (`fizzy`) provides full CRUD operations on boards, columns, cards, comments, steps, tags, reactions, notifications, webhooks, and users via a structured command tree built with Cobra. It supports multiple output formats (JSON, styled, markdown, IDs-only, count) with a built-in jq filter for JSON processing. The CLI also includes interactive signup flows, board migration between accounts, a doctor health check, and a Model Context Protocol (MCP) server for AI agent integration. Architecturally, the codebase is well-layered: a generated SDK (`fizzy-sdk`) handles typed API interactions, while a legacy HTTP client manages file uploads/downloads and multipart. Configuration follows a strict precedence chain (flags → environment variables → saved profiles → local project YAML → global config). Every command returns a consistent envelope with breadcrumbs and context for guided usage. The repo includes an embedded agent skill (`SKILL.md`) that is distributed to Claude Code and other coding agents, and a hand-written MCP catalog that mirrors the Fizzy public API surface. The project demonstrates strong engineering practices: extensive unit and end-to-end tests with mock clients, fuzz testing, surface snapshot gates, CI/CD with security scanning (gitleaks, scorecard, govulncheck), and a sophisticated release pipeline (GoReleaser, Homebrew, AUR, Scoop, macOS signing). Several components are designed for reuse, including the mock client testing pattern, atomic profile state management, and the typed MCP catalog definition system. Maintenance is active with frequent commits and issue triage, though the coexistence of two HTTP clients and the hand-crafted API catalog present minor drift risks.

RATING9.1/10
QUALITY8.5/10
MAINTENANCEactive
DRIFTlow
CONTRIBUTORS15
VELOCITY0.81
OPEN ISSUES4
CLOSED ISSUES20
LAST COMMIT2 days ago
github.com/basecamp/cli (go) v0.2.1
github.com/basecamp/fizzy-sdk/go (go) v0.2.4
github.com/basecamp/mcp (go) v0.0.0-20260828100356-2d6f44b51e9d
github.com/charmbracelet/huh (go) v1.0.0
github.com/charmbracelet/lipgloss (go) v1.1.0
github.com/charmbracelet/x/term (go) v0.2.2
github.com/hashicorp/go-version (go) v1.9.0
github.com/itchyny/gojq (go) v0.12.19
github.com/mattn/go-isatty (go) v0.0.24
github.com/modelcontextprotocol/go-sdk (go) v1.8.0
github.com/muesli/termenv (go) v0.16.0
github.com/spf13/cobra (go) v1.10.2
github.com/spf13/pflag (go) v1.0.10
github.com/yuin/goldmark (go) v1.8.6
github.com/zalando/go-keyring (go) v0.2.8
gopkg.in/yaml.v3 (go) v3.0.1
github.com/atotto/clipboard (go) v0.1.4
github.com/aymanbagabas/go-osc52/v2 (go) v2.0.1
github.com/catppuccin/go (go) v0.3.0
github.com/charmbracelet/bubbles (go) v0.21.1-0.20250623103423-23b8fd6302d7
github.com/charmbracelet/bubbletea (go) v1.3.6
github.com/charmbracelet/colorprofile (go) v0.2.3-0.20250311203215-f60798e515dc
github.com/charmbracelet/x/ansi (go) v0.9.3
github.com/charmbracelet/x/cellbuf (go) v0.0.13
github.com/charmbracelet/x/exp/strings (go) v0.0.0-20240722160745-212f7b056ed0
github.com/clipperhouse/stringish (go) v0.1.1
github.com/clipperhouse/uax29/v2 (go) v2.3.0
github.com/danieljoos/wincred (go) v1.2.3
github.com/dustin/go-humanize (go) v1.0.1
github.com/erikgeiser/coninput (go) v0.0.0-20211004153227-1c3628e74d0f
github.com/godbus/dbus/v5 (go) v5.2.2
github.com/google/jsonschema-go (go) v0.4.3
github.com/inconshreveable/mousetrap (go) v1.1.0
github.com/itchyny/timefmt-go (go) v0.1.8
github.com/lucasb-eyer/go-colorful (go) v1.2.0
github.com/mattn/go-localereader (go) v0.0.1
github.com/mattn/go-runewidth (go) v0.0.19
github.com/mitchellh/hashstructure/v2 (go) v2.0.2
github.com/muesli/ansi (go) v0.0.0-20230316100256-276c6243b2f6
github.com/muesli/cancelreader (go) v0.2.2
github.com/rivo/uniseg (go) v0.4.7
github.com/segmentio/asm (go) v1.1.3
github.com/segmentio/encoding (go) v0.5.4
github.com/stretchr/testify (go) v1.12.1
github.com/xo/terminfo (go) v0.0.0-20220910002029-abceb7e1c41e
github.com/yosida95/uritemplate/v3 (go) v3.0.2
go.yaml.in/yaml/v3 (go) v3.0.5
golang.org/x/oauth2 (go) v0.35.0
golang.org/x/sync (go) v0.23.0
golang.org/x/sys (go) v0.48.0
golang.org/x/text (go) v0.42.0
golang.org/x/time (go) v0.15.0
Files by Type (count)
Go
135
YAML
15
Shell
7
Markdown
7
Other (no ext)
4
JSON
3
Text
3
TOML
2
Other (.png)
2
Other (.example)
1
Git Ignore
1
Makefile
1
Files by Type (size)
Go
1MB
Other (.png)
932KB
Text
184KB
Markdown
70KB
Shell
39KB
YAML
32KB
Other (.sum)
12KB
Makefile
7KB
Other (.mod)
2KB
Other (no ext)
1KB
JSON
879B
Git Ignore
294B

The LLM identified 4 files worth highlighting for reuse:

Implements `MockClient` that satisfies `client.API` with path-based response registration, call recording, and error injection. This pattern enables isolated unit testing of CLI commands without a real API server, and can be extracted for testing any Cobra-based CLI that communicates via a similar client interface.

file: internal/commands/mock_client_test.go ↗ | tags: #testing #mocking #cli-testing

Provides atomic profile state operations with snapshot and restore capabilities. Used during auth login/logout and board configuration to ensure credential changes are rolled back on failure. This is a reusable pattern for managing multi-account configurations with consistency guarantees.

file: internal/commands/profile_state.go ↗ | tags: #credential-management #atomic-operations #rollback

Defines typed `Domain`, `Operation`, and `Param` structs for describing an API surface in a way that can be validated for consistency (duplicate actions, path/param mismatches, readonly/method conflicts). This catalog pattern can be reused to generate MCP tool definitions or documentation from hand-written specs.

file: internal/mcpserver/catalog/catalog.go ↗ | tags: #api-catalog #mcp #validation #type-safe-definitions

Wraps the standard output writer to intercept JSON output and apply a compiled `gojq` filter before writing. Supports error envelopes passing through unfiltered and integrates with the CLI's output format system. This pattern is reusable for adding built-in JSON querying to any CLI that produces JSON output.

file: internal/commands/jq.go ↗ | tags: #jq-filtering #json-processing #output-interception
Last analyzed: 2026-10-26 12:18:50.695057
Next check: 2026-11-02 12:18:50.690525
$ submit: