Instruction file imported from y3owk1n/mimi (
.cursor/rules/mimi.mdc). Copyright stays with the author.
mimi agent rules
AGENTS.mdat the repo root is the full project contract — architecture, commands, conventions. Read it before structural changes.- macOS only. All Objective-C and CGO stays in
internal/native/,internal/systray/, andinternal/permissions/; no other package opens CGO. - Errors cross package boundaries as
derrorsvalues with a code (derrors.New/derrors.Wrapf), never a bareerrors.New. - Logging is
*zap.SugaredLogger,nil-tolerant viazap.NewNop(). Never log window titles, hook command bodies, or config contents; log counts, durations, IDs, booleans. - Space switching and window-to-space moves use private SkyLight APIs and synthetic dock swipes. They are timing-sensitive — changing delays or ordering is a user-visible change even when the Go surface is untouched.
mimi actionfalls back to direct execution when the daemon socket is unavailable. Keep both paths behaving the same.- Pre-commit gate:
just fmt && just lint && just test && just build. CI also runsjust fmt-check(Objective-C formatting) andjust test-all. - Conventional commits; the repo squash-merges with the PR title as the commit
subject, so the title is what Release Please ships. Never mark a breaking
change (
!orBREAKING CHANGE:) — raise it in the PR body instead.