onyx-tasks/README.md
Claude 5664dead36
Implement Phase 1: Core Library & CLI MVP
Complete implementation of Phase 1 from PLAN.md:

Core Library (bevy-tasks-core):
- Data models: Task, TaskList, TaskStatus, AppConfig, WorkspaceConfig
- Storage layer with filesystem implementation
- Markdown file I/O with YAML frontmatter parsing (Obsidian-compatible)
- TaskRepository providing full API for task management
- Multiple workspace support
- Manual task ordering and grouping by due date
- Comprehensive unit tests for all components

CLI Application (bevy-tasks-cli):
- Complete command-line interface with clap
- Workspace management: init, add, list, switch, remove, retarget, migrate
- Task management: add, complete, delete, edit
- List management: create, view
- Group-by-due-date toggle
- Colored output for better UX
- Support for --workspace flag on all commands

Infrastructure:
- Cargo workspace with three crates (core, cli, gui placeholder)
- Clean separation between backend and frontend
- Platform-specific config storage
- Task data stored as .md files with YAML frontmatter

Documentation:
- Comprehensive README with usage examples
- Detailed inline documentation
- Examples for all CLI commands

This completes all deliverables for Phase 1 as specified in PLAN.md.
2025-11-04 17:44:17 +00:00

279 lines
6.4 KiB
Markdown

