Skip to content

Commit e446094

Browse files
feat(ui): implement project organization and multi-selection support
Introduces first-class project support throughout the application, including: - Task model updates to support a `project` field. - New `ProjectSwitcher` UI component and `ctrl+e` keybinding. - Configuration options for default projects and switcher behavior. - Database migrations to persist project data. - UI enhancements for project display in headers, task details, and editors. Adds multi-selection capabilities to the task list: - Toggle selection with `Space`. - Bulk actions (complete/delete) for selected tasks. - Visual indicators for selected items. Implements tag highlighting via configuration: - Support for custom hex codes and theme-aware `ui-*` aliases. - Dynamic tag styling in the task list. Other changes: - Added task duplication functionality (`ctrl+d`). - Updated keybindings to accommodate new features. - Improved task editor with dedicated project input.
1 parent 7d879b2 commit e446094

22 files changed

Lines changed: 637 additions & 223 deletions

File tree

CHANGELOG.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,35 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [1.5.5]
9+
10+
### Added
11+
- **Project Support**: Added first-class project organization.
12+
- Tasks now support a `project` field.
13+
- Added a `ProjectSwitcher` popup (default shortcut: `ctrl+e`) for quick navigation between projects.
14+
- Added `[projects] default = "project_name"` config to set startup project.
15+
- Added `<All Projects>` view to see tasks across all contexts.
16+
- Projects are now visible in the header and can be optionally displayed in the list view.
17+
- Added per-tag color highlighting via `[tags.highlight]` in config.toml with `ui-*` theme alias support.
18+
- Added `edit.preview` config option to persist the preview panel's default state.
19+
- Added task duplication with `D` shortcut; automatically opens edit mode on the duplicate.
20+
- Added Multi-Selection support:
21+
- Toggle task selection with `Space`.
22+
- Bulk actions (complete/delete) for selected tasks via `z` and `d`.
23+
- Clear selection with `Esc`.
24+
- **Config**: Added `[projects]` section to `config.toml` for default project, switcher shortcut, and column visibility settings.
25+
- **Help Menu**: Added `ProjectSwitcher` (`ctrl+e`) to help menu keybindings list.
26+
27+
### Fixed
28+
- Project list no longer displays empty projects (projects with no tasks are filtered out from the switcher).
29+
- Project Switcher now only responds to `esc` for closing (no longer toggled by `p` ManagePlugins key).
30+
- Fixed project list not updating in real-time when new projects are created.
31+
32+
### Changed
33+
- **Task Editor**: Added dedicated Project input field.
34+
- **UI**: Added project display pill to header.
35+
- **Keybindings**: Changed `Welcome Tour` keybind from `ctrl+d` to `ctrl+w` to accomodate the `duplicate task` keybind.
36+
837
## [1.5.4]
938

1039
### Added

README.md

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -77,46 +77,59 @@ Press `n` to create your first task. `ctrl+s` to save. That's it.
7777
Sub-millisecond fuzzy search. Vim bindings (`j/k/gg/G`). Natural language deadlines like `tomorrow 10am` or `next friday`. Full keyboard control — you never touch the mouse.
7878

7979
### 🗂 Nested Tasks & Hierarchy
80-
Organize work into deep hierarchies. Nest tasks via the **Parent** field in the editor, collapse/expand with `Space`, and export/import with full structure preserved — across JSON, CSV, Markdown, and plain text.
80+
Organize work into deep hierarchies and separate projects. Nest tasks via the **Parent** field in the editor, switch projects with `ctrl+e` to focus your workspace, and export/import with full structure preserved — across JSON, CSV, Markdown, and plain text.
8181

8282
### 🔁 Recurring Tasks
8383
Tasks reappear automatically on a schedule. Weekly (`mon,wed,fri`) or monthly (`15`). When completed, Kairo generates the next instance immediately with a smart due-date preview.
8484

8585
### 🔒 Your Data, Locally
86-
SQLite with WAL mode. Fully offline. Optional Git-backed sync — no backend, no account, no lock-in. Export to JSON, CSV, Markdown, or plain text on demand.
86+
SQLite with WAL mode. Fully offline. Optional Git-backed sync — no backend, no account, no lock-in. Export to JSON, CSV, Markdown, or plain text on demand. Project organization is preserved in your database.
8787

8888
### 🧭 Interactive Stats Dashboard
8989
Press `s` to open a next-gen "Command Center". Visualize your **Productivity DNA**, track real-time momentum, and get behavioral insights like "You complete 73% more tasks at night". Fully animated, keyboard-driven, and deeply insightful.
9090

9191
### 🤖 AI — Optional, Never Intrusive
92-
Gemini integration (`gemini-3.1-flash-lite-preview` / `gemini-2.5-flash-lite` / `gemini-2.0-flash-lite`). Toggle with `ctrl+a`. Create and manage complex recurring tasks with natural language. Invisible until you need it.
92+
Gemini integration (`gemini-3.1-flash-lite-preview` / `gemini-2.5-flash-lite` / `gemini-2.0-flash-lite`). Toggle with `ctrl+a`. Create and manage complex recurring tasks with natural language, including assigning to specific projects. Invisible until you need it.
9393

9494
### 🎨 Beautiful by Default
9595
32 built-in themes with edge-to-edge background coverage. Live switching with `t`. Bento-style layout. Real-time Markdown preview (`ctrl+p`). Cinematic create/complete/delete animations — or disable them entirely in `config.toml`.
9696

9797
### 🧩 Extensible to the Core
9898
A Lua plugin system hooks into task events. A headless CLI API enables full scripting. An MCP server opens Kairo to AI agents — with complete support for recurring schedules and nested hierarchies.
9999

