This is the master agent instruction file for this repository. Keep repository policy here. AGENTS.md exists only as a Codex compatibility shim and should contain only Codex-specific notes.
cmd/bkt/contains the CLI entry point; the binary executesinternal/bktcmd.internal/hosts non-exported wiring, including configuration (internal/config) and build metadata.pkg/holds reusable packages consumed by Cobra commands such aspkg/cmd/repoandpkg/bbdc.- Tests live alongside Go packages; add
_test.gofiles next to the implementation.
make buildcompiles the CLI withgo build ./cmd/bkt.make testorgo test ./...runs the full unit test suite.make fmtformats the codebase withgo fmt ./....make tidysyncs module dependencies withgo mod tidy.go run ./cmd/bkt --helpis the quick local smoke test.- Windows-native development is supported: the same Make targets run under GNU
Make with cmd.exe-pinned recipes, and the
build-windowsCI job is the source of truth for what works on Windows.
- Follow standard Go conventions: tabs for indentation, PascalCase for exported identifiers, camelCase for private helpers.
- Keep package names short and lowercase; command packages live under
pkg/cmd/<topic>. - Prefer contextual errors such as
fmt.Errorf("action: %w", err). - Run
go fmtbefore committing; add comments only when the logic is not obvious.
- Prefer table-driven tests in
_test.gofiles namedTest<Subject>. - Use golden files under
testdata/when CLI output snapshots add value. - Cover flag parsing, API adapters, and error paths; mock HTTP interactions where needed.
- Use
go test ./pkg/...for faster package-focused iteration.
- Release from
masteronly through./scripts/release.sh X.Y.Zand the resulting release PR; do not create manual tags or GitHub releases. - A push to
masterupdates the AvivSinai marketplace immediately for thebktskill. - Keep
CHANGELOG.mdand skill/plugin metadata on one version in the release commit; after the release PR merges, CI validates the merged commit, creates the tag, publishes GitHub/Homebrew artifacts, and uses the committed changelog entry as the GitHub release notes. - Official release binaries must keep Bitbucket Cloud browser OAuth
(
bkt auth login --kind cloud --web) zero-config by embedding bkt's OAuth consumer credentials through GoReleaser ldflags. Source and Nix builds may rely onBKT_OAUTH_CLIENT_ID/BKT_OAUTH_CLIENT_SECRET, but removing release-binary embedding is a breaking user-facing auth change and must not be done as generic security hardening. Keepscripts/check-oauth-release-contract.shin CI/release verification. - See
docs/RELEASE.mdfor the full release handbook.
- Use conventional commits such as
feat:,fix:,docs:,ci:, orchore:. - Keep commits focused and descriptive; reference issues in the body when useful.
- Pull requests should include a short summary plus testing notes such as
go test ./....
- Never commit real credentials; the CLI reads tokens from
$XDG_CONFIG_HOME/bkt/config.yml. - Use environment overrides such as
BKT_CONFIG_DIRfor sandbox testing without touching primary config.