jasem
A plain-text task manager, time tracker, and spending log for your terminal — natural-language input, pluggable AI parsing, zero dependencies. Your data stays in human-readable Markdown under ~/.jasem/.
📖 Full guide & command reference → the wiki
Install
Needs Python 3.8+.
pipx install jasem # or: pip install jasem
Quick start
# Capture — write naturally; jasem reads the deadline, amount & tags for you
jasem todo "pay rent next friday, high priority, finance"
jasem track "1h30min code review, work"
jasem acc "50k lunch with the team, food"
# Review
jasem todo # open tasks, soonest deadline first
jasem track report # time totals, by-tag & timeline
jasem acc report # spending totals, by-tag & timeline
jasem # welcome screen
jasem --help # full command reference
If no AI model is reachable, entries still save (dates parsed by regex).
Commands
Three symmetric namespaces, same verbs in each — prefix every command with jasem:
| Action | todo — tasks |
track — time |
acc — spending |
|---|---|---|---|
| Add (natural language) | todo "pay rent friday, finance" |
track "1h30min review, work" |
acc "50k lunch, food" |
| List | todo list [tag] |
track list [period] [tag] |
acc list [period] [tag] |
| Report (totals · by-tag · timeline) | — | track report [period] [tag] |
acc report [period] [tag] |
| Filtered views | todo today · week · overdue · all |
— | — |
| Named lists | todo @work … · todo lists · todo move <id> <list> |
— | — |
| Search | todo find "rent" |
— | — |
| Categories | todo tags |
track tags |
acc tags |
| Mark done | todo done <id> |
— | — |
| Edit a field | todo set <id> deadline tomorrow |
track set <id> time 2h |
acc set <id> amount 60k |
| Remove | todo rm <id> |
track rm <id> |
acc rm <id> |
period = today · week · month · all. Lists and reports render as aligned tables with bar charts and sparklines.
Task lists
Keep work and home apart — prefix any todo command with @<list>:
jasem todo @work "ship the release friday, high priority"
jasem todo @work # only work's open tasks
jasem todo @work overdue # every view works the same way
jasem todo lists # all lists, with open counts
jasem todo move 3 work # move a task between lists
export JASEM_LIST=work # make work the default; @default gets you back
A list is created by its first task and stored in its own file
(~/.jasem/tasks-work.md), numbering its tasks from 1.
AI backend
Parsing is the only step that uses a model. Default is local Ollama (free, private, offline).
# Local (default)
ollama serve && ollama pull qwen2.5:3b
# OpenAI-compatible (OpenAI, Groq, OpenRouter, LM Studio, …)
export JASEM_PROVIDER=openai JASEM_API_KEY=sk-...
export JASEM_OPENAI_API_BASE=https://openrouter.ai/api/v1 # for non-OpenAI hosts
# Anthropic (Claude)
export JASEM_PROVIDER=anthropic JASEM_API_KEY=sk-ant-...
Persian (Jalali) calendar
Set JASEM_JALALI=true to read and show every date in the Persian (Jalali/Shamsi) calendar:
export JASEM_JALALI=true
jasem todo "pay rent 1405-04-10, finance" # type dates in Jalali
jasem todo list # dates shown in Jalali
Dates you type and dates jasem shows are Jalali, but files on disk stay Gregorian ISO (YYYY-MM-DD) — so the same data works with or without the flag. Relative phrases (tomorrow, next friday, in 3 days) work in both modes. Leave it unset (or false) for the default Gregorian calendar.
Config
- Storage —
~/.jasem/*.md; grep, edit, sync, or version-control it freely. - Color —
JASEM_ACCENTrecolors the accent;NO_COLORforces plain text.
Run jasem --help for every command, option, and environment variable.
A note on AI
I used AI to create some parts of Jasem, but I carefully reviewed all the code written by AI rather than blindly copy-pasting.
License
MIT — see LICENSE.
Release files for jasem 1.2.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 | |
|---|---|---|---|
| jasem-1.2.0.tar.gz | 62.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| jasem-1.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 122.7 kB
Release files / jasem-1.2.0.tar.gz
| Download URL | jasem-1.2.0.tar.gz |
|---|---|
| Size | 62.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
be5edfb32320881ac650062388ce316e41dee692f42de210218babd60449e55b
|
|
BLAKE2b-256 checksum How to use checksums |
2989279cae5a5efea9ca13bb6ae75a9c536aaff64a1066693bf3873c86b48e32
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / jasem-1.2.0-py3-none-any.whl
| Download URL | jasem-1.2.0-py3-none-any.whl |
|---|---|
| Size | 60.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
fbe8e4f9cd0eeef9048919e46dc2e34c5cb461577fe2e882ebd3480a50a1e640
|
|
BLAKE2b-256 checksum How to use checksums |
eeb38089fa75a478b58393493807bf71ef583a651f18033bb138d40c49cb7152
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|