yask
Yet Another Simple Kanban board (yask)
This is a simple Kanban board that can track multiple projects.
The functionality will be extended later.
The MVP definition:
track multiple projects with completely separate state between them
every task has a number, starting with 1 and increasing
regular task types: Story, Task, Bug. Can be easily changed anytime.
regular task estimate: story points
compound task type: Epic
Epics can contain other epics (tree-like structure) without cycles, and also Stories, Tasks and Bugs
Epics cannot be estimated, they contain the sum of estimations of all contained tasks
Tasks state: Backlog, Todo, Planning, In progress, Review, Done, Archived
Any task can be archived at any time
Archived tasks are not listed by default. They can be permanently deleted.
Tasks are sorted, sorting must be preserved. Order of execution is top-down.
Tasks can have other tasks as prerequisite
If task has prerequisites and is moved in the workflow, prerequisites are moved with it unless they're already past the stage
example: task is in Backlog, and has prereqs in Planning, Backlog and Review stages. If the task is moved from Backlog from Todo, the prerequisite that is also in Backlog is moved too. Others stay at their stages.
ask confirmation before changing state for multiple tasks in one action
Each state change is tracked with timestamp
Tasks can have attachments - markdown or images
Interface:
web interface (on local machine), configurable port, 4304 (0x10D0)
MCP interface for agents
Tech stack:
sqlite backend
python3
After MVP, the development of yask will dogfood itself to add more features.
Usage
Development
Everything is provided by the flake (nixpkgs 26.05). Enter the dev environment (Python with all dependencies and pytest):
nix developRun the test suite (131 tests covering the domain rules above):
python3 -m pytest tests -qFull build + tests, hermetically:
nix build
nix flake checkWeb UI
yask serve # http://127.0.0.1:4304 (0x10D0)
yask serve --port 9000 # or: YASK_PORT=9000 yask serve
yask serve --data DIR # or: YASK_DATA=DIR yask serveThe UI is vanilla ES modules (no build step). State lives in a SQLite database
inside the data directory (default ~/.local/share/yask/yask.db).
MCP interface
yask mcpSpeaks MCP over stdio. Example client config:
{ "mcpServers": { "yask": { "command": "nix", "args": ["run", "/path/to/yask", "--", "mcp"] } } }Tools: list/create projects and tasks, set prerequisites, move/archive/
restore/delete/reorder tasks, task history, task types, attachments (list,
read — images come back as viewable image blocks, markdown as text). Actions
that would touch several tasks return requires_confirmation plus the list of
affected tasks; re-invoke with confirm: true to apply.
Project layout
yask/store.py— all domain logic (projects, numbering, epic trees, prerequisite cascade, archiving, ordering, history, attachments)yask/api.py— REST API; also serves the web UIyask/web/— web UI (vanilla JS modules, no build step)yask/mcp_server.py— MCP tool surfaceyask/cli.py—yask serve/yask mcptests/— pytest suiteflake.nix/package.nix— packaging and dev environment