At work, people constantly ask "when can you have this done?" — and I wanted to answer that in one second, with a real number, not a gut feeling. Maintaining the schedule by hand is the part nobody does, so the answer is always wrong. Once estimates and deadlines exist, a schedule should fall out automatically. LLMs can do it, but they're slow and non-deterministic — the same input gives a different plan every time. Taskdog is the deterministic, offline, sub-second version of that.
Demo
Terminal preview
Overview
Terminal task manager with intelligent schedule optimization
From the maintainer
1. Launch the TUI: taskdog tui. 2. Add a few tasks right there — title, estimate, deadline, dependencies — all from the keyboard, no CLI flags to memorize. 3. Open the command palette with Ctrl+P, pick optimize, and watch the schedule lay itself out in the Gantt view. Everything — adding, editing, optimizing, starting/stopping time tracking, reviewing the Gantt — happens inside the TUI, driven from the command palette. The "when can you have it done?" answer is one Ctrl+P away
Scheduling is a pure function, not an LLM call. Given the same tasks, estimates, dependencies, and deadlines, taskdog optimize returns the same plan every time — deterministic, fast (sub-second on hundreds of tasks), and works offline. Architecturally it's split into 5 packages (core / client / server / ui / mcp) so the same scheduler powers the CLI, the Textual TUI, a FastAPI REST server, and an MCP server that lets Claude/agents query and mutate the schedule without owning the algorithm. Keyboard-only, SQLite-local, single-user by design — no dragging, no micromanagement.
Strengthening the retrospective side. Right now Taskdog is great at answering "when will it be done?" up front — the next focus is closing the loop after the fact: surfacing estimate-vs-actual deltas, where time actually went, which task types you consistently under- or over-estimate, and feeding that back into future scheduling so the plans get more honest over time.
Latest Release
What's Changed
- chore: pre-commit autoupdate by @github-actions[bot] in https://github.com/Kohei-Wada/taskdog/pull/1116
- chore(deps): bump ruff from 0.15.21 to 0.15.22 in the dev-dependencies group by @dependabot[bot] in https://github.com/Kohei-Wada/taskdog/pull/1119
- chore(deps): bump the production-dependencies group with 2 updates by @dependabot[bot] in https://github.com/Kohei-Wada/taskdog/pull/1120
- chore(deps): bump types-python-dateutil from 2.9.0.20260518 to 2.9.0.20260716 by @dependabot[bot] in https://github.com/Kohei-Wada/taskdog/pull/1121
- chore(deps): bump actions/setup-python from 6 to 7 by @dependabot[bot] in https://github.com/Kohei-Wada/taskdog/pull/1117
- chore(deps): bump KSXGitHub/github-actions-deploy-aur from 4.1.3 to 4.2.0 by @dependabot[bot] in https://github.com/Kohei-Wada/taskdog/pull/1118
- docs: fix default value for auth.enabled in configuration guide by @amir-rezaei in https://github.com/Kohei-Wada/taskdog/pull/1123
- docs: fix path code formatting and missing colon in contrib/README.md by @amir-rezaei in https://github.com/Kohei-Wada/taskdog/pull/1126
- docs: add logo to README by @Kohei-Wada in https://github.com/Kohei-Wada/taskdog/pull/1127
- perf(core): batch-fetch dependency subgraph in detect_cycle by @Kohei-Wada in https://github.com/Kohei-Wada/taskdog/pull/1128
- feat(docs): introduce MkDocs Material documentation site by @Kohei-Wada in https://github.com/Kohei-Wada/taskdog/pull/1129
- docs: point stale doc links at the new documentation site by @Kohei-Wada in https://github.com/Kohei-Wada/taskdog/pull/1130
- perf(core): remove redundant sub-passes in statistics calculator by @Kohei-Wada in https://github.com/Kohei-Wada/taskdog/pull/1131
- fix(core): treat empty notes content as no notes in task detail by @Sanjays2402 in https://github.com/Kohei-Wada/taskdog/pull/1161
- fix(core): enforce Task tag invariants in set_task_tags by @Sanjays2402 in https://github.com/Kohei-Wada/taskdog/pull/1163
- fix(core): apply filter arguments in default TaskRepository.get_filtered by @Sanjays2402 in https://github.com/Kohei-Wada/taskdog/pull/1162
- chore: require pre-commit 4.6.1 by @w3lld1 in https://github.com/Kohei-Wada/taskdog/pull/1166
- fix(core): align SQL end_date filter with whole-day semantics by @Sanjays2402 in https://github.com/Kohei-Wada/taskdog/pull/1165
- fix(mcp): report real statistics sections in get_statistics by @Sanjays2402 in https://github.com/Kohei-Wada/taskdog/pull/1168
- docs: fix markdownlint violations by @KIRA-L001 in https://github.com/Kohei-Wada/taskdog/pull/1169
- ci(docs): queue Pages deployments instead of racing by @Kohei-Wada in https://github.com/Kohei-Wada/taskdog/pull/1170
- fix: satisfy ruff 0.16 RUF036 and ISC004 by @Kohei-Wada in https://github.com/Kohei-Wada/taskdog/pull/1189
- chore(deps): bump ruff from 0.15.22 to 0.16.0 in the dev-dependencies group across 1 directory by @dependabot[bot] in https://github.com/Kohei-Wada/taskdog/pull/1185
- chore(deps): bump the production-dependencies group with 2 updates by @dependabot[bot] in https://github.com/Kohei-Wada/taskdog/pull/1186
- chore: pre-commit autoupdate by @github-actions[bot] in https://github.com/Kohei-Wada/taskdog/pull/1182
- chore(ci): bump GitHub Pages actions to v5 by @Kohei-Wada in https://github.com/Kohei-Wada/taskdog/pull/1190
- chore: pre-commit autoupdate by @github-actions[bot] in https://github.com/Kohei-Wada/taskdog/pull/1192
- chore(deps): bump ruff from 0.16.0 to 0.16.1 in the dev-dependencies group by @dependabot[bot] in https://github.com/Kohei-Wada/taskdog/pull/1193
- chore(deps): bump fastapi from 0.140.4 to 0.141.1 in the production-dependencies group by @dependabot[bot] in https://github.com/Kohei-Wada/taskdog/pull/1194
- chore(deps): bump websockets from 16.1.1 to 17.0.1 by @dependabot[bot] in https://github.com/Kohei-Wada/taskdog/pull/1196
- chore(deps): update uvicorn[standard] requirement from >=0.51.0 to >=0.52.0 by @dependabot[bot] in https://github.com/Kohei-Wada/taskdog/pull/1197
- chore(deps): migrate taskdog-mcp to mcp 2.0.0 by @Kohei-Wada in https://github.com/Kohei-Wada/taskdog/pull/1199
- chore(deps): bump cryptography to 50.0.0 in uv.lock by @Kohei-Wada in https://github.com/Kohei-Wada/taskdog/pull/1200
- fix(ui,mcp): make audit --until cover the whole day for date-only input by @Kohei-Wada in https://github.com/Kohei-Wada/taskdog/pull/1201
- ci: audit the project's locked dependencies in Security Scan by @Kohei-Wada in https://github.com/Kohei-Wada/taskdog/pull/1202
- perf(core): fetch the task universe unsorted in get_executable_tasks by @Kohei-Wada in https://github.com/Kohei-Wada/taskdog/pull/1203
- chore(deps): bump ruff from 0.16.1 to 0.16.2 in the dev-dependencies group by @dependabot[bot] in https://github.com/Kohei-Wada/taskdog/pull/1205
- chore(deps): update uvicorn[standard] requirement from >=0.52.0 to >=0.52.1 by @dependabot[bot] in https://github.com/Kohei-Wada/taskdog/pull/1207
- chore(deps): bump types-python-dateutil from 2.9.0
Discussions