1603be0c784f76fd8f0132b9c46844288270d255
The tab body ran flush into the console's rounded bottom corner, so the final log line was shaved off. Inset the tab body from the bottom so the scroll viewport ends above the corner and ScrollToEnd reveals the whole last line. Co-Authored-By: Claude Opus 4.7 <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