{"id":50417698,"url":"https://github.com/0disoft/workduck","last_synced_at":"2026-05-31T07:01:05.100Z","repository":{"id":357359026,"uuid":"1236368712","full_name":"0disoft/workduck","owner":"0disoft","description":"Coming Soon","archived":false,"fork":false,"pushed_at":"2026-05-27T11:10:45.000Z","size":2540,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-27T11:22:00.653Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"0bsd","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/0disoft.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-12T07:27:56.000Z","updated_at":"2026-05-27T11:10:38.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/0disoft/workduck","commit_stats":null,"previous_names":["0disoft/workduck"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/0disoft/workduck","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0disoft%2Fworkduck","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0disoft%2Fworkduck/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0disoft%2Fworkduck/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0disoft%2Fworkduck/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/0disoft","download_url":"https://codeload.github.com/0disoft/workduck/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0disoft%2Fworkduck/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33722156,"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-05-31T02:00:06.040Z","response_time":95,"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":[],"created_at":"2026-05-31T07:01:03.991Z","updated_at":"2026-05-31T07:01:05.076Z","avatar_url":"https://github.com/0disoft.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Workduck\n\nWorkduck is a local-first desktop workbench for managing developer workspaces,\nproject groups, repositories, agent briefs, runs, and gates.\n\nThe app is built as a Tauri desktop shell with a static SvelteKit frontend.\nLocal filesystem, Git, encrypted sync, tray, and SQLite access go through Rust\ncommands instead of SvelteKit server routes.\n\n## Status\n\nWorkduck is still in early development, but the current desktop surface already\nincludes:\n\n- Workspace management with per-workspace password locking, session unlock, and\n  inactivity auto-lock.\n- Workspace path repair when synced workspace metadata points to a folder that\n  does not exist on the current device.\n- Optional workspace repository bootstrap that creates the workspace folder\n  layout, initializes Git, installs mustflow files, writes a minimal\n  `package.json` with `mustflow: \"latest\"` when none exists, and appends a\n  Workduck `.gitignore` block for new or already registered workspaces.\n- Workspace repository actions switch by actual Git state: prepare before\n  `.git` exists, publish when Git exists without a remote, and fetch, pull, and\n  push after a remote is configured.\n- Workspace and project metadata import/export through encrypted sync files.\n- Optional Git pull and push for the encrypted sync file.\n- Appearance settings for language and interface font sizing.\n- System settings for startup, tray behavior, and workspace inactivity locking.\n- Environment variable vault UI for API keys, tokens, accounts, passwords, and\n  tags.\n- Environment vault entries can be applied to the user's CLI environment by\n  deriving safe variable names from saved entries, such as `custom token` to\n  `CUSTOM_TOKEN`, while keeping common aliases such as `npm_publish` to\n  `NODE_AUTH_TOKEN` and OpenAI, OpenRouter, and DeepSeek API keys compatible\n  with existing tools.\n- Projects board with project, group, and repository cards.\n- GitHub credentials can be selected from Environment token entries tagged\n  `github`; projects store only the selected secret ID, not the token value.\n- Queue menu that creates workspace `queue/reports`, `queue/work-orders`, and\n  `queue/proposals` folders, renders structured result reports, work orders,\n  and proposals inside Workduck, and writes follow-up work-order JSON files.\n  Repository commit work orders include cleanup and archive instructions so\n  completed Codex handoffs do not remain in the pending queue.\n- Workspace-owned Workduck metadata folder at `\u003cworkspace\u003e/.workduck/` for\n  reference, agent, persona, and skill registries that should travel with the\n  workspace repository.\n- Project and group descriptions, nested counts, and deletion confirmation with\n  optional local folder removal under the workspace projects folder.\n- Repository folder creation, URL registration, clone, Git init, fetch, pull,\n  push, publish, card-level operation status, tags, tag filtering, and\n  pull/push-needed filtering.\n- Repository Git operations can use an Environment GitHub token instead of\n  depending only on a globally authenticated `gh` or Git credential setup.\n- Repository operation records for clone, init, fetch, pull, push, and publish\n  stored in SQLite.\n- Read-only agent API snapshot command for local automation clients that need\n  workspace, project registry, queue, repository task-run, and `.workduck`\n  metadata status without decrypting or returning secret values.\n- Project board metadata stored in the local SQLite database, with legacy\n  browser-stored project metadata promoted on first read.\n- Skills menu for workspace-local Workduck skills, including a built-in\n  proposal-writing skill.\n- Agents menu with workspace-local agent cards that reference `llm` API keys\n  from the Environment vault without copying secret values.\n- Custom title bar, sidebar resizing, and tray integration.\n\nThe main unfinished product boundary is now connecting briefs, runs, and gates\nto durable local data.\n\nEncrypted sync includes project, group, and repository metadata. Repository\nlocal paths are stored relative to the workspace when possible, not as raw\nabsolute paths.\n\nWhen a workspace is used as its own repository, Workduck keeps\n`\u003cworkspace\u003e/projects/` ignored so nested project repositories are managed\nindependently. The `\u003cworkspace\u003e/queue/` folder remains trackable so reports,\nwork orders, and proposals can move between devices through the workspace\nrepository.\n\nFor mustflow-managed workspace repositories, Workduck creates package metadata\nonly when the workspace root does not already have `package.json`. That file\ndeclares `mustflow` as a `latest` development dependency and includes\n`mustflow:check`, `mustflow:update:dry-run`, and `mustflow:update:apply`\nscripts, so the workspace can update its local mustflow package and review the\ntemplate update plan before applying it.\n\n### Queue CLI\n\nThe local CLI can execute one queued work order by its stable work-order ID,\nwrite a result report under the workspace `queue/reports` folder, and archive\nthe work order after the report is written.\n\nUse `WORKDUCK_VAULT_PASSWORD` or `--vault-password` to unlock the workspace\nEnvironment vault. If the vault is not unlocked, the CLI can use provider\nenvironment variables for agents with an explicit provider: `OPENROUTER_API_KEY`\nor `OPEN_ROUTER_API_KEY`, `OPENAI_API_KEY`, and `DEEPSEEK_API_KEY`. The CLI does\nnot print API keys, vault passwords, or the decrypted vault payload.\n\n```powershell\nbun run workduck queue run work-order_14a32cf3-029b-425f-b2ba-6c7583313d90 --workspace C:\\Users\\cherr\\Documents\\workspace\\zerodi-wd1\n```\n\n### Agent API Snapshot\n\nThe desktop shell exposes `read_agent_api_snapshot` as the first local\nautomation API boundary. It is read-only and returns the current workspace path,\nproject registry summary, queue file summary, repository task-run summary, and\nworkspace metadata file status.\n\nThe snapshot intentionally does not expose plaintext secrets, encrypted vault\npayloads, secret IDs, repository task command text, terminal output tails, or\nterminal input endpoints. Future HTTP, MCP, or work-order write APIs should wrap\nthe same safe core instead of duplicating filesystem reads.\n\n### Sync Repository And Workspace Repository\n\nWorkduck uses two different Git-backed storage paths:\n\n- The sync repository is the optional folder configured in Settings \u003e Sync. It\n  is for moving encrypted profile bootstrap data between devices, such as the\n  workspace list and import/export payloads. It is not the source of truth for\n  one workspace's day-to-day project board.\n- The workspace repository is the selected workspace folder when it is prepared\n  as a Git repository. It owns the files a developer expects to keep with that\n  workspace: `.workduck/` metadata, `queue/` reports and work orders, mustflow\n  files, and workspace package metadata.\n- A private sync repository and a private workspace repository may point to the\n  same remote only if the user intentionally wants one combined repository.\n  The recommended default is to keep them separate: one small sync repository\n  for cross-device bootstrap, and one repository per workspace for actual\n  workspace state.\n- Secret values are never written as plaintext to either repository. The sync\n  repository stores encrypted sync files, and the workspace repository stores\n  the encrypted Environment vault at `.workduck/secrets.sync.json`.\n- Nested repositories under `\u003cworkspace\u003e/projects/` stay outside the workspace\n  repository history. They are cloned, fetched, pulled, and pushed through their\n  own Git remotes.\n\nWorkspace-level Workduck metadata is split by ownership:\n\n- `\u003cworkspace\u003e/.workduck/agents.json`, `personas.json`, and `skills.json` are\n  workspace-owned metadata and can be versioned with the workspace repository.\n- `\u003cworkspace\u003e/.workduck/references.json` stores research references that work\n  orders can cite without copying notes into each task.\n- `\u003cworkspace\u003e/queue/` contains work orders, result reports, and proposals and\n  can also be versioned with the workspace repository.\n- `\u003cworkspace\u003e/projects/` is ignored by the workspace repository because each\n  nested project repository owns its own Git history.\n- `\u003cworkspace\u003e/.workduck/secrets.sync.json` stores the encrypted Environment\n  vault. Workspace metadata may store a secret ID reference, but plaintext API\n  keys, tokens, passwords, and SSH keys are not written to `.workduck`.\n- The encrypted sync folder is for cross-device profile bootstrap and encrypted\n  import/export. The workspace repository is the source of truth for\n  workspace-owned working metadata.\n\n## Repository Layout\n\n- `src/`: SvelteKit static app code.\n- `src/lib/projects/`: project, group, repository, folder, and Git UI logic.\n- `src/lib/references/`: workspace-local reference registry UI and `.workduck`\n  storage.\n- `src/lib/agents/`: workspace-local agent registry UI and `.workduck` storage.\n- `src/lib/skills/`: workspace-local Workduck skill registry UI and `.workduck`\n  storage.\n- `src/lib/personas/`: workspace-local persona registry UI and `.workduck`\n  storage.\n- `src/lib/queue/`: queue folder UI, report review, work-order creation, and\n  Tauri command adapter.\n- `src/lib/settings/`: workspace, sync, appearance, and system settings UI.\n- `src/lib/environment/`: environment variable vault UI.\n- `src-tauri/`: Tauri desktop shell, Rust commands, migrations, tray, Git,\n  sync, workspace password, and SQLite boundaries.\n- `src-tauri/migrations/`: ordered SQLite migrations.\n- `packages/core/`: shared domain model package.\n- `packages/schemas/`: shared schema package.\n- `packages/prompts/`: prompt and brief package.\n- `packages/agents/`: agent export and adapter package.\n- `packages/workbench-engine/`: workbench orchestration package.\n- `.mustflow/`: repository-local agent workflow and command contracts.\n\n## Development\n\nInstall dependencies:\n\n```sh\nbun install\n```\n\nRun the desktop app during development:\n\n```sh\nbun run desktop:dev\n```\n\nRun the configured fast check:\n\n```sh\nmf run test_fast\n```\n\nBuild the static frontend:\n\n```sh\nmf run build\n```\n\nCheck the Tauri Rust crate:\n\n```sh\nmf run desktop_check\n```\n\nValidate the mustflow workflow:\n\n```sh\nmf run mustflow_check\n```\n\n## Current Priorities\n\nThe next product work should keep the daily workbench path tight:\n\n1. Build the first Agent Brief, Run, and Gate loop before adding runtime agent\n   adapters.\n\n## Agent Workflow\n\nCoding agents should read `AGENTS.md` first and use the configured mustflow\ncommand intents instead of guessing commands from package scripts.\n\n## License\n\nWorkduck is licensed under the [0BSD](LICENSE) license.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F0disoft%2Fworkduck","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F0disoft%2Fworkduck","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F0disoft%2Fworkduck/lists"}