e68bb737e33bee4b05ea2cab0db9a71a91134b74
Replace the three drifting filter implementations (counter, list loader, regroup) with one ITaskListFilter strategy per list kind. Counter and list loader now share the same predicates, so they cannot diverge again. Planning hierarchy rules (parent-as-context, orphan handling) live in PlanningRules and are unit-tested via 29 new tests in ClaudeDo.Data.Tests. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ClaudeDo
A desktop task management app that executes tasks autonomously via Claude CLI 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 Core) │
│ │ :47821 │ │
│ ┌────────────┐│ │ ┌────────────┐ │
│ │ Ui ││ │ │ TaskQueue │ │
│ │(ViewModels)││ │ │ Claude CLI │ │
│ └────────────┘│ │ └────────────┘ │
└───────┬────────┘ └───────┬────────┘
│ │
└──────────────┬───────────────┘
│
┌───────┴───────┐
│ ClaudeDo.Data │
│ (SQLite) │
└───────────────┘
Tech Stack
- .NET 8.0
- Avalonia 12.0.0 (Fluent theme)
- SQLite (WAL mode) via Entity Framework Core (EF Core + Migrations)
- 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
- Claude CLI installed and authenticated
- Git
Getting Started
# Build
dotnet build src/ClaudeDo.App
dotnet build src/ClaudeDo.Worker
# Run tests
dotnet test tests/ClaudeDo.Worker.Tests
# Run the app
dotnet run --project src/ClaudeDo.App
How It Works
- Create a task in the UI and tag it with "agent" to mark it for automated execution.
- The Worker picks up queued tasks and runs each one via Claude CLI in an isolated git worktree.
- 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.
Description