Native macOS SwiftUI application for managing personal and collaborative task workflows with AI assistance.
Screenshot placeholder - add actual screenshot to docs/screenshot.png
Lobs Dashboard is a macOS desktop app that provides a visual interface for managing tasks, projects, and research workflows. It integrates with a Git-based state repository (lobs-control) and an AI orchestrator that can autonomously pick up and execute tasks.
Key Features:
- 🎯 Kanban Board — Visual task management with customizable columns
- 📚 Research Projects — Tile-based workspace for notes, links, and findings
- 🤖 AI Task Execution — Tasks are picked up automatically by the orchestrator
- 🔄 Git-Backed Sync — All changes versioned and synchronized automatically
- 👥 GitHub Mode — Collaborate on tasks via GitHub Issues (optional)
- 📥 Inbox — Review and manage artifacts generated by AI workers
- 📊 Activity Dashboard — Track project progress and velocity
Architecture:
┌─────────────┐
│ Dashboard │ (macOS SwiftUI app - you are here)
└──────┬──────┘
│ Git sync
↓
┌─────────────────┐
│ lobs-control │ (Git state repository)
└──────┬──────────┘
│ Polling
↓
┌─────────────────┐
│ Orchestrator │ (Python service on server)
└──────┬──────────┘
│
↓
┌─────────────────┐
│ OpenClaw │ (AI worker runtime)
└─────────────────┘
- macOS 13.0+ (Ventura or later)
- Git with SSH key configured for GitHub
- GitHub account (for repository access)
- A server with OpenClaw set up (see Server Setup below)
- Download the latest
.dmgor.appfrom the Releases page - Open the downloaded file
- Drag Lobs Dashboard to your Applications folder
- Launch Lobs Dashboard from Applications
# Clone the repository
git clone git@github.com:RafeSymonds/lobs-dashboard.git
cd lobs-dashboard
# Build the app
./bin/build
# Run directly
./bin/run
# Or open in Xcode
open Package.swiftAll user-specific settings and preferences are stored in ~/.lobs/config.json (outside the dashboard repository).
What's stored locally:
- Control repository path and URL
- Onboarding completion status
- UI preferences (appearance, hotkeys, filters)
- Read state (inbox items, threads)
- Auto-refresh settings
Privacy & Safety:
- The dashboard repo contains zero user-specific data
- Safe to clone fresh, reset, or share publicly
- All your data lives in:
~/.lobs/config.json(app settings)- Your
lobs-controlrepository (tasks, projects, state)
Migration Note: If upgrading from an older version, settings will automatically migrate from UserDefaults to the new config file on first launch.
For more details, see SETTINGS_MIGRATION.md.
When you first launch Lobs Dashboard, you'll be guided through an onboarding wizard:
The dashboard requires a local checkout of your lobs-control state repository:
git clone git@github.com:YOUR-USERNAME/lobs-control.git ~/lobs-controlNote: Replace
YOUR-USERNAMEwith your GitHub username. You can use a different path, but~/lobs-controlis recommended.
In the dashboard:
- Click Choose lobs-control…
- Navigate to your
lobs-controlfolder (e.g.,~/lobs-control) - Click Select
The dashboard will validate the repository structure and load your projects and tasks.
Enable automatic Git pull/push to keep your local state synchronized:
- Navigate to Settings (⌘,)
- Toggle Enable auto-sync
- Set your preferred sync interval (default: 30 seconds)
To enable AI task execution, you need a server running the Lobs orchestrator.
The orchestrator is a Python service that monitors your lobs-control repository and executes tasks using OpenClaw:
Repository: lobs-orchestrator
- Orchestrator Service — Monitors for new work, manages task queue
- OpenClaw Runtime — AI agent execution environment
- Worker Agent — Single shared worker that executes tasks sequentially
See the lobs-orchestrator README for:
- Installation prerequisites (Python 3.11+, OpenClaw)
- Configuration instructions
- Running as a systemd service
- Troubleshooting common issues
Optional: guided setup script (server):
This repository includes a simple interactive wizard you can run on your server to install OpenClaw + clone/configure the orchestrator:
# from a checkout of lobs-dashboard
./bin/server-setup-wizard
# or pass your control repo URL up-front
LOBS_CONTROL_REPO_URL=git@github.com:YOUR-USER/lobs-control.git ./bin/server-setup-wizardThe orchestrator requires OpenClaw to run the AI worker. See the official documentation:
Quick Create:
- Press ⌘N or click + New Task
- Enter task title and description
- Set status (active, waiting, blocked, or done)
- Optionally assign to a project
- Click Create
From Inbox:
- Navigate to the Inbox tab
- Review artifacts generated by AI workers
- Click Create Task to convert an artifact into a trackable task
Project Types:
- Kanban — Task-based workflow with columns (active, waiting, blocked, done)
- Research — Note-taking and research workflows with tile-based organization
Creating Projects:
- Click + New Project
- Choose project type (Kanban or Research)
- Set project name and optional description
- Configure sync mode (Local or GitHub)
GitHub Sync Mode:
To enable collaborative task management via GitHub Issues:
-
Create a GitHub Personal Access Token:
- Go to GitHub Settings → Developer settings → Personal access tokens
- Generate new token with
reposcope - Copy the token
-
Configure project for GitHub mode:
- Edit project settings
- Set Sync Mode to GitHub
- Enter repository owner and name
- Paste your access token
- Save changes
Tasks will now sync bidirectionally with GitHub Issues using label-based status tracking.
Local Mode (Default):
- Tasks stored as JSON files in
~/lobs-control/state/tasks/ - Dashboard commits changes to Git
- Auto-push keeps state synchronized across devices
- Orchestrator polls for changes and picks up new work
GitHub Mode:
- Tasks synced with GitHub Issues
- Local JSON files act as cache
- GitHub is source of truth
- Labels map to task statuses (e.g.,
status:active,work:in_progress)
Git Flow:
Dashboard edit → Commit → Push → Server polls → Orchestrator picks up task
- Create a task in the dashboard with status
activeorwaiting - Push changes (automatic if auto-sync is enabled)
- Orchestrator detects new work via Git polling
- Worker spawns and executes the task
- Results written to
artifacts/or task notes - Status updated to
completedorfailed - Dashboard syncs and displays updated state
Requesting Immediate Attention:
Tasks are picked up automatically by the orchestrator on its next polling cycle.
Status Transitions:
- Active → Work the AI can pick up immediately
- Waiting → Blocked on external dependency (manual review)
- Blocked → Cannot proceed, needs intervention
- Done → Task completed successfully
Work States:
not_started→ Task queued but not yet assignedin_progress→ Worker currently executingcompleted→ Successfully finishedfailed→ Worker encountered an error
Check repository path:
- Go to Settings (⌘,)
- Verify the repository path points to your
lobs-controlclone - Click Choose lobs-control… to reselect if needed
Validate repository structure:
cd ~/lobs-control
ls -la state/
# Should show: projects.json, tasks/, ...Verify Git remote:
cd ~/lobs-control
git remote -v
# Should show your GitHub repositoryCheck for unpushed commits:
git status
git log origin/main..HEADManually push if needed:
git push origin mainCheck orchestrator status:
# On your server
systemctl --user status lobs-orchestratorView orchestrator logs:
journalctl --user -u lobs-orchestrator -fVerify OpenClaw worker configuration:
openclaw agent list
# Should show "worker" agentVerify access token:
- Ensure token has
reposcope - Test token with:
curl -H "Authorization: token YOUR_TOKEN" https://api.github.com/user
Check rate limits:
curl -H "Authorization: token YOUR_TOKEN" https://api.github.com/rate_limitReview sync logs:
- Dashboard logs errors in the console
- Run from terminal to see detailed output:
./bin/run
Reset repository path:
- Quit Lobs Dashboard
- Clear stored path:
defaults delete com.rafesymonds.LobsDashboard repoPath
- Relaunch dashboard and reconfigure
Clear all settings:
defaults delete com.rafesymonds.LobsDashboardRebuild state from Git:
cd ~/lobs-control
git fetch origin
git reset --hard origin/mainRequirements:
- Xcode 15.0+ or Swift 5.9+
- macOS 13.0+ SDK
Build and run:
# Clone repository
git clone git@github.com:RafeSymonds/lobs-dashboard.git
cd lobs-dashboard
# Build
swift build
# Run
swift run
# Or use the build script (generates build info)
./bin/build && ./bin/runOpen in Xcode:
open Package.swiftKey Components:
- Models.swift — Data structures (Task, Project, SyncMode, etc.)
- Store.swift — Git-backed persistence and GitHub sync logic
- GitHubService.swift — GitHub API client (Issues CRUD, rate limiting)
- AppViewModel.swift — Main view model (state management, CRUD operations)
- ContentView.swift — Root view (sidebar, project picker, navigation)
- BoardView.swift — Kanban board implementation
- ResearchView.swift — Research project tile grid
- InboxView.swift — Artifact and document viewer
Data Flow:
View → ViewModel → Store → Git + GitHub → File System
Git Sync Strategy:
- Pull latest changes from remote
- Apply local modifications
- Commit with descriptive message
- Push to remote (with rebase retry on conflict)
GitHub Sync Strategy:
- Create local task JSON file
- Create GitHub issue with metadata comment
- Apply labels for status tracking
- On load: merge GitHub issues with local tasks
lobs-dashboard/
├── Sources/
│ └── LobsDashboard/
│ ├── Models.swift # Data models
│ ├── Store.swift # Persistence layer
│ ├── GitHubService.swift # GitHub API
│ ├── AppViewModel.swift # State management
│ ├── ContentView.swift # Root view
│ ├── BoardView.swift # Kanban board
│ ├── ResearchView.swift # Research workspace
│ ├── InboxView.swift # Artifact viewer
│ └── ...
├── Package.swift # Swift package manifest
├── bin/
│ ├── build # Build script
│ └── run # Run script
├── AGENTS.md # AI agent documentation
└── README.md # This file
No formal test suite currently. Validate changes by:
- Building:
swift build - Manual testing of modified features
- Checking Git operations don't corrupt state
Contributions are welcome! Please read our Contributing Guide for:
- Development setup and workflow
- Architecture patterns and best practices
- Common pitfalls and debugging tips
- Testing strategies
- Code style guidelines
- Pull request process
Quick Start for Contributors:
- Fork the repository
- Create a feature branch
- Make your changes (see CONTRIBUTING.md for patterns)
- Build and test:
swift build && ./bin/run - Submit a pull request with clear description
- README.md (this file) — Overview, installation, usage guide
- SETTINGS_MIGRATION.md — Settings architecture and migration from UserDefaults
- CONTRIBUTING.md — Development guide, common pitfalls, debugging
- COMMAND_PALETTE.md — Command palette (⌘K) usage and architecture
- PERFORMANCE_FIXES.md — Background loading and async patterns
- IMPLEMENTATION_NOTES.md — Recent implementation notes
- KEYBOARD_SHORTCUTS_UI.md — Keyboard shortcuts documentation
- docs/ux-improvement-plan.md — UX improvements roadmap
- SETTINGS_AUDIT.md — Settings audit and verification
- CHANGES.md — Recent changes summary
- TASKS.md — Task tracking and planning
- AGENTS.md — AI agent workflow and guidelines
[License information to be added]
- Issues: GitHub Issues
- Orchestrator Docs: lobs-orchestrator
- OpenClaw Docs: docs.openclaw.ai
Built with ❤️ using SwiftUI
