Skip to content

Conversation

@jeremy
Copy link
Member

@jeremy jeremy commented Jan 13, 2026

Introduces fizzy, an agent-first CLI for Fizzy.

Fizzy CLI

  • Foundation: Entry point, config management, API client, OAuth auth flow
  • Queries: boards, cards, columns, people, tags, search, notifications, show
  • Actions: card create, close, reopen, triage, postpone, comment, assign, tag, watch, gild, step
  • Ergonomics: Name resolution, --in alias, multi-origin credential storage, pagination
  • Distribution: Install script, bash/zsh completions, README

Design Highlights

  • Agent-first: JSON envelopes with breadcrumbs, predictable patterns
  • Human-friendly: Markdown output in TTY, rich help text
  • Dependencies: Bash 4+, curl, jq
  • Builds on Minimal modern OAuth 2.1 stack #2296 for seamless auth

Test plan

  • All 256 bats tests pass (bats test/*.bats)
  • Smoke tested against http://fizzy.localhost:3006
  • OAuth flow works (browser and --no-browser modes)
  • Name resolution works across paginated endpoints
  • Card create chains follow-up actions (triage, tag, assign)

Agent-first CLI for Fizzy API interaction:
- OAuth 2.1 with RFC 8414 discovery, DCR, and PKCE
- 7-layer config hierarchy (system/user/repo/local/env/flags)
- HTTP client with ETag caching and exponential backoff
- JSON/Markdown output with auto-detection
- 72 passing bats tests
@jeremy jeremy changed the base branch from main to oauth January 13, 2026 18:13
@jeremy jeremy changed the title Fizzy CLI and OAuth 2.1 support Fizzy CLI Jan 13, 2026
@jeremy jeremy force-pushed the cli branch 4 times, most recently from 6ef263c to b67cf2e Compare January 13, 2026 18:45
Three improvements:

1. _wait_for_callback: Avoid SIGPIPE killing nc before HTTP response sent.
   The `nc | head -1` pipe causes head to close stdin after reading one
   line, sending SIGPIPE to nc before it finishes writing the response.
   Now captures nc output to temp file before reading with head.

2. _exchange_code: Only include client_secret for confidential clients.
   Public clients (registered via DCR) have no secret, and sending an
   empty client_secret= parameter can cause some OAuth servers to reject
   the request.

3. _register_client: Request scope in DCR to ensure CLI gets proper
   permissions.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants