452 lines
11 KiB
Markdown
452 lines
11 KiB
Markdown
# Real-Time Kanban Board Guide
|
||
|
||
## Overview
|
||
|
||
Claude OS features a **real-time Kanban board** that automatically syncs with your agent-os spec files as they're created and updated. This provides live visibility into your development progress without any manual intervention.
|
||
|
||
## How It Works
|
||
|
||
The real-time Kanban system consists of three integrated components:
|
||
|
||
```
|
||
agent-os updates tasks.md
|
||
↓ (2 sec debounce)
|
||
Spec Watcher detects change
|
||
↓
|
||
Auto-syncs to database
|
||
↓ (within 3 seconds)
|
||
Kanban board auto-refreshes
|
||
↓
|
||
You see updated tasks in real-time! 🎉
|
||
```
|
||
|
||
### 1. Spec File Watcher
|
||
|
||
The **Spec Watcher** monitors your project's `agent-os/specs/` folder for file changes:
|
||
|
||
- **Watches**: All `tasks.md` and `spec.md` files in your specs folders
|
||
- **Triggers on**: File modifications and new file/folder creation
|
||
- **Debounce**: 2-second delay to batch rapid changes
|
||
- **Auto-starts**: Launches automatically when MCP server starts
|
||
|
||
**Technical Details:**
|
||
- Location: `app/core/spec_watcher.py`
|
||
- Uses: `watchdog` library for filesystem monitoring
|
||
- Monitors: `/path/to/project/agent-os/specs/**/*`
|
||
- Thread-safe: Uses locks for concurrent access
|
||
|
||
### 2. Automatic Database Sync
|
||
|
||
When the spec watcher detects changes, it:
|
||
|
||
1. Parses the updated `tasks.md` file
|
||
2. Extracts tasks in checkbox format:
|
||
```markdown
|
||
- [x] 1.0 Complete database layer
|
||
- [ ] 2.1 Write tests for services
|
||
```
|
||
3. Updates the SQLite database with new/modified tasks
|
||
4. Tracks task status (todo, in_progress, done, blocked)
|
||
|
||
**Supported Task Formats:**
|
||
|
||
The parser supports two formats:
|
||
|
||
**Checkbox Format** (recommended for agent-os):
|
||
```markdown
|
||
- [x] 1.0 Complete database layer
|
||
- [x] 1.1 Write 2-8 focused tests for database models
|
||
- [x] 1.2 Create migration: add_manual_time_slots_support
|
||
- [ ] 2.0 Complete service layer
|
||
- [ ] 2.1 Write 2-8 focused tests for services
|
||
```
|
||
|
||
**Classic Format** (legacy support):
|
||
```markdown
|
||
### PHASE1-TASK1: Database Setup
|
||
**Title:** Setup Database Schema
|
||
**Description:** Create all required database tables
|
||
**Estimated Time:** 2 hours
|
||
**Risk Level:** low
|
||
**Status:** ✅ COMPLETED
|
||
```
|
||
|
||
### 3. Frontend Auto-Refresh
|
||
|
||
The Kanban board frontend:
|
||
|
||
- **Polls**: Every 3 seconds for database updates
|
||
- **Refreshes**: Automatically when new data is detected
|
||
- **Smooth**: Uses React Query for optimistic updates
|
||
- **Animations**: Framer Motion for smooth task transitions
|
||
|
||
## Using the Kanban Board
|
||
|
||
### Accessing the Board
|
||
|
||
1. Open Claude OS web interface
|
||
2. Select your project from the sidebar
|
||
3. Click the **"Kanban Board"** tab
|
||
4. Board loads automatically with all specs and tasks
|
||
|
||
### Board Layout
|
||
|
||
The Kanban board displays:
|
||
|
||
**Top Section:**
|
||
- Summary statistics (total specs, total tasks, completed tasks)
|
||
- "Sync Specs" button (manual sync if needed)
|
||
- "Show Archived" toggle
|
||
|
||
**Spec Cards:**
|
||
Each spec shows:
|
||
- Spec name and status
|
||
- Progress bar
|
||
- Task counts by status
|
||
- Four columns: Todo, In Progress, Done, Blocked
|
||
|
||
**Task Cards:**
|
||
- Task code (e.g., PHASE1-TASK1)
|
||
- Title
|
||
- Risk level badge
|
||
- Estimated/actual time
|
||
- Dependencies
|
||
|
||
### Manual Sync Button
|
||
|
||
While the board updates automatically, you can manually trigger a sync:
|
||
|
||
1. Click **"Sync Specs"** button at the top
|
||
2. All spec files are re-parsed
|
||
3. Database updates immediately
|
||
4. Board refreshes within 3 seconds
|
||
|
||
Use this when:
|
||
- Testing the sync functionality
|
||
- Recovering from errors
|
||
- Adding a new spec folder manually
|
||
|
||
## Configuration
|
||
|
||
### Spec Watcher Management
|
||
|
||
The spec watcher starts automatically, but you can control it via API:
|
||
|
||
**Start watcher for a project:**
|
||
```bash
|
||
curl -X POST http://localhost:8051/api/spec-watcher/start/{project_id}
|
||
```
|
||
|
||
**Stop watcher for a project:**
|
||
```bash
|
||
curl -X POST http://localhost:8051/api/spec-watcher/stop/{project_id}
|
||
```
|
||
|
||
**Start all project watchers:**
|
||
```bash
|
||
curl -X POST http://localhost:8051/api/spec-watcher/start-all
|
||
```
|
||
|
||
**Check watcher status:**
|
||
```bash
|
||
curl http://localhost:8051/api/spec-watcher/status
|
||
```
|
||
|
||
Example status response:
|
||
```json
|
||
{
|
||
"status": {
|
||
"enabled": true,
|
||
"projects_watched": 1,
|
||
"projects": {
|
||
"1": {
|
||
"project_path": "/Users/you/Projects/myapp",
|
||
"specs_path": "/Users/you/Projects/myapp/agent-os/specs",
|
||
"watching": true
|
||
}
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
### Adjusting Refresh Rate
|
||
|
||
The default refresh rate is 3 seconds. To change it:
|
||
|
||
**File:** `frontend/src/components/KanbanBoard.tsx`
|
||
|
||
```typescript
|
||
const { data: kanbanData, isLoading } = useQuery({
|
||
queryKey: ['kanban', projectId, includeArchived],
|
||
queryFn: async () => {
|
||
// ... fetch logic
|
||
},
|
||
refetchInterval: 3000, // Change this value (milliseconds)
|
||
});
|
||
```
|
||
|
||
**Recommended values:**
|
||
- **3000ms (3s)**: Real-time updates, good UX
|
||
- **5000ms (5s)**: Balanced performance
|
||
- **10000ms (10s)**: Low-traffic, battery-saving
|
||
|
||
### Debounce Delay
|
||
|
||
The spec watcher waits 2 seconds after detecting a change before syncing. To adjust:
|
||
|
||
**File:** `app/core/spec_watcher.py`
|
||
|
||
```python
|
||
class SpecFileHandler(FileSystemEventHandler):
|
||
def __init__(self, project_id: int, project_path: str):
|
||
# ...
|
||
self.debounce_delay = 2.0 # Change this value (seconds)
|
||
```
|
||
|
||
**Why debounce?**
|
||
- Prevents sync spam during rapid file edits
|
||
- Batches related changes together
|
||
- Reduces database load
|
||
|
||
## Project Structure Requirements
|
||
|
||
For the Kanban board to work, your project must have this structure:
|
||
|
||
```
|
||
your-project/
|
||
└── agent-os/
|
||
└── specs/
|
||
├── 2025-10-29-feature-name/
|
||
│ ├── spec.md # Optional: Feature specification
|
||
│ └── tasks.md # Required: Task breakdown
|
||
└── 2025-11-01-another-feature/
|
||
├── spec.md
|
||
└── tasks.md
|
||
```
|
||
|
||
**Folder naming convention:**
|
||
- Format: `YYYY-MM-DD-feature-slug`
|
||
- Example: `2025-10-29-manual-appointment-times`
|
||
- Slug becomes the spec name (spaces replace hyphens)
|
||
|
||
## Troubleshooting
|
||
|
||
### Tasks Not Showing Up
|
||
|
||
**Check 1: Is the spec watcher running?**
|
||
```bash
|
||
curl http://localhost:8051/api/spec-watcher/status
|
||
```
|
||
|
||
If `"watching": false`, restart the watcher:
|
||
```bash
|
||
curl -X POST http://localhost:8051/api/spec-watcher/start/{project_id}
|
||
```
|
||
|
||
**Check 2: Are your tasks in the right format?**
|
||
|
||
Tasks must use the checkbox format with numeric prefixes:
|
||
```markdown
|
||
- [ ] 1.0 Task title
|
||
- [x] 2.1 Another task
|
||
```
|
||
|
||
Not this:
|
||
```markdown
|
||
- [ ] Task without number
|
||
- Some random text
|
||
```
|
||
|
||
**Check 3: Is tasks.md in the right location?**
|
||
```
|
||
✅ project/agent-os/specs/2025-10-29-feature/tasks.md
|
||
❌ project/specs/tasks.md
|
||
❌ project/agent-os/tasks.md
|
||
```
|
||
|
||
**Check 4: Check the MCP server logs**
|
||
```bash
|
||
tail -50 logs/mcp_server.log
|
||
```
|
||
|
||
Look for:
|
||
- `✅ Updated spec 'Feature Name' with X tasks`
|
||
- Any error messages about parsing
|
||
|
||
### Board Not Auto-Refreshing
|
||
|
||
**Check 1: Is polling enabled?**
|
||
|
||
Open browser DevTools → Network tab → Filter by "kanban"
|
||
|
||
You should see requests every 3 seconds to:
|
||
```
|
||
GET /api/projects/1/kanban?include_archived=false
|
||
```
|
||
|
||
If not, check that React Query is configured correctly.
|
||
|
||
**Check 2: Clear browser cache**
|
||
```
|
||
Ctrl+Shift+R (Windows/Linux)
|
||
Cmd+Shift+R (Mac)
|
||
```
|
||
|
||
**Check 3: Check frontend logs**
|
||
|
||
Open browser Console and look for errors related to:
|
||
- React Query
|
||
- Axios requests
|
||
- WebSocket connections (if applicable)
|
||
|
||
### Sync Taking Too Long
|
||
|
||
**Expected timings:**
|
||
- File change detected: < 1 second
|
||
- Debounce wait: 2 seconds
|
||
- Database sync: < 1 second
|
||
- Frontend refresh: 3 seconds
|
||
- **Total**: ~6 seconds max
|
||
|
||
**If slower:**
|
||
|
||
1. Check disk I/O (is your disk slow?)
|
||
2. Check database size (vacuum if needed):
|
||
```bash
|
||
sqlite3 data/claude-os.db "VACUUM;"
|
||
```
|
||
3. Check CPU usage (spec parsing is CPU-intensive for large specs)
|
||
|
||
### Parser Errors
|
||
|
||
**Common issues:**
|
||
|
||
**Issue:** "No tasks found"
|
||
- **Cause:** Tasks not in checkbox format
|
||
- **Fix:** Add `- [ ]` or `- [x]` before task lines
|
||
|
||
**Issue:** "Invalid task code"
|
||
- **Cause:** Missing numeric prefix (e.g., `1.0`, `2.1`)
|
||
- **Fix:** Add numbers: `- [ ] 1.0 Task title`
|
||
|
||
**Issue:** "Spec not found"
|
||
- **Cause:** Folder name doesn't match expected format
|
||
- **Fix:** Rename to `YYYY-MM-DD-feature-name`
|
||
|
||
## Advanced Usage
|
||
|
||
### Custom Task Status Updates
|
||
|
||
You can manually update task status via API:
|
||
|
||
```bash
|
||
curl -X PATCH http://localhost:8051/api/tasks/{task_id}/status \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"status": "in_progress",
|
||
"actual_minutes": 120
|
||
}'
|
||
```
|
||
|
||
Valid statuses: `todo`, `in_progress`, `done`, `blocked`
|
||
|
||
### Archiving Specs
|
||
|
||
Archive completed specs to declutter the board:
|
||
|
||
**Via UI:**
|
||
1. Click "Archive" button on spec card
|
||
2. Spec moves to archived view
|
||
|
||
**Via API:**
|
||
```bash
|
||
curl -X POST http://localhost:8051/api/specs/{spec_id}/archive
|
||
```
|
||
|
||
**To view archived specs:**
|
||
- Toggle "Show Archived" checkbox in the UI
|
||
|
||
### Bulk Operations
|
||
|
||
**Sync all specs for a project:**
|
||
```bash
|
||
curl -X POST http://localhost:8051/api/projects/{project_id}/specs/sync
|
||
```
|
||
|
||
Response:
|
||
```json
|
||
{
|
||
"project_id": 1,
|
||
"message": "Specs synced successfully",
|
||
"synced": 0,
|
||
"updated": 3,
|
||
"total": 3,
|
||
"errors": []
|
||
}
|
||
```
|
||
|
||
## Performance Considerations
|
||
|
||
### Database Size
|
||
|
||
Each task creates a database row. For large projects:
|
||
|
||
**Estimate storage:**
|
||
- 100 specs × 50 tasks = 5,000 rows
|
||
- SQLite handles this easily (millions of rows supported)
|
||
|
||
**Optimize periodically:**
|
||
```bash
|
||
sqlite3 data/claude-os.db "VACUUM; ANALYZE;"
|
||
```
|
||
|
||
### Frontend Performance
|
||
|
||
With many tasks, the Kanban board may slow down:
|
||
|
||
**Optimization tips:**
|
||
1. Archive old specs (reduces rendered tasks)
|
||
2. Increase refresh interval to 5-10 seconds
|
||
3. Filter by status (show only active tasks)
|
||
|
||
### File Watcher Overhead
|
||
|
||
The spec watcher uses minimal resources:
|
||
- CPU: < 1% idle, ~5% during sync
|
||
- Memory: ~20 MB per project
|
||
- Disk I/O: Only on file changes
|
||
|
||
**Disable if needed:**
|
||
```bash
|
||
curl -X POST http://localhost:8051/api/spec-watcher/stop/{project_id}
|
||
```
|
||
|
||
## API Reference
|
||
|
||
See full API documentation in `docs/API_REFERENCE.md`
|
||
|
||
**Key endpoints:**
|
||
|
||
- `GET /api/projects/{id}/kanban` - Get Kanban data
|
||
- `GET /api/projects/{id}/specs` - List all specs
|
||
- `POST /api/projects/{id}/specs/sync` - Manual sync
|
||
- `PATCH /api/tasks/{id}/status` - Update task status
|
||
- `POST /api/specs/{id}/archive` - Archive spec
|
||
- `GET /api/spec-watcher/status` - Watcher status
|
||
|
||
## Related Documentation
|
||
|
||
- **What is Claude OS**: `docs/guides/WHAT_IS_CLAUDE_OS.md`
|
||
- **Session Workflow**: `docs/guides/IDEAL_SESSION_WORKFLOW.md`
|
||
- **API Reference**: `docs/API_REFERENCE.md`
|
||
- **Quick Start**: `docs/QUICK_START_CLAUDE_OS.md`
|
||
|
||
## Support
|
||
|
||
If you encounter issues:
|
||
|
||
1. Check the logs: `tail -f logs/mcp_server.log`
|
||
2. Check watcher status: `curl http://localhost:8051/api/spec-watcher/status`
|
||
3. Try manual sync: Click "Sync Specs" button
|
||
4. Restart MCP server: `./scripts/restart_mcp.sh`
|
||
5. Open an issue: [GitHub Issues](https://github.com/anthropics/claude-os/issues)
|