{"id":51612082,"url":"https://github.com/rushikeshjaisur11/dispatch","last_synced_at":"2026-07-12T09:03:02.429Z","repository":{"id":369671341,"uuid":"1290891524","full_name":"rushikeshjaisur11/dispatch","owner":"rushikeshjaisur11","description":"Turn sticky-note tasks into runs of Claude Code, Codex, or any BYOK LLM — an Electron desktop app for spawning, streaming, and resuming coding agents from a task board.","archived":false,"fork":false,"pushed_at":"2026-07-06T10:24:34.000Z","size":405,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-07-06T12:09:59.183Z","etag":null,"topics":["ai-agents","anthropic","claude-code","codex","desktop-app","developer-tools","electron","llm","openai","productivity","react","sqlite","tailwindcss","task-management","typescript"],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rushikeshjaisur11.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-07-06T10:16:13.000Z","updated_at":"2026-07-06T10:26:45.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/rushikeshjaisur11/dispatch","commit_stats":null,"previous_names":["rushikeshjaisur11/dispatch"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/rushikeshjaisur11/dispatch","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rushikeshjaisur11%2Fdispatch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rushikeshjaisur11%2Fdispatch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rushikeshjaisur11%2Fdispatch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rushikeshjaisur11%2Fdispatch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rushikeshjaisur11","download_url":"https://codeload.github.com/rushikeshjaisur11/dispatch/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rushikeshjaisur11%2Fdispatch/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35387177,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-12T02:00:06.386Z","response_time":87,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-agents","anthropic","claude-code","codex","desktop-app","developer-tools","electron","llm","openai","productivity","react","sqlite","tailwindcss","task-management","typescript"],"created_at":"2026-07-12T09:03:01.706Z","updated_at":"2026-07-12T09:03:02.421Z","avatar_url":"https://github.com/rushikeshjaisur11.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Dispatch\n\nDispatch is a desktop app for turning sticky-note style tasks into runs of a real coding\nagent — spawn Claude Code or Codex against a note, or chat with a bring-your-own-key\n(BYOK) LLM provider, and watch it work from a console panel docked next to your notes.\n\nBuilt with Electron, React 19, Tailwind v4, and SQLite (`better-sqlite3`).\n\n\u003e **Naming note**: the app is branded \"Dispatch\" (window title, titlebar), but\n\u003e `package.json`'s internal `\"name\"` is still `\"agentpad\"` — that field drives Electron's\n\u003e default userData folder path, and changing it would orphan existing local databases.\n\u003e The repo/folder name and product name are \"Dispatch\"; don't rename the `name` field\n\u003e without a data-migration plan.\n\n## Features\n\n- **Sticky-note tasks** grouped into nested folders, with due dates, done/undone\n  toggling, and per-note color tags.\n- **Run any CLI agent** (Claude Code, Codex, or a custom command you register) against a\n  note — streams live output as a friendly status (\"Reading a file…\", \"Running a\n  command…\") instead of raw JSON, detects genuine task completion (vs. a\n  mid-conversation pause) via a completion-instruction sentinel, and supports follow-up\n  turns that resume the same session (or start a fresh one if nothing's resumable).\n- **BYOK chat** — talk to any OpenAI-compatible or Anthropic-compatible provider directly\n  from the same panel, using your own API key (stored via OS-level encryption, never in\n  the database).\n- **Sessions view** — a global history of every agent run, with the resumable session ID,\n  a button to open a real terminal running the resume command in the task's project\n  directory, and a \"copy command\" fallback.\n- **Google Calendar sync** — push task due-dates to a dedicated calendar via OAuth (PKCE,\n  loopback redirect), no manual client-id entry required if the maintainer has configured\n  embedded app credentials (see [Configuration](#configuration)).\n- **Obsidian export** — completed/paused runs get written as a markdown note into your\n  vault, with frontmatter (status, agent, duration, project).\n- **Cross-device sync** — optional Supabase-backed sync for tasks/groups/agent runs\n  across machines, with machine-id binding so concurrent runs don't collide.\n- **Apple-glass-inspired UI** — translucent chrome (Mica on Windows 11, vibrancy on\n  macOS), a cool neutral palette with a single blue accent, and spring-driven motion.\n\n## Project layout\n\n```\nmain.cjs                 Electron entry point\npreload.cjs              contextBridge surface exposed to the renderer as window.api\nelectron/\n  agentRunner.cjs         spawns/streams/kills CLI agent processes\n  llmChat.cjs             BYOK provider streaming (OpenAI/Anthropic-compatible)\n  googleCalendarManager.cjs  OAuth PKCE flow + Calendar API calls\n  authRedirect.cjs        loopback listener for Supabase magic-link/OAuth redirects\n  secretStore.cjs         OS-encrypted (safeStorage) API key storage\n  database.cjs            better-sqlite3 + idempotent migration runner\n  windowManager.cjs       BrowserWindow creation (main/sticky/capture windows)\n  ipcHandlers.cjs         all ipcMain.handle registrations\n  migrations/*.sql        schema migrations, applied once via PRAGMA user_version\nsrc/\n  App.tsx                 shell + all major view components\n  hooks/                  useTasks, useGroups, useMessages, useChat, useSessions\n  lib/                    db client, event listener shim, agent/session helpers,\n                          Google Calendar, Obsidian, Supabase sync, theme, motion\n  components/ui/          shadcn-style Radix wrapper components\n```\n\n## Getting started\n\n```bash\nnpm install\nnpm run dev          # Vite dev server + electron:dev for the desktop shell\n```\n\nTo run the packaged desktop app directly:\n\n```bash\nnpm run build         # tsc + vite build -\u003e dist/\nnpx electron .         # launches main.cjs against dist/\n```\n\n### Configuration\n\nCopy `.env.example` to `.env` and fill in your own credentials — these are **app-level**\n(maintainer-provided) credentials, not per-user secrets, so end users of a built app\nnever need to create their own OAuth app or Supabase project:\n\n- `VITE_GOOGLE_CLIENT_ID` / `VITE_GOOGLE_CLIENT_SECRET` — a Google Cloud OAuth 2.0\n  Desktop App client (Calendar API scope), used for the Calendar sync PKCE flow.\n- `VITE_SUPABASE_URL` / `VITE_SUPABASE_ANON_KEY` — a Supabase project for cross-device\n  sync and magic-link/OAuth sign-in. Run `supabase/sync_schema.sql` in the SQL editor to\n  create the required tables + RLS policies.\n\nNone of these are required to use local-only features (running CLI agents, notes,\nObsidian export) — the app runs fully offline without them.\n\n### Registering an agent CLI\n\nAgent CLIs are rows in the `agent_clis` table (Settings → Agents), each with a JSON-array\nargv template using `{prompt}`/`{resume_id}` placeholders, e.g.:\n\n```json\n[\"-p\", \"{prompt}\", \"--output-format\", \"stream-json\"]\n```\n\nClaude Code and Codex ship as built-ins; add your own by pointing at any CLI that accepts\na prompt argument and streams JSON-lines output.\n\n## Scripts\n\n| Script | Purpose |\n|---|---|\n| `npm run dev` | Vite dev server |\n| `npm run build` | Type-check + production build to `dist/` |\n| `npm run electron:dev` | Build once, then launch Electron against it |\n| `npm run dist` | Build + package for the current platform (`electron-builder`) |\n| `npm run build:win` / `build:mac` / `build:linux` | Platform-specific packaged builds |\n\n## Roadmap / future features\n\n- Code-sign and notarize macOS/Windows builds so packaged installers are distributable\n  off-machine (currently unsigned).\n- Split `src/App.tsx` into per-component files — it currently holds every major view and\n  has grown large.\n- Code-split the renderer bundle (currently a single ~700KB chunk).\n- Richer agent activity parsing (`describeAgentActivity`) — surface more tool-specific\n  statuses as new CLIs are added, rather than falling back to generic \"Working…\" for\n  unrecognized event shapes.\n- Linux Mica/vibrancy-equivalent — currently falls back to an opaque surface since\n  neither Electron nor the OS compositor offers a native blur material there.\n- Multi-agent delegation (Task-type tool calls spawning sub-agents) surfaced in the UI\n  as a nested run tree, instead of a single flat message list.\n- Conflict resolution UI for Supabase sync (currently last-write-wins by `updated_at`).\n\n## License\n\nNot yet decided — treat as all-rights-reserved until a LICENSE file is added.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frushikeshjaisur11%2Fdispatch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frushikeshjaisur11%2Fdispatch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frushikeshjaisur11%2Fdispatch/lists"}