The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Thask listing page.
ThaskThask it, done. | ![]() |
The dependency graph layer for AI-assisted development.
Map what depends on what, then let Claude Code / Cursor / Codex query it through MCP — with provenance guards so agents can't silently land hallucinated descriptions on your graph.
v0.6.0 — Knowledge OS Foundation. Thask now models the full project memory, not just execution deps: 4 new first-class entity types (
REQUIREMENT,DECISION,EXPERIMENT,PERSON) alongside the original 7, 9 new relationship verbs (realizes,supersedes,decided,produced,owns,reported,drives,tests,conflicts), a domainlifecycleStateorthogonal tostatus, and per-node comments, attachments, and canonical project tags. Same 25 MCP tools — the new capabilities ride on wider enums plus two additive fields.
| Without Thask | With Thask | |
|---|---|---|
| You ask | "Refactor this payment function." | "Refactor this payment function." |
| Agent sees | Just the open file. | The file plus every node that depends_on it across your graph. |
| Agent answers | Plausible code. Three downstream flows quietly break. | "This change touches 3 flows and 2 UIs — I will update them together, or stop and ask." |
| Description drift | Agent rewrites the "why" prose on confidence, you read it, the next agent treats it as ground truth. | Agent keys default to blocking semantic writes. They propose to a queue; a human approves. Source-of-record stays human. |
Every change is recorded with 6-dimension provenance (actor, channel, agent model, mutation kind, trigger, evidence) so the next agent knows what to trust and what to re-derive from code.
Spreadsheets lose context. Linear issue trackers hide relationships. Thask maps your product as a living graph — so you can see what breaks before it breaks.
AI-NativeShip with |
Graph-first ThinkingEvery flow, task, and bug is a node. Every dependency is a visible edge. No more hidden connections. |
Impact at a GlanceOne click shows which nodes are affected by recent changes. Catch regressions before they ship. |
Self-hosted
|
Drag-and-drop nodes with 11 types — Flow, Branch, Task, Bug, API, UI, Group, plus the v0.6.0 Knowledge OS entities Requirement, Decision, Experiment, and Person. Connect them by hovering and dragging the edge handle. Auto-layout with the fCOSE force-directed algorithm.
Toggle Impact Mode to instantly highlight changed nodes and their downstream dependencies. Dimmed nodes are safe; glowing nodes need attention.
Organize related nodes into collapsible groups. Drag nodes in and out. Resize groups freely. Double-click to collapse with a child count badge.
Track every node as PASS / FAIL / IN_PROGRESS / BLOCKED with color-coded visuals. Filter the graph by node type or status to focus on what matters.
Slide-out panel with full editing — title, description (with markdown rendering), type, status, tags, connected nodes, and a complete change history audit log.
Fourteen edge types with distinct colors: the base five (depends_on, blocks, related, parent_child, triggers) plus the v0.6.0 Knowledge OS verbs (realizes, conflicts, drives, supersedes, tests, produced, owns, decided, reported). Every edge also carries a JSONB metadata bag — supersedes records {reason}, produced records {outcome_summary}, etc. Draggable waypoints for edge routing. Click any edge to change its type or delete it.
Full CLI for terminal workflows (npm install -g @thask-org/cli). 25 MCP tools for AI agent integration — Claude Code and Cursor can query and modify your graph directly. One-step browser login (thask login), in-place upgrades (thask self-update). CLI Reference · MCP Guide
Every API key is classified as user_interactive, agent, or service with seven independent permission flags. Agent keys default to blocking semantic writes (description, "why" content) and node verification — so a hallucinated description can't silently land on your graph. Every write records 6-dimension provenance (actor, channel, agent model, mutation kind, trigger, evidence) to a single audit_log table. DATABASE.md > Provenance
Agents wanting to revise a description post to node_suggestions and a human approves before the change lands. The deciding human becomes the author of record — the agent is credited only in audit metadata. Server-enforced: accepted decisions require a user_interactive actor regardless of permission flags.
Three endpoints cut N round-trips down to one — node.batch_update (up to 200), edge.batch_create / edge.batch_delete (up to 500). Atomic on permission / cycle failure; per-item skip reasons in skipped[]; HTTP 207 Multi-Status when any item skips. Saves substantial agent context (1 call vs N).
Every CLI invocation, MCP tool call, and HTTP response appends a single JSONL line to ~/.thask/events.jsonl — on your machine only, no upload. Inspect with thask usage (30-day summary, p50/p95 latency, top commands), thask reflog / thask history (recent events, full-text search), or tail -f the file directly. Raw bodies are opt-in (thask telemetry config set capture_payloads true); the default captures only metadata. Tokens, URL credentials, JWT and cookies are masked at write time.
Scan Go codebases to auto-generate dependency graphs. thask scan --path . parses go.mod and imports, creating nodes and edges automatically. Extensible via plugin system.
Detect dependency cycles (Tarjan DFS) and find the critical path (longest depends_on/blocks chain). Toggle Analysis Mode (Shift+A) to visualize cycles and critical path on the canvas.
Versioned REST API at /api/v1/ for third-party integrations. OpenAPI 3.1 spec, interactive Scalar docs, structured error responses, and idempotency support. API Guide
Four team roles — Owner, Admin, Member, Viewer — with granular permissions. Per-project roles (Editor, Viewer). API key authentication for programmatic access.
Share projects via link with viewer or editor access. Manage per-project members with granular roles. Public shared views support realtime collaboration. Embeddable graph views and OG image generation.
Start new projects from built-in templates: API Flow, Microservice Map, Sprint Board. One-click apply from the project creation flow.
Light and dark mode with system detection. Persisted per user. Design system uses CSS variables throughout.
Thask has two parts:
| Server (self-hosted) | CLI (local) | |
|---|---|---|
| What | Web UI + REST API + PostgreSQL | Terminal commands + MCP server |
| Install | docker compose up | npm install -g @thask-org/cli |
| Used by | Humans (browser) | Humans (terminal) + AI agents (MCP) |
| Data | Stores everything (nodes, edges, users) | Reads/writes via server API |
The server runs your graph database and web UI. The CLI talks to the server's API — you can create nodes, run scans, and analyze graphs from the terminal. AI agents (Claude Code, Cursor) use the CLI's built-in MCP server.
Get Thask working with Claude Code in 2 minutes:
Start Thask (if not running):
Install the CLI + log in via browser:
thask login (v0.5.11+) replaces the old "make a key in Settings,
copy a 64-char string, paste it" dance. The MCP server reads the
same ~/.thask/config.json, so this single login covers Claude Code
too. For headless / SSH sessions: create a key in the web UI and
run thask config set token <key> instead.
Add to Claude Code (.claude/mcp.json):
Now Claude Code can read and modify your dependency graph — with v0.5.9+ permission gates so agent keys can't silently land hallucinated descriptions. See MCP Guide for details and the official Claude Code plugin for a zero-setup install.
Or manually:
Open http://localhost:7243 and create an account.
The Makefile is the source of truth — every dev workflow has a target.
Or run pieces individually in separate terminals:
If air isn't installed, run the backend directly:
Prerequisites: Go 1.26+, Node.js 22+, Docker Desktop
Tip: To use
makeon Windows, install viascoop install makeorchoco install make.
| Layer | Technology |
|---|---|
| Backend | Go 1.26 (Echo v4) |
| Frontend | SvelteKit + Svelte 5 (runes) |
| CLI | Go (Cobra) + MCP server |
| Graph Engine | Cytoscape.js + fCOSE layout + edgehandles |
| Styling | Tailwind CSS v4 |
| State | Svelte 5 runes ($state, $derived, $effect) |
| Database | PostgreSQL 17 + pgx/v5 (raw SQL) |
| Auth | Session-based (bcrypt + HTTP-only cookies) |
| Testing | Go test (unit + bench) + Playwright (E2E) |
| Deploy | Docker Compose (3 services) |
| npm | @thask-org/cli (esbuild pattern, 5 platforms) |
Node types: FLOW BRANCH TASK BUG API UI GROUP REQUIREMENT DECISION EXPERIMENT PERSON
Node statuses: PASS FAIL IN_PROGRESS BLOCKED
Node lifecycle state (v0.6.0): free-form text, orthogonal to status. Used for REQUIREMENT/DECISION/EXPERIMENT/PERSON (e.g. APPROVED, RUNNING, DECIDED, ACTIVE).
Edge types: depends_on blocks related parent_child triggers realizes conflicts drives supersedes tests produced owns decided reported
Side tables (v0.6.0): node_comments, node_attachments, project_tags
backend/.env)| Variable | Description | Default |
|---|---|---|
DATABASE_URL | PostgreSQL connection string | postgresql://thask:thask_dev_password@localhost:7242/thask |
SESSION_SECRET | Random string for session signing | — |
PORT | Backend server port | 7244 |
FRONTEND_URL | Frontend URL for CORS | http://localhost:7243 |
CAPTURE_URL | Internal Playwright capture worker URL | http://localhost:7241 |
CAPTURE_INTERNAL_SECRET | Optional shared secret for backend → capture worker calls | — |
CAPTURE_TIMEOUT_SECONDS | Capture worker request timeout | 30 |
V1_ALLOWED_ORIGINS | Comma-separated CORS origins for /api/v1/ | * |
MAX_REQUEST_BODY_BYTES | Max request body size for v1 routes (bytes) | 1048576 (1MB) |
THASK_ATTACHMENT_DIR | Root directory for v0.6.0 node attachments. Empty = attachments disabled (upload endpoint returns 503). | — |
THASK_ATTACHMENT_MAX_BYTES | Max single-file size for attachment upload | 10485760 (10MB) |
frontend/.env)| Variable | Description | Default |
|---|---|---|
BACKEND_URL | Backend API URL (server-side proxy) | http://localhost:7244 |
.env)| Variable | Description | Default |
|---|---|---|
SESSION_SECRET | Required. Random 64+ char string for session signing | — |
APP_URL | Public URL of the application | http://localhost:7243 |
BACKEND_URL | Backend URL for frontend proxy | http://backend:7244 |
POSTGRES_PASSWORD | PostgreSQL password | thask_password |
CAPTURE_PORT | Local/dev host port for the Playwright capture worker | 7241 |
CAPTURE_INTERNAL_SECRET | Optional shared secret for backend → capture worker calls | — |
CAPTURE_FRONTEND_URL | URL the capture worker opens in Chromium | http://frontend:7243 |
BROWSER_WS_ENDPOINT | Browserless Chrome WebSocket endpoint used by the capture worker | ws://browserless:3000 |
Set APP_URL in .env to your public URL:
This configures CORS and CSRF protection automatically. BACKEND_URL does not need to change — the frontend server proxies API requests to the backend over the internal Docker network.
Place a reverse proxy (e.g. nginx, Caddy, Cloudflare Tunnel) in front to handle SSL termination.
The full surface — make is the canonical entrypoint for dev, build, test, and release.
| Command | Description |
|---|---|
make dev | Start DB + capture worker, then backend + frontend in parallel |
make dev-services | Start DB + capture worker (docker compose) |
make dev-db | Start PostgreSQL only |
make dev-backend | Run Go backend with air hot reload |
make dev-frontend | Run SvelteKit frontend on :7243 |
make dev-capture | Build + start the Playwright capture worker |
make db-up / make db-down | Start / stop the dev PostgreSQL container |
| Command | Description |
|---|---|
make build | Build CLI + backend (backend/bin/server) + frontend |
make build-cli | Build CLI binary into bin/thask (with version + commit ldflags) |
make release-cli | Cross-compile CLI for 5 platforms, tag, push, npm publish, GitHub Release. Set CLI_VERSION=x.y.z (or read from cli/package.json). Optional THASKOTP=... for npm 2FA. |
| Command | Description |
|---|---|
make test | Backend Go tests + frontend checks |
make test-backend | Backend Go tests (verbose) |
make test-cli | CLI Go tests |
make test-e2e | Playwright E2E tests |
make bench | Scanner + graph analysis benchmarks |
| Command | Description |
|---|---|
make up | Full stack via Docker Compose (auto-generates .env with SESSION_SECRET on first run) |
make down | Stop Docker Compose |
make clean | Remove backend/bin, bin/, dist/, frontend/build, frontend/.svelte-kit |
/api/v1/) with OpenAPI spec/api/v1/docs)/embed/:shareToken)thask scan) with go/ast parsingthask.scan.run, thask.graph.analyze@thask-org/cli, 5 platform binaries, esbuild pattern)$lib)audit_log (anti-hallucination guards)node.batch_update, edge.batch_*) with HTTP 207 partial-success; thask self-updatethask login browser-based authentication; URL auto-normalizationREQUIREMENT, DECISION, EXPERIMENT, PERSON)realizes, conflicts, drives, supersedes, tests, produced, owns, decided, reported)status)metadatanode_comments)node_attachments + THASK_ATTACHMENT_DIR volume)project_tags)We welcome contributions! See CONTRIBUTING.md for setup instructions and guidelines.