Canonical YAML task store with pluggable adapters (mermaid dependency graphs)
Project description
scitex-todo (scitex-todo)
A canonical YAML task store with pluggable adapters — render your dependency graph as a diagram, not a wall of prose.
Full Documentation · uv pip install scitex-todo[all]
Problem and Solution
| # | Problem | Solution |
|---|---|---|
| 1 | Prose to-do lists hide the dependency structure — what blocks what is buried in text. | A YAML store with explicit depends_on / blocks, rendered as a dependency graph. |
| 2 | Task tooling locks your data into one app's format. | A plain-YAML single source of truth; adapters render or import it, the store stays portable. |
| 3 | Switching views means re-entering the same tasks. | One store, multiple adapters — mermaid PNG today, a web board, org-mode on the roadmap. |
Quick Start
import scitex_todo as todo
tasks = todo.load_tasks("tasks.yaml") # validates: id/title/status
mermaid_src = todo.build_mermaid(tasks) # YAML -> flowchart TB
engine = todo.render(mermaid_src, "tasks.png")
print(f"rendered via {engine}")
From the shell:
# default store: project -> user -> bundled example (or $SCITEX_TODO_TASKS)
scitex-todo render-graph -o tasks.png
# inspect the generated mermaid without rendering
scitex-todo render-graph --print-mermaid
# list the resolved tasks (add --json for machine-readable output)
scitex-todo list-tasks
Installation
Recommended:
uv pip install scitex-todo[all]— uv's Rust resolver handles the SciTeX dep set quickly. Plainpip installstill works.
# Recommended — uv resolver
uv pip install scitex-todo[all]
# Plain pip also works
pip install scitex-todo
Rendering to PNG additionally needs either mmdc (mermaid-cli, with a
puppeteer/playwright chromium) on PATH, or outbound access to kroki.io
(the automatic fallback).
Configuration
Copy .env.example to .env (gitignored) at your project
root, then edit. CLI flags always override env vars; the full list of
variables (with inline comments) lives in .env.example.
Local state directories
scitex-todo resolves your task store from the canonical SciTeX local-state
locations (project-local wins; both optional):
| Path | Scope | Purpose |
|---|---|---|
~/.scitex/todo/tasks.yaml |
user-global | your personal task store |
<proj-root>/.scitex/todo/tasks.yaml |
project-local | overrides for the current repo |
Architecture
The YAML store is the canonical backend; everything else is an adapter that reads (or, for the board, writes) it. No adapter owns the data.
flowchart TB
store["tasks.yaml<br/>(single source of truth)"]
load["load_tasks()<br/>validate id/title/status"]
build["build_mermaid()<br/>YAML -> flowchart TB"]
render["render()<br/>mmdc | kroki.io"]
png["tasks.png"]
board["Web board<br/>(React Flow, read-only)"]
store --> load
load --> build
build --> render
render --> png
load --> board
board -. "drag-reorder writes priority" .-> store
Figure 1. scitex-todo data flow: one YAML store feeds the mermaid PNG adapter and the read-only web board.
3 Interfaces
Python API
import scitex_todo as todo
tasks = todo.load_tasks("tasks.yaml")
src = todo.build_mermaid(tasks)
todo.render(src, "tasks.png")
load_tasks, save_tasks, build_mermaid, render, resolve_tasks_path,
bundled_example, and the STATUS_STYLE / VALID_STATUSES tables are the
public surface (scitex-todo list-python-apis).
CLI
scitex-todo render-graph -o tasks.png # YAML -> dependency PNG
scitex-todo list-tasks --json # resolved tasks, machine-readable
scitex-todo board --port 8051 # read-only web board (needs [web])
scitex-todo list-python-apis -v # introspect the Python surface
scitex-todo install-shell-completion # bash/zsh/fish tab-completion
Web board
A browser view of the dependency graph, rendered with React Flow (nodes
colored by status, depends_on arrows, blocks ⊣ inhibition edges). Install
the web extra and launch the standalone server:
pip install scitex-todo[web]
scitex-todo board # opens http://127.0.0.1:8051/
Task store schema
A YAML document with a top-level tasks: list. Each task:
| Field | Required | Meaning |
|---|---|---|
id |
yes | unique id, referenced by depends_on / blocks |
title |
yes | short label |
status |
yes | goal | pending | in_progress | blocked | done | deferred | failed |
repo |
no | owning repo / area |
depends_on |
no | ids this task depends on -> arrow dep --> task |
blocks |
no | ids this task inhibits -> blocker -- blocks --x target |
note |
no | free-text annotation, shown under the title |
priority |
no | integer rank (lower = higher); document order if absent |
parent |
no | id of the task this nests under (drill-down view) |
status -> color
| status | fill | edge style |
|---|---|---|
goal |
gold #ffe082 |
solid |
done |
green #c8e6c9 |
solid |
in_progress |
yellow #fff9c4 |
solid |
blocked |
orange #fff3e0 |
solid |
pending |
grey #eceff1 |
solid |
deferred |
grey #f5f5f5 |
dashed border |
failed |
red #ffcdd2 |
solid |
Roadmap
The YAML store is the canonical backend; adapters layer on top.
- mermaid adapter — YAML -> dependency PNG. (done)
- Web UI (read-only board) — browser view via React Flow. (done)
- Web UI (drag-to-reprioritize) — drag a task to change its
priorityand write back to the YAML store. (in progress) - org adapter — read/write org-mode TODO trees (
:BLOCKER:/ORDERED/ org-edna) so deps are derivable from Emacs. (future) - MCP / HTTP / RTD / full skills — agentic + service surfaces, intended to make the store a shared task backend across SciTeX (e.g. orochi). (future)
Part of SciTeX
scitex-todo is part of SciTeX.
Four Freedoms for Research
- The freedom to run your research anywhere — your machine, your terms.
- The freedom to study how every step works — from raw data to final manuscript.
- The freedom to redistribute your workflows, not just your papers.
- The freedom to modify any module and share improvements with the community.
AGPL-3.0 — because we believe research infrastructure deserves the same freedoms as the software it runs on.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file scitex_todo-0.2.1.tar.gz.
File metadata
- Download URL: scitex_todo-0.2.1.tar.gz
- Upload date:
- Size: 8.9 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9c4cde528ad1941a883ca46e8e1e847bf181d252e1bd4cb55d22bf0bf89c0ae2
|
|
| MD5 |
e3f127664b776f72c84b9562d77b6033
|
|
| BLAKE2b-256 |
5b19a96ecf23d5f3913fa9610957e9a8ac837f4295a34ab51d8fe12dbfaf4afc
|
Provenance
The following attestation bundles were made for scitex_todo-0.2.1.tar.gz:
Publisher:
pypi-publish-and-github-release-on-tag.yml on ywatanabe1989/scitex-todo
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
scitex_todo-0.2.1.tar.gz -
Subject digest:
9c4cde528ad1941a883ca46e8e1e847bf181d252e1bd4cb55d22bf0bf89c0ae2 - Sigstore transparency entry: 1653625584
- Sigstore integration time:
-
Permalink:
ywatanabe1989/scitex-todo@eafc6fdd9f27dab2579e1cd2e435f6be1416333b -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/ywatanabe1989
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish-and-github-release-on-tag.yml@eafc6fdd9f27dab2579e1cd2e435f6be1416333b -
Trigger Event:
push
-
Statement type:
File details
Details for the file scitex_todo-0.2.1-py3-none-any.whl.
File metadata
- Download URL: scitex_todo-0.2.1-py3-none-any.whl
- Upload date:
- Size: 8.6 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e6af8510cbe44b466c8cbc6b6c3193f2cfec209f0093b3f9c8f1ac1cc5c955c0
|
|
| MD5 |
d45c19fcbc409127352b18100db27f2c
|
|
| BLAKE2b-256 |
00b7ea44349bfc0dd956af0ca79063f5ae2d9c6906f4c13fc78274142d2fa7e9
|
Provenance
The following attestation bundles were made for scitex_todo-0.2.1-py3-none-any.whl:
Publisher:
pypi-publish-and-github-release-on-tag.yml on ywatanabe1989/scitex-todo
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
scitex_todo-0.2.1-py3-none-any.whl -
Subject digest:
e6af8510cbe44b466c8cbc6b6c3193f2cfec209f0093b3f9c8f1ac1cc5c955c0 - Sigstore transparency entry: 1653625630
- Sigstore integration time:
-
Permalink:
ywatanabe1989/scitex-todo@eafc6fdd9f27dab2579e1cd2e435f6be1416333b -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/ywatanabe1989
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish-and-github-release-on-tag.yml@eafc6fdd9f27dab2579e1cd2e435f6be1416333b -
Trigger Event:
push
-
Statement type: