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.
Files changed (214) hide show
  1. taskuary-0.3.2/PKG-INFO +165 -0
  2. taskuary-0.3.2/README.md +114 -0
  3. {taskuary-0.3.0 → taskuary-0.3.2}/pyproject.toml +3 -1
  4. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/__init__.py +1 -1
  5. taskuary-0.3.2/taskuary/agents.py +440 -0
  6. taskuary-0.3.2/taskuary/aisetup.py +110 -0
  7. taskuary-0.3.2/taskuary/assistant.py +850 -0
  8. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/blackboard.py +17 -4
  9. taskuary-0.3.2/taskuary/browserview.py +155 -0
  10. taskuary-0.3.2/taskuary/calendar.py +294 -0
  11. taskuary-0.3.2/taskuary/categories.py +77 -0
  12. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/channels.py +155 -28
  13. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/cli.py +16 -1
  14. taskuary-0.3.2/taskuary/climodels.py +57 -0
  15. taskuary-0.3.2/taskuary/clis.py +108 -0
  16. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/coder.py +38 -3
  17. taskuary-0.3.2/taskuary/compose.py +289 -0
  18. taskuary-0.3.2/taskuary/context.py +111 -0
  19. taskuary-0.3.2/taskuary/counsel.py +97 -0
  20. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/devtools.py +4 -2
  21. taskuary-0.3.2/taskuary/digest.py +286 -0
  22. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/docsync.py +13 -5
  23. taskuary-0.3.2/taskuary/evalset.py +344 -0
  24. taskuary-0.3.2/taskuary/general.py +417 -0
  25. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/github.py +10 -1
  26. taskuary-0.3.2/taskuary/handraise.py +59 -0
  27. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/histgen.py +91 -7
  28. taskuary-0.3.2/taskuary/hooks.py +83 -0
  29. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/imapmail.py +18 -1
  30. taskuary-0.3.2/taskuary/imessage.py +455 -0
  31. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/ingest.py +275 -86
  32. taskuary-0.3.2/taskuary/intacct.py +199 -0
  33. taskuary-0.3.2/taskuary/knowledge.py +317 -0
  34. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/learn.py +105 -8
  35. taskuary-0.3.2/taskuary/learnedgraph.py +139 -0
  36. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/llm.py +17 -8
  37. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/messengers.py +122 -19
  38. taskuary-0.3.2/taskuary/msauth.py +148 -0
  39. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/outbound.py +106 -18
  40. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/phone.py +50 -12
  41. taskuary-0.3.2/taskuary/problems.py +29 -0
  42. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/promptmap.py +3 -1
  43. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/proof.py +95 -10
  44. taskuary-0.3.2/taskuary/rank.py +182 -0
  45. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/reports.py +424 -38
  46. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/responder.py +51 -9
  47. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/routing.py +24 -10
  48. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/scopes.py +11 -1
  49. taskuary-0.3.2/taskuary/semantic.py +370 -0
  50. taskuary-0.3.2/taskuary/senders.py +86 -0
  51. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/server.py +1154 -97
  52. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/setup.py +33 -10
  53. taskuary-0.3.2/taskuary/sharepoint.py +136 -0
  54. taskuary-0.3.2/taskuary/sheets.py +101 -0
  55. taskuary-0.3.2/taskuary/store.py +1434 -0
  56. taskuary-0.3.2/taskuary/templates/counsel.md +29 -0
  57. taskuary-0.3.2/taskuary/templates/digest.md +6 -0
  58. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/templates/learned.md +8 -0
  59. taskuary-0.3.2/taskuary/templates/triage.md +42 -0
  60. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/terminal.py +183 -43
  61. taskuary-0.3.2/taskuary/testing.py +376 -0
  62. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/triage.py +107 -21
  63. taskuary-0.3.2/taskuary/voice.py +262 -0
  64. taskuary-0.3.2/taskuary/wabridge.py +145 -0
  65. taskuary-0.3.2/taskuary/waitroom.py +180 -0
  66. taskuary-0.3.2/taskuary/web/assets/GeneralWorkspace-D46ydeAJ.css +1 -0
  67. taskuary-0.3.2/taskuary/web/assets/GeneralWorkspace-Dn17SMoR.js +10 -0
  68. taskuary-0.3.2/taskuary/web/assets/index-zLivezbi.js +461 -0
  69. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/web/index.html +1 -1
  70. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/whatsapp/bridge.mjs +28 -6
  71. taskuary-0.3.2/taskuary/whoami.py +156 -0
  72. taskuary-0.3.2/taskuary/witness.py +200 -0
  73. taskuary-0.3.2/taskuary.egg-info/PKG-INFO +165 -0
  74. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary.egg-info/SOURCES.txt +86 -2
  75. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary.egg-info/requires.txt +4 -0
  76. taskuary-0.3.2/tests/test_agent_environment.py +111 -0
  77. taskuary-0.3.2/tests/test_agent_source.py +106 -0
  78. taskuary-0.3.2/tests/test_aisetup.py +83 -0
  79. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_answers.py +37 -9
  80. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_api.py +84 -21
  81. taskuary-0.3.2/tests/test_assistant.py +568 -0
  82. taskuary-0.3.2/tests/test_async_triage.py +105 -0
  83. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_blackboard.py +3 -1
  84. taskuary-0.3.2/tests/test_browserview.py +159 -0
  85. taskuary-0.3.2/tests/test_calendar.py +96 -0
  86. taskuary-0.3.2/tests/test_calendar_today.py +77 -0
  87. taskuary-0.3.2/tests/test_categories.py +67 -0
  88. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_cc_triage.py +29 -0
  89. taskuary-0.3.2/tests/test_climodels.py +48 -0
  90. taskuary-0.3.2/tests/test_clis.py +59 -0
  91. taskuary-0.3.2/tests/test_compose.py +216 -0
  92. taskuary-0.3.2/tests/test_compose_sources.py +178 -0
  93. taskuary-0.3.2/tests/test_context.py +87 -0
  94. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_core.py +175 -20
  95. taskuary-0.3.2/tests/test_counsel.py +92 -0
  96. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_devtools.py +8 -8
  97. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_diff_review.py +87 -0
  98. taskuary-0.3.2/tests/test_digest_brief.py +115 -0
  99. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_docs_and_llm.py +1 -1
  100. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_docs_flow.py +4 -4
  101. taskuary-0.3.2/tests/test_duplicate_connectors.py +77 -0
  102. taskuary-0.3.2/tests/test_factory.py +226 -0
  103. taskuary-0.3.2/tests/test_feed_working.py +58 -0
  104. taskuary-0.3.2/tests/test_general.py +195 -0
  105. taskuary-0.3.2/tests/test_github_auto.py +42 -0
  106. taskuary-0.3.2/tests/test_handraise.py +48 -0
  107. taskuary-0.3.2/tests/test_histgen.py +249 -0
  108. taskuary-0.3.2/tests/test_imessage.py +545 -0
  109. taskuary-0.3.2/tests/test_intacct.py +253 -0
  110. taskuary-0.3.2/tests/test_kind_dispatch.py +196 -0
  111. taskuary-0.3.2/tests/test_knowledge.py +205 -0
  112. taskuary-0.3.2/tests/test_learnedgraph.py +129 -0
  113. taskuary-0.3.2/tests/test_mail_folders.py +83 -0
  114. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_messengers.py +67 -2
  115. taskuary-0.3.2/tests/test_msauth.py +139 -0
  116. taskuary-0.3.2/tests/test_noop_ending.py +97 -0
  117. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_not_coding.py +58 -21
  118. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_note_retrieval.py +1 -1
  119. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_poll_overlap.py +1 -1
  120. taskuary-0.3.2/tests/test_problems.py +32 -0
  121. taskuary-0.3.2/tests/test_pypi_downloads.py +126 -0
  122. taskuary-0.3.2/tests/test_rank.py +148 -0
  123. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_reply_voice.py +2 -2
  124. taskuary-0.3.2/tests/test_report_alerts.py +87 -0
  125. taskuary-0.3.2/tests/test_report_triage.py +58 -0
  126. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_reviews.py +3 -5
  127. taskuary-0.3.2/tests/test_seeded_reports.py +103 -0
  128. taskuary-0.3.2/tests/test_semantic.py +311 -0
  129. taskuary-0.3.2/tests/test_send_targets.py +124 -0
  130. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_setup.py +42 -1
  131. taskuary-0.3.2/tests/test_sheets_sharepoint.py +120 -0
  132. taskuary-0.3.2/tests/test_someone_else_replied.py +186 -0
  133. taskuary-0.3.2/tests/test_store_app_cli.py +100 -0
  134. taskuary-0.3.2/tests/test_store_hotpaths.py +333 -0
  135. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_terminal.py +94 -1
  136. taskuary-0.3.2/tests/test_triage_dataset.py +229 -0
  137. taskuary-0.3.2/tests/test_urgent_and_handoff.py +110 -0
  138. taskuary-0.3.2/tests/test_verdict_paths.py +190 -0
  139. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_verdict_sticks.py +111 -33
  140. taskuary-0.3.2/tests/test_voice.py +201 -0
  141. taskuary-0.3.2/tests/test_wabridge.py +103 -0
  142. taskuary-0.3.2/tests/test_waitroom.py +226 -0
  143. taskuary-0.3.2/tests/test_web_entrypoint.py +31 -0
  144. taskuary-0.3.2/tests/test_whoami.py +103 -0
  145. taskuary-0.3.2/tests/test_witness.py +106 -0
  146. taskuary-0.3.0/PKG-INFO +0 -452
  147. taskuary-0.3.0/README.md +0 -404
  148. taskuary-0.3.0/taskuary/agents.py +0 -229
  149. taskuary-0.3.0/taskuary/clis.py +0 -49
  150. taskuary-0.3.0/taskuary/digest.py +0 -104
  151. taskuary-0.3.0/taskuary/store.py +0 -753
  152. taskuary-0.3.0/taskuary/templates/digest.md +0 -5
  153. taskuary-0.3.0/taskuary/templates/triage.md +0 -26
  154. taskuary-0.3.0/taskuary/web/assets/index-QtBkB3cc.js +0 -405
  155. taskuary-0.3.0/taskuary.egg-info/PKG-INFO +0 -452
  156. taskuary-0.3.0/tests/test_histgen.py +0 -141
  157. {taskuary-0.3.0 → taskuary-0.3.2}/LICENSE +0 -0
  158. {taskuary-0.3.0 → taskuary-0.3.2}/setup.cfg +0 -0
  159. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/artifacts.py +0 -0
  160. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/aws.py +0 -0
  161. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/azure.py +0 -0
  162. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/ci.py +0 -0
  163. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/config.py +0 -0
  164. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/db.py +0 -0
  165. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/desktop.py +0 -0
  166. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/logs.py +0 -0
  167. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/mcp.py +0 -0
  168. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/mssql.py +0 -0
  169. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/pm.py +0 -0
  170. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/policy.py +0 -0
  171. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/proposals.py +0 -0
  172. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/research.py +0 -0
  173. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/reshape.py +0 -0
  174. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/templates/coder.md +0 -0
  175. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/templates/soul.md +0 -0
  176. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/templates/style.md +0 -0
  177. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/toil.py +0 -0
  178. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/verdicts.py +0 -0
  179. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/web/assets/index-6GBZ9nXN.css +0 -0
  180. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/web/favicon.ico +0 -0
  181. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/web/favicon.png +0 -0
  182. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/webguard.py +0 -0
  183. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary/whatsapp/package.json +0 -0
  184. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary.egg-info/dependency_links.txt +0 -0
  185. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary.egg-info/entry_points.txt +0 -0
  186. {taskuary-0.3.0 → taskuary-0.3.2}/taskuary.egg-info/top_level.txt +0 -0
  187. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_audit_chain.py +0 -0
  188. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_aws_region.py +0 -0
  189. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_cloud.py +0 -0
  190. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_cloud_sources.py +0 -0
  191. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_config.py +0 -0
  192. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_cwlogs_paging.py +0 -0
  193. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_desktop.py +0 -0
  194. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_harvest.py +0 -0
  195. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_imapmail.py +0 -0
  196. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_local_file.py +0 -0
  197. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_mark_read.py +0 -0
  198. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_mcp.py +0 -0
  199. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_mssql.py +0 -0
  200. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_outbound_reports.py +0 -0
  201. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_pm.py +0 -0
  202. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_poll_sources.py +0 -0
  203. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_pr_comments.py +0 -0
  204. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_promptmap_and_catalog.py +0 -0
  205. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_proof_ci_proposals.py +0 -0
  206. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_reply_channels.py +0 -0
  207. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_research.py +0 -0
  208. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_scopes.py +0 -0
  209. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_sync_clock.py +0 -0
  210. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_task_identity.py +0 -0
  211. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_toil.py +0 -0
  212. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_vision.py +0 -0
  213. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_watermark.py +0 -0
  214. {taskuary-0.3.0 → taskuary-0.3.2}/tests/test_webguard.py +0 -0
