A macOS desktop workstation for interactive Claude Code. Agent*Dock gives you a real embedded terminal plus durable work tasks, locally saved Jira source snapshots, notes, todos, relevant files, findings, handoffs, and project-local artifacts exposed through MCP.
The app is local-first: React + shadcn/ui, an Express + SQLite API, a Neutralino window, node-pty for terminal sessions, and xterm.js in the browser.
Requires macOS 11+, Node 24+, Git, and the claude CLI on your PATH.
npm install
npm run build:packages
npm run db:migrate
npm run devnpm run dev starts the API, Vite web app, and Neutralino window. First launch asks for:
- Workspace - a parent directory containing your git repos. Agent*Dock discovers first-level repos as Projects.
- Atlassian credentials - optional Jira site URL, email, API token, and board id.
- Claude Code - project terminal tabs with xterm.js. Start Claude requires a work task, prepares task/session context, configures AgentDock MCP, and writes a visible interactive command into the PTY.
- Jira - search, save, and inspect Jira. Saved description/comments refresh from Atlassian; findings and relationships remain local-only.
- Work - operational tasks with linked projects, Jira, notes, relevant paths, findings, sessions, and handoffs, plus local notes and todos.
- Settings - workspace, Atlassian credentials, terminal preferences, Claude command, context artifact behavior, and MCP token.
Agent*Dock writes task/session context into every project linked to the active task:
.agent-dock/context/current.md
.agent-dock/context/current.json
.agent-dock/context/work-tasks/<task-id>.md
.agent-dock/context/work-tasks/<task-id>.json
.agent-dock/context/sessions/<session-id>.md
.agent-dock/context/sessions/<session-id>.json
The directory is added to .git/info/exclude, not .gitignore, so context stays local to your checkout.
The API also exposes a local bearer-token-protected MCP endpoint at:
http://127.0.0.1:8792/mcp
Claude Code is configured per project with:
claude mcp add-json agent-dock '{"type":"http","url":"http://127.0.0.1:8792/mcp","headers":{"Authorization":"Bearer <token>"}}' --scope localAgent*Dock installs a personal Claude skill at:
~/.claude/skills/agent-dock-workstation/SKILL.md
The skill teaches Claude Code to load the explicit task/session IDs, persist findings and relevant paths, use saved Jira as a read-only source snapshot, and finish with a durable handoff. See docs/mcp-tools.md and docs/claude-code-plugin.md.
| Script | Purpose |
|---|---|
npm run dev |
API + web + Neutralino, hot reload. |
npm run build |
Compile packages, API, web bundle, and Neutralino resources. |
npm run build:packages |
Compile @agent-dock/shared, @agent-dock/atlassian, and @agent-dock/db only. Required before db:migrate on a fresh clone. |
npm run typecheck |
TypeScript verification across packages and apps. |
npm run db:migrate |
Apply migrations to ~/.agent-dock/agent-dock.sqlite or $AGENT_DOCK_DATA_DIR. |
npm run package:mac |
Build an ad-hoc-signed dist/agent-dock.app for local smoke testing. |
npm run package:dmg |
Wrap the app into dist/agent-dock.dmg. |
npm run release:mac |
Signed macOS release pipeline. |
apps/api- Express API, terminal manager, MCP endpoint, context artifact service, SQLite composition root.apps/web- React UI with Claude Code, Jira, Notes / Todos, and Settings views.packages/shared- Zod schemas and shared workstation types.packages/db- better-sqlite3 migrations and repositories.packages/atlassian- Jira and legacy Confluence clients/cache support.scripts/launcher.swift- packaged app launcher that finds Node and starts the local API.
See CONTEXT.md for the current domain glossary and AGENTS.md for coding-agent implementation notes.
MIT - see LICENSE.