taskuary 0.2.0__tar.gz → 0.2.1__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.
- {taskuary-0.2.0/taskuary.egg-info → taskuary-0.2.1}/PKG-INFO +8 -7
- {taskuary-0.2.0 → taskuary-0.2.1}/README.md +7 -6
- {taskuary-0.2.0 → taskuary-0.2.1}/pyproject.toml +1 -1
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/agents.py +4 -1
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/terminal.py +15 -3
- {taskuary-0.2.0 → taskuary-0.2.1/taskuary.egg-info}/PKG-INFO +8 -7
- {taskuary-0.2.0 → taskuary-0.2.1}/LICENSE +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/setup.cfg +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/__init__.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/artifacts.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/aws.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/azure.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/blackboard.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/channels.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/ci.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/cli.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/coder.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/config.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/db.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/desktop.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/devtools.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/digest.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/docsync.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/github.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/histgen.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/imapmail.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/ingest.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/learn.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/llm.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/logs.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/mcp.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/messengers.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/mssql.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/outbound.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/phone.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/pm.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/policy.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/proof.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/proposals.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/reports.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/reshape.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/responder.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/routing.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/scopes.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/server.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/store.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/templates/coder.md +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/templates/digest.md +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/templates/learned.md +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/templates/soul.md +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/templates/style.md +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/templates/triage.md +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/toil.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/triage.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/verdicts.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/web/assets/index-6GBZ9nXN.css +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/web/assets/index-Cjj87C2X.js +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/web/favicon.ico +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/web/favicon.png +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/web/index.html +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/whatsapp/bridge.mjs +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary/whatsapp/package.json +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary.egg-info/SOURCES.txt +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary.egg-info/dependency_links.txt +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary.egg-info/entry_points.txt +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary.egg-info/requires.txt +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/taskuary.egg-info/top_level.txt +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/tests/test_answers.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/tests/test_api.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/tests/test_blackboard.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/tests/test_cloud.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/tests/test_cloud_sources.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/tests/test_config.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/tests/test_core.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/tests/test_desktop.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/tests/test_devtools.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/tests/test_diff_review.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/tests/test_docs_and_llm.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/tests/test_harvest.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/tests/test_histgen.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/tests/test_imapmail.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/tests/test_mark_read.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/tests/test_mcp.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/tests/test_messengers.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/tests/test_mssql.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/tests/test_not_coding.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/tests/test_pm.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/tests/test_poll_overlap.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/tests/test_poll_sources.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/tests/test_proof_ci_proposals.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/tests/test_reply_channels.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/tests/test_reply_voice.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/tests/test_reviews.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/tests/test_scopes.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/tests/test_sync_clock.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/tests/test_task_identity.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/tests/test_terminal.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/tests/test_toil.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/tests/test_vision.py +0 -0
- {taskuary-0.2.0 → taskuary-0.2.1}/tests/test_watermark.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: taskuary
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
Summary: Automate your job - the local-first operating system for your work: AI triage in, coding agents out.
|
|
5
5
|
License: MIT
|
|
6
6
|
Project-URL: Homepage, https://github.com/ldbumble/taskuary
|
|
@@ -51,6 +51,7 @@ Dynamic: license-file
|
|
|
51
51
|
[](https://github.com/ldbumble/taskuary/actions/workflows/ci.yml)
|
|
52
52
|
[](LICENSE)
|
|
53
53
|
[](https://github.com/ldbumble/taskuary)
|
|
54
|
+
[](https://pypi.org/project/taskuary/)
|
|
54
55
|
[](CONTRIBUTING.md)
|
|
55
56
|
[](https://github.com/ldbumble/taskuary/stargazers)
|
|
56
57
|
|
|
@@ -60,7 +61,7 @@ Dynamic: license-file
|
|
|
60
61
|
scheduled reports land on one timeline; AI triage says what is real work; the coding CLI
|
|
61
62
|
you already use does it; you approve the result. Runs entirely on your machine.
|
|
62
63
|
|
|
63
|
-

|
|
64
|
+

|
|
64
65
|
|
|
65
66
|
<sub>Real app, real data — a mail triaged and its reply drafted for your approval, then a scheduled SQL report landing on the same rail with its chart and spreadsheet. Nothing sends without you.</sub>
|
|
66
67
|
|
|
@@ -92,7 +93,7 @@ sender (yours to review under Settings → Agent memory).
|
|
|
92
93
|
|
|
93
94
|
The general lessons take a stricter road, so one odd Tuesday never becomes a rule:
|
|
94
95
|
|
|
95
|
-

|
|
96
|
+

|
|
96
97
|
|
|
97
98
|
**How the memory works, concretely.** Each lesson is one line in `LEARNED.md` (Docs tab) —
|
|
98
99
|
a guess with a score. Say you strip the greeting off three drafts this week; the file soon
|
|
@@ -129,7 +130,7 @@ markers always survive. What each one feeds from then on:
|
|
|
129
130
|
## Get started
|
|
130
131
|
|
|
131
132
|
```bash
|
|
132
|
-
pip install
|
|
133
|
+
pip install taskuary
|
|
133
134
|
taskuary # opens http://127.0.0.1:7787
|
|
134
135
|
```
|
|
135
136
|
|
|
@@ -161,7 +162,7 @@ No cloud key at all? Set **Settings → Triage & routing → Triage brain** to y
|
|
|
161
162
|
and skip step 1 — one brain does everything, slower and pricier per message. See
|
|
162
163
|
[One brain or two](#one-brain-or-two).
|
|
163
164
|
|
|
164
|
-
Prefer a desktop app? `pip install "taskuary[desktop]
|
|
165
|
+
Prefer a desktop app? `pip install "taskuary[desktop]"`
|
|
165
166
|
then `taskuary-desktop` — the same UI in a native window. A prebuilt single-file
|
|
166
167
|
`Taskuary.exe` is attached to every CI run.
|
|
167
168
|
|
|
@@ -215,7 +216,7 @@ with no AI connected messages file visibly instead of heuristics spraying tasks.
|
|
|
215
216
|
|
|
216
217
|
## Many agents, one repo — no stepping on each other
|
|
217
218
|
|
|
218
|
-

|
|
219
|
+

|
|
219
220
|
|
|
220
221
|
Auto-dispatch can put several CLIs to work at once — and the board keeps them out of each
|
|
221
222
|
other's way with three light moves. No locks, no worktrees, no manager agent:
|
|
@@ -265,7 +266,7 @@ Plain markdown, all on the Docs tab, all yours to edit. Three you write, two wri
|
|
|
265
266
|
themselves, and two can **bootstrap themselves from your mail history** (`TRIAGE.md` and
|
|
266
267
|
`STYLE.md` — the Generate from history button). Each feeds exactly the calls it belongs in.
|
|
267
268
|
|
|
268
|
-

|
|
269
|
+

|
|
269
270
|
|
|
270
271
|
| document | what it is | who reads it |
|
|
271
272
|
|---|---|---|
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
[](https://github.com/ldbumble/taskuary/actions/workflows/ci.yml)
|
|
4
4
|
[](LICENSE)
|
|
5
5
|
[](https://github.com/ldbumble/taskuary)
|
|
6
|
+
[](https://pypi.org/project/taskuary/)
|
|
6
7
|
[](CONTRIBUTING.md)
|
|
7
8
|
[](https://github.com/ldbumble/taskuary/stargazers)
|
|
8
9
|
|
|
@@ -12,7 +13,7 @@
|
|
|
12
13
|
scheduled reports land on one timeline; AI triage says what is real work; the coding CLI
|
|
13
14
|
you already use does it; you approve the result. Runs entirely on your machine.
|
|
14
15
|
|
|
15
|
-

|
|
16
|
+

|
|
16
17
|
|
|
17
18
|
<sub>Real app, real data — a mail triaged and its reply drafted for your approval, then a scheduled SQL report landing on the same rail with its chart and spreadsheet. Nothing sends without you.</sub>
|
|
18
19
|
|
|
@@ -44,7 +45,7 @@ sender (yours to review under Settings → Agent memory).
|
|
|
44
45
|
|
|
45
46
|
The general lessons take a stricter road, so one odd Tuesday never becomes a rule:
|
|
46
47
|
|
|
47
|
-

|
|
48
|
+

|
|
48
49
|
|
|
49
50
|
**How the memory works, concretely.** Each lesson is one line in `LEARNED.md` (Docs tab) —
|
|
50
51
|
a guess with a score. Say you strip the greeting off three drafts this week; the file soon
|
|
@@ -81,7 +82,7 @@ markers always survive. What each one feeds from then on:
|
|
|
81
82
|
## Get started
|
|
82
83
|
|
|
83
84
|
```bash
|
|
84
|
-
pip install
|
|
85
|
+
pip install taskuary
|
|
85
86
|
taskuary # opens http://127.0.0.1:7787
|
|
86
87
|
```
|
|
87
88
|
|
|
@@ -113,7 +114,7 @@ No cloud key at all? Set **Settings → Triage & routing → Triage brain** to y
|
|
|
113
114
|
and skip step 1 — one brain does everything, slower and pricier per message. See
|
|
114
115
|
[One brain or two](#one-brain-or-two).
|
|
115
116
|
|
|
116
|
-
Prefer a desktop app? `pip install "taskuary[desktop]
|
|
117
|
+
Prefer a desktop app? `pip install "taskuary[desktop]"`
|
|
117
118
|
then `taskuary-desktop` — the same UI in a native window. A prebuilt single-file
|
|
118
119
|
`Taskuary.exe` is attached to every CI run.
|
|
119
120
|
|
|
@@ -167,7 +168,7 @@ with no AI connected messages file visibly instead of heuristics spraying tasks.
|
|
|
167
168
|
|
|
168
169
|
## Many agents, one repo — no stepping on each other
|
|
169
170
|
|
|
170
|
-

|
|
171
|
+

|
|
171
172
|
|
|
172
173
|
Auto-dispatch can put several CLIs to work at once — and the board keeps them out of each
|
|
173
174
|
other's way with three light moves. No locks, no worktrees, no manager agent:
|
|
@@ -217,7 +218,7 @@ Plain markdown, all on the Docs tab, all yours to edit. Three you write, two wri
|
|
|
217
218
|
themselves, and two can **bootstrap themselves from your mail history** (`TRIAGE.md` and
|
|
218
219
|
`STYLE.md` — the Generate from history button). Each feeds exactly the calls it belongs in.
|
|
219
220
|
|
|
220
|
-

|
|
221
|
+

|
|
221
222
|
|
|
222
223
|
| document | what it is | who reads it |
|
|
223
224
|
|---|---|---|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "taskuary"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.1"
|
|
8
8
|
description = "Automate your job - the local-first operating system for your work: AI triage in, coding agents out."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = { text = "MIT" }
|
|
@@ -59,7 +59,10 @@ def _shim_target(path: str) -> list:
|
|
|
59
59
|
here = os.path.dirname(path)
|
|
60
60
|
found = []
|
|
61
61
|
for tok in re.findall(r'"([^"]+)"', txt):
|
|
62
|
-
|
|
62
|
+
# a batch file always writes \ - a separator on Windows, an ordinary character
|
|
63
|
+
# everywhere else. Translating it means this parser can be exercised by CI on
|
|
64
|
+
# Linux and macOS too, rather than only on the platform that has the bug.
|
|
65
|
+
real = os.path.normpath(tok.replace('%dp0%', here).replace('%~dp0', here).replace(chr(92), os.sep))
|
|
63
66
|
if os.path.isfile(real) and real.lower().endswith(('.exe', '.js')): found.append(real)
|
|
64
67
|
exe = next((f for f in found if f.lower().endswith('.exe')), None)
|
|
65
68
|
js = next((f for f in found if f.lower().endswith('.js')), None)
|
|
@@ -636,6 +636,18 @@ def _cut(text: str, n: int, what: str = 'message') -> str:
|
|
|
636
636
|
'Ask the owner for the rest before assuming anything past this point.]')
|
|
637
637
|
|
|
638
638
|
|
|
639
|
+
# An agent working a repository has no use for anybody's email address, and every prompt is
|
|
640
|
+
# a copy handed to a third-party CLI, written into its transcript and its own logs. So the
|
|
641
|
+
# addresses come out of everything we inject: SOUL.md carries the owner's, the coder rules and
|
|
642
|
+
# handover notes quote correspondents, and none of it changes a line of code. The NAME stays -
|
|
643
|
+
# "Sign as Uri J Nussbaum" still means something without the mailbox next to it.
|
|
644
|
+
_EMAIL = re.compile(r'\b[\w.+-]+@[\w-]+\.[\w.-]+')
|
|
645
|
+
|
|
646
|
+
|
|
647
|
+
def no_emails(text: str) -> str:
|
|
648
|
+
return _EMAIL.sub('[email removed]', text or '')
|
|
649
|
+
|
|
650
|
+
|
|
639
651
|
def seed_text(store, tid: int, instruction: str = None, repo: str = None, cwd: str = None) -> str:
|
|
640
652
|
"""What gets typed into a fresh session, and the ONLY context it should need: the ask, the
|
|
641
653
|
mail behind it, which checkout to work in, and the coder rules. One line - a newline
|
|
@@ -676,7 +688,7 @@ def seed_text(store, tid: int, instruction: str = None, repo: str = None, cwd: s
|
|
|
676
688
|
note = next((c['Body'] for c in reversed(store.list_comments(tid))
|
|
677
689
|
if str(c.get('Body') or '').startswith(PAUSE_MARKER)), None)
|
|
678
690
|
if note: parts.append('HANDOVER: an earlier session on this task was paused and left this - '
|
|
679
|
-
f'continue from it, do not start over: {_cut(note, 3000, "handover note")}')
|
|
691
|
+
f'continue from it, do not start over: {no_emails(_cut(note, 3000, "handover note"))}')
|
|
680
692
|
# SOUL.md rides in WITH the coder rules, because the coder rules refer to it: CODER.md says
|
|
681
693
|
# "work only in the repository the task names (see the repository map in SOUL.md)" and
|
|
682
694
|
# claims it is "stacked on top of SOUL.md for every coder run" - and for a live session it
|
|
@@ -685,9 +697,9 @@ def seed_text(store, tid: int, instruction: str = None, repo: str = None, cwd: s
|
|
|
685
697
|
# structurally incapable of seeing. It was right. These docs live in Taskuary's database;
|
|
686
698
|
# if the prompt does not carry them, nothing does.
|
|
687
699
|
soul = ' '.join(str(store.doc('soul') or '').split())[:SOUL_CHARS]
|
|
688
|
-
if soul: parts.append(f'OPERATOR RULES (SOUL.md - authoritative): {soul}')
|
|
700
|
+
if soul: parts.append(f'OPERATOR RULES (SOUL.md - authoritative): {no_emails(soul)}')
|
|
689
701
|
rules = rules_text(store)
|
|
690
|
-
if rules: parts.append(f'RULES: {rules}')
|
|
702
|
+
if rules: parts.append(f'RULES: {no_emails(rules)}')
|
|
691
703
|
# The job, spelled out. An agent handed a bare task description went looking for the ticket
|
|
692
704
|
# it came from - Taskuary's own API, its database, the mailbox - and spent its first minute
|
|
693
705
|
# re-fetching what is already in this paragraph.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: taskuary
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
Summary: Automate your job - the local-first operating system for your work: AI triage in, coding agents out.
|
|
5
5
|
License: MIT
|
|
6
6
|
Project-URL: Homepage, https://github.com/ldbumble/taskuary
|
|
@@ -51,6 +51,7 @@ Dynamic: license-file
|
|
|
51
51
|
[](https://github.com/ldbumble/taskuary/actions/workflows/ci.yml)
|
|
52
52
|
[](LICENSE)
|
|
53
53
|
[](https://github.com/ldbumble/taskuary)
|
|
54
|
+
[](https://pypi.org/project/taskuary/)
|
|
54
55
|
[](CONTRIBUTING.md)
|
|
55
56
|
[](https://github.com/ldbumble/taskuary/stargazers)
|
|
56
57
|
|
|
@@ -60,7 +61,7 @@ Dynamic: license-file
|
|
|
60
61
|
scheduled reports land on one timeline; AI triage says what is real work; the coding CLI
|
|
61
62
|
you already use does it; you approve the result. Runs entirely on your machine.
|
|
62
63
|
|
|
63
|
-

|
|
64
|
+

|
|
64
65
|
|
|
65
66
|
<sub>Real app, real data — a mail triaged and its reply drafted for your approval, then a scheduled SQL report landing on the same rail with its chart and spreadsheet. Nothing sends without you.</sub>
|
|
66
67
|
|
|
@@ -92,7 +93,7 @@ sender (yours to review under Settings → Agent memory).
|
|
|
92
93
|
|
|
93
94
|
The general lessons take a stricter road, so one odd Tuesday never becomes a rule:
|
|
94
95
|
|
|
95
|
-

|
|
96
|
+

|
|
96
97
|
|
|
97
98
|
**How the memory works, concretely.** Each lesson is one line in `LEARNED.md` (Docs tab) —
|
|
98
99
|
a guess with a score. Say you strip the greeting off three drafts this week; the file soon
|
|
@@ -129,7 +130,7 @@ markers always survive. What each one feeds from then on:
|
|
|
129
130
|
## Get started
|
|
130
131
|
|
|
131
132
|
```bash
|
|
132
|
-
pip install
|
|
133
|
+
pip install taskuary
|
|
133
134
|
taskuary # opens http://127.0.0.1:7787
|
|
134
135
|
```
|
|
135
136
|
|
|
@@ -161,7 +162,7 @@ No cloud key at all? Set **Settings → Triage & routing → Triage brain** to y
|
|
|
161
162
|
and skip step 1 — one brain does everything, slower and pricier per message. See
|
|
162
163
|
[One brain or two](#one-brain-or-two).
|
|
163
164
|
|
|
164
|
-
Prefer a desktop app? `pip install "taskuary[desktop]
|
|
165
|
+
Prefer a desktop app? `pip install "taskuary[desktop]"`
|
|
165
166
|
then `taskuary-desktop` — the same UI in a native window. A prebuilt single-file
|
|
166
167
|
`Taskuary.exe` is attached to every CI run.
|
|
167
168
|
|
|
@@ -215,7 +216,7 @@ with no AI connected messages file visibly instead of heuristics spraying tasks.
|
|
|
215
216
|
|
|
216
217
|
## Many agents, one repo — no stepping on each other
|
|
217
218
|
|
|
218
|
-

|
|
219
|
+

|
|
219
220
|
|
|
220
221
|
Auto-dispatch can put several CLIs to work at once — and the board keeps them out of each
|
|
221
222
|
other's way with three light moves. No locks, no worktrees, no manager agent:
|
|
@@ -265,7 +266,7 @@ Plain markdown, all on the Docs tab, all yours to edit. Three you write, two wri
|
|
|
265
266
|
themselves, and two can **bootstrap themselves from your mail history** (`TRIAGE.md` and
|
|
266
267
|
`STYLE.md` — the Generate from history button). Each feeds exactly the calls it belongs in.
|
|
267
268
|
|
|
268
|
-

|
|
269
|
+

|
|
269
270
|
|
|
270
271
|
| document | what it is | who reads it |
|
|
271
272
|
|---|---|---|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|