@@ -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
+ [![CI](https://github.com/ldbumble/taskuary/actions/workflows/ci.yml/badge.svg)](https://github.com/ldbumble/taskuary/actions/workflows/ci.yml)
55
+ [![PyPI](https://img.shields.io/pypi/v/taskuary.svg)](https://pypi.org/project/taskuary/)
56
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10%2B-3776ab.svg)](https://github.com/ldbumble/taskuary)
57
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](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
+ ![The Taskuary Studio: work arrives, triage decides what needs action, and agents take seats to work it.](https://raw.githubusercontent.com/ldbumble/taskuary/master/docs/hero.gif)
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
+ ![The Timeline with mail, chats, reports, active tasks, and an Assistant post on one rail.](https://raw.githubusercontent.com/ldbumble/taskuary/master/docs/screenshot-timeline-crop.png)
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
+ ![An Assistant post showing two evidence-backed suggestions and what it reviewed.](https://raw.githubusercontent.com/ldbumble/taskuary/master/docs/screenshot-assistant.png)
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
+ ![Daily installs of taskuary from PyPI, mirror traffic excluded](https://raw.githubusercontent.com/ldbumble/taskuary/master/docs/downloads.svg)
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).
@@ -0,0 +1,114 @@
1
+ # Taskuary
2
+
3
+ [![CI](https://github.com/ldbumble/taskuary/actions/workflows/ci.yml/badge.svg)](https://github.com/ldbumble/taskuary/actions/workflows/ci.yml)
4
+ [![PyPI](https://img.shields.io/pypi/v/taskuary.svg)](https://pypi.org/project/taskuary/)
5
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10%2B-3776ab.svg)](https://github.com/ldbumble/taskuary)
6
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](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
+ ![The Taskuary Studio: work arrives, triage decides what needs action, and agents take seats to work it.](https://raw.githubusercontent.com/ldbumble/taskuary/master/docs/hero.gif)
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
+ ![The Timeline with mail, chats, reports, active tasks, and an Assistant post on one rail.](https://raw.githubusercontent.com/ldbumble/taskuary/master/docs/screenshot-timeline-crop.png)
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
+ ![An Assistant post showing two evidence-backed suggestions and what it reviewed.](https://raw.githubusercontent.com/ldbumble/taskuary/master/docs/screenshot-assistant.png)
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
+ ![Daily installs of taskuary from PyPI, mirror traffic excluded](https://raw.githubusercontent.com/ldbumble/taskuary/master/docs/downloads.svg)
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.0"
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 - Automate your job: AI triage in, coding agents out, you in charge."""
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