# Bevy Tasks
A local-first, cross-platform tasks application inspired by Google Tasks. Built with Rust for high performance and true native support across Windows, Linux, macOS, iOS, and Android.
## Core Principles
- **Local-First**: Your data, your folder, your control
- **Fast**: Sub-second startup, instant response
- **Cross-Platform**: Single codebase, all platforms
- **Flexible**: Multiple workspaces for different contexts (personal, shared, work, etc.)
## Features
### Phase 1 (Current) - Core Library & CLI MVP
- ✅ Full-featured task management backend
- ✅ Multiple workspace support
- ✅ Markdown-based task storage with YAML frontmatter (Obsidian-compatible)
- ✅ Manual task ordering
- ✅ Due date support
- ✅ Task grouping by due date
- ✅ Command-line interface (CLI)
- ✅ Comprehensive test coverage
### Coming Soon
- **Phase 2**: WebDAV sync for cross-device synchronization
- **Phase 3**: Desktop GUI with egui
- **Phase 4**: iOS and Android support
- **Phase 5**: Advanced GUI features
- **Phase 6**: Mobile platform-specific features
- **Phase 7**: Advanced features, imports, and collaboration
## Installation
### From Source
```bash
# Clone the repository
git clone <repository-url>
cd bevy-tasks
# Build the CLI
cargo build --release -p bevy-tasks-cli
# The binary will be at: target/release/bevy-tasks
```
## Quick Start
### Initialize Your First Workspace
```bash
# Create a new workspace named "personal" at ~/Documents/Tasks
bevy-tasks init ~/Documents/Tasks --name personal
```
This will:
- Create the tasks folder at the specified location
- Initialize the workspace with proper metadata
- Create a default list called "My Tasks"
- Set it as your current workspace
### Add Tasks
```bash
# Add a simple task
bevy-tasks add "Buy groceries"
# Add a task to a specific list
bevy-tasks add "Review PR #123" --list Work
# Add a task with a due date
bevy-tasks add "Team meeting" --due 2025-11-15
```
### View Tasks
```bash
# List all tasks in all lists
bevy-tasks list
# View tasks in a specific list
bevy-tasks list --list Work
```
### Complete and Delete Tasks
```bash
# Complete a task (use the task ID from list output)
bevy-tasks complete <task-id>
# Delete a task
bevy-tasks delete <task-id>
```
### Edit Tasks
```bash
# Edit a task in your default editor
bevy-tasks edit <task-id>
```
The edit command will open the task in your `$EDITOR` (or `nano` by default).
## CLI Usage
### Workspace Management
```bash
# Add a new workspace
bevy-tasks workspace add shared ~/Dropbox/TeamTasks
# List all workspaces
bevy-tasks workspace list
# Switch to a different workspace
bevy-tasks workspace switch shared
# Retarget a workspace (files already at new location)
bevy-tasks workspace retarget personal ~/new/path/to/Tasks
# Migrate workspace files to a new location
bevy-tasks workspace migrate personal ~/Dropbox/Tasks
# Remove a workspace (keeps files on disk)
bevy-tasks workspace remove shared
```
### List Management
```bash
# Create a new task list
bevy-tasks list create "Work"
# View all tasks
bevy-tasks list
# Enable grouping by due date
bevy-tasks group enable --list Work
# Disable grouping by due date
bevy-tasks group disable --list Work
```
### Using Specific Workspaces
Most commands support a `--workspace` flag to operate on a specific workspace without switching:
```bash
# Add a task to a specific workspace
bevy-tasks add "Team standup" --workspace shared
# Complete a task in a specific workspace
bevy-tasks complete <task-id> --workspace shared
# View tasks from a specific workspace
bevy-tasks list --workspace shared
```
## Data Format
Tasks are stored as individual markdown files with YAML frontmatter:
```markdown
---
id: 550e8400-e29b-41d4-a716-446655440000
status: backlog
due: 2025-11-15T14:00:00Z
created: 2025-10-26T10:00:00Z
updated: 2025-10-26T12:30:00Z
---
Task description and notes go here in **markdown** format.
- Can include lists
- Rich formatting
- Links, etc.
```
### File System Structure
```
~/Documents/Tasks/ # User-selected folder
├── .metadata.json # Global: list ordering, last opened list
├── My Tasks/ # Task list folder
│ ├── .listdata.json # List metadata: task order, id, timestamps
│ ├── Buy groceries.md # Task file
│ └── Call dentist.md # Task file
└── Work/ # Another task list
├── .listdata.json
├── Review PRs.md
└── Team meeting prep.md
```
## Configuration
Application configuration is stored in platform-specific locations:
- **Windows**: `%APPDATA%\bevy-tasks\config.json`
- **Linux**: `~/.config/bevy-tasks/config.json`
- **macOS**: `~/Library/Application Support/bevy-tasks/config.json`
The configuration file contains your workspace definitions and current workspace selection.
## Architecture
Bevy Tasks uses a clean separation between backend and frontend:
- **bevy-tasks-core**: Core library with data models, storage, and repository pattern
- **bevy-tasks-cli**: Command-line interface (current)
- **bevy-tasks-gui**: Graphical user interface (coming in Phase 3)
### Cargo Workspace Structure
```
bevy-tasks/
├── Cargo.toml # Workspace definition
├── PLAN.md # Development plan
├── README.md
├── crates/
│ ├── bevy-tasks-core/ # Core library (backend)
│ ├── bevy-tasks-cli/ # CLI frontend
│ └── bevy-tasks-gui/ # GUI frontend (Phase 3+)
└── docs/
```
## Development
### Running Tests
```bash
# Test the core library
cargo test -p bevy-tasks-core
# Test all crates
cargo test
```
### Building
```bash
# Build everything
cargo build
# Build just the CLI
cargo build -p bevy-tasks-cli
# Build in release mode
cargo build --release
```
### Running from Source
```bash
# Run the CLI directly
cargo run -p bevy-tasks-cli -- init ~/test-tasks --name test
cargo run -p bevy-tasks-cli -- add "Test task"
cargo run -p bevy-tasks-cli -- list
```
## License
[GNU General Public License v3.0 (GPL-3.0)](https://www.gnu.org/licenses/gpl-3.0.en.html)
This project is free and open-source software licensed under GPL v3.
## Contributing
Contributions are welcome! Please feel free to submit issues and pull requests.
## Roadmap
See [PLAN.md](PLAN.md) for the complete development roadmap and detailed feature plans.
## Credits
Inspired by Google Tasks and built with modern Rust tooling for maximum performance and cross-platform support.