Contributing
Development Setup
Prerequisites
- Go 1.24.1+
- Node.js 18+
- Wails v2 CLI
tmux
Clone and Setup
git clone https://github.com/philjestin/boatman
cd boatman
go work syncBuild
# CLI
cd cli && go build -o boatman ./cmd/boatman
# Desktop
cd desktop && wails build
# Or use the Makefile
make build-allRun Tests
# CLI tests
cd cli && go test ./...
# Desktop Go tests
cd desktop && go test ./...
# Frontend tests
cd desktop/frontend && npm test
# All tests
make test-allRepository Structure
| Directory | Language | Description |
|---|---|---|
cli/ | Go | BoatmanMode CLI |
desktop/ | Go + TypeScript | Desktop application |
desktop/frontend/ | TypeScript/React | Desktop UI |
harness/ | Go | Model-agnostic agent harness primitives |
shared/ | Go | Shared packages |
docs/ | MDX | Documentation site (Nextra, deployed on Vercel) |
Code Conventions
Go Code
- Use
gofmtfor formatting - Follow standard Go project layout
- Keep packages focused and small
- Write tests alongside implementation
- Use
internal/for non-public packages
TypeScript Code
- Use TypeScript strict mode
- Follow React hooks patterns
- Use functional components
- Keep components small and focused
Commit Messages
Follow the prefix convention:
[cli] feat: add support for file-based prompts
[desktop] fix: correct Okta token refresh
[both] refactor: update event protocol
[docs] add architecture overview
[build] update CI workflowFor CLI auto-versioning:
feat: ... → minor bump
fix: ... → patch bump
breaking: ...→ major bumpDevelopment Workflow
CLI Development
cd cli
# Build and test
go build -o boatman ./cmd/boatman
go test ./...
# Run locally
./boatman work --prompt "Test prompt" --dry-runDesktop Development
cd desktop
# Start dev mode with hot reload
wails dev
# Build for production
wails build -clean -productionDocumentation Development
cd docs
npm install
npm run dev
# Open http://localhost:3000Deploy Documentation
The docs site is deployed on Vercel. After merging docs changes:
cd docs
npx vercel --prodPull Request Process
- Create a feature branch from
main - Make changes following code conventions
- Write or update tests
- Run the full test suite
- Submit PR with a description of changes
- Wait for CI checks to pass
- Request review
Testing Guidelines
Unit Tests
- Test public APIs and critical paths
- Use table-driven tests for Go
- Mock external dependencies
Integration Tests
- Use the
testenvpackage for e2e scenarios - Tag with
//go:build e2efor slow tests - Provide mock servers for external APIs
Frontend Tests
- Test component rendering and interactions
- Use React Testing Library patterns
- Mock Wails bindings