tau-biggz 0.1.3__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 (261) hide show
  1. tau_biggz-0.1.3/.github/CODEOWNERS +1 -0
  2. tau_biggz-0.1.3/.github/workflows/ci.yml +70 -0
  3. tau_biggz-0.1.3/.github/workflows/docs.yml +55 -0
  4. tau_biggz-0.1.3/.github/workflows/publish.yml +28 -0
  5. tau_biggz-0.1.3/.gitignore +18 -0
  6. tau_biggz-0.1.3/.python-version +1 -0
  7. tau_biggz-0.1.3/.tau/skills/skill-creator/SKILL.md +177 -0
  8. tau_biggz-0.1.3/AGENTS.md +81 -0
  9. tau_biggz-0.1.3/CONTRIBUTING.md +145 -0
  10. tau_biggz-0.1.3/LICENSE +21 -0
  11. tau_biggz-0.1.3/PKG-INFO +249 -0
  12. tau_biggz-0.1.3/README.md +228 -0
  13. tau_biggz-0.1.3/dev-notes/README.md +25 -0
  14. tau_biggz-0.1.3/dev-notes/adr/0001-use-textual-for-tui.md +30 -0
  15. tau_biggz-0.1.3/dev-notes/adr/0002-keep-tool-docs-hand-written.md +76 -0
  16. tau_biggz-0.1.3/dev-notes/architecture/cli-bad-model-error.md +86 -0
  17. tau_biggz-0.1.3/dev-notes/architecture/config-driven-provider-catalog.md +135 -0
  18. tau_biggz-0.1.3/dev-notes/architecture/index.md +61 -0
  19. tau_biggz-0.1.3/dev-notes/architecture/phase-1-core-types-and-events.md +249 -0
  20. tau_biggz-0.1.3/dev-notes/architecture/phase-10-system-prompt.md +151 -0
  21. tau_biggz-0.1.3/dev-notes/architecture/phase-11-print-event-rendering.md +135 -0
  22. tau_biggz-0.1.3/dev-notes/architecture/phase-12-textual-tui.md +149 -0
  23. tau_biggz-0.1.3/dev-notes/architecture/phase-13-paths-agents-resources.md +140 -0
  24. tau_biggz-0.1.3/dev-notes/architecture/phase-14-session-manager-resume.md +187 -0
  25. tau_biggz-0.1.3/dev-notes/architecture/phase-15-slash-command-registry.md +159 -0
  26. tau_biggz-0.1.3/dev-notes/architecture/phase-16-resource-discovery.md +102 -0
  27. tau_biggz-0.1.3/dev-notes/architecture/phase-17-5-transcript-wrapping.md +84 -0
  28. tau_biggz-0.1.3/dev-notes/architecture/phase-17-tui-autocomplete.md +100 -0
  29. tau_biggz-0.1.3/dev-notes/architecture/phase-18-provider-config-foundation.md +194 -0
  30. tau_biggz-0.1.3/dev-notes/architecture/phase-19-context-discovery.md +112 -0
  31. tau_biggz-0.1.3/dev-notes/architecture/phase-2-ai-provider-layer.md +178 -0
  32. tau_biggz-0.1.3/dev-notes/architecture/phase-20-1-context-accounting.md +82 -0
  33. tau_biggz-0.1.3/dev-notes/architecture/phase-20-2-thinking-controls.md +160 -0
  34. tau_biggz-0.1.3/dev-notes/architecture/phase-20-3-skill-invocation.md +90 -0
  35. tau_biggz-0.1.3/dev-notes/architecture/phase-20-4-session-export.md +71 -0
  36. tau_biggz-0.1.3/dev-notes/architecture/phase-20-installation-docs.md +64 -0
  37. tau_biggz-0.1.3/dev-notes/architecture/phase-22-compaction-foundation.md +139 -0
  38. tau_biggz-0.1.3/dev-notes/architecture/phase-23-tui-polish.md +221 -0
  39. tau_biggz-0.1.3/dev-notes/architecture/phase-24-session-tree-branching.md +59 -0
  40. tau_biggz-0.1.3/dev-notes/architecture/phase-25-system-command.md +41 -0
  41. tau_biggz-0.1.3/dev-notes/architecture/phase-3-agent-loop.md +243 -0
  42. tau_biggz-0.1.3/dev-notes/architecture/phase-4-agent-harness.md +196 -0
  43. tau_biggz-0.1.3/dev-notes/architecture/phase-5-coding-tools.md +126 -0
  44. tau_biggz-0.1.3/dev-notes/architecture/phase-6-print-mode-cli.md +127 -0
  45. tau_biggz-0.1.3/dev-notes/architecture/phase-7-session-tree.md +138 -0
  46. tau_biggz-0.1.3/dev-notes/architecture/phase-8-coding-session.md +146 -0
  47. tau_biggz-0.1.3/dev-notes/architecture/phase-9-skills-prompts.md +211 -0
  48. tau_biggz-0.1.3/dev-notes/architecture/pre-extension-hardening.md +116 -0
  49. tau_biggz-0.1.3/dev-notes/architecture/provider-catalog-live-validation.md +300 -0
  50. tau_biggz-0.1.3/dev-notes/architecture/provider-model-safety.md +48 -0
  51. tau_biggz-0.1.3/dev-notes/architecture/provider-retries.md +39 -0
  52. tau_biggz-0.1.3/dev-notes/architecture/queued-steering-follow-ups.md +73 -0
  53. tau_biggz-0.1.3/dev-notes/architecture/startup-update-check.md +30 -0
  54. tau_biggz-0.1.3/dev-notes/config-driven-providers.md +102 -0
  55. tau_biggz-0.1.3/dev-notes/design/00-roadmap.md +67 -0
  56. tau_biggz-0.1.3/dev-notes/design/01-architecture.md +37 -0
  57. tau_biggz-0.1.3/dev-notes/design/02-agent-loop.md +24 -0
  58. tau_biggz-0.1.3/dev-notes/design/03-tools.md +327 -0
  59. tau_biggz-0.1.3/dev-notes/design/04-sessions.md +87 -0
  60. tau_biggz-0.1.3/dev-notes/design/05-core-types-and-events.md +66 -0
  61. tau_biggz-0.1.3/dev-notes/design/agent-loop.md +35 -0
  62. tau_biggz-0.1.3/dev-notes/design/harness.md +65 -0
  63. tau_biggz-0.1.3/dev-notes/extensions.md +161 -0
  64. tau_biggz-0.1.3/dev-notes/harnesses.md +662 -0
  65. tau_biggz-0.1.3/dev-notes/release-notes-startup.md +21 -0
  66. tau_biggz-0.1.3/dev-notes/release-process.md +61 -0
  67. tau_biggz-0.1.3/dev-notes/sdk.md +112 -0
  68. tau_biggz-0.1.3/dev-notes/tui-session-modal-selection-copy.md +35 -0
  69. tau_biggz-0.1.3/docs/assets/tau-header.svg +60 -0
  70. tau_biggz-0.1.3/example_extensions/agents/planner.md +9 -0
  71. tau_biggz-0.1.3/example_extensions/agents/reviewer.md +10 -0
  72. tau_biggz-0.1.3/example_extensions/greeting_ext.py +18 -0
  73. tau_biggz-0.1.3/example_extensions/hello_ext.py +26 -0
  74. tau_biggz-0.1.3/example_extensions/mcp.example.toml +18 -0
  75. tau_biggz-0.1.3/example_extensions/oficina.toml +18 -0
  76. tau_biggz-0.1.3/examples/sdk/hello_tau.py +107 -0
  77. tau_biggz-0.1.3/landing.html +573 -0
  78. tau_biggz-0.1.3/openspec/changes/greeting-ext/tasks.md +113 -0
  79. tau_biggz-0.1.3/openspec/changes/models-sync/apply-progress.md +77 -0
  80. tau_biggz-0.1.3/openspec/changes/models-sync/archive.md +179 -0
  81. tau_biggz-0.1.3/openspec/changes/models-sync/design.md +1689 -0
  82. tau_biggz-0.1.3/openspec/changes/models-sync/proposal.md +248 -0
  83. tau_biggz-0.1.3/openspec/changes/models-sync/specs/models_sync/spec.md +426 -0
  84. tau_biggz-0.1.3/openspec/changes/models-sync/tasks.md +657 -0
  85. tau_biggz-0.1.3/openspec/changes/models-sync/verify-report.md +217 -0
  86. tau_biggz-0.1.3/pyproject.toml +62 -0
  87. tau_biggz-0.1.3/release-notes/releases.json +68 -0
  88. tau_biggz-0.1.3/session-temp.jsonl +13 -0
  89. tau_biggz-0.1.3/src/tau_agent/__init__.py +93 -0
  90. tau_biggz-0.1.3/src/tau_agent/events.py +134 -0
  91. tau_biggz-0.1.3/src/tau_agent/harness.py +292 -0
  92. tau_biggz-0.1.3/src/tau_agent/loop.py +276 -0
  93. tau_biggz-0.1.3/src/tau_agent/messages.py +47 -0
  94. tau_biggz-0.1.3/src/tau_agent/py.typed +0 -0
  95. tau_biggz-0.1.3/src/tau_agent/session/__init__.py +50 -0
  96. tau_biggz-0.1.3/src/tau_agent/session/entries.py +114 -0
  97. tau_biggz-0.1.3/src/tau_agent/session/jsonl.py +37 -0
  98. tau_biggz-0.1.3/src/tau_agent/session/memory.py +136 -0
  99. tau_biggz-0.1.3/src/tau_agent/session/storage.py +40 -0
  100. tau_biggz-0.1.3/src/tau_agent/session/tree.py +40 -0
  101. tau_biggz-0.1.3/src/tau_agent/tools.py +75 -0
  102. tau_biggz-0.1.3/src/tau_agent/types.py +8 -0
  103. tau_biggz-0.1.3/src/tau_ai/__init__.py +64 -0
  104. tau_biggz-0.1.3/src/tau_ai/anthropic.py +358 -0
  105. tau_biggz-0.1.3/src/tau_ai/env.py +123 -0
  106. tau_biggz-0.1.3/src/tau_ai/events.py +91 -0
  107. tau_biggz-0.1.3/src/tau_ai/fake.py +43 -0
  108. tau_biggz-0.1.3/src/tau_ai/google.py +380 -0
  109. tau_biggz-0.1.3/src/tau_ai/http_errors.py +65 -0
  110. tau_biggz-0.1.3/src/tau_ai/mistral.py +415 -0
  111. tau_biggz-0.1.3/src/tau_ai/openai_codex.py +742 -0
  112. tau_biggz-0.1.3/src/tau_ai/openai_compatible.py +924 -0
  113. tau_biggz-0.1.3/src/tau_ai/provider.py +34 -0
  114. tau_biggz-0.1.3/src/tau_ai/py.typed +0 -0
  115. tau_biggz-0.1.3/src/tau_ai/retry.py +62 -0
  116. tau_biggz-0.1.3/src/tau_coding/__init__.py +296 -0
  117. tau_biggz-0.1.3/src/tau_coding/_fix_encoding.py +23 -0
  118. tau_biggz-0.1.3/src/tau_coding/agents.py +114 -0
  119. tau_biggz-0.1.3/src/tau_coding/branch_summary.py +205 -0
  120. tau_biggz-0.1.3/src/tau_coding/catalog_loader.py +550 -0
  121. tau_biggz-0.1.3/src/tau_coding/cli.py +650 -0
  122. tau_biggz-0.1.3/src/tau_coding/commands.py +847 -0
  123. tau_biggz-0.1.3/src/tau_coding/context.py +95 -0
  124. tau_biggz-0.1.3/src/tau_coding/context_window.py +285 -0
  125. tau_biggz-0.1.3/src/tau_coding/credentials.py +185 -0
  126. tau_biggz-0.1.3/src/tau_coding/data/catalog.toml +6601 -0
  127. tau_biggz-0.1.3/src/tau_coding/data/release-notes/releases.json +68 -0
  128. tau_biggz-0.1.3/src/tau_coding/diagnostics.py +100 -0
  129. tau_biggz-0.1.3/src/tau_coding/extensions.py +349 -0
  130. tau_biggz-0.1.3/src/tau_coding/harness.py +300 -0
  131. tau_biggz-0.1.3/src/tau_coding/mcp_integration.py +249 -0
  132. tau_biggz-0.1.3/src/tau_coding/mcp_manager.py +136 -0
  133. tau_biggz-0.1.3/src/tau_coding/models_sync.py +523 -0
  134. tau_biggz-0.1.3/src/tau_coding/oauth.py +503 -0
  135. tau_biggz-0.1.3/src/tau_coding/package_manager.py +364 -0
  136. tau_biggz-0.1.3/src/tau_coding/paths.py +121 -0
  137. tau_biggz-0.1.3/src/tau_coding/prompt_templates.py +198 -0
  138. tau_biggz-0.1.3/src/tau_coding/provider_add.py +179 -0
  139. tau_biggz-0.1.3/src/tau_coding/provider_catalog.py +86 -0
  140. tau_biggz-0.1.3/src/tau_coding/provider_config.py +2220 -0
  141. tau_biggz-0.1.3/src/tau_coding/provider_runtime.py +172 -0
  142. tau_biggz-0.1.3/src/tau_coding/py.typed +0 -0
  143. tau_biggz-0.1.3/src/tau_coding/reload.py +30 -0
  144. tau_biggz-0.1.3/src/tau_coding/rendering/__init__.py +27 -0
  145. tau_biggz-0.1.3/src/tau_coding/rendering/base.py +26 -0
  146. tau_biggz-0.1.3/src/tau_coding/rendering/json.py +24 -0
  147. tau_biggz-0.1.3/src/tau_coding/rendering/plain.py +38 -0
  148. tau_biggz-0.1.3/src/tau_coding/rendering/transcript.py +106 -0
  149. tau_biggz-0.1.3/src/tau_coding/resources.py +173 -0
  150. tau_biggz-0.1.3/src/tau_coding/rpc.py +323 -0
  151. tau_biggz-0.1.3/src/tau_coding/session.py +2238 -0
  152. tau_biggz-0.1.3/src/tau_coding/session_export.py +664 -0
  153. tau_biggz-0.1.3/src/tau_coding/session_manager.py +257 -0
  154. tau_biggz-0.1.3/src/tau_coding/shell_config.py +64 -0
  155. tau_biggz-0.1.3/src/tau_coding/skills.py +214 -0
  156. tau_biggz-0.1.3/src/tau_coding/system_prompt.py +172 -0
  157. tau_biggz-0.1.3/src/tau_coding/thinking.py +90 -0
  158. tau_biggz-0.1.3/src/tau_coding/tools.py +1382 -0
  159. tau_biggz-0.1.3/src/tau_coding/tui/__init__.py +67 -0
  160. tau_biggz-0.1.3/src/tau_coding/tui/_terminal_title.py +34 -0
  161. tau_biggz-0.1.3/src/tau_coding/tui/adapter.py +100 -0
  162. tau_biggz-0.1.3/src/tau_coding/tui/app.py +4332 -0
  163. tau_biggz-0.1.3/src/tau_coding/tui/autocomplete.py +511 -0
  164. tau_biggz-0.1.3/src/tau_coding/tui/config.py +349 -0
  165. tau_biggz-0.1.3/src/tau_coding/tui/state.py +377 -0
  166. tau_biggz-0.1.3/src/tau_coding/tui/widgets.py +1541 -0
  167. tau_biggz-0.1.3/src/tau_coding/update_check.py +375 -0
  168. tau_biggz-0.1.3/tests/fixtures/models.dev.api.json +41 -0
  169. tau_biggz-0.1.3/tests/test_agent_harness.py +434 -0
  170. tau_biggz-0.1.3/tests/test_agent_loop.py +633 -0
  171. tau_biggz-0.1.3/tests/test_agent_types.py +120 -0
  172. tau_biggz-0.1.3/tests/test_approval_chain.py +65 -0
  173. tau_biggz-0.1.3/tests/test_cli.py +1015 -0
  174. tau_biggz-0.1.3/tests/test_coding_session.py +3297 -0
  175. tau_biggz-0.1.3/tests/test_coding_tools.py +246 -0
  176. tau_biggz-0.1.3/tests/test_commands.py +498 -0
  177. tau_biggz-0.1.3/tests/test_context.py +53 -0
  178. tau_biggz-0.1.3/tests/test_context_window.py +127 -0
  179. tau_biggz-0.1.3/tests/test_credentials.py +48 -0
  180. tau_biggz-0.1.3/tests/test_extensions.py +123 -0
  181. tau_biggz-0.1.3/tests/test_harness.py +141 -0
  182. tau_biggz-0.1.3/tests/test_models_sync.py +653 -0
  183. tau_biggz-0.1.3/tests/test_oauth.py +110 -0
  184. tau_biggz-0.1.3/tests/test_package_metadata.py +23 -0
  185. tau_biggz-0.1.3/tests/test_paths.py +41 -0
  186. tau_biggz-0.1.3/tests/test_prompt_templates.py +159 -0
  187. tau_biggz-0.1.3/tests/test_provider_add.py +77 -0
  188. tau_biggz-0.1.3/tests/test_provider_catalog.py +302 -0
  189. tau_biggz-0.1.3/tests/test_provider_config.py +1051 -0
  190. tau_biggz-0.1.3/tests/test_provider_runtime.py +116 -0
  191. tau_biggz-0.1.3/tests/test_rendering.py +131 -0
  192. tau_biggz-0.1.3/tests/test_resources.py +63 -0
  193. tau_biggz-0.1.3/tests/test_session.py +257 -0
  194. tau_biggz-0.1.3/tests/test_session_export.py +73 -0
  195. tau_biggz-0.1.3/tests/test_session_manager.py +163 -0
  196. tau_biggz-0.1.3/tests/test_shell_config.py +46 -0
  197. tau_biggz-0.1.3/tests/test_skills.py +208 -0
  198. tau_biggz-0.1.3/tests/test_system_prompt.py +132 -0
  199. tau_biggz-0.1.3/tests/test_tau_ai.py +1709 -0
  200. tau_biggz-0.1.3/tests/test_thinking.py +42 -0
  201. tau_biggz-0.1.3/tests/test_tui_adapter.py +325 -0
  202. tau_biggz-0.1.3/tests/test_tui_app.py +5565 -0
  203. tau_biggz-0.1.3/tests/test_tui_autocomplete.py +517 -0
  204. tau_biggz-0.1.3/tests/test_tui_config.py +166 -0
  205. tau_biggz-0.1.3/tests/test_update_check.py +285 -0
  206. tau_biggz-0.1.3/uv.lock +1058 -0
  207. tau_biggz-0.1.3/website/assets/css/main.css +681 -0
  208. tau_biggz-0.1.3/website/assets/js/nav-toggle.js +63 -0
  209. tau_biggz-0.1.3/website/content/_index.md +6 -0
  210. tau_biggz-0.1.3/website/content/concepts.md +75 -0
  211. tau_biggz-0.1.3/website/content/contributing.md +66 -0
  212. tau_biggz-0.1.3/website/content/guides/_index.md +8 -0
  213. tau_biggz-0.1.3/website/content/guides/context.md +78 -0
  214. tau_biggz-0.1.3/website/content/guides/print-mode.md +57 -0
  215. tau_biggz-0.1.3/website/content/guides/project-instructions.md +50 -0
  216. tau_biggz-0.1.3/website/content/guides/providers-and-models.md +170 -0
  217. tau_biggz-0.1.3/website/content/guides/sessions.md +89 -0
  218. tau_biggz-0.1.3/website/content/guides/skills-and-prompts.md +89 -0
  219. tau_biggz-0.1.3/website/content/guides/tui.md +93 -0
  220. tau_biggz-0.1.3/website/content/internals/_index.md +8 -0
  221. tau_biggz-0.1.3/website/content/internals/agent-loop.md +51 -0
  222. tau_biggz-0.1.3/website/content/internals/architecture.md +62 -0
  223. tau_biggz-0.1.3/website/content/internals/custom-frontend.md +108 -0
  224. tau_biggz-0.1.3/website/content/internals/design-principles.md +45 -0
  225. tau_biggz-0.1.3/website/content/quickstart.md +118 -0
  226. tau_biggz-0.1.3/website/content/reference/_index.md +8 -0
  227. tau_biggz-0.1.3/website/content/reference/cli.md +74 -0
  228. tau_biggz-0.1.3/website/content/reference/configuration.md +224 -0
  229. tau_biggz-0.1.3/website/content/reference/keybindings.md +50 -0
  230. tau_biggz-0.1.3/website/content/reference/slash-commands.md +39 -0
  231. tau_biggz-0.1.3/website/content/reference/tools.md +106 -0
  232. tau_biggz-0.1.3/website/content/releases.md +7 -0
  233. tau_biggz-0.1.3/website/content/what-is-tau.md +58 -0
  234. tau_biggz-0.1.3/website/content/why-tau.md +8 -0
  235. tau_biggz-0.1.3/website/data/sidebar.yaml +52 -0
  236. tau_biggz-0.1.3/website/hugo.toml +46 -0
  237. tau_biggz-0.1.3/website/layouts/404.html +16 -0
  238. tau_biggz-0.1.3/website/layouts/_default/baseof.html +18 -0
  239. tau_biggz-0.1.3/website/layouts/_default/releases.html +69 -0
  240. tau_biggz-0.1.3/website/layouts/_default/why-tau.html +205 -0
  241. tau_biggz-0.1.3/website/layouts/doc/single.html +17 -0
  242. tau_biggz-0.1.3/website/layouts/index.html +190 -0
  243. tau_biggz-0.1.3/website/layouts/partials/admonition.html +7 -0
  244. tau_biggz-0.1.3/website/layouts/partials/docs-prevnext.html +27 -0
  245. tau_biggz-0.1.3/website/layouts/partials/footer.html +14 -0
  246. tau_biggz-0.1.3/website/layouts/partials/head.html +52 -0
  247. tau_biggz-0.1.3/website/layouts/partials/navbar.html +26 -0
  248. tau_biggz-0.1.3/website/layouts/partials/sidebar.html +21 -0
  249. tau_biggz-0.1.3/website/layouts/shortcodes/caution.html +1 -0
  250. tau_biggz-0.1.3/website/layouts/shortcodes/note.html +1 -0
  251. tau_biggz-0.1.3/website/layouts/shortcodes/tip.html +1 -0
  252. tau_biggz-0.1.3/website/static/CNAME +1 -0
  253. tau_biggz-0.1.3/website/static/android-chrome-192x192.png +0 -0
  254. tau_biggz-0.1.3/website/static/android-chrome-512x512.png +0 -0
  255. tau_biggz-0.1.3/website/static/apple-touch-icon.png +0 -0
  256. tau_biggz-0.1.3/website/static/favicon-16x16.png +0 -0
  257. tau_biggz-0.1.3/website/static/favicon-32x32.png +0 -0
  258. tau_biggz-0.1.3/website/static/favicon.ico +0 -0
  259. tau_biggz-0.1.3/website/static/images/og-image.png +0 -0
  260. tau_biggz-0.1.3/website/static/landing.js +366 -0
  261. tau_biggz-0.1.3/website/static/site.webmanifest +11 -0
