All-in-one Dev Hub — a Windows desktop app where you and your AI agents work from the same task board, backed by a plain-Markdown Obsidian vault.
workhub is the home base for an AI-driven development style. Tasks, project notes, schedules and collected knowledge live as Markdown files in a dedicated Obsidian vault; the app is a window onto those files, and Claude Code / OpenCode agents read and write the very same ones. You hand an agent a task from a card, it works in the target repository, and its report comes back into the vault for you to review.
Around that core it also carries the things a working day keeps reaching for — a repo dashboard, date and idea planning, dictation, snippets, screen annotation, music and a timer — so the day does not fragment across six windows.
It is a personal tool, built in the open. Windows 10/11 only.
One rule explains most of the design: the vault is the source of truth, and everyone edits it directly.
flowchart LR
You[You] --> Vault
App[workhub app] --> Vault
Obsidian[Obsidian] --> Vault
Agents[Claude Code / OpenCode] --> Vault
Vault[("Obsidian vault<br/>tasks · projects · knowledge")] --> Repos[Your repositories]
- A task is one Markdown file with YAML frontmatter —
status,assignee: me | claude-code | opencode,project,priority,due. - Drag a card in the app, edit the file in Obsidian, or let an agent update it: all three write the same file, and every side sees the change at once.
- Nothing is locked inside a database, so the day you stop using the app you still have every note.
Two settings files sit either side of that vault: ~/.workhub/config.json
holds what belongs to this machine (registered repositories, command
templates, hotkeys), and <vault>/.workhub/settings.json holds what belongs to
this vault (agent language, custom prompt, recurring rules) and travels with
it to another PC.
Requires Windows 10/11 and git on PATH. For the AI half you will also want
Claude Code and Node.js 20+; Obsidian,
OpenCode and herdr are optional.
$dir = "$env:LOCALAPPDATA\Programs\workhub"
New-Item -ItemType Directory -Force $dir | Out-Null
Invoke-WebRequest "https://github.com/atman-33/workhub/releases/latest/download/workhub.exe" -OutFile "$dir\workhub.exe"
[Environment]::SetEnvironmentVariable("Path", [Environment]::GetEnvironmentVariable("Path", "User") + ";$dir", "User")Open a new terminal and run:
workhubEach release also ships workhub-windows-x86_64.zip (exe + README + LICENSE)
and SHA256SUMS.txt for manual installation.
workhub checks GitHub Releases on startup; when a newer version exists a banner offers Update & restart. It can be turned off in ⚙ Settings.
The fastest path is the vault-setup skill: open Claude Code in the folder you
want as your vault and run it — it checks the prerequisites, initializes the
vault, and wires up the plugins. By hand, it is four steps.
On first launch the Tasks tab asks for a folder. Pick an empty one (e.g.
C:/obsidian/workhub-vault) and press Init vault to expand the bundled
template (vault-template/) into it. It can be changed later
under ⚙ Settings → Vault → Tasks vault path.
Open the same folder as a vault in Obsidian if you want to browse and edit the notes by hand.
A vault created from the template already enables workhub, engineering and
obsidian — accept the trust prompt on first launch and you are done. To
install them by hand:
claude plugin marketplace add atman-33/workhub
claude plugin install workhub@workhub-marketplace --scope project
claude plugin install engineering@workhub-marketplace --scope project
claude plugin install obsidian@workhub-marketplace --scope projectThe workhub plugin is what gives agents the task-start / task-report
skills and the accompanying safety hooks. It finds the vault through
~/.workhub/config.json (written by the app) or the WORKHUB_VAULT
environment variable — no per-repository configuration. See
docs/plugins.md for the full catalog.
In the Repos tab press Add and pick the repository folders you work in.
A task's project field points at one of them, by short name (a folder under
C:/repos/) or by absolute path.
- Create a task; set
assigneetoclaude-code(oropencode) andprojectto the target repository — leave it empty to run in the vault itself. - Press Launch agent on the card. The agent starts in that repository with
the task file as context, runs
task-start(status →doing), does the work, thentask-report(results into the vault, status →review). - Review it — Results in the Edit Task dialog shows the report — and move
the task to
done. Only humans close tasks.
Worth knowing on the Edit Task dialog: Confirm mode — on by default, and sitting beside Model — asks the agent to say what it makes of the request, draft a plan and wait for your approval before it implements anything, so a better approach than the one you wrote has a chance to surface. A task caught by Quick capture gets it too, and the dialog is where you turn it off. Git worktree gives it a dedicated worktree so parallel tasks cannot collide, and Model picks the model per task. Two more buttons sit beside Launch agent: Copy prompt, and Send to Claude Desktop for when you would rather not open a terminal. A copied prompt arrives with one instruction per line; Settings → Agents can switch it back to a single line.
Each feature is documented in full in the app's own Help tab — that is the manual, and it always matches the version you are running. This is the map.
| What it does | |
|---|---|
| Tasks | The board. List and kanban views, filters by status / assignee / project, drag & drop, live sync with whatever edits the files outside the app. Launch an agent, copy its prompt, or send it to Claude Desktop. |
| Projects | The vault's projects/ folders — where a piece of work's notes, schedules, mindmaps and deliverables live. Create, archive and restore them; link one to a registered repository; pin the ones in flight to the top and drag the list into the order you want. |
| Repos | The multi-repo dashboard. Branch and dirty state at a glance, a git graph with branch switching, a changes panel, and a worktrees panel for reviewing the tasks agents are running in isolation. Open any repo in VS Code, a terminal, or an agent. |
| What it does | |
|---|---|
| Schedule | A whiteboard for deciding dates: bars, estimate arrows, milestones and notes on a week grid or a month timeline, with working-day counts and optional sprint numbering. Stored as a readable Markdown note in the project. |
| Mindmap | The same idea for branching thoughts — a map that is an ordinary nested bullet list on disk, with colours, task links and sticky notes. Exports as a mermaid block. |
| Inbox | The raw notes sitting in the vault's inbox/, so what you dropped there to file later stops being invisible outside Obsidian. |
| Strategist | /strategist reads where you said you were heading (strategy/), where you actually are, and what is blocking you — then argues with you about the difference. |
| What it does | |
|---|---|
| Long-term memory | Past sessions, searchable, fully local — no cloud, no LLM. New sessions receive the relevant history automatically. |
| Your identity | memory/identity/about-me.md and decision-policy.md teach agents who you are and how you decide, so they interrupt you less — and arrive with a recommendation when they do. Every call you settle becomes a note under memory/notes/, keeping the policy itself short. |
| Custom prompt | Standing instructions appended to every task prompt an agent receives. |
| Recurring tasks | Rules that create a task on a schedule — a daily note, a weekly review, a monthly report. |
| Vault tidy | Optional housekeeping: files stale inbox notes and refreshes archive indexes by running an agent headlessly. |
| Persona | Picks the character and tone new agent sessions start in (needs the persona plugin). |
| Template updates | Keeps the vault's shared files in step with the app's bundled template — safe updates apply themselves, conflicts ask, and any of them can be diffed first. |
| What it does | |
|---|---|
| Quick capture | Ctrl+Alt+N anywhere turns the link on your clipboard into an inbox task, without switching windows. |
| Voice | Ctrl+Shift+Space dictates into whatever has focus. Local Whisper, offline. |
| Clips | Double-tap Ctrl for a snippet picker over whatever you are typing in. |
| Ink | Double-press and hold Alt to draw on the screen; Alt+C saves the screen with the strokes into the vault, and the Ink tab keeps the captures. |
| Music / Timer | A YouTube loop player with playlists, and a countdown timer with presets and an alarm. |
src/ # React frontend (React 19, Tailwind v4, shadcn/ui)
src-tauri/ # Rust backend (Tauri 2)
.claude-plugin/ # Claude Code marketplace definition
plugins/ # workhub Claude Code plugins (skills / hooks / agents)
vault-template/ # the template expanded into a new vault
demo-vault/ # fictional vault used for the screenshots in this README
docs/ # plugin catalog, screenshot procedure, images
Requires Rust and Node.js 22+:
npm install
npm run tauri dev # run with hot reload
npx tauri build --no-bundle # release build -> src-tauri/target/release/workhub.exeScreenshots for this README are taken from demo-vault/; the procedure is in
docs/screenshots.md.
MIT — based on devdeck (MIT).










