Thanks for your interest in afk, a local SQLite task queue for coding agents.
Requires Go 1.26+.
go build ./...
go vet ./...
go test -race ./...A change is ready to send when all three pass.
cmd/afk/main.go— thin entry point; keep it small.internal/commands/— thin CLI wrappers over the service layer.internal/app/— business logic (theServiceuse cases over theStoreinterface).internal/store/— SQLite persistence (SQLiteStoreimplementsapp.Store).internal/task/— domain types; no I/O.docs/— user-facing documentation.
Follow standard Go style and the workspace conventions: log/slog for logging, fmt.Errorf with %w for wrapping, errors.Join for aggregation, Kong for the CLI. Files over ~300 lines are a tripwire — extract before growing further. Every DB and HTTP call propagates the caller's ctx; do not reach for context.Background() inside domain code.
t.Parallel()on all tests and subtests.- Unit tests under 1s; gate slow or integration tests behind
testing.Short(). - Prefer
testing/synctestovertime.Sleepin time-dependent tests.
- For non-trivial work, open an issue first to align on scope.
- Branch from
main. - Keep commits focused with
type(scope): descriptionsubjects (feat, fix, refactor, docs, test, chore). - Open a pull request against
main.
Security-sensitive reports: see SECURITY.md.