ntasker
Put your coding agent on a kanban board.
Drop your tasks on the board, hit run, and Claude Code, OpenCode or Pi picks one up -- in a real terminal embedded in the page, in that task's project directory, already briefed on the task. A queue works through the rest unattended, one task per project, while you do something else. Runs on your own machine: one Python package, a SQLite file, no account, no build step, nothing leaves the box.
Quickstart
uv tool install ntasker # install from PyPI
ntasker service install --auto-update # run as a service + daily auto-update
ntasker config set projects_dir ~/Projekte
Open http://127.0.0.1:8766. The service creates the database on first start, restarts on crash and keeps itself up to
date. On Linux, run loginctl enable-linger $USER once so it survives logout. No supervisor wanted? ntasker serve
runs it in the foreground until you close it.
Then teach your agent about it:
ntasker agent install claude # or: opencode, pi
Why
Three things a plain to-do list cannot do.
The board is your agent's memory
The installed skill and /task command let the agent read and drive the tracker -- no copy-paste, no re-explaining:
- "What should I work on next?" -- it grabs the open tasks for your current project folder and ranks them by urgency.
/task 34-- pulls #34 into the session (title, description, tags), flips it to in progress, and warns you if you are sitting in the wrong project.- "Add a todo: ..." -- it files the task for you; drop a
#34anywhere later and it knows which task you mean. - Finished an assigned task? It moves the task to Review for you to sign off. It never closes, deletes or archives anything on its own.
Run a task without leaving the board
Every task row has a run button showing that task's agent logo. It opens the genuine TUI, embedded in the page via
xterm.js, running in the task's project directory and seeded with the task. You answer the agent's questions, approve
its tool prompts and interrupt it exactly as in a terminal -- same CLI, same CLAUDE.md, same skills, MCP and
permissions.
Sessions run in the background (the button shows a spinner; re-opening reattaches to the live session), and marking a task done ends its session. An open task whose session already ended gets a resume button next to Run, which continues that conversation instead of starting over. The button only appears when the agent's CLI resolves and a POSIX pseudo-terminal is available. See docs/claude-runs.md.
The queue keeps going when you stop watching
Every run button puts its task at the head of its project's lane, and ntasker works through the queue one task per
project at a time, taking the next one as soon as the previous is closed -- by you after review, or by the agent when
the task told it to. done is the only thing that ends a session. Pause stops new starts; running tasks keep going.
The panel shows one column per project, because that is what runs in parallel. To make one task wait for another -- across projects too -- drop it on the middle of the other; the edges keep reordering. A fasttrack task commits and closes itself and hands its result to the tasks depending on it; the Run-Log collects those outcomes. Plan queue lets an agent session order the queue for you and start it. See docs/task-queue.md.
Pick your agent per task
ntasker is agent-agnostic: Claude Code, OpenCode and Pi are supported out of the box, and adding another is one
plugin. Each task carries an agent and an optional model; either can fall back to a global default.
ntasker add --title "..." --agent opencode --model opus
ntasker config set default_agent opencode
ntasker agent list # CLI availability + integration status per agent
Full reference incl. per-agent binary paths: docs/agents.md.
Plugins
Optional features ship as plugins you can switch off individually (/settings -> Plugins):
| Plugin | What it adds |
|---|---|
task_context |
Attach files, notes, personas, skills and MCP servers to a task, handed to the agent in its briefing (docs) |
workspace |
Team (Claude Code subagents), skills, knowledge base and documents on a /workspace page (docs) |
voice |
Dictate task descriptions with local speech recognition; opt-in via ntasker enable voice (docs) |
A disabled plugin's routes 404, its agent is neither listed nor resolvable, and its data stays intact. Contract and slots: docs/plugins.md.
Documentation
| Topic | |
|---|---|
| Configuration | Settings, DB path, projects_dir, language, vendor assets, why you must not expose the port |
| CLI reference | Every subcommand and flag |
| HTTP API | Endpoints, SQLite schema, design notes |
| Agents | The agent registry, per-task model, skill installation |
| Agent runs | How an embedded session is spawned and reattached |
| Task queue | Queue semantics, dependencies, fasttrack, run log |
| Directory locks | Keeping two agents out of the same working directory |
| Kanban view | Board vs. list view, drag-and-drop, keyboard shortcuts |
| Projects | Sidebar tree, project families, misc project |
| Service | systemd / launchd, auto-update, uninstall |
| Development | Repo setup, smoke test, translations |
Coming from the drfoehn fork? See docs/migrating-from-fork.md.
Stack
FastAPI + uvicorn on the Python stdlib sqlite3 -- no ORM, no migration files. The frontend is HTML + AlpineJS +
Tabler.io loaded from jsDelivr with pinned SRI hashes, so the wheel stays under 100 KB and there is no build step; an
offline mode is one command away. Requires Python 3.12+.
Binds to 127.0.0.1:8766 and has no authentication -- it is a personal local tool, not a multi-user service.
License
AGPL-3.0-or-later. The Affero clause means: if you run a modified version as a network service, you must offer the modified source to its users. For local single-user use this has no practical impact.
Changelog: CHANGELOG.md -- issues and source: https://github.com/nerdocs/ntasker
If it saves you an afternoon, you can buy me a coffee.
Release files for ntasker 3.10.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ntasker-3.10.0.tar.gz | 928.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ntasker-3.10.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.5 MB
Release files / ntasker-3.10.0.tar.gz
| Download URL | ntasker-3.10.0.tar.gz |
|---|---|
| Size | 928.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
60210c5804125460217e6cf131ffe85e61fee3da9ee0a6bd9ff5f187d38bb31f
|
|
BLAKE2b-256 checksum How to use checksums |
c554a6746e5aed8a5e246a5840ef691bbce92eea588633ede7ed8835ffd765aa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency logRelease files / ntasker-3.10.0-py3-none-any.whl
| Download URL | ntasker-3.10.0-py3-none-any.whl |
|---|---|
| Size | 531.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
fb7e6d035a61359802bee2a7ae314daa15f0410f1414f6a8898513d093e1d6d8
|
|
BLAKE2b-256 checksum How to use checksums |
0407d2a237e2e59b99cba680d60333fb49b4d500a66f113a88bfc578f8fd00f8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency log