lazyshell

Development

lazyshell is a Go project with no code generation and no exotic build step: go build, go test, golangci-lint.

Build and test

$ make build   # go build -o bin/lazyshell ./cmd/lazyshell
$ make test    # go test -race ./...
$ make lint    # golangci-lint run

CI runs the same commands on ubuntu-latest and macos-latest, plus a performance budget (go test -run TestPerfBudget ./...). The golangci-lint version is pinned in the workflow so CI and make lint cannot disagree.

Package layout

cmd/
  lazyshell/      main entrypoint
  spike-pty/      phase-1 pty spike (kept for reference, not part of the binary)
pkg/
  app/            bootstrap: load config, build SessionManager, run gui.Run()
  session/        SessionManager: CRUD (New, Kill, List); Session{cmd, ptmx, scrollback,
                  status}; Env() (launch-time) and Stats() (per-OS CPU/RSS/disk sampling)
  screen/         terminal emulator backing the output panel (vim/htop/less support)
  gui/            gocui init, layout, keybindings, mouse, panels, tabs, help, theme,
                  notify, stats
  tasks/          TaskManager (display/reading goroutines only)
  agent/          AI agent state detection (config-free + hooks-driven)
  hook/           authoritative hooks channel for agent sessions
  config/         user config + project config (lazyshell.yml) loading
  keys/           keybinding definitions
  i18n/           strings/translations
  version/        --version metadata (goreleaser-injected)
docs/
  adr/            architecture decision records
  repports/       historical analysis reports

Architecture decisions

ADRs

ROADMAP.md tells the phase-by-phase story: what is built, what is still open, and why.

Contributing