How chuspeeism/dashi-taskboard works
Purpose and entry points
Codex Taskboard is a local-first task/project board usable in a browser, through a macOS launcher that embeds it into Codex/ChatGPT, and through automation clients. Primary entry points are the Node HTTP service (server/index.mjs), React client (web/src/main.tsx), CLI (cli/taskctl.mjs), and Tauri launcher (src-tauri/src/main.rs).
Local service and persistence
The Node service owns the HTTP API, SQLite-backed task data, attachments, and real-time synchronization. It serves the built web client, writes local data under the configured data directory, and uses server-sent events to notify connected boards; reconnecting clients perform a full refresh.
• server/app.mjs
• server/database.mjs
• server/index.mjs
Domain and workflow model
Shared modules define taskboard domain concepts plus workflow sequencing/control-flow semantics used across service, UI, CLI, and automation. Project automation policies bridge task state changes to Codex-oriented execution behavior.
• shared/domain.mjs
• shared/workflow-control-flow.mjs
• shared/taskboard-automation.mjs
React taskboard client
The Vite/React application consumes the local API and presents dashboard, board, Gantt/list, issue detail/editor, relations, comments, attachments, and project automation configuration. Client state includes storage-backed preferences, API access, revision polling, and AI-chat state.
• web/src/App.tsx
• web/src/api.ts
• web/src/components/TaskDetail.tsx
AI chat subsystem
The server exposes AI-chat endpoints and coordinates process execution, turn ownership, cataloging, and persisted chat/task state. The web UI renders the corresponding conversation experience, keeping this integration behind the HTTP API rather than directly invoking local Codex capabilities.
• server/ai-chat.mjs
• server/ai-chat-process.mjs
• web/src/components/AiChat.tsx
Codex/ChatGPT embedding and automation
Injection tooling launches or attaches to a Chromium DevTools Protocol-enabled official client, bypasses renderer CSP as needed, and inserts the taskboard entry/iframe without modifying the vendor application. Shared executable/environment discovery and the supervisor support long-running injected sessions and recovery.
• scripts/codex-injector.mjs
• scripts/taskboard-supervisor.mjs
• inject/codex-taskboard.user.js
macOS distribution runtime
A Tauri Rust launcher packages Node, server, web assets, CLI, injector, and skill into a universal macOS app. It starts a loopback service on a random port, starts a separate official-client window with a random CDP port, injects the board, supervises failures, and uses Tauri’s signed updater. GitHub Actions builds, signs, notarizes, verifies, and promotes immutable releases.
• src-tauri/src/main.rs
• src-tauri/tauri.conf.json
• .github/workflows/release-macos.yml
Optional cloud collaboration
Cloud deployment is a Cloudflare Worker-based shared backend using D1 migrations, static assets, and private R2 attachments. Local devices retain project checkout mappings and companion capabilities; cloud proxy/config code separates this optional synchronized mode from the local database runtime.
• cloud/src/index.mjs
• cloud/migrations/0001_initial.sql
• server/cloud-proxy.mjs
Main entry points: app.mjs Local API & sync · App.tsx Taskboard UI · main.rs Tauri launcher · ai-chat.mjs AI chat coordinator
Components 23
Local Runtime
- HTTP service entry
server/index.mjs - Local API & sync · Serves board assets, APIs, attachments, and SSE updates.
server/app.mjs - Local task store · Taskboard data is stored under the configured local data directory.
server/database.mjs - AI chat coordinator · Coordinates chat state, turn ownership, and execution.
server/ai-chat.mjs - Codex process runner
server/ai-chat-process.mjs - Cloud mode proxy · Separates optional cloud synchronization from local persistence.
server/cloud-proxy.mjs
Board UI
- React client entry
web/src/main.tsx - Taskboard UI · Dashboard, board, Gantt/list, and project configuration.
web/src/App.tsx - Local API client · Maintains API access, revision refresh, and realtime board updates.
web/src/api.ts - Task editor · Edits issues, relations, comments, and attachments.
web/src/components/TaskDetail.tsx - Chat UI
web/src/components/AiChat.tsx
Embedding & Automation
- taskctl
cli/taskctl.mjs - Codex injector · Attaches to the official client and inserts the board iframe.
scripts/codex-injector.mjs - Session supervisor · Maintains long-running injected sessions and recovery.
scripts/taskboard-supervisor.mjs - Injected board bridge
inject/codex-taskboard.user.js
macOS Distribution
- Tauri launcher · Starts loopback service and official-client window on random ports.
src-tauri/src/main.rs - Signed updater config
src-tauri/tauri.conf.json - macOS release pipeline · Builds, signs, notarizes, verifies, and promotes releases.
.github/workflows/release-macos.yml
Optional Cloud Mode
- Shared cloud backend · Optional shared backend for synchronized projects.
cloud/src/index.mjs - D1 schema · Cloud task data schema; attachments are private R2 objects.
cloud/migrations/0001_initial.sql
Other components
- Shared domain · Task, project, and workflow semantics shared across runtimes.
shared/domain.mjs - Workflow control
shared/workflow-control-flow.mjs - Automation policies
shared/taskboard-automation.mjs
Connections 25
- HTTP service entry → Local API & sync: starts
- Local API & sync → Local task store: persists tasks
- Local API & sync → Shared domain: uses
- Local API & sync → Workflow control: applies
- Local API & sync → Automation policies: applies
- Local API & sync → AI chat coordinator: routes chat API
- AI chat coordinator → Codex process runner: runs turns
- React client entry → Taskboard UI: mounts
- Taskboard UI → Local API client: uses
- Taskboard UI → Task editor: renders
- Taskboard UI → Chat UI: renders
- Local API client → Local API & sync: HTTP and SSE
- Chat UI → AI chat coordinator: HTTP API
- taskctl → Local API & sync: automates via API
- Codex injector → Injected board bridge: installs
- Injected board bridge → Taskboard UI: embeds
- Session supervisor → Codex injector: restarts
- Tauri launcher → HTTP service entry: launches loopback service
- Tauri launcher → Session supervisor: starts
- Tauri launcher → Codex injector: opens CDP session
- macOS release pipeline → Tauri launcher: builds and signs
- Signed updater config → Tauri launcher: configures updater
- Local API & sync → Cloud mode proxy: optional cloud mode
- Cloud mode proxy → Shared cloud backend: syncs
- Shared cloud backend → D1 schema: uses D1