jasem 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- jasem-0.2.0/LICENSE +21 -0
- jasem-0.2.0/PKG-INFO +178 -0
- jasem-0.2.0/README.md +160 -0
- jasem-0.2.0/jasem.egg-info/PKG-INFO +178 -0
- jasem-0.2.0/jasem.egg-info/SOURCES.txt +9 -0
- jasem-0.2.0/jasem.egg-info/dependency_links.txt +1 -0
- jasem-0.2.0/jasem.egg-info/entry_points.txt +2 -0
- jasem-0.2.0/jasem.egg-info/top_level.txt +1 -0
- jasem-0.2.0/jasem.py +911 -0
- jasem-0.2.0/pyproject.toml +31 -0
- jasem-0.2.0/setup.cfg +4 -0
jasem-0.2.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 mrfatolahi1
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
jasem-0.2.0/PKG-INFO
ADDED
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: jasem
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: A plain-text task manager and time tracker with pluggable AI parsing (Ollama / OpenAI-compatible / Anthropic).
|
|
5
|
+
Author-email: mrfatolahi1 <fatolahi.cs@gmail.com>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/mrfatolahi1/Jasem
|
|
8
|
+
Project-URL: Source, https://github.com/mrfatolahi1/Jasem
|
|
9
|
+
Keywords: todo,tasks,cli,time-tracking,ollama,llm,anthropic,openai
|
|
10
|
+
Classifier: Environment :: Console
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: Topic :: Office/Business :: Scheduling
|
|
13
|
+
Classifier: Topic :: Utilities
|
|
14
|
+
Requires-Python: >=3.8
|
|
15
|
+
Description-Content-Type: text/markdown
|
|
16
|
+
License-File: LICENSE
|
|
17
|
+
Dynamic: license-file
|
|
18
|
+
|
|
19
|
+
# jasem
|
|
20
|
+
|
|
21
|
+
A plain-text **task manager** and **time tracker** for your terminal.
|
|
22
|
+
|
|
23
|
+
You write tasks in natural language; an AI backend extracts the structure
|
|
24
|
+
(title, deadline, priority, tags) and plain Python turns the deadline phrase
|
|
25
|
+
into a real date. Everything is stored in a human-readable Markdown table, so
|
|
26
|
+
you can read, grep, edit, sync, or version-control it however you like.
|
|
27
|
+
|
|
28
|
+
- **Zero dependencies.** A single Python file using only the standard library.
|
|
29
|
+
- **Local by default.** Works fully offline with [Ollama](https://ollama.com).
|
|
30
|
+
- **Bring your own AI.** Point it at any OpenAI-compatible API or at Anthropic
|
|
31
|
+
with two environment variables — no code changes.
|
|
32
|
+
- **Degrades gracefully.** If no model is reachable, your task is still saved
|
|
33
|
+
(dates are parsed with regex; you just don't get auto title/priority/tags).
|
|
34
|
+
|
|
35
|
+
```text
|
|
36
|
+
$ jasem "pay rent next friday, high priority, finance"
|
|
37
|
+
✓ added #1: pay rent
|
|
38
|
+
priority=high deadline=2026-06-19 tags=finance
|
|
39
|
+
|
|
40
|
+
$ jasem today
|
|
41
|
+
Due today
|
|
42
|
+
☐ 2 [medium] 2026-06-15 (today) call dentist #health
|
|
43
|
+
|
|
44
|
+
$ jasem track "1h 30min, code review, work"
|
|
45
|
+
✓ tracked 1h 30min · code review · today · #work
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Install
|
|
49
|
+
|
|
50
|
+
jasem needs **Python 3.8+** and nothing else.
|
|
51
|
+
|
|
52
|
+
### With pipx (recommended)
|
|
53
|
+
|
|
54
|
+
```sh
|
|
55
|
+
pipx install .
|
|
56
|
+
# or straight from a checkout / git URL once you publish it:
|
|
57
|
+
# pipx install git+https://github.com/your-username/jasem
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### With pip
|
|
61
|
+
|
|
62
|
+
```sh
|
|
63
|
+
pip install .
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Both install a `jasem` command on your `PATH`.
|
|
67
|
+
|
|
68
|
+
### No install at all
|
|
69
|
+
|
|
70
|
+
It's one file — copy it and run it:
|
|
71
|
+
|
|
72
|
+
```sh
|
|
73
|
+
cp jasem.py ~/.local/bin/jasem && chmod +x ~/.local/bin/jasem
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Choosing an AI backend
|
|
77
|
+
|
|
78
|
+
Natural-language parsing is the only step that uses a model. Pick a backend
|
|
79
|
+
with `JASEM_PROVIDER`; the rest is config via environment variables.
|
|
80
|
+
|
|
81
|
+
### Ollama (default — local, free, private)
|
|
82
|
+
|
|
83
|
+
```sh
|
|
84
|
+
ollama serve
|
|
85
|
+
ollama pull qwen2.5:3b # or any model you like
|
|
86
|
+
jasem "submit report by friday, work"
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
No keys, nothing leaves your machine. Override the model with
|
|
90
|
+
`JASEM_MODEL=qwen2.5:7b` and the host with `OLLAMA_HOST`.
|
|
91
|
+
|
|
92
|
+
### Any OpenAI-compatible API (OpenAI, Groq, OpenRouter, Together, LM Studio, vLLM, …)
|
|
93
|
+
|
|
94
|
+
```sh
|
|
95
|
+
export JASEM_PROVIDER=openai
|
|
96
|
+
export JASEM_API_KEY=sk-...
|
|
97
|
+
export JASEM_MODEL=gpt-4o-mini # default for this provider
|
|
98
|
+
# For a non-OpenAI host, also set the base URL:
|
|
99
|
+
export JASEM_API_BASE=https://api.groq.com/openai/v1
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Anthropic (Claude)
|
|
103
|
+
|
|
104
|
+
```sh
|
|
105
|
+
export JASEM_PROVIDER=anthropic
|
|
106
|
+
export JASEM_API_KEY=sk-ant-...
|
|
107
|
+
export JASEM_MODEL=claude-opus-4-8 # default; e.g. claude-haiku-4-5 for cheaper/faster
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Put whichever block you use in your shell profile (`~/.zshrc`, `~/.bashrc`) so
|
|
111
|
+
it's set for every session.
|
|
112
|
+
|
|
113
|
+
## Commands
|
|
114
|
+
|
|
115
|
+
```text
|
|
116
|
+
ADD
|
|
117
|
+
jasem "pay rent next friday, high priority, finance"
|
|
118
|
+
jasem add "..." force-add even if the text starts with a command word
|
|
119
|
+
|
|
120
|
+
VIEW (append a category to filter, e.g. jasem list work)
|
|
121
|
+
jasem list (ls) open tasks, soonest deadline first
|
|
122
|
+
jasem today due today
|
|
123
|
+
jasem week due within the next 7 days
|
|
124
|
+
jasem overdue past deadline, not done
|
|
125
|
+
jasem all everything, including completed
|
|
126
|
+
jasem tags list categories in use, with counts
|
|
127
|
+
|
|
128
|
+
UPDATE
|
|
129
|
+
jasem done <id>... mark task(s) complete
|
|
130
|
+
jasem rm <id>... delete task(s)
|
|
131
|
+
jasem set <id> priority high | medium | low
|
|
132
|
+
jasem set <id> deadline next friday | in 3 days | 2026-07-01 | none
|
|
133
|
+
jasem set <id> category work finance (space/comma-separated; "none" clears)
|
|
134
|
+
|
|
135
|
+
TIME TRACKING format: "<time>, <work>[, <date>][, <tag>]"
|
|
136
|
+
jasem track "2h, coding"
|
|
137
|
+
jasem track "30 min, coding, yesterday, work"
|
|
138
|
+
jasem track today's entries, with a daily total
|
|
139
|
+
jasem track week last 7 days, grouped by day
|
|
140
|
+
jasem track all [tag] everything; optional tag filter
|
|
141
|
+
|
|
142
|
+
jasem help full, colorized help
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Run `jasem help` for the complete reference.
|
|
146
|
+
|
|
147
|
+
## Configuration
|
|
148
|
+
|
|
149
|
+
| Env var | Default | Purpose |
|
|
150
|
+
|--------------------|---------------------------------|------------------------------------------------------|
|
|
151
|
+
| `JASEM_PROVIDER` | `ollama` | `ollama` \| `openai` \| `anthropic` |
|
|
152
|
+
| `JASEM_MODEL` | per provider | Model id |
|
|
153
|
+
| `JASEM_API_KEY` | — | Key for openai/anthropic (also reads `OPENAI_API_KEY` / `ANTHROPIC_API_KEY`) |
|
|
154
|
+
| `JASEM_API_BASE` | provider default | Base URL for any OpenAI-compatible / custom endpoint |
|
|
155
|
+
| `OLLAMA_HOST` | `http://localhost:11434` | Ollama daemon address |
|
|
156
|
+
| `JASEM_DIR` | `~/.jasem` | Where data is stored |
|
|
157
|
+
| `JASEM_FILE` | `$JASEM_DIR/tasks.md` | Tasks file |
|
|
158
|
+
| `JASEM_TRACK_FILE` | `$JASEM_DIR/timelog.md` | Time-log file |
|
|
159
|
+
|
|
160
|
+
## How storage works
|
|
161
|
+
|
|
162
|
+
`tasks.md` and `timelog.md` are ordinary Markdown tables. You can hand-edit
|
|
163
|
+
rows, keep them in a synced folder, or commit them to a private repo — just
|
|
164
|
+
keep the column order intact. jasem reads and rewrites the whole file on each
|
|
165
|
+
write, preserving your edits.
|
|
166
|
+
|
|
167
|
+
## Writing good tasks
|
|
168
|
+
|
|
169
|
+
Clearer cues parse better:
|
|
170
|
+
|
|
171
|
+
- **deadline:** `tomorrow`, `next friday`, `in 3 days`, `june 20`, `2026-07-01` (avoid `asap`/`soon`)
|
|
172
|
+
- **priority:** say `high` or `low` (default `medium`; avoid `urgent`/`important`)
|
|
173
|
+
- **category:** name it plainly — `work`, `finance`, `university`
|
|
174
|
+
- **pattern:** `"<what> by <when>, <priority>, <category>"`
|
|
175
|
+
|
|
176
|
+
## License
|
|
177
|
+
|
|
178
|
+
MIT — see [LICENSE](LICENSE).
|
jasem-0.2.0/README.md
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
# jasem
|
|
2
|
+
|
|
3
|
+
A plain-text **task manager** and **time tracker** for your terminal.
|
|
4
|
+
|
|
5
|
+
You write tasks in natural language; an AI backend extracts the structure
|
|
6
|
+
(title, deadline, priority, tags) and plain Python turns the deadline phrase
|
|
7
|
+
into a real date. Everything is stored in a human-readable Markdown table, so
|
|
8
|
+
you can read, grep, edit, sync, or version-control it however you like.
|
|
9
|
+
|
|
10
|
+
- **Zero dependencies.** A single Python file using only the standard library.
|
|
11
|
+
- **Local by default.** Works fully offline with [Ollama](https://ollama.com).
|
|
12
|
+
- **Bring your own AI.** Point it at any OpenAI-compatible API or at Anthropic
|
|
13
|
+
with two environment variables — no code changes.
|
|
14
|
+
- **Degrades gracefully.** If no model is reachable, your task is still saved
|
|
15
|
+
(dates are parsed with regex; you just don't get auto title/priority/tags).
|
|
16
|
+
|
|
17
|
+
```text
|
|
18
|
+
$ jasem "pay rent next friday, high priority, finance"
|
|
19
|
+
✓ added #1: pay rent
|
|
20
|
+
priority=high deadline=2026-06-19 tags=finance
|
|
21
|
+
|
|
22
|
+
$ jasem today
|
|
23
|
+
Due today
|
|
24
|
+
☐ 2 [medium] 2026-06-15 (today) call dentist #health
|
|
25
|
+
|
|
26
|
+
$ jasem track "1h 30min, code review, work"
|
|
27
|
+
✓ tracked 1h 30min · code review · today · #work
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Install
|
|
31
|
+
|
|
32
|
+
jasem needs **Python 3.8+** and nothing else.
|
|
33
|
+
|
|
34
|
+
### With pipx (recommended)
|
|
35
|
+
|
|
36
|
+
```sh
|
|
37
|
+
pipx install .
|
|
38
|
+
# or straight from a checkout / git URL once you publish it:
|
|
39
|
+
# pipx install git+https://github.com/your-username/jasem
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### With pip
|
|
43
|
+
|
|
44
|
+
```sh
|
|
45
|
+
pip install .
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Both install a `jasem` command on your `PATH`.
|
|
49
|
+
|
|
50
|
+
### No install at all
|
|
51
|
+
|
|
52
|
+
It's one file — copy it and run it:
|
|
53
|
+
|
|
54
|
+
```sh
|
|
55
|
+
cp jasem.py ~/.local/bin/jasem && chmod +x ~/.local/bin/jasem
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Choosing an AI backend
|
|
59
|
+
|
|
60
|
+
Natural-language parsing is the only step that uses a model. Pick a backend
|
|
61
|
+
with `JASEM_PROVIDER`; the rest is config via environment variables.
|
|
62
|
+
|
|
63
|
+
### Ollama (default — local, free, private)
|
|
64
|
+
|
|
65
|
+
```sh
|
|
66
|
+
ollama serve
|
|
67
|
+
ollama pull qwen2.5:3b # or any model you like
|
|
68
|
+
jasem "submit report by friday, work"
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
No keys, nothing leaves your machine. Override the model with
|
|
72
|
+
`JASEM_MODEL=qwen2.5:7b` and the host with `OLLAMA_HOST`.
|
|
73
|
+
|
|
74
|
+
### Any OpenAI-compatible API (OpenAI, Groq, OpenRouter, Together, LM Studio, vLLM, …)
|
|
75
|
+
|
|
76
|
+
```sh
|
|
77
|
+
export JASEM_PROVIDER=openai
|
|
78
|
+
export JASEM_API_KEY=sk-...
|
|
79
|
+
export JASEM_MODEL=gpt-4o-mini # default for this provider
|
|
80
|
+
# For a non-OpenAI host, also set the base URL:
|
|
81
|
+
export JASEM_API_BASE=https://api.groq.com/openai/v1
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Anthropic (Claude)
|
|
85
|
+
|
|
86
|
+
```sh
|
|
87
|
+
export JASEM_PROVIDER=anthropic
|
|
88
|
+
export JASEM_API_KEY=sk-ant-...
|
|
89
|
+
export JASEM_MODEL=claude-opus-4-8 # default; e.g. claude-haiku-4-5 for cheaper/faster
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Put whichever block you use in your shell profile (`~/.zshrc`, `~/.bashrc`) so
|
|
93
|
+
it's set for every session.
|
|
94
|
+
|
|
95
|
+
## Commands
|
|
96
|
+
|
|
97
|
+
```text
|
|
98
|
+
ADD
|
|
99
|
+
jasem "pay rent next friday, high priority, finance"
|
|
100
|
+
jasem add "..." force-add even if the text starts with a command word
|
|
101
|
+
|
|
102
|
+
VIEW (append a category to filter, e.g. jasem list work)
|
|
103
|
+
jasem list (ls) open tasks, soonest deadline first
|
|
104
|
+
jasem today due today
|
|
105
|
+
jasem week due within the next 7 days
|
|
106
|
+
jasem overdue past deadline, not done
|
|
107
|
+
jasem all everything, including completed
|
|
108
|
+
jasem tags list categories in use, with counts
|
|
109
|
+
|
|
110
|
+
UPDATE
|
|
111
|
+
jasem done <id>... mark task(s) complete
|
|
112
|
+
jasem rm <id>... delete task(s)
|
|
113
|
+
jasem set <id> priority high | medium | low
|
|
114
|
+
jasem set <id> deadline next friday | in 3 days | 2026-07-01 | none
|
|
115
|
+
jasem set <id> category work finance (space/comma-separated; "none" clears)
|
|
116
|
+
|
|
117
|
+
TIME TRACKING format: "<time>, <work>[, <date>][, <tag>]"
|
|
118
|
+
jasem track "2h, coding"
|
|
119
|
+
jasem track "30 min, coding, yesterday, work"
|
|
120
|
+
jasem track today's entries, with a daily total
|
|
121
|
+
jasem track week last 7 days, grouped by day
|
|
122
|
+
jasem track all [tag] everything; optional tag filter
|
|
123
|
+
|
|
124
|
+
jasem help full, colorized help
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Run `jasem help` for the complete reference.
|
|
128
|
+
|
|
129
|
+
## Configuration
|
|
130
|
+
|
|
131
|
+
| Env var | Default | Purpose |
|
|
132
|
+
|--------------------|---------------------------------|------------------------------------------------------|
|
|
133
|
+
| `JASEM_PROVIDER` | `ollama` | `ollama` \| `openai` \| `anthropic` |
|
|
134
|
+
| `JASEM_MODEL` | per provider | Model id |
|
|
135
|
+
| `JASEM_API_KEY` | — | Key for openai/anthropic (also reads `OPENAI_API_KEY` / `ANTHROPIC_API_KEY`) |
|
|
136
|
+
| `JASEM_API_BASE` | provider default | Base URL for any OpenAI-compatible / custom endpoint |
|
|
137
|
+
| `OLLAMA_HOST` | `http://localhost:11434` | Ollama daemon address |
|
|
138
|
+
| `JASEM_DIR` | `~/.jasem` | Where data is stored |
|
|
139
|
+
| `JASEM_FILE` | `$JASEM_DIR/tasks.md` | Tasks file |
|
|
140
|
+
| `JASEM_TRACK_FILE` | `$JASEM_DIR/timelog.md` | Time-log file |
|
|
141
|
+
|
|
142
|
+
## How storage works
|
|
143
|
+
|
|
144
|
+
`tasks.md` and `timelog.md` are ordinary Markdown tables. You can hand-edit
|
|
145
|
+
rows, keep them in a synced folder, or commit them to a private repo — just
|
|
146
|
+
keep the column order intact. jasem reads and rewrites the whole file on each
|
|
147
|
+
write, preserving your edits.
|
|
148
|
+
|
|
149
|
+
## Writing good tasks
|
|
150
|
+
|
|
151
|
+
Clearer cues parse better:
|
|
152
|
+
|
|
153
|
+
- **deadline:** `tomorrow`, `next friday`, `in 3 days`, `june 20`, `2026-07-01` (avoid `asap`/`soon`)
|
|
154
|
+
- **priority:** say `high` or `low` (default `medium`; avoid `urgent`/`important`)
|
|
155
|
+
- **category:** name it plainly — `work`, `finance`, `university`
|
|
156
|
+
- **pattern:** `"<what> by <when>, <priority>, <category>"`
|
|
157
|
+
|
|
158
|
+
## License
|
|
159
|
+
|
|
160
|
+
MIT — see [LICENSE](LICENSE).
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: jasem
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: A plain-text task manager and time tracker with pluggable AI parsing (Ollama / OpenAI-compatible / Anthropic).
|
|
5
|
+
Author-email: mrfatolahi1 <fatolahi.cs@gmail.com>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/mrfatolahi1/Jasem
|
|
8
|
+
Project-URL: Source, https://github.com/mrfatolahi1/Jasem
|
|
9
|
+
Keywords: todo,tasks,cli,time-tracking,ollama,llm,anthropic,openai
|
|
10
|
+
Classifier: Environment :: Console
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: Topic :: Office/Business :: Scheduling
|
|
13
|
+
Classifier: Topic :: Utilities
|
|
14
|
+
Requires-Python: >=3.8
|
|
15
|
+
Description-Content-Type: text/markdown
|
|
16
|
+
License-File: LICENSE
|
|
17
|
+
Dynamic: license-file
|
|
18
|
+
|
|
19
|
+
# jasem
|
|
20
|
+
|
|
21
|
+
A plain-text **task manager** and **time tracker** for your terminal.
|
|
22
|
+
|
|
23
|
+
You write tasks in natural language; an AI backend extracts the structure
|
|
24
|
+
(title, deadline, priority, tags) and plain Python turns the deadline phrase
|
|
25
|
+
into a real date. Everything is stored in a human-readable Markdown table, so
|
|
26
|
+
you can read, grep, edit, sync, or version-control it however you like.
|
|
27
|
+
|
|
28
|
+
- **Zero dependencies.** A single Python file using only the standard library.
|
|
29
|
+
- **Local by default.** Works fully offline with [Ollama](https://ollama.com).
|
|
30
|
+
- **Bring your own AI.** Point it at any OpenAI-compatible API or at Anthropic
|
|
31
|
+
with two environment variables — no code changes.
|
|
32
|
+
- **Degrades gracefully.** If no model is reachable, your task is still saved
|
|
33
|
+
(dates are parsed with regex; you just don't get auto title/priority/tags).
|
|
34
|
+
|
|
35
|
+
```text
|
|
36
|
+
$ jasem "pay rent next friday, high priority, finance"
|
|
37
|
+
✓ added #1: pay rent
|
|
38
|
+
priority=high deadline=2026-06-19 tags=finance
|
|
39
|
+
|
|
40
|
+
$ jasem today
|
|
41
|
+
Due today
|
|
42
|
+
☐ 2 [medium] 2026-06-15 (today) call dentist #health
|
|
43
|
+
|
|
44
|
+
$ jasem track "1h 30min, code review, work"
|
|
45
|
+
✓ tracked 1h 30min · code review · today · #work
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Install
|
|
49
|
+
|
|
50
|
+
jasem needs **Python 3.8+** and nothing else.
|
|
51
|
+
|
|
52
|
+
### With pipx (recommended)
|
|
53
|
+
|
|
54
|
+
```sh
|
|
55
|
+
pipx install .
|
|
56
|
+
# or straight from a checkout / git URL once you publish it:
|
|
57
|
+
# pipx install git+https://github.com/your-username/jasem
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### With pip
|
|
61
|
+
|
|
62
|
+
```sh
|
|
63
|
+
pip install .
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Both install a `jasem` command on your `PATH`.
|
|
67
|
+
|
|
68
|
+
### No install at all
|
|
69
|
+
|
|
70
|
+
It's one file — copy it and run it:
|
|
71
|
+
|
|
72
|
+
```sh
|
|
73
|
+
cp jasem.py ~/.local/bin/jasem && chmod +x ~/.local/bin/jasem
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Choosing an AI backend
|
|
77
|
+
|
|
78
|
+
Natural-language parsing is the only step that uses a model. Pick a backend
|
|
79
|
+
with `JASEM_PROVIDER`; the rest is config via environment variables.
|
|
80
|
+
|
|
81
|
+
### Ollama (default — local, free, private)
|
|
82
|
+
|
|
83
|
+
```sh
|
|
84
|
+
ollama serve
|
|
85
|
+
ollama pull qwen2.5:3b # or any model you like
|
|
86
|
+
jasem "submit report by friday, work"
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
No keys, nothing leaves your machine. Override the model with
|
|
90
|
+
`JASEM_MODEL=qwen2.5:7b` and the host with `OLLAMA_HOST`.
|
|
91
|
+
|
|
92
|
+
### Any OpenAI-compatible API (OpenAI, Groq, OpenRouter, Together, LM Studio, vLLM, …)
|
|
93
|
+
|
|
94
|
+
```sh
|
|
95
|
+
export JASEM_PROVIDER=openai
|
|
96
|
+
export JASEM_API_KEY=sk-...
|
|
97
|
+
export JASEM_MODEL=gpt-4o-mini # default for this provider
|
|
98
|
+
# For a non-OpenAI host, also set the base URL:
|
|
99
|
+
export JASEM_API_BASE=https://api.groq.com/openai/v1
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Anthropic (Claude)
|
|
103
|
+
|
|
104
|
+
```sh
|
|
105
|
+
export JASEM_PROVIDER=anthropic
|
|
106
|
+
export JASEM_API_KEY=sk-ant-...
|
|
107
|
+
export JASEM_MODEL=claude-opus-4-8 # default; e.g. claude-haiku-4-5 for cheaper/faster
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Put whichever block you use in your shell profile (`~/.zshrc`, `~/.bashrc`) so
|
|
111
|
+
it's set for every session.
|
|
112
|
+
|
|
113
|
+
## Commands
|
|
114
|
+
|
|
115
|
+
```text
|
|
116
|
+
ADD
|
|
117
|
+
jasem "pay rent next friday, high priority, finance"
|
|
118
|
+
jasem add "..." force-add even if the text starts with a command word
|
|
119
|
+
|
|
120
|
+
VIEW (append a category to filter, e.g. jasem list work)
|
|
121
|
+
jasem list (ls) open tasks, soonest deadline first
|
|
122
|
+
jasem today due today
|
|
123
|
+
jasem week due within the next 7 days
|
|
124
|
+
jasem overdue past deadline, not done
|
|
125
|
+
jasem all everything, including completed
|
|
126
|
+
jasem tags list categories in use, with counts
|
|
127
|
+
|
|
128
|
+
UPDATE
|
|
129
|
+
jasem done <id>... mark task(s) complete
|
|
130
|
+
jasem rm <id>... delete task(s)
|
|
131
|
+
jasem set <id> priority high | medium | low
|
|
132
|
+
jasem set <id> deadline next friday | in 3 days | 2026-07-01 | none
|
|
133
|
+
jasem set <id> category work finance (space/comma-separated; "none" clears)
|
|
134
|
+
|
|
135
|
+
TIME TRACKING format: "<time>, <work>[, <date>][, <tag>]"
|
|
136
|
+
jasem track "2h, coding"
|
|
137
|
+
jasem track "30 min, coding, yesterday, work"
|
|
138
|
+
jasem track today's entries, with a daily total
|
|
139
|
+
jasem track week last 7 days, grouped by day
|
|
140
|
+
jasem track all [tag] everything; optional tag filter
|
|
141
|
+
|
|
142
|
+
jasem help full, colorized help
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Run `jasem help` for the complete reference.
|
|
146
|
+
|
|
147
|
+
## Configuration
|
|
148
|
+
|
|
149
|
+
| Env var | Default | Purpose |
|
|
150
|
+
|--------------------|---------------------------------|------------------------------------------------------|
|
|
151
|
+
| `JASEM_PROVIDER` | `ollama` | `ollama` \| `openai` \| `anthropic` |
|
|
152
|
+
| `JASEM_MODEL` | per provider | Model id |
|
|
153
|
+
| `JASEM_API_KEY` | — | Key for openai/anthropic (also reads `OPENAI_API_KEY` / `ANTHROPIC_API_KEY`) |
|
|
154
|
+
| `JASEM_API_BASE` | provider default | Base URL for any OpenAI-compatible / custom endpoint |
|
|
155
|
+
| `OLLAMA_HOST` | `http://localhost:11434` | Ollama daemon address |
|
|
156
|
+
| `JASEM_DIR` | `~/.jasem` | Where data is stored |
|
|
157
|
+
| `JASEM_FILE` | `$JASEM_DIR/tasks.md` | Tasks file |
|
|
158
|
+
| `JASEM_TRACK_FILE` | `$JASEM_DIR/timelog.md` | Time-log file |
|
|
159
|
+
|
|
160
|
+
## How storage works
|
|
161
|
+
|
|
162
|
+
`tasks.md` and `timelog.md` are ordinary Markdown tables. You can hand-edit
|
|
163
|
+
rows, keep them in a synced folder, or commit them to a private repo — just
|
|
164
|
+
keep the column order intact. jasem reads and rewrites the whole file on each
|
|
165
|
+
write, preserving your edits.
|
|
166
|
+
|
|
167
|
+
## Writing good tasks
|
|
168
|
+
|
|
169
|
+
Clearer cues parse better:
|
|
170
|
+
|
|
171
|
+
- **deadline:** `tomorrow`, `next friday`, `in 3 days`, `june 20`, `2026-07-01` (avoid `asap`/`soon`)
|
|
172
|
+
- **priority:** say `high` or `low` (default `medium`; avoid `urgent`/`important`)
|
|
173
|
+
- **category:** name it plainly — `work`, `finance`, `university`
|
|
174
|
+
- **pattern:** `"<what> by <when>, <priority>, <category>"`
|
|
175
|
+
|
|
176
|
+
## License
|
|
177
|
+
|
|
178
|
+
MIT — see [LICENSE](LICENSE).
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
jasem
|