{
  "markdown": "<div align=\"center\">\n\n<table><tr>\n<td align=\"center\" width=\"120\"><img src=\"public/icon.svg\" alt=\"Thask\" width=\"80\" /></td>\n<td align=\"center\"><h1>Thask</h1><em>Thask it, done.</em></td>\n<td align=\"center\" width=\"160\"><img src=\"public/mascot.png\" alt=\"Thask Mascot\" width=\"140\" /></td>\n</tr></table>\n\n**The dependency graph layer for AI-assisted development.**\n<br />\nMap 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.\n\n> **v0.6.0 — Knowledge OS Foundation.** Thask now models the full project\n> memory, not just execution deps: 4 new first-class entity types\n> (`REQUIREMENT`, `DECISION`, `EXPERIMENT`, `PERSON`) alongside the original\n> 7, 9 new relationship verbs (`realizes`, `supersedes`, `decided`,\n> `produced`, `owns`, `reported`, `drives`, `tests`, `conflicts`), a domain\n> `lifecycleState` orthogonal to `status`, and per-node comments,\n> attachments, and canonical project tags. Same 25 MCP tools — the new\n> capabilities ride on wider enums plus two additive fields.\n\n<br />\n\n[![MIT License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n&nbsp;\n[![Works with Claude Code](https://img.shields.io/badge/Works_with-Claude_Code-D97706?logo=anthropic&logoColor=white)](docs/CLAUDE_CODE_PLUGIN.md)\n&nbsp;\n[![Works with Cursor](https://img.shields.io/badge/Works_with-Cursor-000000?logo=cursor&logoColor=white)](docs/MCP.md)\n&nbsp;\n[![MCP](https://img.shields.io/badge/MCP-24_tools-7C3AED)](docs/MCP.md)\n&nbsp;\n[![Go](https://img.shields.io/badge/Go-1.26-00ADD8?logo=go&logoColor=white)](https://go.dev/)\n&nbsp;\n[![SvelteKit](https://img.shields.io/badge/SvelteKit-Svelte_5-FF3E00?logo=svelte&logoColor=white)](https://svelte.dev/)\n&nbsp;\n[![Docker](https://img.shields.io/badge/Docker-Ready-2496ED?logo=docker&logoColor=white)](https://www.docker.com/)\n\n<!-- TODO: Add hero screenshot/GIF here -->\n\n[**Live Demo** — Documentation Graph](https://thask.kimgh06.com/shared/562a734b85200bbdd65a65e18e066dc377b7dcfd3c86edb1eab4e6aece9a9bbf) · [**Architecture Graph**](https://thask.kimgh06.com/shared/de5cb3d3587d2479d6c875f873bd6479f031187e4054fd8cc93eafca8c840691)\n\n</div>\n\n---\n\n## Before vs After\n\n| | **Without Thask** | **With Thask** |\n|---|---|---|\n| You ask | *\"Refactor this payment function.\"* | *\"Refactor this payment function.\"* |\n| Agent sees | Just the open file. | The file **plus** every node that `depends_on` it across your graph. |\n| 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.\" |\n| 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. |\n\nEvery 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.\n\n---\n\n## Why Thask?\n\nSpreadsheets lose context. Linear issue trackers hide relationships. **Thask maps your product as a living graph** — so you can see what breaks before it breaks.\n\n<table>\n<tr>\n<td width=\"25%\" align=\"center\">\n<h4>AI-Native</h4>\n<p>Ship with <code>thask mcp serve</code> — Claude Code and Cursor read your dependency graph as a tool. Ask \"what breaks if I change this?\" and get real answers.</p>\n</td>\n<td width=\"25%\" align=\"center\">\n<h4>Graph-first Thinking</h4>\n<p>Every flow, task, and bug is a node. Every dependency is a visible edge. No more hidden connections.</p>\n</td>\n<td width=\"25%\" align=\"center\">\n<h4>Impact at a Glance</h4>\n<p>One click shows which nodes are affected by recent changes. Catch regressions before they ship.</p>\n</td>\n<td width=\"25%\" align=\"center\">\n<h4>Self-hosted</h4>\n<p><code>docker compose up</code> — that's it. Your data stays on your infrastructure. No vendor lock-in.</p>\n</td>\n</tr>\n</table>\n\n---\n\n## Features\n\n### Interactive Graph Editor\n\nDrag-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.\n\n### QA Impact Mode\n\nToggle Impact Mode to instantly highlight **changed nodes** and their **downstream dependencies**. Dimmed nodes are safe; glowing nodes need attention.\n\n### Group Nodes\n\nOrganize related nodes into collapsible groups. Drag nodes in and out. Resize groups freely. Double-click to collapse with a child count badge.\n\n### Status Tracking & Filters\n\nTrack 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.\n\n### Node Detail Panel\n\nSlide-out panel with full editing — title, description (with markdown rendering), type, status, tags, connected nodes, and a complete change history audit log.\n\n### Edge Relationships\n\nFourteen 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.\n\n### CLI & MCP Integration\n\nFull 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](docs/CLI.md) · [MCP Guide](docs/MCP.md)\n\n### Per-Key Permissions & Provenance (v0.5.9+)\n\nEvery 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](docs/DATABASE.md#provenance--audit-migrations-006010)\n\n### Suggestion Queue\n\nAgents 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.\n\n### Bulk Operations (v0.5.10+)\n\nThree 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).\n\n### Local-First CLI Telemetry (v0.5.15+)\n\nEvery 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.\n\n### Go Dependency Scanner\n\nScan Go codebases to auto-generate dependency graphs. `thask scan --path .` parses `go.mod` and imports, creating nodes and edges automatically. Extensible via [plugin system](docs/PLUGINS.md).\n\n### Graph Analysis\n\nDetect 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.\n\n### External API (v1)\n\nVersioned REST API at `/api/v1/` for third-party integrations. OpenAPI 3.1 spec, interactive Scalar docs, structured error responses, and idempotency support. [API Guide](backend/api/README.md)\n\n### Role-Based Access\n\nFour team roles — Owner, Admin, Member, Viewer — with granular permissions. Per-project roles (Editor, Viewer). API key authentication for programmatic access.\n\n### Project Sharing\n\nShare 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.\n\n### Templates\n\nStart new projects from built-in templates: API Flow, Microservice Map, Sprint Board. One-click apply from the project creation flow.\n\n### Theme System\n\nLight and dark mode with system detection. Persisted per user. Design system uses CSS variables throughout.\n\n---\n\n## How It Works\n\nThask has two parts:\n\n| | Server (self-hosted) | CLI (local) |\n|---|---|---|\n| **What** | Web UI + REST API + PostgreSQL | Terminal commands + MCP server |\n| **Install** | `docker compose up` | `npm install -g @thask-org/cli` |\n| **Used by** | Humans (browser) | Humans (terminal) + AI agents (MCP) |\n| **Data** | Stores everything (nodes, edges, users) | Reads/writes via server API |\n\n```\nBrowser ──→ Thask Server (Docker) ──→ PostgreSQL\n                ↑\nCLI / MCP ──────┘\n```\n\nThe **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.\n\n---\n\n## Quick Start for AI Agents\n\nGet Thask working with Claude Code in 2 minutes:\n\n1. **Start Thask** (if not running):\n   ```bash\n   make up\n   ```\n\n2. **Install the CLI + log in via browser:**\n   ```bash\n   npm install -g @thask-org/cli\n   thask config set url http://localhost:7244\n   thask login   # opens browser, click Approve, token saved\n   ```\n   `thask login` (v0.5.11+) replaces the old \"make a key in Settings,\n   copy a 64-char string, paste it\" dance. The MCP server reads the\n   same `~/.thask/config.json`, so this single login covers Claude Code\n   too. For headless / SSH sessions: create a key in the web UI and\n   run `thask config set token <key>` instead.\n\n3. **Add to Claude Code** (`.claude/mcp.json`):\n   ```json\n   {\n     \"mcpServers\": {\n       \"thask\": {\n         \"command\": \"thask\",\n         \"args\": [\"mcp\", \"serve\"]\n       }\n     }\n   }\n   ```\n\nNow Claude Code can read and modify your dependency graph — with v0.5.9+\npermission gates so agent keys can't silently land hallucinated\ndescriptions. See [MCP Guide](docs/MCP.md) for details and the\n[official Claude Code plugin](docs/CLAUDE_CODE_PLUGIN.md) for a zero-setup\ninstall.\n\n---\n\n## Quick Start\n\n### Docker (recommended)\n\n```bash\nmake up   # auto-generates .env with SESSION_SECRET on first run\n```\n\nOr manually:\n\n```bash\ncp .env.example .env\n# Edit .env and set SESSION_SECRET (or let make generate it)\ndocker compose up --build\n```\n\nOpen [http://localhost:7243](http://localhost:7243) and create an account.\n\n### Local Development (macOS / Linux)\n\nThe Makefile is the source of truth — every dev workflow has a target.\n\n```bash\nmake dev          # one-shot: starts DB + capture worker, then backend + frontend in parallel\n```\n\nOr run pieces individually in separate terminals:\n\n```bash\nmake dev-db       # PostgreSQL only (docker compose)\nmake dev-capture  # Playwright capture worker (docker compose)\nmake dev-backend  # Go backend (requires air: go install github.com/air-verse/air@latest)\nmake dev-frontend # SvelteKit frontend on :7243\n```\n\nIf `air` isn't installed, run the backend directly:\n\n```bash\ncd backend && cp .env.example .env && go run ./cmd/server\n```\n\n### Local Development (Windows)\n\nPrerequisites: [Go 1.26+](https://go.dev/dl/), [Node.js 22+](https://nodejs.org/), [Docker Desktop](https://www.docker.com/products/docker-desktop/)\n\n```powershell\n# Terminal 1 — Start PostgreSQL\ndocker compose -f docker-compose.dev.yml up -d\n\n# Terminal 2 — Start backend\ncd backend\ncopy .env.example .env\ngo run ./cmd/server\n\n# Terminal 3 — Start frontend\ncd frontend\ncopy .env.example .env\nnpm install\nnpm run dev -- --port 7243\n```\n\n> **Tip:** To use `make` on Windows, install via `scoop install make` or `choco install make`.\n\nOpen [http://localhost:7243](http://localhost:7243)\n\n---\n\n## Tech Stack\n\n| Layer | Technology |\n|---|---|\n| **Backend** | Go 1.26 (Echo v4) |\n| **Frontend** | SvelteKit + Svelte 5 (runes) |\n| **CLI** | Go (Cobra) + MCP server |\n| **Graph Engine** | Cytoscape.js + fCOSE layout + edgehandles |\n| **Styling** | Tailwind CSS v4 |\n| **State** | Svelte 5 runes ($state, $derived, $effect) |\n| **Database** | PostgreSQL 17 + pgx/v5 (raw SQL) |\n| **Auth** | Session-based (bcrypt + HTTP-only cookies) |\n| **Testing** | Go test (unit + bench) + Playwright (E2E) |\n| **Deploy** | Docker Compose (3 services) |\n| **npm** | `@thask-org/cli` (esbuild pattern, 5 platforms) |\n\n---\n\n## Project Structure\n\n```\nbackend/\n  cmd/server/           # Go entrypoint, route registration\n  internal/\n    config/             # Environment configuration\n    dto/                # Request/response structs, v1 errors, pagination\n    handler/            # HTTP handlers (auth, team, node, edge, impact,\n                        #   graph_analysis, activity, events, og_image, api_key)\n    middleware/         # Auth, role, project access, shared access,\n                        #   idempotency, v1 response\n    model/              # Domain models & enums\n    repository/         # Database access layer (pgx, 11 repos)\n    service/            # Business logic (waterfall, impact, graph_analysis,\n                        #   layout, eventhub, auth)\n    migrate/            # Migration runner\n  migrations/           # SQL migration files (001~005)\n  api/                  # OpenAPI spec + API guide\n\nfrontend/\n  src/\n    routes/\n      login/            # Login page\n      register/         # Register page\n      dashboard/        # Dashboard & team pages\n        [teamSlug]/\n          [projectId]/  # Graph editor page\n          members/      # Team member management\n        settings/       # User settings\n      shared/[shareToken]/  # Public shared view\n      embed/[shareToken]/   # Embeddable graph\n      docs/             # Documentation page\n    lib/\n      api.ts            # Typed API client\n      types.ts          # TypeScript type definitions\n      markdown.ts       # Markdown renderer (marked + DOMPurify)\n      stores/           # Svelte 5 rune stores (auth, graph, teams,\n                        #   members, realtime, theme, undo)\n      components/       # CytoscapeCanvas, GraphToolbar, DetailSidePanel,\n                        #   MarkdownEditor, ActivityFeed, TemplateSelector,\n                        #   ShareDialog, SearchBar, ProjectMenu, AddNodeModal\n      cytoscape/        # Styles, layouts, impact, sync, resize,\n                        #   portOverlay, groupHelpers, statusDot\n      managers/         # nodeCrud, edgeCrud\n  e2e/                  # Playwright E2E tests\n  static/templates/     # Built-in project templates (3)\n\ncli/\n  cmd/thask/            # CLI entrypoint\n  internal/\n    cmd/                # Cobra commands (node, edge, team, project,\n                        #   graph, impact, scan, mcp, auth, config,\n                        #   aliases, install, version)\n    mcp/                # MCP server (stdio protocol, 12+ tools)\n    scan/               # Go dependency scanner + plugin runner\n    client/             # HTTP client for backend API\n    config/             # Config file management (~/.config/thask/)\n    output/             # Output formatting (JSON, table, quiet)\n\nnpm/                    # npm distribution (@thask-org/cli, 5 platforms)\n```\n\n---\n\n## Data Model\n\n```\nUsers ──< TeamMembers >── Teams ──< Projects ──< Nodes ──< NodeHistory\n  │                                    │            │\n  └──< ApiKeys                         │            └──< Edges\n                                       │\n                                       └──< ProjectMembers >── Users\n```\n\n**Node types:** `FLOW` `BRANCH` `TASK` `BUG` `API` `UI` `GROUP` `REQUIREMENT` `DECISION` `EXPERIMENT` `PERSON`\n**Node statuses:** `PASS` `FAIL` `IN_PROGRESS` `BLOCKED`\n**Node lifecycle state (v0.6.0):** free-form text, orthogonal to `status`. Used for REQUIREMENT/DECISION/EXPERIMENT/PERSON (e.g. `APPROVED`, `RUNNING`, `DECIDED`, `ACTIVE`).\n**Edge types:** `depends_on` `blocks` `related` `parent_child` `triggers` `realizes` `conflicts` `drives` `supersedes` `tests` `produced` `owns` `decided` `reported`\n**Side tables (v0.6.0):** `node_comments`, `node_attachments`, `project_tags`\n\n---\n\n## Environment Variables\n\n### Backend (`backend/.env`)\n\n| Variable | Description | Default |\n|---|---|---|\n| `DATABASE_URL` | PostgreSQL connection string | `postgresql://thask:thask_dev_password@localhost:7242/thask` |\n| `SESSION_SECRET` | Random string for session signing | — |\n| `PORT` | Backend server port | `7244` |\n| `FRONTEND_URL` | Frontend URL for CORS | `http://localhost:7243` |\n| `CAPTURE_URL` | Internal Playwright capture worker URL | `http://localhost:7241` |\n| `CAPTURE_INTERNAL_SECRET` | Optional shared secret for backend → capture worker calls | — |\n| `CAPTURE_TIMEOUT_SECONDS` | Capture worker request timeout | `30` |\n| `V1_ALLOWED_ORIGINS` | Comma-separated CORS origins for `/api/v1/` | `*` |\n| `MAX_REQUEST_BODY_BYTES` | Max request body size for v1 routes (bytes) | `1048576` (1MB) |\n| `THASK_ATTACHMENT_DIR` | Root directory for v0.6.0 node attachments. Empty = attachments disabled (upload endpoint returns 503). | — |\n| `THASK_ATTACHMENT_MAX_BYTES` | Max single-file size for attachment upload | `10485760` (10MB) |\n\n### Frontend (`frontend/.env`)\n\n| Variable | Description | Default |\n|---|---|---|\n| `BACKEND_URL` | Backend API URL (server-side proxy) | `http://localhost:7244` |\n\n### Docker Compose (`.env`)\n\n| Variable | Description | Default |\n|---|---|---|\n| `SESSION_SECRET` | **Required.** Random 64+ char string for session signing | — |\n| `APP_URL` | Public URL of the application | `http://localhost:7243` |\n| `BACKEND_URL` | Backend URL for frontend proxy | `http://backend:7244` |\n| `POSTGRES_PASSWORD` | PostgreSQL password | `thask_password` |\n| `CAPTURE_PORT` | Local/dev host port for the Playwright capture worker | `7241` |\n| `CAPTURE_INTERNAL_SECRET` | Optional shared secret for backend → capture worker calls | — |\n| `CAPTURE_FRONTEND_URL` | URL the capture worker opens in Chromium | `http://frontend:7243` |\n| `BROWSER_WS_ENDPOINT` | Browserless Chrome WebSocket endpoint used by the capture worker | `ws://browserless:3000` |\n\n### Deploying to a Custom Domain\n\nSet `APP_URL` in `.env` to your public URL:\n\n```bash\n# .env\nAPP_URL=https://thask.example.com\nSESSION_SECRET=your-random-64-char-string\n```\n\nThis 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.\n\n```\nBrowser ──https──▶ Reverse Proxy (nginx/Cloudflare)\n                        │\n                        ▼ :7243\n                   Frontend (SvelteKit)\n                        │\n                        ▼ http://backend:7244 (Docker internal)\n                   Backend (Go)\n                        │\n                        ▼ http://capture:7241 (Docker internal, optional)\n                   Capture Worker (Playwright)\n                        │\n                        ▼ postgres:5432 (Docker internal)\n                   PostgreSQL\n```\n\nPlace a reverse proxy (e.g. nginx, Caddy, Cloudflare Tunnel) in front to handle SSL termination.\n\n---\n\n## Documentation\n\n- [Architecture](docs/ARCHITECTURE.md) — Layers, data flow, directory structure\n- [Database](docs/DATABASE.md) — ER diagram, tables, indexes, relations\n- [API Reference](docs/API.md) — 30+ endpoints with request/response examples\n- [Graph Engine](docs/GRAPH.md) — Node types, edge types, GROUP, impact mode\n- [Keyboard Shortcuts](docs/SHORTCUTS.md) — All shortcuts and interactions\n- [CLI Reference](docs/CLI.md) — Installation, commands, shell aliases\n- [MCP Guide](docs/MCP.md) — AI agent integration (Claude Code, Cursor)\n- [Claude Code Plugin](docs/CLAUDE_CODE_PLUGIN.md) — Auto-inject project context + register MCP server in every session\n- [Scanner Plugins](docs/PLUGINS.md) — Scanner plugin system for new languages\n- [V1 API Guide](backend/api/README.md) — External API quickstart for third-party developers\n\n---\n\n## Makefile Commands\n\nThe full surface — `make` is the canonical entrypoint for dev, build, test, and release.\n\n### Development\n| Command | Description |\n|---|---|\n| `make dev` | Start DB + capture worker, then backend + frontend in parallel |\n| `make dev-services` | Start DB + capture worker (docker compose) |\n| `make dev-db` | Start PostgreSQL only |\n| `make dev-backend` | Run Go backend with air hot reload |\n| `make dev-frontend` | Run SvelteKit frontend on `:7243` |\n| `make dev-capture` | Build + start the Playwright capture worker |\n| `make db-up` / `make db-down` | Start / stop the dev PostgreSQL container |\n\n### Build & Release\n| Command | Description |\n|---|---|\n| `make build` | Build CLI + backend (`backend/bin/server`) + frontend |\n| `make build-cli` | Build CLI binary into `bin/thask` (with version + commit ldflags) |\n| `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. |\n\n### Test\n| Command | Description |\n|---|---|\n| `make test` | Backend Go tests + frontend checks |\n| `make test-backend` | Backend Go tests (verbose) |\n| `make test-cli` | CLI Go tests |\n| `make test-e2e` | Playwright E2E tests |\n| `make bench` | Scanner + graph analysis benchmarks |\n\n### Docker\n| Command | Description |\n|---|---|\n| `make up` | Full stack via Docker Compose (auto-generates `.env` with `SESSION_SECRET` on first run) |\n| `make down` | Stop Docker Compose |\n| `make clean` | Remove `backend/bin`, `bin/`, `dist/`, `frontend/build`, `frontend/.svelte-kit` |\n\n---\n\n## Roadmap\n\n### v0.1 — Foundation (Done)\n- [x] Graph CRUD (nodes, edges, groups)\n- [x] 7 node types & 4 statuses with visual styling\n- [x] fCOSE auto-layout & manual positioning\n- [x] Drag-and-drop grouping & compound nodes\n- [x] Node search & keyboard shortcuts\n- [x] QA impact analysis (BFS-based)\n- [x] Status waterfall propagation\n- [x] Session-based auth & team management\n- [x] Docker Compose one-command deploy\n- [x] Go backend with 18 unit tests\n- [x] Playwright E2E tests (13 tests)\n- [x] CLI tool with full graph operations\n- [x] MCP server for AI agent integration (12 tools)\n- [x] API key authentication (Bearer token)\n- [x] Role-based access control (owner/admin/member/viewer)\n- [x] Team member management (invite, roles, transfer)\n- [x] Project sharing with public links (viewer/editor modes)\n- [x] CLI sharing commands (share, unshare, invite, kick)\n\n### v0.2 — External API & Collaboration (Done)\n- [x] Real-time collaboration via SSE\n- [x] Graph export as PNG / JSON\n- [x] Graph import (replace/merge mode)\n- [x] Versioned external API (`/api/v1/`) with OpenAPI spec\n- [x] Interactive API docs (Scalar UI at `/api/v1/docs`)\n- [x] Structured error responses for v1\n- [x] Idempotency support for API consumers\n- [x] CORS configuration for external domains\n- [x] Edge waypoints (draggable bend points)\n- [x] SVG edge rendering with snap guides\n- [x] Embeddable graph views (`/embed/:shareToken`)\n- [x] OG image generation for shared links\n\n### v0.3 — Scanner + Graph Intelligence (Done)\n- [x] Go dependency scanner (`thask scan`) with `go/ast` parsing\n- [x] Cycle detection (Tarjan DFS) and critical path analysis\n- [x] Analysis Mode frontend (Shift+A toggle, cycles/critical path highlighting)\n- [x] MCP tools: `thask.scan.run`, `thask.graph.analyze`\n- [x] GitHub Actions CI (backend tests, CLI tests, frontend check)\n- [x] Scanner plugin system with documentation\n\n### v0.4 — Community & Ecosystem (Done)\n- [x] npm distribution (`@thask-org/cli`, 5 platform binaries, esbuild pattern)\n- [x] Scanner plugin interface (any executable outputting ImportGraphRequest JSON)\n- [x] Homebrew formula template\n- [x] Performance benchmarks (scanner + graph analysis)\n\n### v0.5 — Visual Polish & Analytics (Done)\n- [x] Light/dark theme system with system detection\n- [x] Activity feed (recent changes with user attribution)\n- [x] Project templates (API Flow, Microservice Map, Sprint Board)\n- [x] Amber Precision design system fully applied\n- [x] Markdown description rendering (marked + DOMPurify)\n- [x] **v0.5.6** — Graph image capture (PNG/SVG via Playwright worker)\n- [x] **v0.5.8** — TypeScript/JavaScript dependency scanner (alias resolution, SvelteKit `$lib`)\n- [x] **v0.5.9** — Per-key permissions + suggestion queue + 6-dimension `audit_log` (anti-hallucination guards)\n- [x] **v0.5.10** — Bulk endpoints (`node.batch_update`, `edge.batch_*`) with HTTP 207 partial-success; `thask self-update`\n- [x] **v0.5.11** — `thask login` browser-based authentication; URL auto-normalization\n\n### v0.6 — Knowledge OS Foundation (Done)\n- [x] **v0.6.0** — 4 new node types (`REQUIREMENT`, `DECISION`, `EXPERIMENT`, `PERSON`)\n- [x] **v0.6.0** — 9 new edge verbs (`realizes`, `conflicts`, `drives`, `supersedes`, `tests`, `produced`, `owns`, `decided`, `reported`)\n- [x] **v0.6.0** — Domain lifecycle state field (orthogonal to `status`)\n- [x] **v0.6.0** — Per-edge JSONB `metadata`\n- [x] **v0.6.0** — Threaded node comments (`node_comments`)\n- [x] **v0.6.0** — Per-node file attachments (`node_attachments` + `THASK_ATTACHMENT_DIR` volume)\n- [x] **v0.6.0** — Canonical project tags (`project_tags`)\n- [x] **v0.6.0** — Per-project API key scoping\n\n### Future\n- [ ] Graph version snapshots & diffing\n- [ ] Node lifecycle analytics (time-in-status, bottleneck detection)\n- [ ] Webhook triggers on graph changes\n- [ ] GitHub repo sync (auto-update graph on push)\n- [ ] Slack / Discord notifications\n- [ ] Mobile responsive layout\n- [ ] Self-hosted SSO (SAML / OIDC)\n\n---\n\n## Contributing\n\nWe welcome contributions! See [CONTRIBUTING.md](CONTRIBUTING.md) for setup instructions and guidelines.\n\n---\n\n<div align=\"center\">\n\n## License\n\n[MIT](LICENSE) &copy; Thask Contributors\n\n**Thask it, done.**\n\n[Report Bug](../../issues) &middot; [Request Feature](../../issues)\n\n</div>\n",
  "bytes": 26590,
  "sha": "faa083c7a25756f5823ea8a7e8446c3a19df3596989bf6817c61602a85159513",
  "repo_slug": "kimgh06/thask",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_kimgh06_thask_d8d8a5f6/readme"
}