A kanban board that orchestrates agentic projects. Each column is a workflow stage (Backlog, Todo, InProgress, Review, Done, Blocked). Each project has members that can be human owners or LLM agents (programmer, groomer, producer, qa-tester, committer, code-janitor, evaluator). A background AutomationEngine dispatches these agents based on triggers (column changes, comments, intervals, git commits, …), running them as claude CLI subprocesses whose output streams into an in-app drawer.
- .NET 10 / Blazor Server (interactive SSR)
- SQLite via Entity Framework Core (one DB per project)
- OpenAPI with auto-generated Markdown docs
- External: Claude Code CLI + Git (required on PATH for agent dispatch and auto-commits)
- .NET 10 SDK
- Claude Code CLI —
claudeon your PATH - Git —
giton your PATH
On first launch an onboarding popup detects whether claude and git are available. You can continue without them, but agent runs and auto-commits will fail until they are installed and on the PATH.
From the repo root:
run.bat (Windows)
./run.sh (macOS / Linux)
Both wrap dotnet watch --project KittyClaw.Web --non-interactive and serve the app at http://localhost:5230 with hot reload enabled.
From the home page, type a name and click Create. A popup asks you to set a workspace folder (absolute path to a repo/folder) and offers to create it if missing. Click Initialize to:
- Create the project registry entry + per-project SQLite DB.
- Copy the agent template (
.agents/preamble.md,.agents/{agent}/SKILL.md, emptymemory.md,automations.json) into<workspace>/.agents/. - Run
git initif the workspace is not already a git repo (skipped ifgitisn't installed). - Create a member for each agent slug found in the template.
- Navigate to the board.
The workspace folder itself is never deleted by KittyClaw, even when you delete a project.
All KittyClaw data is stored locally in %APPDATA%/KittyClaw/:
registry.db— project registryprojects/{slug}.db— per-project database (tickets, comments, labels, columns, members)uploads/— uploaded imagesruns/{runId}.json— agent run snapshots (events, status, exit code)settings.json— language + onboarding flag
Per-project agent state lives in the workspace: <workspace>/.agents/{agent}/memory.md, <workspace>/.agents/channel/ (session state), etc.
| Project | Description |
|---|---|
| KittyClaw.Core | Domain models, EF Core contexts, services, automation engine, embedded .agents/ template |
| KittyClaw.Core.Tests | xUnit tests (conditions, triggers, signals, JSON polymorphism) |
| KittyClaw.Web | Blazor Server UI + REST API |
All endpoints are under /api. The documentation is auto-generated from the live OpenAPI spec:
- Human-readable Markdown:
GET http://localhost:5230/api/docs - Machine-readable JSON:
GET http://localhost:5230/openapi/v1.json
This app is designed to be operated by AI agents through its REST API. Here's how to get started:
- Read the live API docs at
http://localhost:5230/api/docs— every endpoint, request/response example, and schema, always up to date with the running server. - Identify yourself — use
"agent:{your-name}"as theauthor/createdByfield (e.g."agent:claude"). The human user is"owner". - Discover the board — call
GET /api/projectsfirst, thenGET /api/projects/{slug}/columnsto learn the workflow stages andGET /api/projects/{slug}/membersfor assignable members. - Use the right status — ticket statuses must match existing column names. Fetch columns before moving tickets.
- Track your work — add comments on tickets to explain what you did or what you need. Use
@mentionsto notify members and#idto reference other tickets. - Labels & priority — use
GET /api/projects/{slug}/labelsto discover available labels, and set priority toIdea,NiceToHave,Required, orCritical. - Check mentions — call
GET /api/projects/{slug}/mentions/{your-handle}to find tickets that mention you. - Sub-tickets — set
parentIdwhen creating a ticket to make it a child. UsePUT /api/projects/{slug}/tickets/{id}/parentto reparent, orDELETEit to detach. List sub-tickets with?parentId={id}.
- Author format:
"owner"for the human user,"agent:{name}"for AI agents - Priority levels:
Idea,NiceToHave,Required,Critical - Default column:
Backlog
- Onboarding popup on first launch with Claude Code + Git detection
- Project creation popup with workspace selection + one-click agent template initialization
- Kanban board with drag-and-drop
- Ticket detail panel with comments and activity timeline
- Live agent run drawer (SSE stream of Claude Code output, steer + stop controls)
- New-instruction chat drawer to send an ad-hoc prompt to an agent
- Automations page: list, enable/disable, edit (triggers / conditions / actions), reload from disk, re-initialize agent template
- Markdown rendering with
@mentionand#ticketreference support - Advanced search syntax:
#42,@owner,>date,priority:critical,label:bug,by:owner - Sub-tickets with parent/child relationships and progress tracking
- Column management (create, reorder, customize colors)
- Label and member management
- Image upload in descriptions and comments
- Triggers:
interval,ticketInColumn,statusChange,subTicketStatus,ticketCommentAdded,gitCommit,boardIdle,agentInactivity. - Conditions:
ticketInColumn,ticketCountInColumn,fieldLength,priority,labels,assignedTo,hasParent,allSubTicketsInStatus,ticketAge. - Actions:
runAgent,moveTicketStatus,setLabels,assignTicket,addComment,commitAgentMemory,executePowerShell. {assignee}placeholder inrunAgent.agent/runAgent.concurrencyGroupresolves from the firing ticket'sassignedTo.- Every
runAgentshould be followed bycommitAgentMemoryto auto-commit the agent'smemory.mdchanges.
Check out my other projects at ekioo.com.
Follow me on X: @DamienHOFFSCHIR
