108 lines
3.7 KiB
Markdown
108 lines
3.7 KiB
Markdown
# ClaudeDo
|
|
|
|
A desktop task management app that executes tasks autonomously via [Claude CLI](https://docs.anthropic.com/en/docs/claude-code) in isolated git worktrees.
|
|
|
|
Queue up coding tasks, and ClaudeDo picks them up one by one — each running in its own worktree so your main branch stays clean.
|
|
|
|
## Architecture
|
|
|
|
Two-process system communicating over SignalR:
|
|
|
|
| Project | Role |
|
|
|---|---|
|
|
| **ClaudeDo.App** | Avalonia desktop entry point, DI container setup |
|
|
| **ClaudeDo.Ui** | Views, ViewModels, SignalR client (MVVM) |
|
|
| **ClaudeDo.Data** | SQLite data layer, repositories, models, GitService |
|
|
| **ClaudeDo.Worker** | ASP.NET Core hosted service, task queue, Claude CLI runner |
|
|
|
|
```
|
|
┌──────────────┐ SignalR ┌──────────────┐
|
|
│ ClaudeDo.App│◄──────────►│ClaudeDo.Worker│
|
|
│ (Avalonia) │ 127.0.0.1 │ (ASP.NET) │
|
|
│ │ :47821 │ │
|
|
│ ┌──────────┐│ │ ┌──────────┐ │
|
|
│ │ Ui ││ │ │ TaskQueue│ │
|
|
│ │(ViewModels)│ │ │ Claude CLI│ │
|
|
│ └──────────┘│ │ └──────────┘ │
|
|
└──────┬───────┘ └──────┬───────┘
|
|
│ │
|
|
└───────────┬───────────────┘
|
|
│
|
|
┌──────┴──────┐
|
|
│ ClaudeDo.Data│
|
|
│ (SQLite) │
|
|
└─────────────┘
|
|
```
|
|
|
|
## Tech Stack
|
|
|
|
- .NET 8.0
|
|
- Avalonia 12.0.0 (Fluent theme)
|
|
- SQLite (WAL mode) via Microsoft.Data.Sqlite — raw ADO.NET, no ORM
|
|
- SignalR for real-time IPC between UI and Worker
|
|
- CommunityToolkit.Mvvm for source-generated MVVM
|
|
- Git worktrees for task isolation
|
|
|
|
## Prerequisites
|
|
|
|
- [.NET 8.0 SDK](https://dotnet.microsoft.com/download/dotnet/8.0)
|
|
- [Claude CLI](https://docs.anthropic.com/en/docs/claude-code) installed and authenticated
|
|
- Git
|
|
|
|
## Getting Started
|
|
|
|
```bash
|
|
# Build
|
|
dotnet build ClaudeDo.slnx
|
|
|
|
# Run tests
|
|
dotnet test tests/ClaudeDo.Worker.Tests
|
|
|
|
# Run the app
|
|
dotnet run --project src/ClaudeDo.App
|
|
```
|
|
|
|
## How It Works
|
|
|
|
1. Create a task in the UI and tag it with **"agent"** to mark it for automated execution.
|
|
2. The Worker picks up queued tasks and runs each one via Claude CLI in an isolated git worktree.
|
|
3. When done, the worktree can be merged, kept for review, or discarded.
|
|
|
|
**Task status flow:** `Manual | Queued → Running → Done | Failed`
|
|
|
|
**Worktree state flow:** `Active → Merged | Discarded | Kept`
|
|
|
|
## Configuration
|
|
|
|
All data and config lives under `~/.todo-app/`:
|
|
|
|
| File | Purpose |
|
|
|---|---|
|
|
| `todo.db` | SQLite database |
|
|
| `ui.config.json` | UI settings |
|
|
| `worker.config.json` | Worker settings (worktree strategy, etc.) |
|
|
| `logs/` | Application logs |
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
ClaudeDo.slnx
|
|
├── src/
|
|
│ ├── ClaudeDo.App/ # Desktop entry point
|
|
│ ├── ClaudeDo.Ui/ # Views & ViewModels
|
|
│ ├── ClaudeDo.Data/ # Data access layer
|
|
│ └── ClaudeDo.Worker/ # Background task runner
|
|
├── tests/
|
|
│ └── ClaudeDo.Worker.Tests/
|
|
├── schema/
|
|
│ └── schema.sql # Database schema
|
|
└── docs/
|
|
├── plan.md # Architecture & design spec
|
|
├── open.md # Verification checklist & backlog
|
|
└── improvement-plan.md # Prioritized improvements
|
|
```
|
|
|
|
## License
|
|
|
|
Private — not licensed for redistribution.
|