Thank you for your interest in contributing! Full contributor documentation is at triptechtravel.github.io/clickup-cli/contributing.
git clone https://github.com/triptechtravel/clickup-cli.git
cd clickup-cli
# Install codegen tool (one-time)
go install github.com/oapi-codegen/oapi-codegen-exp/experimental/cmd/oapi-codegen@latest
# Generate API clients from ClickUp OpenAPI specs
make api-gen
# Build and test
go build -o clickup ./cmd/clickup
go test ./...
go vet ./...Requires Go 1.25 or later.
All ClickUp API calls go through a single code path:
CLI command (pkg/cmd/*)
→ apiv2/local.go wrappers (typed, decode into internal/clickup types)
→ apiv2.do() helper (JSON marshal, HTTP transport, error handling)
→ api.Client.DoRequest() (auth header, rate limiting, 429 retry)
| Package | Purpose |
|---|---|
internal/clickup/ |
Local type definitions (Task, List, Folder, etc.) with stable JSON tags |
internal/apiv2/local.go |
Typed wrappers that decode API responses into local types |
internal/apiv2/operations.gen.go |
Auto-generated wrappers using codegen types (used for tag/checklist/time operations) |
internal/apiv3/operations.gen.go |
Auto-generated V3 wrappers (chat, docs, audit) |
api/clickupv2/, api/clickupv3/ |
Auto-generated request/response types from OpenAPI specs |
internal/api/ |
HTTP client with auth, rate limiting, error handling |
pkg/cmd/*/ |
CLI commands (cobra) |
pkg/cmdutil/ |
Shared helpers (config, custom IDs, sprint resolution) |
Generated code is gitignored — run make api-gen after cloning.
make api-gen
├── Fetches V2 + V3 specs from developer.clickup.com
├── oapi-codegen → types (api/clickupv2/, api/clickupv3/)
├── gen-api -fix → resolves broken $refs via spec introspection (fixes.gen.go)
└── gen-api → typed wrapper functions (internal/apiv2/, internal/apiv3/)
- New commands that need task/list/folder/space/team data: use
apiv2.*Localwrappers inlocal.go— they decode intointernal/clickuptypes - Operations already covered by generated wrappers (tags, checklists, time entries): use
apiv2.*fromoperations.gen.gowithclickupv2.*request types - V3 API (chat, docs): use
apiv3.*fromoperations.gen.go - New API endpoints not yet generated: add to
local.gousing thedo()helper
- Create
pkg/cmd/<group>/<command>.go - Use
apiv2.*Localfor API calls (seepkg/cmd/folder/list.gofor a clean example) - Register in
pkg/cmd/root/root.go - Add tests in
pkg/cmd/<group>/<command>_test.go(useinternal/testutil/) - Run
go run ./cmd/gen-docsto regenerate reference docs - Update
skills/clickup-cli/SKILL.mdwith usage examples
- Fork the repository and create your branch from
main - Make your changes and add tests for new functionality
- Run
make api-gen && go build ./... && go test ./... && go vet ./... - Submit a pull request with a clear description
Releases use GoReleaser via GitHub Actions:
- Tag the release:
git tag v0.x.0 - Push the tag:
git push origin v0.x.0 - GitHub Actions runs
make api-gen, builds, and publishes binaries - Homebrew formula is auto-updated in
triptechtravel/homebrew-tap
Install: brew install triptechtravel/tap/clickup
By contributing, you agree that your contributions will be licensed under the MIT License.