A GTD-style task manager that treats context lists as first-class citizens.
Most task apps (Things, Todoist, etc.) bury tasks inside projects. To find what to do next, you scan through every project looking for actionable items. This breaks GTD's core workflow: context-based next action lists.
In orthodox GTD, you look at @phone and see everything you can do with a phone right now—regardless of which project it belongs to. Projects are just metadata, not containers.
Taskbed does this. Tasks live in flat lists filtered by context (@phone, @computer, @errands). Projects are attributes you can attach, not buckets that hide your work.
- Context tags - Filter by @phone, @computer, @errands, @home, @anywhere, @ai
- Projects as metadata - Assign projects to tasks without nesting
- GTD status - Active, Waiting For (with who/duration tracking), Someday/Maybe
- Due dates - With overdue highlighting
- Energy levels - High/Medium/Low for matching tasks to your state
- Areas - Group projects by life area (Work, Home, etc.)
- Weekly Review - Built-in review workflow
- Keyboard shortcuts - Quick capture, navigation, completion
npm install
npm run devOpens at http://localhost:5173
Tasks are stored in data/taskbed.json. The app also persists to localStorage for fast startup.
Taskbed includes an MCP server that lets Claude Desktop and Claude Code manage tasks via natural language.
Build the MCP server:
cd mcp-server
npm install
npm run buildAdd to Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"taskbed": {
"command": "node",
"args": ["/path/to/taskbed/mcp-server/dist/index.js"]
}
}
}Or add to Claude Code:
claude mcp add taskbed node /path/to/taskbed/mcp-server/dist/index.js- "Add a task to call the dentist, tag it @phone, due Tuesday"
- "Show me my inbox"
- "What's overdue?"
- "Move that task to waiting for John"
- "Show next actions for @computer context"
See mcp-server/README.md for full tool documentation.
Taskbed can be deployed to Netlify with Supabase for cloud storage, enabling mobile/cross-device access.
- Go to supabase.com and create a new project
- Go to SQL Editor and run the schema in
scripts/supabase-schema.sql - Go to Project Settings > API to get your URL and keys
For local development, create .env:
VITE_SUPABASE_URL=https://your-project.supabase.co
VITE_SUPABASE_ANON_KEY=eyJ...your-anon-keyFor the MCP server, create mcp-server/.env:
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_SERVICE_KEY=eyJ...your-service-role-keyexport SUPABASE_URL=https://your-project.supabase.co
export SUPABASE_SERVICE_KEY=your-service-key
npm run migrate:supabase- Connect your GitHub repo to Vercel
- Add environment variables in Vercel dashboard:
VITE_SUPABASE_URLVITE_SUPABASE_ANON_KEY
- Deploy (Vercel auto-detects Vite settings)
The app will:
- Use localStorage for fast local access
- Sync to Supabase for cloud backup and cross-device sync
- Subscribe to real-time updates for instant sync between devices
- React 19 + TypeScript
- Zustand (state management with localStorage + Supabase persist)
- Supabase (PostgreSQL database + real-time sync)
- Vite
- Netlify (hosting)