taskuary 0.3.0__tar.gz → 0.3.2__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.3.2/PKG-INFO +165 -0
- taskuary-0.3.2/README.md +114 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/pyproject.toml +3 -1
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/__init__.py +1 -1
- taskuary-0.3.2/taskuary/agents.py +440 -0
- taskuary-0.3.2/taskuary/aisetup.py +110 -0
- taskuary-0.3.2/taskuary/assistant.py +850 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/blackboard.py +17 -4
- taskuary-0.3.2/taskuary/browserview.py +155 -0
- taskuary-0.3.2/taskuary/calendar.py +294 -0
- taskuary-0.3.2/taskuary/categories.py +77 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/channels.py +155 -28
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/cli.py +16 -1
- taskuary-0.3.2/taskuary/climodels.py +57 -0
- taskuary-0.3.2/taskuary/clis.py +108 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/coder.py +38 -3
- taskuary-0.3.2/taskuary/compose.py +289 -0
- taskuary-0.3.2/taskuary/context.py +111 -0
- taskuary-0.3.2/taskuary/counsel.py +97 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/devtools.py +4 -2
- taskuary-0.3.2/taskuary/digest.py +286 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/docsync.py +13 -5
- taskuary-0.3.2/taskuary/evalset.py +344 -0
- taskuary-0.3.2/taskuary/general.py +417 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/github.py +10 -1
- taskuary-0.3.2/taskuary/handraise.py +59 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/histgen.py +91 -7
- taskuary-0.3.2/taskuary/hooks.py +83 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/imapmail.py +18 -1
- taskuary-0.3.2/taskuary/imessage.py +455 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/ingest.py +275 -86
- taskuary-0.3.2/taskuary/intacct.py +199 -0
- taskuary-0.3.2/taskuary/knowledge.py +317 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/learn.py +105 -8
- taskuary-0.3.2/taskuary/learnedgraph.py +139 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/llm.py +17 -8
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/messengers.py +122 -19
- taskuary-0.3.2/taskuary/msauth.py +148 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/outbound.py +106 -18
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/phone.py +50 -12
- taskuary-0.3.2/taskuary/problems.py +29 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/promptmap.py +3 -1
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/proof.py +95 -10
- taskuary-0.3.2/taskuary/rank.py +182 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/reports.py +424 -38
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/responder.py +51 -9
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/routing.py +24 -10
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/scopes.py +11 -1
- taskuary-0.3.2/taskuary/semantic.py +370 -0
- taskuary-0.3.2/taskuary/senders.py +86 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/server.py +1154 -97
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/setup.py +33 -10
- taskuary-0.3.2/taskuary/sharepoint.py +136 -0
- taskuary-0.3.2/taskuary/sheets.py +101 -0
- taskuary-0.3.2/taskuary/store.py +1434 -0
- taskuary-0.3.2/taskuary/templates/counsel.md +29 -0
- taskuary-0.3.2/taskuary/templates/digest.md +6 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/templates/learned.md +8 -0
- taskuary-0.3.2/taskuary/templates/triage.md +42 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/terminal.py +183 -43
- taskuary-0.3.2/taskuary/testing.py +376 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/triage.py +107 -21
- taskuary-0.3.2/taskuary/voice.py +262 -0
- taskuary-0.3.2/taskuary/wabridge.py +145 -0
- taskuary-0.3.2/taskuary/waitroom.py +180 -0
- taskuary-0.3.2/taskuary/web/assets/GeneralWorkspace-D46ydeAJ.css +1 -0
- taskuary-0.3.2/taskuary/web/assets/GeneralWorkspace-Dn17SMoR.js +10 -0
- taskuary-0.3.2/taskuary/web/assets/index-zLivezbi.js +461 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/web/index.html +1 -1
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/whatsapp/bridge.mjs +28 -6
- taskuary-0.3.2/taskuary/whoami.py +156 -0
- taskuary-0.3.2/taskuary/witness.py +200 -0
- taskuary-0.3.2/taskuary.egg-info/PKG-INFO +165 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary.egg-info/SOURCES.txt +86 -2
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary.egg-info/requires.txt +4 -0
- taskuary-0.3.2/tests/test_agent_environment.py +111 -0
- taskuary-0.3.2/tests/test_agent_source.py +106 -0
- taskuary-0.3.2/tests/test_aisetup.py +83 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_answers.py +37 -9
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_api.py +84 -21
- taskuary-0.3.2/tests/test_assistant.py +568 -0
- taskuary-0.3.2/tests/test_async_triage.py +105 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_blackboard.py +3 -1
- taskuary-0.3.2/tests/test_browserview.py +159 -0
- taskuary-0.3.2/tests/test_calendar.py +96 -0
- taskuary-0.3.2/tests/test_calendar_today.py +77 -0
- taskuary-0.3.2/tests/test_categories.py +67 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_cc_triage.py +29 -0
- taskuary-0.3.2/tests/test_climodels.py +48 -0
- taskuary-0.3.2/tests/test_clis.py +59 -0
- taskuary-0.3.2/tests/test_compose.py +216 -0
- taskuary-0.3.2/tests/test_compose_sources.py +178 -0
- taskuary-0.3.2/tests/test_context.py +87 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_core.py +175 -20
- taskuary-0.3.2/tests/test_counsel.py +92 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_devtools.py +8 -8
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_diff_review.py +87 -0
- taskuary-0.3.2/tests/test_digest_brief.py +115 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_docs_and_llm.py +1 -1
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_docs_flow.py +4 -4
- taskuary-0.3.2/tests/test_duplicate_connectors.py +77 -0
- taskuary-0.3.2/tests/test_factory.py +226 -0
- taskuary-0.3.2/tests/test_feed_working.py +58 -0
- taskuary-0.3.2/tests/test_general.py +195 -0
- taskuary-0.3.2/tests/test_github_auto.py +42 -0
- taskuary-0.3.2/tests/test_handraise.py +48 -0
- taskuary-0.3.2/tests/test_histgen.py +249 -0
- taskuary-0.3.2/tests/test_imessage.py +545 -0
- taskuary-0.3.2/tests/test_intacct.py +253 -0
- taskuary-0.3.2/tests/test_kind_dispatch.py +196 -0
- taskuary-0.3.2/tests/test_knowledge.py +205 -0
- taskuary-0.3.2/tests/test_learnedgraph.py +129 -0
- taskuary-0.3.2/tests/test_mail_folders.py +83 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_messengers.py +67 -2
- taskuary-0.3.2/tests/test_msauth.py +139 -0
- taskuary-0.3.2/tests/test_noop_ending.py +97 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_not_coding.py +58 -21
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_note_retrieval.py +1 -1
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_poll_overlap.py +1 -1
- taskuary-0.3.2/tests/test_problems.py +32 -0
- taskuary-0.3.2/tests/test_pypi_downloads.py +126 -0
- taskuary-0.3.2/tests/test_rank.py +148 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_reply_voice.py +2 -2
- taskuary-0.3.2/tests/test_report_alerts.py +87 -0
- taskuary-0.3.2/tests/test_report_triage.py +58 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_reviews.py +3 -5
- taskuary-0.3.2/tests/test_seeded_reports.py +103 -0
- taskuary-0.3.2/tests/test_semantic.py +311 -0
- taskuary-0.3.2/tests/test_send_targets.py +124 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_setup.py +42 -1
- taskuary-0.3.2/tests/test_sheets_sharepoint.py +120 -0
- taskuary-0.3.2/tests/test_someone_else_replied.py +186 -0
- taskuary-0.3.2/tests/test_store_app_cli.py +100 -0
- taskuary-0.3.2/tests/test_store_hotpaths.py +333 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_terminal.py +94 -1
- taskuary-0.3.2/tests/test_triage_dataset.py +229 -0
- taskuary-0.3.2/tests/test_urgent_and_handoff.py +110 -0
- taskuary-0.3.2/tests/test_verdict_paths.py +190 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_verdict_sticks.py +111 -33
- taskuary-0.3.2/tests/test_voice.py +201 -0
- taskuary-0.3.2/tests/test_wabridge.py +103 -0
- taskuary-0.3.2/tests/test_waitroom.py +226 -0
- taskuary-0.3.2/tests/test_web_entrypoint.py +31 -0
- taskuary-0.3.2/tests/test_whoami.py +103 -0
- taskuary-0.3.2/tests/test_witness.py +106 -0
- taskuary-0.3.0/PKG-INFO +0 -452
- taskuary-0.3.0/README.md +0 -404
- taskuary-0.3.0/taskuary/agents.py +0 -229
- taskuary-0.3.0/taskuary/clis.py +0 -49
- taskuary-0.3.0/taskuary/digest.py +0 -104
- taskuary-0.3.0/taskuary/store.py +0 -753
- taskuary-0.3.0/taskuary/templates/digest.md +0 -5
- taskuary-0.3.0/taskuary/templates/triage.md +0 -26
- taskuary-0.3.0/taskuary/web/assets/index-QtBkB3cc.js +0 -405
- taskuary-0.3.0/taskuary.egg-info/PKG-INFO +0 -452
- taskuary-0.3.0/tests/test_histgen.py +0 -141
- {taskuary-0.3.0 → taskuary-0.3.2}/LICENSE +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/setup.cfg +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/artifacts.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/aws.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/azure.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/ci.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/config.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/db.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/desktop.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/logs.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/mcp.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/mssql.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/pm.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/policy.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/proposals.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/research.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/reshape.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/templates/coder.md +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/templates/soul.md +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/templates/style.md +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/toil.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/verdicts.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/web/assets/index-6GBZ9nXN.css +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/web/favicon.ico +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/web/favicon.png +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/webguard.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/whatsapp/package.json +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary.egg-info/dependency_links.txt +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary.egg-info/entry_points.txt +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/taskuary.egg-info/top_level.txt +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_audit_chain.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_aws_region.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_cloud.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_cloud_sources.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_config.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_cwlogs_paging.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_desktop.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_harvest.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_imapmail.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_local_file.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_mark_read.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_mcp.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_mssql.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_outbound_reports.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_pm.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_poll_sources.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_pr_comments.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_promptmap_and_catalog.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_proof_ci_proposals.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_reply_channels.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_research.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_scopes.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_sync_clock.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_task_identity.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_toil.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_vision.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_watermark.py +0 -0
- {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_webguard.py +0 -0
taskuary-0.3.2/PKG-INFO
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: taskuary
|
|
3
|
+
Version: 0.3.2
|
|
4
|
+
Summary: Automate your job - the local-first operating system for your work: AI triage in, coding agents out.
|
|
5
|
+
License: MIT
|
|
6
|
+
Project-URL: Homepage, https://github.com/ldbumble/taskuary
|
|
7
|
+
Project-URL: Repository, https://github.com/ldbumble/taskuary
|
|
8
|
+
Project-URL: Issues, https://github.com/ldbumble/taskuary/issues
|
|
9
|
+
Project-URL: Changelog, https://github.com/ldbumble/taskuary/releases
|
|
10
|
+
Keywords: ai,agents,automation,claude,coding-agent,email,local-first,task-management
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Topic :: Office/Business :: Scheduling
|
|
19
|
+
Classifier: Topic :: Software Development :: Build Tools
|
|
20
|
+
Requires-Python: >=3.10
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
License-File: LICENSE
|
|
23
|
+
Requires-Dist: fastapi>=0.100
|
|
24
|
+
Requires-Dist: uvicorn>=0.23
|
|
25
|
+
Requires-Dist: pydantic>=2
|
|
26
|
+
Requires-Dist: requests>=2.28
|
|
27
|
+
Requires-Dist: loguru>=0.7
|
|
28
|
+
Requires-Dist: segno>=1.6
|
|
29
|
+
Requires-Dist: anthropic>=0.69
|
|
30
|
+
Requires-Dist: tomli>=2; python_version < "3.11"
|
|
31
|
+
Requires-Dist: websockets>=12
|
|
32
|
+
Requires-Dist: pywinpty>=2; sys_platform == "win32"
|
|
33
|
+
Requires-Dist: pyte>=0.8
|
|
34
|
+
Provides-Extra: mssql
|
|
35
|
+
Requires-Dist: pyodbc>=4; extra == "mssql"
|
|
36
|
+
Provides-Extra: db
|
|
37
|
+
Requires-Dist: sqlalchemy>=2; extra == "db"
|
|
38
|
+
Provides-Extra: aws
|
|
39
|
+
Requires-Dist: boto3>=1.28; extra == "aws"
|
|
40
|
+
Provides-Extra: voice
|
|
41
|
+
Requires-Dist: faster-whisper>=1.0; extra == "voice"
|
|
42
|
+
Provides-Extra: desktop
|
|
43
|
+
Requires-Dist: pywebview>=4; extra == "desktop"
|
|
44
|
+
Provides-Extra: build
|
|
45
|
+
Requires-Dist: pyinstaller>=6; extra == "build"
|
|
46
|
+
Provides-Extra: dev
|
|
47
|
+
Requires-Dist: pytest>=7; extra == "dev"
|
|
48
|
+
Requires-Dist: httpx>=0.24; extra == "dev"
|
|
49
|
+
Requires-Dist: openpyxl>=3; extra == "dev"
|
|
50
|
+
Dynamic: license-file
|
|
51
|
+
|
|
52
|
+
# Taskuary
|
|
53
|
+
|
|
54
|
+
[](https://github.com/ldbumble/taskuary/actions/workflows/ci.yml)
|
|
55
|
+
[](https://pypi.org/project/taskuary/)
|
|
56
|
+
[](https://github.com/ldbumble/taskuary)
|
|
57
|
+
[](LICENSE)
|
|
58
|
+
|
|
59
|
+
## Your inbox, staffed by AI agents.
|
|
60
|
+
|
|
61
|
+
Taskuary brings your mail, chats, issues, and scheduled reports onto one local timeline.
|
|
62
|
+
AI triage decides what is real work, your coding CLI works the tasks in your own repos,
|
|
63
|
+
and replies wait for your approval. Nothing sends or ships without you.
|
|
64
|
+
|
|
65
|
+

|
|
66
|
+
|
|
67
|
+
Taskuary is early—currently **v0.3.2**—and moving fast. The funnel, review queue,
|
|
68
|
+
agent sessions, and reports pipeline are in daily use; breaking changes are still possible
|
|
69
|
+
before 1.0.
|
|
70
|
+
|
|
71
|
+
## One timeline for incoming work
|
|
72
|
+
|
|
73
|
+
Outlook, Gmail, Teams, Slack, Telegram, WhatsApp, GitHub, Jira, alerts, and reports all
|
|
74
|
+
arrive on the same day-grouped rail. Each row says what it is and whether it needs you.
|
|
75
|
+
Open one to see the full message, its attachments, why triage ruled that way, the drafted
|
|
76
|
+
reply, and every available next step.
|
|
77
|
+
|
|
78
|
+

|
|
79
|
+
|
|
80
|
+
Coding work can go straight to Claude Code, Codex, Gemini, Cursor, Copilot, or any CLI that
|
|
81
|
+
accepts a prompt on stdin. You watch the live terminal, answer questions, review the diff,
|
|
82
|
+
and approve what happens next. Research, marketing, and other general work belong in a
|
|
83
|
+
conversational workspace built with assistant-ui and your existing Taskuary AI connections.
|
|
84
|
+
Assistant and terminal are two views of the same session: model, history, queued instructions,
|
|
85
|
+
image attachments, and the side-by-side browser stay put when you switch. The same workspace
|
|
86
|
+
also appears on the Wall.
|
|
87
|
+
|
|
88
|
+
## An assistant that notices what falls between tasks
|
|
89
|
+
|
|
90
|
+
The Assistant periodically reads what the hub can see and posts only when it has something
|
|
91
|
+
useful to say: a reply that went unanswered, a meeting that needs context, a task that went
|
|
92
|
+
quiet, or a pattern across the week's work. Every suggestion includes its evidence and can
|
|
93
|
+
be made into a task, dismissed, snoozed, or taught away with **Not this**.
|
|
94
|
+
|
|
95
|
+

|
|
96
|
+
|
|
97
|
+
It watches the systems you run on, not only the hub. Point it at a Sage Intacct query, a
|
|
98
|
+
database, a file, a REST or MCP tool, a cloud log group, or an agent skill—no saved report has
|
|
99
|
+
to stand behind any of them—and it reads each one silently on every check. That step would
|
|
100
|
+
otherwise ask you to know an object name and a list of field ids, so you can describe what it
|
|
101
|
+
should keep an eye on instead and the AI writes the source cards: it may only choose systems you
|
|
102
|
+
have actually connected, it reads the real schema before writing a query, and it asks rather
|
|
103
|
+
than guessing a filter. The same help sits on every source card in the report builder.
|
|
104
|
+
|
|
105
|
+
Its voice, schedule, model, and thresholds are yours to change. It leaves a note for its next
|
|
106
|
+
check, does not repeat itself, and stays silent when there is nothing worth interrupting you
|
|
107
|
+
for.
|
|
108
|
+
|
|
109
|
+
## Install
|
|
110
|
+
|
|
111
|
+
### Windows app
|
|
112
|
+
|
|
113
|
+
Download the latest single-file
|
|
114
|
+
[Taskuary.exe](https://github.com/ldbumble/taskuary/releases/latest/download/Taskuary.exe)
|
|
115
|
+
and open it. No Python or installer is required.
|
|
116
|
+
|
|
117
|
+
### Python
|
|
118
|
+
|
|
119
|
+
Python 3.10 or newer works on Windows, macOS, and Linux:
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
pip install taskuary
|
|
123
|
+
taskuary
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Taskuary opens at [http://127.0.0.1:7787](http://127.0.0.1:7787). For a native desktop
|
|
127
|
+
window instead, install `pip install "taskuary[desktop]"` and run `taskuary-desktop`.
|
|
128
|
+
|
|
129
|
+
### Docker
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
git clone https://github.com/ldbumble/taskuary
|
|
133
|
+
cd taskuary
|
|
134
|
+
docker compose up
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Then open [http://127.0.0.1:7787](http://127.0.0.1:7787). Docker runs the web app;
|
|
138
|
+
coding CLIs and the optional WhatsApp bridge remain on the host.
|
|
139
|
+
|
|
140
|
+
On first run, connect an AI provider or local Ollama model, add at least one inbound
|
|
141
|
+
channel, then choose the coding CLI that should receive tasks. The setup wizards test each
|
|
142
|
+
connection before it goes live.
|
|
143
|
+
|
|
144
|
+
## Installs
|
|
145
|
+
|
|
146
|
+

|
|
147
|
+
|
|
148
|
+
Redrawn every morning by [`downloads.yml`](.github/workflows/downloads.yml) from PyPI's own
|
|
149
|
+
numbers, with mirror traffic excluded — a full PyPI mirror pulls every release, so counting it
|
|
150
|
+
would let a handful of real users read as hundreds. What it does **not** claim is that CI
|
|
151
|
+
installs have been removed: the field that would separate `pip install` in a build runner from
|
|
152
|
+
one on somebody's laptop is in PyPI's BigQuery dataset, not in the public API. The daily series
|
|
153
|
+
is [docs/downloads.csv](docs/downloads.csv).
|
|
154
|
+
|
|
155
|
+
## Documentation
|
|
156
|
+
|
|
157
|
+
- [Getting started](docs/getting-started.md)—installation, first-run setup, Docker, and data
|
|
158
|
+
- [Product guide](docs/product-guide.md)—the workflow, learning loop, agents, and operator documents
|
|
159
|
+
- [Integrations](docs/integrations.md)—channels, AI providers, work systems, and report sources
|
|
160
|
+
- [Reports and the Assistant](docs/reports-and-assistant.md)—the report pipeline, letting the AI write the source cards, and what the Assistant watches
|
|
161
|
+
- [Status and roadmap](docs/roadmap.md)—what works today and what is next
|
|
162
|
+
- [Contributing](CONTRIBUTING.md)—development setup and contribution guide
|
|
163
|
+
|
|
164
|
+
Taskuary is free and open source under the [MIT License](LICENSE). Issues and pull requests
|
|
165
|
+
are welcome; security reports belong in [SECURITY.md](SECURITY.md).
|
taskuary-0.3.2/README.md
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Taskuary
|
|
2
|
+
|
|
3
|
+
[](https://github.com/ldbumble/taskuary/actions/workflows/ci.yml)
|
|
4
|
+
[](https://pypi.org/project/taskuary/)
|
|
5
|
+
[](https://github.com/ldbumble/taskuary)
|
|
6
|
+
[](LICENSE)
|
|
7
|
+
|
|
8
|
+
## Your inbox, staffed by AI agents.
|
|
9
|
+
|
|
10
|
+
Taskuary brings your mail, chats, issues, and scheduled reports onto one local timeline.
|
|
11
|
+
AI triage decides what is real work, your coding CLI works the tasks in your own repos,
|
|
12
|
+
and replies wait for your approval. Nothing sends or ships without you.
|
|
13
|
+
|
|
14
|
+

|
|
15
|
+
|
|
16
|
+
Taskuary is early—currently **v0.3.2**—and moving fast. The funnel, review queue,
|
|
17
|
+
agent sessions, and reports pipeline are in daily use; breaking changes are still possible
|
|
18
|
+
before 1.0.
|
|
19
|
+
|
|
20
|
+
## One timeline for incoming work
|
|
21
|
+
|
|
22
|
+
Outlook, Gmail, Teams, Slack, Telegram, WhatsApp, GitHub, Jira, alerts, and reports all
|
|
23
|
+
arrive on the same day-grouped rail. Each row says what it is and whether it needs you.
|
|
24
|
+
Open one to see the full message, its attachments, why triage ruled that way, the drafted
|
|
25
|
+
reply, and every available next step.
|
|
26
|
+
|
|
27
|
+

|
|
28
|
+
|
|
29
|
+
Coding work can go straight to Claude Code, Codex, Gemini, Cursor, Copilot, or any CLI that
|
|
30
|
+
accepts a prompt on stdin. You watch the live terminal, answer questions, review the diff,
|
|
31
|
+
and approve what happens next. Research, marketing, and other general work belong in a
|
|
32
|
+
conversational workspace built with assistant-ui and your existing Taskuary AI connections.
|
|
33
|
+
Assistant and terminal are two views of the same session: model, history, queued instructions,
|
|
34
|
+
image attachments, and the side-by-side browser stay put when you switch. The same workspace
|
|
35
|
+
also appears on the Wall.
|
|
36
|
+
|
|
37
|
+
## An assistant that notices what falls between tasks
|
|
38
|
+
|
|
39
|
+
The Assistant periodically reads what the hub can see and posts only when it has something
|
|
40
|
+
useful to say: a reply that went unanswered, a meeting that needs context, a task that went
|
|
41
|
+
quiet, or a pattern across the week's work. Every suggestion includes its evidence and can
|
|
42
|
+
be made into a task, dismissed, snoozed, or taught away with **Not this**.
|
|
43
|
+
|
|
44
|
+

|
|
45
|
+
|
|
46
|
+
It watches the systems you run on, not only the hub. Point it at a Sage Intacct query, a
|
|
47
|
+
database, a file, a REST or MCP tool, a cloud log group, or an agent skill—no saved report has
|
|
48
|
+
to stand behind any of them—and it reads each one silently on every check. That step would
|
|
49
|
+
otherwise ask you to know an object name and a list of field ids, so you can describe what it
|
|
50
|
+
should keep an eye on instead and the AI writes the source cards: it may only choose systems you
|
|
51
|
+
have actually connected, it reads the real schema before writing a query, and it asks rather
|
|
52
|
+
than guessing a filter. The same help sits on every source card in the report builder.
|
|
53
|
+
|
|
54
|
+
Its voice, schedule, model, and thresholds are yours to change. It leaves a note for its next
|
|
55
|
+
check, does not repeat itself, and stays silent when there is nothing worth interrupting you
|
|
56
|
+
for.
|
|
57
|
+
|
|
58
|
+
## Install
|
|
59
|
+
|
|
60
|
+
### Windows app
|
|
61
|
+
|
|
62
|
+
Download the latest single-file
|
|
63
|
+
[Taskuary.exe](https://github.com/ldbumble/taskuary/releases/latest/download/Taskuary.exe)
|
|
64
|
+
and open it. No Python or installer is required.
|
|
65
|
+
|
|
66
|
+
### Python
|
|
67
|
+
|
|
68
|
+
Python 3.10 or newer works on Windows, macOS, and Linux:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
pip install taskuary
|
|
72
|
+
taskuary
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Taskuary opens at [http://127.0.0.1:7787](http://127.0.0.1:7787). For a native desktop
|
|
76
|
+
window instead, install `pip install "taskuary[desktop]"` and run `taskuary-desktop`.
|
|
77
|
+
|
|
78
|
+
### Docker
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
git clone https://github.com/ldbumble/taskuary
|
|
82
|
+
cd taskuary
|
|
83
|
+
docker compose up
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Then open [http://127.0.0.1:7787](http://127.0.0.1:7787). Docker runs the web app;
|
|
87
|
+
coding CLIs and the optional WhatsApp bridge remain on the host.
|
|
88
|
+
|
|
89
|
+
On first run, connect an AI provider or local Ollama model, add at least one inbound
|
|
90
|
+
channel, then choose the coding CLI that should receive tasks. The setup wizards test each
|
|
91
|
+
connection before it goes live.
|
|
92
|
+
|
|
93
|
+
## Installs
|
|
94
|
+
|
|
95
|
+

|
|
96
|
+
|
|
97
|
+
Redrawn every morning by [`downloads.yml`](.github/workflows/downloads.yml) from PyPI's own
|
|
98
|
+
numbers, with mirror traffic excluded — a full PyPI mirror pulls every release, so counting it
|
|
99
|
+
would let a handful of real users read as hundreds. What it does **not** claim is that CI
|
|
100
|
+
installs have been removed: the field that would separate `pip install` in a build runner from
|
|
101
|
+
one on somebody's laptop is in PyPI's BigQuery dataset, not in the public API. The daily series
|
|
102
|
+
is [docs/downloads.csv](docs/downloads.csv).
|
|
103
|
+
|
|
104
|
+
## Documentation
|
|
105
|
+
|
|
106
|
+
- [Getting started](docs/getting-started.md)—installation, first-run setup, Docker, and data
|
|
107
|
+
- [Product guide](docs/product-guide.md)—the workflow, learning loop, agents, and operator documents
|
|
108
|
+
- [Integrations](docs/integrations.md)—channels, AI providers, work systems, and report sources
|
|
109
|
+
- [Reports and the Assistant](docs/reports-and-assistant.md)—the report pipeline, letting the AI write the source cards, and what the Assistant watches
|
|
110
|
+
- [Status and roadmap](docs/roadmap.md)—what works today and what is next
|
|
111
|
+
- [Contributing](CONTRIBUTING.md)—development setup and contribution guide
|
|
112
|
+
|
|
113
|
+
Taskuary is free and open source under the [MIT License](LICENSE). Issues and pull requests
|
|
114
|
+
are welcome; security reports belong in [SECURITY.md](SECURITY.md).
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "taskuary"
|
|
7
|
-
version = "0.3.
|
|
7
|
+
version = "0.3.2"
|
|
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" }
|
|
@@ -27,6 +27,7 @@ dependencies = [
|
|
|
27
27
|
"pydantic>=2",
|
|
28
28
|
"requests>=2.28",
|
|
29
29
|
"loguru>=0.7",
|
|
30
|
+
"segno>=1.6", # WhatsApp pairing QR drawn ON the card - pure Python, no Pillow
|
|
30
31
|
"anthropic>=0.69",
|
|
31
32
|
"tomli>=2; python_version<'3.11'",
|
|
32
33
|
"websockets>=12", # uvicorn's ws transport - the terminal streams over it
|
|
@@ -38,6 +39,7 @@ dependencies = [
|
|
|
38
39
|
mssql = ["pyodbc>=4"]
|
|
39
40
|
db = ["sqlalchemy>=2"] # 'any database' URLs; add the engine driver too (psycopg2-binary, pymysql, ...)
|
|
40
41
|
aws = ["boto3>=1.28"] # azure needs no extra: tokens ride plain requests
|
|
42
|
+
voice = ["faster-whisper>=1.0"] # Local Whisper: speech to text on this machine, no key, audio never leaves the box
|
|
41
43
|
desktop = ["pywebview>=4"]
|
|
42
44
|
build = ["pyinstaller>=6"]
|
|
43
45
|
dev = ["pytest>=7", "httpx>=0.24", "openpyxl>=3"] # openpyxl READS xlsx in tests; the writer is ours
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""Taskuary -
|
|
1
|
+
"""Taskuary - your work AI assistant: AI triage in, coding agents out, you in charge."""
|
|
2
2
|
# ONE place holds the version and it is pyproject.toml, because that is the one the git tag has
|
|
3
3
|
# to match (RELEASING.md). A second copy here said 0.2.0 through the whole of 0.2.1: the CLI
|
|
4
4
|
# banner, the API and the header pill all reported it, and the header's own tooltip told the
|