@@ -0,0 +1 @@
1
+ * @alejandro-ao
@@ -0,0 +1,70 @@
1
+ name: CI
2
+
3
+ on:
4
+ pull_request:
5
+ push:
6
+ branches:
7
+ - main
8
+ workflow_dispatch:
9
+
10
+ permissions:
11
+ contents: read
12
+
13
+ concurrency:
14
+ group: ci-${{ github.workflow }}-${{ github.ref }}
15
+ cancel-in-progress: true
16
+
17
+ jobs:
18
+ python:
19
+ name: Python checks
20
+ runs-on: ubuntu-latest
21
+ steps:
22
+ - name: Check out repository
23
+ uses: actions/checkout@v5
24
+
25
+ - name: Set up Python
26
+ uses: actions/setup-python@v6
27
+ with:
28
+ python-version-file: .python-version
29
+
30
+ - name: Set up uv
31
+ uses: astral-sh/setup-uv@v7
32
+ with:
33
+ enable-cache: true
34
+
35
+ - name: Install dependencies
36
+ run: uv sync --dev --locked
37
+
38
+ - name: Run tests
39
+ run: uv run pytest
40
+
41
+ - name: Run Ruff lint
42
+ run: uv run ruff check .
43
+
44
+ - name: Check formatting
45
+ run: uv run ruff format --check .
46
+
47
+ - name: Run mypy
48
+ run: uv run mypy
49
+
50
+ docs:
51
+ name: Documentation build
52
+ runs-on: ubuntu-latest
53
+ defaults:
54
+ run:
55
+ working-directory: website
56
+ steps:
57
+ - name: Check out repository
58
+ uses: actions/checkout@v5
59
+
60
+ - name: Setup Hugo
61
+ uses: peaceiris/actions-hugo@v3
62
+ with:
63
+ hugo-version: "0.152.2"
64
+ extended: true
65
+
66
+ - name: Build documentation
67
+ run: hugo --minify
68
+
69
+ - name: Build search index
70
+ run: npx --yes pagefind@latest --site public
@@ -0,0 +1,55 @@
1
+ name: Deploy documentation
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ workflow_dispatch:
8
+
9
+ permissions:
10
+ contents: read
11
+ pages: write
12
+ id-token: write
13
+
14
+ concurrency:
15
+ group: pages
16
+ cancel-in-progress: false
17
+
18
+ defaults:
19
+ run:
20
+ working-directory: website
21
+
22
+ jobs:
23
+ build:
24
+ runs-on: ubuntu-latest
25
+ steps:
26
+ - name: Checkout
27
+ uses: actions/checkout@v5
28
+
29
+ - name: Setup Hugo
30
+ uses: peaceiris/actions-hugo@v3
31
+ with:
32
+ hugo-version: "0.152.2"
33
+ extended: true
34
+
35
+ - name: Build documentation
36
+ run: hugo --minify
37
+
38
+ - name: Build search index
39
+ run: npx --yes pagefind@latest --site public
40
+
41
+ - name: Upload artifact
42
+ uses: actions/upload-pages-artifact@v4
43
+ with:
44
+ path: website/public
45
+
46
+ deploy:
47
+ environment:
48
+ name: github-pages
49
+ url: ${{ steps.deployment.outputs.page_url }}
50
+ runs-on: ubuntu-latest
51
+ needs: build
52
+ steps:
53
+ - name: Deploy to GitHub Pages
54
+ id: deployment
55
+ uses: actions/deploy-pages@v4
@@ -0,0 +1,28 @@
1
+ name: Publish Python package
2
+
3
+ on:
4
+ release:
5
+ types:
6
+ - published
7
+
8
+ permissions:
9
+ contents: read
10
+ id-token: write
11
+
12
+ jobs:
13
+ publish:
14
+ name: Publish to PyPI
15
+ runs-on: ubuntu-latest
16
+ environment: pypi
17
+ steps:
18
+ - name: Check out repository
19
+ uses: actions/checkout@v5
20
+
21
+ - name: Set up uv
22
+ uses: astral-sh/setup-uv@v7
23
+
24
+ - name: Build package
25
+ run: uv build
26
+
27
+ - name: Publish package
28
+ run: uv publish
@@ -0,0 +1,18 @@
1
+ # Python-generated files
2
+ __pycache__/
3
+ *.py[oc]
4
+ build/
5
+ dist/
6
+ wheels/
7
+ *.egg-info
8
+ .mypy_cache/
9
+
10
+ # Virtual environments
11
+ .venv
12
+
13
+ # Hugo docs site (website/)
14
+ website/public/
15
+ website/resources/
16
+ website/.hugo_build.lock
17
+ # Local Pi runtime state
18
+ .atl/
@@ -0,0 +1 @@
1
+ 3.12
@@ -0,0 +1,177 @@
1
+ ---
2
+ name: skill-creator
3
+ description: "Trigger: create skill, new skill, crear skill, make extension, new extension, crear extension, make harness, new harness, custom harness, crear harness. Creates Tau skills, extensions, or harnesses after exploring project context, Tau architecture, and relevant references."
4
+ ---
5
+
6
+ ## Activation Contract
7
+
8
+ Use this workflow when the user asks to **create a new skill, extension, or harness** for Tau.
9
+
10
+ Tau has three artifact types you can create:
11
+
12
+ | Artifact | Format | Location | Purpose |
13
+ |----------|--------|----------|---------|
14
+ | **Skill** | `.md` with frontmatter | `.tau/skills/<name>/SKILL.md` or `~/.tau/skills/<name>/SKILL.md` | Markdown instructions the agent loads via `/skill:<name>` |
15
+ | **Extension** | `.py` (extension class) | `.tau/extensions/<name>.py` or `~/.tau/extensions/<name>.py` | Python code with `@tool`, `@command`, `@on` decorators |
16
+ | **Harness** | `.toml` | `.tau/harnesses/<name>.toml` or `~/.tau/harnesses/<name>.toml` | TOML config for personality, tools, approval, subagents |
17
+
18
+ ## Hard Rules
19
+
20
+ 1. **ALWAYS explore before creating** — never jump to implementation without context.
21
+ 2. Follow the exploration order: project → Tau architecture → web references.
22
+ 3. After exploring, present a plan to the user before writing files.
23
+ 4. Reference existing examples when creating new artifacts.
24
+ 5. Validate syntax after creation (ruff for .py, tomllib for .toml, frontmatter parse for .md).
25
+
26
+ ## Exploration Phase (MANDATORY)
27
+
28
+ ### Step 1 — Explore the project
29
+
30
+ Read project context to understand naming, conventions, and existing patterns:
31
+
32
+ - `AGENTS.md` or project README for guidelines
33
+ - Existing skills (`ls .tau/skills/`, `ls ~/.tau/skills/`)
34
+ - Existing extensions (`ls .tau/extensions/`, `ls ~/.tau/extensions/`, `ls example_extensions/`)
35
+ - Existing harnesses (`ls .tau/harnesses/`, `ls ~/.tau/harnesses/`)
36
+ - `pyproject.toml` for project metadata
37
+
38
+ ### Step 2 — Explore Tau's architecture
39
+
40
+ Read the relevant source files to understand the API:
41
+
42
+ **For skills**:
43
+ - `src/tau_coding/skills.py` — Skill dataclass, load/expand/format
44
+ - `src/tau_coding/resources.py` — `parse_markdown_resource()` for frontmatter format
45
+
46
+ **For extensions**:
47
+ - `src/tau_coding/extensions.py` — Extension base class, @tool/@command/@on decorators
48
+ - `src/tau_coding/tools.py` — `_wrap_tool_with_events()` for event dispatch
49
+ - Existing examples in `example_extensions/`
50
+
51
+ **For harnesses**:
52
+ - `src/tau_coding/harness.py` — HarnessDefinition, _parse_harness_file()
53
+ - `dev-notes/harnesses.md` — full harness guide
54
+ - Existing examples in `.tau/harnesses/` or `~/.tau/harnesses/`
55
+
56
+ ### Step 3 — Search the web (when relevant)
57
+
58
+ When the skill, extension, or harness wraps or integrates an external service, search for:
59
+ - API documentation
60
+ - Best practices
61
+ - Python client libraries
62
+ - Security considerations
63
+
64
+ ## Execution Steps
65
+
66
+ ### Creating a Skill
67
+
68
+ 1. Choose a kebab-case name that matches the user-facing trigger.
69
+ 2. Create `.tau/skills/<name>/SKILL.md` (project) or `~/.tau/skills/<name>/SKILL.md` (user):
70
+
71
+ ```markdown
72
+ ---
73
+ name: <skill-name>
74
+ description: "Trigger: {trigger phrases}. {One-line summary}."
75
+ ---
76
+
77
+ ## Activation Contract
78
+
79
+ When to use this skill...
80
+
81
+ ## Hard Rules
82
+
83
+ Non-negotiable constraints...
84
+
85
+ ## Execution Steps
86
+
87
+ 1. First step...
88
+ 2. Second step...
89
+
90
+ ## Output Contract
91
+
92
+ What this skill produces.
93
+ ```
94
+
95
+ 3. Frontmatter rules:
96
+ - `name` matches the directory name
97
+ - `description` is one line with trigger words first
98
+ - Only simple `key: value` pairs (Tau's parser is minimal)
99
+ 4. Verify: create a test invocation with `python -c "from tau_coding.skills import load_skills; skills = load_skills(); assert any(s.name == '<name>' for s in skills)"`
100
+
101
+ ### Creating an Extension
102
+
103
+ 1. Choose a PascalCase class name and a kebab-case file name.
104
+ 2. Create `.tau/extensions/<name>.py` (project) or `~/.tau/extensions/<name>.py` (user):
105
+
106
+ ```python
107
+ """Docstring describing the extension."""
108
+
109
+ from tau_coding.extensions import Extension, tool, command, on
110
+
111
+
112
+ class <Name>Extension(Extension):
113
+ @tool("<tool_name>", "<Tool description>")
114
+ def <method_name>(self, <params>) -> <return_type>:
115
+ \"\"\"Docstring.\"\"\"
116
+ ...
117
+
118
+ @command("<cmd_name>", description="<description>")
119
+ def <method_name>(self, args: str) -> str | None:
120
+ ...
121
+ return ...
122
+
123
+ @on("<event_name>")
124
+ def <method_name>(self, event: dict) -> dict | None:
125
+ ...
126
+ return None # or {"block": True, "reason": "..."}
127
+ ```
128
+
129
+ 3. Follow the existing patterns in `example_extensions/hello_ext.py` and `example_extensions/greeting_ext.py`.
130
+ 4. Verify: `uv run ruff check .tau/extensions/<name>.py` and test loading with:
131
+
132
+ ```python
133
+ from tau_coding.extensions import ExtensionRegistry
134
+ from pathlib import Path
135
+ reg = ExtensionRegistry()
136
+ reg.add_search_path(Path(".tau/extensions"))
137
+ instances = reg.load_all()
138
+ assert any("<name>" in i.path for i in instances)
139
+ ```
140
+
141
+ ### Creating a Harness
142
+
143
+ 1. Choose a short name (one word, kebab-case).
144
+ 2. Create `.tau/harnesses/<name>.toml` (project) or `~/.tau/harnesses/<name>.toml` (user):
145
+
146
+ ```toml
147
+ name = "<name>"
148
+ description = "<One-line description>"
149
+
150
+ [personality]
151
+ system_prompt = "You are..."
152
+
153
+ [tools]
154
+ builtin = ["read", "write", "edit", "bash"]
155
+
156
+ [approval]
157
+ default = "allow"
158
+
159
+ [approval.rules]
160
+ bash = "deny"
161
+
162
+ [[subagents]]
163
+ name = "<agent-name>"
164
+ instructions = "<agent instructions>"
165
+ tools = ["read"]
166
+ ```
167
+
168
+ 3. Supported sections: `name`, `description`, `[personality]` (system_prompt, guidelines), `[provider]` (name, model, thinking), `[tools]` (builtin, extensions), `[approval]` (default, rules), `[[subagents]]` (name, instructions, tools).
169
+ 4. Verify: `python -c "from tau_coding.harness import load_harness; h = load_harness('<name>'); print(f'OK: {h.name}')"` and `python -c "import tomllib; tomllib.loads(open('.tau/harnesses/<name>.toml').read()); print('TOML OK')"`
170
+
171
+ ## Output Contract
172
+
173
+ After completing, report:
174
+ - What was created (skill/extension/harness) and its path
175
+ - Key sections or decorators used
176
+ - Verification results (parsing, loading, syntax checks)
177
+ - How to invoke/use it (`/skill:<name>`, runs automatically, `tau --harness <name>`)
@@ -0,0 +1,81 @@
1
+ # Tau Agent Instructions
2
+
3
+ Tau is a Python implementation of Pi's minimalist coding-agent harness architecture. The goal is to develop it incrementally, with each phase clearly documented and tested.
4
+
5
+ ## Project Roadmap
6
+
7
+ The implementation roadmap is tracked in GitHub issue #1:
8
+
9
+ - https://github.com/alejandro-ao/tau/issues/1
10
+
11
+ Use that issue as the primary reference for phase ordering and architectural intent.
12
+
13
+ ## Architecture Principles
14
+
15
+ Preserve Pi's core separation of concerns:
16
+
17
+ ```text
18
+ AgentHarness = reusable agent brain
19
+ AgentSession = coding-agent environment
20
+ TUI = one possible frontend
21
+ ```
22
+
23
+ Tau should be organized around these layers:
24
+
25
+ ```text
26
+ tau_ai provider/model streaming layer
27
+ tau_agent portable agent harness, loop, tools, events, sessions
28
+ tau_coding CLI app, resources, skills, extensions, commands, TUI integration
29
+ ```
30
+
31
+ Keep the core agent package independent of CLI, Textual, Rich rendering, session file locations, and application-specific resource loading.
32
+
33
+ ## TUI Direction
34
+
35
+ Use Textual for the full interactive TUI, but only behind an adapter boundary. The agent harness should emit events; UI layers should consume those events.
36
+
37
+ Early phases should prioritize:
38
+
39
+ 1. print-mode CLI
40
+ 2. Rich renderers
41
+ 3. Textual interactive app
42
+
43
+ Do not let Textual become a dependency of the reusable agent harness.
44
+
45
+ ## Development Workflow
46
+
47
+ - Work in small, documented phases.
48
+ - Keep changes aligned with the roadmap issue.
49
+ - Add or update docs when introducing architectural concepts.
50
+ - Add tests for behavior before expanding features.
51
+ - Run tests and Python commands through `uv` (for example, `uv run pytest` or `uv run python ...`) so they use the project environment.
52
+ - Prefer simple, explicit abstractions over framework-heavy designs.
53
+ - Keep commits atomic: one coherent feature, fix, docs update, refactor, or cleanup per commit.
54
+
55
+ ## GitHub Issue and PR Formatting
56
+
57
+ - When creating or editing GitHub issues and pull requests from the CLI, write multiline Markdown bodies through a temporary file or heredoc and pass them with `--body-file`.
58
+ - Do not pass escaped newlines like `\n` inside quoted `--body` strings; GitHub will render them literally instead of as line breaks.
59
+ - Use Markdown headings, blank lines, bullets, and backticks for commands/paths so issue and PR descriptions are readable.
60
+ - After creating or editing a GitHub issue or PR body, verify the rendered source with `gh issue view ... --json body` or `gh pr view ... --json body` when practical.
61
+
62
+ ## Python Guidelines
63
+
64
+ - Target the Python version declared in `pyproject.toml`.
65
+ - Prefer typed dataclasses or schema models for core messages, events, tools, and sessions.
66
+ - Keep async boundaries explicit.
67
+ - Use fake providers and fake tools for deterministic agent-loop tests.
68
+ - Avoid provider-specific assumptions in core agent code.
69
+
70
+ ## Documentation Expectations
71
+
72
+ Each substantial phase should leave behind beginner-friendly notes under `dev-notes/` (build journals, design docs, ADRs), explaining:
73
+
74
+ - what was added
75
+ - why it exists
76
+ - how it maps to Pi's design
77
+ - how to test or use it
78
+
79
+ When a phase adds or changes user-facing behavior, also update the published docs
80
+ under `website/src/content/docs/` (the "Use Tau" guides and reference).
81
+
@@ -0,0 +1,145 @@
1
+ # Contributing to Tau
2
+
3
+ Thanks for helping improve Tau. Tau is both a usable terminal coding agent and a teaching codebase for understanding how coding agents are built. Contributions should preserve that dual purpose: make the tool better while keeping the architecture small, readable, and easy to learn from.
4
+
5
+ ## Project philosophy
6
+
7
+ Tau is organized around three layers:
8
+
9
+ ```text
10
+ tau_ai provider/model streaming layer
11
+ tau_agent portable agent harness, loop, tools, events, sessions
12
+ tau_coding CLI app, resources, skills, extensions, commands, TUI integration
13
+ ```
14
+
15
+ The key boundary is:
16
+
17
+ ```text
18
+ AgentHarness = reusable agent brain
19
+ AgentSession = coding-agent environment
20
+ TUI = one possible frontend
21
+ ```
22
+
23
+ Please keep these principles in mind:
24
+
25
+ - **Small layers beat magic.** Each package should have one clear job.
26
+ - **Events are the contract.** The harness emits typed events; UI and renderers consume them.
27
+ - **The core stays portable.** `tau_agent` should not depend on the CLI, Textual, Rich, local config paths, or Tau-specific resource loading.
28
+ - **Tools are ordinary typed functions.** Prefer explicit schemas and structured results.
29
+ - **Sessions are durable and inspectable.** Avoid changes that make history hard to read, resume, or export.
30
+ - **Documentation follows implementation.** User-facing behavior and architectural decisions should be documented.
31
+
32
+ ## Local development
33
+
34
+ Use `uv` for Python commands so they run in the project environment.
35
+
36
+ ```bash
37
+ uv sync --dev
38
+ uv run tau --version
39
+ ```
40
+
41
+ Run Tau from the checkout:
42
+
43
+ ```bash
44
+ uv run tau
45
+ uv run tau -p "explain this repo"
46
+ ```
47
+
48
+ ## Checks before submitting
49
+
50
+ Run the relevant focused tests while developing, then run the full checks before opening a pull request when practical:
51
+
52
+ ```bash
53
+ uv run pytest
54
+ uv run ruff check .
55
+ uv run ruff format --check .
56
+ uv run mypy
57
+ ```
58
+
59
+ For the documentation site (a [Hugo](https://gohugo.io/) project):
60
+
61
+ ```bash
62
+ cd website
63
+ hugo server -D
64
+ hugo --minify
65
+ ```
66
+
67
+ ## Where changes belong
68
+
69
+ Use the layer boundaries to decide where code should live:
70
+
71
+ - Provider integrations, model adapters, and provider-neutral streaming belong in `tau_ai`.
72
+ - Agent loop behavior, tool abstractions, events, messages, harnesses, and portable session primitives belong in `tau_agent`.
73
+ - CLI behavior, slash commands, TUI integration, local config, resources, skills, prompt templates, and coding-specific tools belong in `tau_coding`.
74
+ - Textual-specific code should stay behind the TUI layer.
75
+ - Rich rendering should not leak into the reusable agent harness.
76
+
77
+ If a change crosses layers, prefer adding a small typed boundary instead of importing app-specific details into core code.
78
+
79
+ ## Adding a provider or model
80
+
81
+ The built-in provider catalog is data, not code: edit
82
+ `src/tau_coding/data/catalog.toml` and open a PR — no Python changes needed.
83
+ Each `[[providers]]` table declares the provider's name, kind
84
+ (`openai-compatible`, `anthropic`, or `openai-codex`), base URL, models,
85
+ default model, context windows, and thinking configuration. Validation happens
86
+ at load time, so a typo fails tests with a pointed error message.
87
+
88
+ For personal or unreleased providers, create `~/.tau/catalog.toml` with the
89
+ same schema — it is overlaid on the built-in catalog (your values win, models
90
+ are unioned) and needs no PR at all.
91
+
92
+ ## Testing expectations
93
+
94
+ - Add or update tests for behavior changes.
95
+ - Use fake providers and fake tools for deterministic agent-loop tests.
96
+ - Keep core tests free of provider-specific assumptions.
97
+ - Add regression tests for bugs.
98
+ - Prefer focused tests that describe the behavior being protected.
99
+
100
+ ## Documentation expectations
101
+
102
+ For substantial architectural or phase-oriented work, add beginner-friendly notes under `dev-notes/` explaining:
103
+
104
+ - what changed
105
+ - why it exists
106
+ - how it maps to Tau's architecture
107
+ - how to test or use it
108
+
109
+ For user-facing behavior, update the published docs under:
110
+
111
+ ```text
112
+ website/src/content/docs/
113
+ ```
114
+
115
+ ## Release process
116
+
117
+ Tau is published to PyPI as `tau-ai`. Publishing is a production release action,
118
+ not a side effect of every commit merged to `main`.
119
+
120
+ To prepare a release, intentionally bump `[project].version` in `pyproject.toml`
121
+ and merge that change through a pull request. The PyPI workflow publishes only
122
+ when it detects that version change, or when a maintainer uses an explicit
123
+ release trigger such as a published GitHub Release or manual workflow dispatch.
124
+ See [dev-notes/release-process.md](dev-notes/release-process.md) for the full
125
+ process.
126
+
127
+ ## Pull request guidelines
128
+
129
+ Good Tau pull requests are small, focused, and easy to review. Please include:
130
+
131
+ - the motivation for the change
132
+ - a summary of behavior changes
133
+ - tests or checks you ran
134
+ - screenshots or terminal output for TUI/CLI changes when useful
135
+ - notes about compatibility, migrations, config changes, or provider-specific behavior
136
+
137
+ Avoid unrelated refactors in feature or bug-fix PRs. If a larger design change is needed, open an issue or discussion first.
138
+
139
+ ## Roadmap alignment
140
+
141
+ Tau is developed incrementally. For larger changes, check the roadmap issue before starting:
142
+
143
+ <https://github.com/alejandro-ao/tau/issues/1>
144
+
145
+ When in doubt, favor the smallest step that preserves the architecture and teaches the design clearly.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Alejandro AO
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.