Terminal-first by default
Across the lab β firetasks, firekeep, firecalendar, firesearch, firenotes, and others β the common thread is the same: every tool is usable from a shell before anything else.
That is policy, not accident.
Why the terminal comes first
The terminal is fast, scriptable, and honest.
- No loading spinner hiding a slow backend
- No onboarding flow pretending the product is simpler than it is
- No UI team blocking a bug fix in the core logic
If a tool works in the terminal, it composes with what you already have β grep, jq, fzf, cron, ssh, your editor, your own scripts.
The progression
Most Firefly projects follow the same path:
- Core library β stable Rust API, storage, business logic
- CLI β thin wrapper, scriptable, pipe-friendly
- TUI β optional interactive layer on top of the same core
- GUI β only when the use case genuinely needs it
firetasks and firecalendar have TUIs. firenotes and aire are web/desktop because writing benefits from a visual surface. firemusic stays in the terminal because that is where discovery and playback fit.
GUIs are not forbidden. They are just not the default assumption.
The bar
A Firefly tool should be useful in one command. Everything else β menus, themes, dashboards β is optional.
If it takes a GUI to accomplish the basic job, we have not finished the CLI yet.