Files
ClaudeDo/CLAUDE.md
mika kuns cfc45118e4
All checks were successful
Release / release (push) Successful in 35s
docs: sync CLAUDE.md files with current architecture
Drop the removed tag system, fix the retired Manual status and the atomic
queue-claim location, refresh the App DI registrations to the Islands VMs,
update the Data table list, correct a stale test reference, and document the
interface-folder and single-consumer-fold conventions plus the .NET 8 build path.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 15:59:43 +02:00

2.6 KiB

ClaudeDo

A desktop task management app that executes tasks autonomously via Claude CLI in isolated git worktrees.

Architecture

Two-process system communicating over SignalR (127.0.0.1:47821):

  • ClaudeDo.App — Avalonia desktop entry point, DI container setup
  • ClaudeDo.Ui — Views, ViewModels, SignalR client (MVVM with CommunityToolkit.Mvvm)
  • ClaudeDo.Data — SQLite data layer, repositories, models, GitService
  • ClaudeDo.Worker — ASP.NET Core hosted service, task queue, Claude CLI runner
  • ClaudeDo.Worker.Tests — xUnit integration tests with real SQLite and real git

Tech Stack

  • .NET 8.0, Avalonia 12.0.0 (Fluent theme)
  • SQLite (WAL mode) via Entity Framework Core (Microsoft.EntityFrameworkCore.Sqlite)
  • SignalR for real-time IPC
  • CommunityToolkit.Mvvm ([ObservableProperty], [RelayCommand])
  • Git worktrees for task isolation

Key Paths

  • DB: ~/.todo-app/todo.db
  • UI config: ~/.todo-app/ui.config.json
  • Worker config: ~/.todo-app/worker.config.json
  • Logs: ~/.todo-app/logs/
  • Worktrees: configured per worker (sibling or central strategy)

Conventions

  • Repository pattern — each entity has its own async repository
  • All data operations are async with CancellationToken support
  • EF Core migrations manage schema (Migrations/ folder in ClaudeDo.Data)
  • IDbContextFactory<ClaudeDoDbContext> used by singleton consumers (e.g. Worker)
  • Entity configuration via IEntityTypeConfiguration<T> in Configuration/ folder
  • Task status flow: Idle | Queued -> Running -> Done | Failed | Cancelled
  • Worktree state flow: Active -> Merged | Discarded | Kept
  • The queue picker claims tasks by Status=Queued (with BlockedByTaskId IS NULL); the legacy tag system was removed
  • Interfaces live in an Interfaces/ subfolder beside their consumers (namespace unchanged)
  • Small single-consumer helper types live in their consumer's file, not standalone files
  • Commit messages use conventional format: {commitType}(slug): title
  • Views use compiled bindings (x:DataType)
  • ViewModels use [ObservableProperty] and [RelayCommand] source generators

Building & Testing

dotnet build ClaudeDo.slnx requires .NET 9; on .NET 8 build individual projects instead.

dotnet build src/ClaudeDo.App/ClaudeDo.App.csproj      # pulls in Ui + Data
dotnet build src/ClaudeDo.Worker/ClaudeDo.Worker.csproj
dotnet test tests/ClaudeDo.Worker.Tests                # also: Data.Tests, Ui.Tests, Installer.Tests, Releases.Tests

Docs

  • docs/plan.md — full architecture and design spec
  • docs/open.md — verification checklist and improvement backlog
  • docs/improvement-plan.md — prioritized improvement items