A desktop task manager application built with Electron, React, and TypeScript, with integrated AI chat powered by Usable.
- Task management with drag-and-drop Kanban board
- Timeline (Gantt) view with drag-to-resize scheduling
- Dependency graph visualization with React Flow
- Task assignees with workspace member support
- Integrated AI chat via Usable Chat embed
- Dark/light theme support
- Framework: Electron + Vite
- Frontend: React 19, TypeScript
- Styling: Tailwind CSS 4
- UI Components: Lucide React icons
- State Management: TanStack Query
- Drag & Drop: @hello-pangea/dnd
- Flow Diagrams: React Flow + ELK.js
- Node.js 18+ or Bun
# Install dependencies
bun install# Start development server
bun run dev# Build for production
bun run build
# Preview production build
bun run preview# Build and package for your platform
bun run dist --mac # macOS (.dmg)
bun run dist --win # Windows (.exe)
bun run dist --linux # Linux (.AppImage, .deb)The packaged application will be output to the dist/ directory.
On first launch, log in and select a Usable workspace in the Settings modal. The AI chat embed is preconfigured and works out of the box.
| Variable | Type | Description | Default | Required |
|---|---|---|---|---|
| APP_NAME | string | Application display name (window title, sidebar, tray tooltip) | "My Tasks Planner" | |
| APP_ID | string | macOS bundle identifier (used when packaging with bun run dist) |
"com.flowcore.my-tasks-plan" |
If you need to point the chat embed to a different URL or use a different embed token (e.g., for local development), open Settings > Advanced and override:
- Chat Embed URL - defaults to
https://chat.usable.dev - Embed Token - defaults to the built-in public token
These overrides are stored in localStorage and persist across sessions.
To create a custom AI expert that powers the embedded chat:
-
Navigate to Experts
- Go to Usable Chat and log in
- Navigate to
/settings/expertsor access from the settings menu
-
Create a New Expert
- Click "Create Expert"
- Fill in the basic information:
- Name: A descriptive name (e.g., "Task Planning Assistant")
- Description: What this expert specializes in
- Icon/Emoji: Visual identifier (e.g., 📋)
-
Configure the System Prompt
- Write a detailed system prompt that defines the expert's behavior
-
Enable Tools
- Select which built-in tools the expert can use:
agentic-search-fragments- Search knowledge base semanticallyget-memory-fragment-content- Read full fragment contentlist-memory-fragments- List and filter fragmentsexa-search- Web search capabilitiesexa-get-contents- Extract content from URLs
- Lock tools if users shouldn't be able to disable them
- Select which built-in tools the expert can use:
-
Add Parent Tools (Required)
- Parent tools allow the AI to interact with this application
- In the expert settings, add the following parent tools (name only, schema is provided by the app at runtime):
list_tasks- List all tasks with optional filteringget_task- Get a single task by IDcreate_task- Create a new taskupdate_task- Update an existing taskdelete_task- Archive a taskadd_dependency- Add a dependency between tasksremove_dependency- Remove a dependencyget_task_graph- Get the full task dependency graphadd_comment- Add a comment to a tasklist_comments- List comments on a tasklist_members- List workspace members
-
Link Expert to Embed Configuration
- Go to
/settings/embeds - Edit your embed configuration
- Set your custom expert as the "Main Agent"
- Go to
| Tool | Description |
|---|---|
agentic-search-fragments |
Semantic search across knowledge fragments |
get-memory-fragment-content |
Retrieve full content of a specific fragment |
list-memory-fragments |
List fragments with SQL-like filtering |
exa-search |
Search the web for information |
exa-get-contents |
Extract and read content from URLs |
src/
├── main/ # Electron main process
├── preload/ # Electron preload scripts
├── renderer/ # React frontend
└── shared/ # Shared utilities
MIT