100+
### 🎨 Tag Highlighting
101+
Color-code your tags directly in `config.toml`. Supports hex codes or theme-aware `ui-*` aliases (e.g., `ui-accent`).
102+
103+
```toml
104+
[tags.highlight]
105+
work = { fg = "#CCCCCC" }
106+
private = "fg=#EEEEEE,bg=#0000FF,bold"
107+
diy = "bg=ui-accent"
108+
```
109+
100110
---
101111

102112
## Keyboard Shortcuts
103113

104114
| Key | Action |
105115
|---|---|
106116
| `n` | New task |
117+
| `D` | Duplicate task |
107118
| `e` | Edit task |
108119
| `z` | Complete task |
109-
| `d` | Delete task |
110-
| `Space` | Collapse / expand subtasks |
120+
| `ctrl+d` | Duplicate task |
121+
| `Space` | Select task / Collapse subtasks |
111122
| `s` | Stats dashboard |
112123
| `f` | Filter by tag |
124+
| `ctrl+e` | Switch project |
125+
| `p` | Manage plugins |
113126
| `t` | Switch theme |
114127
| `ctrl+p` | Command palette / Markdown preview |
115128
| `ctrl+a` | AI panel |
116129
| `ctrl+s` | Settings |
117130
| `x` | Import / Export |
118131
| `?` | Help |
119-
| `ctrl+d` | Welcome tour |
132+
| `ctrl+w` | Welcome tour |
120133

121134
<div align="center">
122135
<img src="screenshots/new_task.png" width="30%" />
@@ -272,7 +285,7 @@ Prefer not to edit files? `ctrl+s` opens the in-app settings menu.
272285

273286
PRs are welcome — especially for themes, plugins, performance, and docs. If something bugs you, fix it.
274287

275-
Huge thanks to [@Tornado300](https://github.com/Tornado300) for key bug fixes that made Kairo better for everyone.
288+
Huge thanks to [@Tornado300](https://github.com/Tornado300) and [@riodelphino](https://github.com/riodelphino) for key bug fixes and improvements that made Kairo better for everyone.
276289

277290
---
278291

VERSION.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.5.4
1+
1.5.5

configs/kairo.example.toml

Lines changed: 9 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,105 +1,61 @@
11
[app]
2-
# theme name (built-in) or a plugin-provided theme id
32
theme = "catppuccin"
4-
5-
# enable vim-style navigation bindings in the UI
63
vim_mode = false
7-
8-
# show the help footer at the bottom of the screen
94
show_help = true
10-
11-
# show task ids in the detail view
125
show_id = true
13-
14-
# animate the rainbow logo (purely cosmetic)
15-
rainbow = false
16-
17-
# enable/disable UI animations (create/complete/delete transitions, etc.)
186
animations = true
19-
20-
# Optional: AI assistant
21-
# gemini_api_key = ""
7+
rainbow = false
228
ai_model = "gemini-3.1-flash-lite-preview"
23-
24-
# Optional: MCP server (for tool integrations)
259
mcp_enabled = false
2610
mcp_port = "8080"
11+
active_project = "" # Set a default project here (e.g., "Work")
2712

28-
# internal flag used by onboarding flow
29-
onboarding_completed = false
13+
[projects]
14+
default = "default"
15+
shortcut = "ctrl+e"
16+
show_column = "auto"
3017

3118
[list.order]
32-
# Controls the order of fields rendered on the right side of each task row.
33-
# Valid values: "tags", "due", "priority"
34-
right = ["tags", "due", "priority"]
19+
right = ["project", "tags", "due", "priority"]
3520

3621
[list.fields.due]
37-
# Enable minimal mode for the due date field (default: true).
38-
# Abbreviates "overdue" to "OD" and aligns the column.
3922
minimal = true
4023

41-
[theme]
42-
# Any field set here overrides the built-in theme colors.
43-
# bg = "#0B0F14"
44-
# fg = "#E6EAF2"
45-
# muted = "#9AA4B2"
46-
# border = "#1D2733"
47-
# accent = "#7AA2F7"
48-
# good = "#9ECE6A"
49-
# warn = "#E0AF68"
50-
# bad = "#F7768E"
51-
# overlay = "#101722"
52-
5324
[storage]
54-
# empty = default app data dir
5525
path = "kairo.db"
5626

5727
[sync]
5828
enabled = false
59-
60-
# folder containing a git repo (or where it will be initialized)
6129
repo_path = "tasks-sync"
62-
6330
remote = "origin"
6431
branch = "main"
65-
66-
# ours|theirs
6732
strategy = "ours"
68-
6933
auto_push = true
7034

7135
[plugins]
7236
enabled = true
73-
74-
# empty = default plugins dir
7537
dir = "plugins"
7638

7739
[keymap]
7840
palette = "ctrl+p"
7941
task_search = "/"
80-
8142
new_task = "n"
8243
edit_task = "e"
8344
delete_task = "d"
8445
open_task = "enter"
85-
8646
back = "esc"
8747
quit = "q"
88-
8948
view_inbox = "1"
9049
view_today = "2"
9150
view_upcoming = "3"
9251
view_completed = "4"
9352
view_tag = "f"
9453
view_priority = "5"
95-
9654
cycle_theme = "t"
97-
manage_plugins = "p"
9855
open_plugin_dir = "ctrl+g"
99-
56+
manage_plugins = "p"
10057
toggle_strike = "z"
10158
toggle_collapse = "space"
102-
10359
help = "?"
10460
issues = "i"
10561
discussions = "u"
@@ -108,4 +64,4 @@ settings = "ctrl+s"
10864
import_export = "x"
10965
ai_panel_toggle = "ctrl+a"
11066
stats = "s"
111-
67+
project_switcher = "ctrl+e"

0 commit comments

Comments
 (0)