ww-agentic-workflows 1.0.0.dev3__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 (371) hide show
  1. ww_agentic_workflows-1.0.0.dev3/.claude/settings.json +48 -0
  2. ww_agentic_workflows-1.0.0.dev3/.claude/skills/noww/SKILL.md +11 -0
  3. ww_agentic_workflows-1.0.0.dev3/.claude/skills/update-architecture-documentation/SKILL.md +19 -0
  4. ww_agentic_workflows-1.0.0.dev3/.claude/skills/ww/SKILL.md +59 -0
  5. ww_agentic_workflows-1.0.0.dev3/.codex/hooks.json +59 -0
  6. ww_agentic_workflows-1.0.0.dev3/.codex/skills/noww/SKILL.md +11 -0
  7. ww_agentic_workflows-1.0.0.dev3/.codex/skills/update-architecture-documentation/SKILL.md +19 -0
  8. ww_agentic_workflows-1.0.0.dev3/.codex/skills/ww/SKILL.md +34 -0
  9. ww_agentic_workflows-1.0.0.dev3/.git-blame-ignore-revs +2 -0
  10. ww_agentic_workflows-1.0.0.dev3/.githooks/pre-commit +3 -0
  11. ww_agentic_workflows-1.0.0.dev3/.github/ISSUE_TEMPLATE/bug_report.yml +84 -0
  12. ww_agentic_workflows-1.0.0.dev3/.github/ISSUE_TEMPLATE/config.yml +8 -0
  13. ww_agentic_workflows-1.0.0.dev3/.github/ISSUE_TEMPLATE/feature_request.yml +38 -0
  14. ww_agentic_workflows-1.0.0.dev3/.github/PULL_REQUEST_TEMPLATE.md +23 -0
  15. ww_agentic_workflows-1.0.0.dev3/.github/workflows/dev-publish.yml +56 -0
  16. ww_agentic_workflows-1.0.0.dev3/.github/workflows/release-gates.yml +43 -0
  17. ww_agentic_workflows-1.0.0.dev3/.gitignore +19 -0
  18. ww_agentic_workflows-1.0.0.dev3/AGENTS.md +11 -0
  19. ww_agentic_workflows-1.0.0.dev3/CHANGELOG.md +744 -0
  20. ww_agentic_workflows-1.0.0.dev3/CLAUDE.md +1 -0
  21. ww_agentic_workflows-1.0.0.dev3/CODE_OF_CONDUCT.md +138 -0
  22. ww_agentic_workflows-1.0.0.dev3/CONTRIBUTING.md +228 -0
  23. ww_agentic_workflows-1.0.0.dev3/LICENSE +674 -0
  24. ww_agentic_workflows-1.0.0.dev3/PKG-INFO +690 -0
  25. ww_agentic_workflows-1.0.0.dev3/README.md +652 -0
  26. ww_agentic_workflows-1.0.0.dev3/SECURITY.md +69 -0
  27. ww_agentic_workflows-1.0.0.dev3/WW_AGENT_INSTRUCTIONS.md +49 -0
  28. ww_agentic_workflows-1.0.0.dev3/documentation/agent-hooks.md +270 -0
  29. ww_agentic_workflows-1.0.0.dev3/documentation/architecture.md +1894 -0
  30. ww_agentic_workflows-1.0.0.dev3/documentation/development-releases.md +97 -0
  31. ww_agentic_workflows-1.0.0.dev3/documentation/examples.md +879 -0
  32. ww_agentic_workflows-1.0.0.dev3/documentation/features.md +4639 -0
  33. ww_agentic_workflows-1.0.0.dev3/documentation/limitations.md +168 -0
  34. ww_agentic_workflows-1.0.0.dev3/documentation/python-agent-rules.md +105 -0
  35. ww_agentic_workflows-1.0.0.dev3/documentation/specification.md +1876 -0
  36. ww_agentic_workflows-1.0.0.dev3/documentation/todo.md +33 -0
  37. ww_agentic_workflows-1.0.0.dev3/ext/ww/git/extension.py +1728 -0
  38. ww_agentic_workflows-1.0.0.dev3/pyproject.toml +89 -0
  39. ww_agentic_workflows-1.0.0.dev3/scripts/check_distribution.py +177 -0
  40. ww_agentic_workflows-1.0.0.dev3/scripts/check_release_gates.py +50 -0
  41. ww_agentic_workflows-1.0.0.dev3/scripts/demo.sh +113 -0
  42. ww_agentic_workflows-1.0.0.dev3/scripts/ensure_spdx_license.py +222 -0
  43. ww_agentic_workflows-1.0.0.dev3/scripts/measure_pages.py +110 -0
  44. ww_agentic_workflows-1.0.0.dev3/scripts/run_workflow_dummy.py +83 -0
  45. ww_agentic_workflows-1.0.0.dev3/scripts/set_dev_version.py +50 -0
  46. ww_agentic_workflows-1.0.0.dev3/scripts/test +86 -0
  47. ww_agentic_workflows-1.0.0.dev3/src/ww/__init__.py +18 -0
  48. ww_agentic_workflows-1.0.0.dev3/src/ww/action_execution.py +887 -0
  49. ww_agentic_workflows-1.0.0.dev3/src/ww/actions/__init__.py +94 -0
  50. ww_agentic_workflows-1.0.0.dev3/src/ww/actions/command.py +444 -0
  51. ww_agentic_workflows-1.0.0.dev3/src/ww/actions/contracts.py +699 -0
  52. ww_agentic_workflows-1.0.0.dev3/src/ww/actions/extension.py +197 -0
  53. ww_agentic_workflows-1.0.0.dev3/src/ww/actions/mcp.py +84 -0
  54. ww_agentic_workflows-1.0.0.dev3/src/ww/actions/prompt.py +74 -0
  55. ww_agentic_workflows-1.0.0.dev3/src/ww/actions/skill.py +62 -0
  56. ww_agentic_workflows-1.0.0.dev3/src/ww/actions/slash_command.py +63 -0
  57. ww_agentic_workflows-1.0.0.dev3/src/ww/agents.py +151 -0
  58. ww_agentic_workflows-1.0.0.dev3/src/ww/amendments.py +54 -0
  59. ww_agentic_workflows-1.0.0.dev3/src/ww/artifacts.py +93 -0
  60. ww_agentic_workflows-1.0.0.dev3/src/ww/assessments.py +181 -0
  61. ww_agentic_workflows-1.0.0.dev3/src/ww/assets/__init__.py +2 -0
  62. ww_agentic_workflows-1.0.0.dev3/src/ww/assets/agent_instructions.md +49 -0
  63. ww_agentic_workflows-1.0.0.dev3/src/ww/assets/noww_skill.md +11 -0
  64. ww_agentic_workflows-1.0.0.dev3/src/ww/assets/workflows/catchall.yaml +26 -0
  65. ww_agentic_workflows-1.0.0.dev3/src/ww/assets/workflows/onboarding.yaml +586 -0
  66. ww_agentic_workflows-1.0.0.dev3/src/ww/assets/workflows/scriptize.yaml +130 -0
  67. ww_agentic_workflows-1.0.0.dev3/src/ww/assets/ww-automate_skill.md +23 -0
  68. ww_agentic_workflows-1.0.0.dev3/src/ww/assets/ww-deduce-feedback_skill.md +38 -0
  69. ww_agentic_workflows-1.0.0.dev3/src/ww/assets/ww-feedback-rules_skill.md +48 -0
  70. ww_agentic_workflows-1.0.0.dev3/src/ww/assets/ww-learn-project_skill.md +22 -0
  71. ww_agentic_workflows-1.0.0.dev3/src/ww/assets/ww-refresh_skill.md +26 -0
  72. ww_agentic_workflows-1.0.0.dev3/src/ww/assets/ww-rule_skill.md +83 -0
  73. ww_agentic_workflows-1.0.0.dev3/src/ww/assets/ww-rules-from-artifacts_skill.md +22 -0
  74. ww_agentic_workflows-1.0.0.dev3/src/ww/assets/ww-scriptize_skill.md +33 -0
  75. ww_agentic_workflows-1.0.0.dev3/src/ww/assets/ww-setup_skill.md +94 -0
  76. ww_agentic_workflows-1.0.0.dev3/src/ww/assets/ww-solve_skill.md +23 -0
  77. ww_agentic_workflows-1.0.0.dev3/src/ww/assets/ww-suggest_skill.md +32 -0
  78. ww_agentic_workflows-1.0.0.dev3/src/ww/assets/ww-wizard_skill.md +105 -0
  79. ww_agentic_workflows-1.0.0.dev3/src/ww/assets/ww_skill.md +59 -0
  80. ww_agentic_workflows-1.0.0.dev3/src/ww/assignments.py +283 -0
  81. ww_agentic_workflows-1.0.0.dev3/src/ww/bootstrap.py +405 -0
  82. ww_agentic_workflows-1.0.0.dev3/src/ww/builtin_workflows.py +215 -0
  83. ww_agentic_workflows-1.0.0.dev3/src/ww/changes.py +225 -0
  84. ww_agentic_workflows-1.0.0.dev3/src/ww/child_coordination.py +482 -0
  85. ww_agentic_workflows-1.0.0.dev3/src/ww/children.py +106 -0
  86. ww_agentic_workflows-1.0.0.dev3/src/ww/claude_permissions.py +115 -0
  87. ww_agentic_workflows-1.0.0.dev3/src/ww/cli/__init__.py +7 -0
  88. ww_agentic_workflows-1.0.0.dev3/src/ww/cli/__main__.py +6 -0
  89. ww_agentic_workflows-1.0.0.dev3/src/ww/cli/audit.py +129 -0
  90. ww_agentic_workflows-1.0.0.dev3/src/ww/cli/catalogs.py +131 -0
  91. ww_agentic_workflows-1.0.0.dev3/src/ww/cli/discover.py +607 -0
  92. ww_agentic_workflows-1.0.0.dev3/src/ww/cli/initialization.py +898 -0
  93. ww_agentic_workflows-1.0.0.dev3/src/ww/cli/lookup.py +287 -0
  94. ww_agentic_workflows-1.0.0.dev3/src/ww/cli/main.py +1768 -0
  95. ww_agentic_workflows-1.0.0.dev3/src/ww/cli/parser.py +1200 -0
  96. ww_agentic_workflows-1.0.0.dev3/src/ww/cli/prompts.py +217 -0
  97. ww_agentic_workflows-1.0.0.dev3/src/ww/cli/updates.py +117 -0
  98. ww_agentic_workflows-1.0.0.dev3/src/ww/completion_artifacts.py +156 -0
  99. ww_agentic_workflows-1.0.0.dev3/src/ww/completion_inputs.py +39 -0
  100. ww_agentic_workflows-1.0.0.dev3/src/ww/config/__init__.py +582 -0
  101. ww_agentic_workflows-1.0.0.dev3/src/ww/config/actions.py +591 -0
  102. ww_agentic_workflows-1.0.0.dev3/src/ww/config/composition.py +571 -0
  103. ww_agentic_workflows-1.0.0.dev3/src/ww/config/rules.py +511 -0
  104. ww_agentic_workflows-1.0.0.dev3/src/ww/config/steps.py +1220 -0
  105. ww_agentic_workflows-1.0.0.dev3/src/ww/config/values.py +223 -0
  106. ww_agentic_workflows-1.0.0.dev3/src/ww/config_files.py +191 -0
  107. ww_agentic_workflows-1.0.0.dev3/src/ww/config_writes.py +264 -0
  108. ww_agentic_workflows-1.0.0.dev3/src/ww/contracts.py +155 -0
  109. ww_agentic_workflows-1.0.0.dev3/src/ww/control.py +41 -0
  110. ww_agentic_workflows-1.0.0.dev3/src/ww/defaults.py +130 -0
  111. ww_agentic_workflows-1.0.0.dev3/src/ww/design_docs.py +32 -0
  112. ww_agentic_workflows-1.0.0.dev3/src/ww/discovery.py +104 -0
  113. ww_agentic_workflows-1.0.0.dev3/src/ww/documents.py +217 -0
  114. ww_agentic_workflows-1.0.0.dev3/src/ww/errors.py +18 -0
  115. ww_agentic_workflows-1.0.0.dev3/src/ww/executable.py +43 -0
  116. ww_agentic_workflows-1.0.0.dev3/src/ww/execution_models/__init__.py +64 -0
  117. ww_agentic_workflows-1.0.0.dev3/src/ww/execution_models/construction.py +148 -0
  118. ww_agentic_workflows-1.0.0.dev3/src/ww/execution_models/decoding.py +38 -0
  119. ww_agentic_workflows-1.0.0.dev3/src/ww/execution_models/plan_codec.py +565 -0
  120. ww_agentic_workflows-1.0.0.dev3/src/ww/execution_models/records.py +1206 -0
  121. ww_agentic_workflows-1.0.0.dev3/src/ww/execution_models/runs.py +266 -0
  122. ww_agentic_workflows-1.0.0.dev3/src/ww/extensions/__init__.py +40 -0
  123. ww_agentic_workflows-1.0.0.dev3/src/ww/extensions/api.py +559 -0
  124. ww_agentic_workflows-1.0.0.dev3/src/ww/extensions/registry.py +864 -0
  125. ww_agentic_workflows-1.0.0.dev3/src/ww/extensions/store.py +78 -0
  126. ww_agentic_workflows-1.0.0.dev3/src/ww/feedback.py +342 -0
  127. ww_agentic_workflows-1.0.0.dev3/src/ww/handler_repairs.py +57 -0
  128. ww_agentic_workflows-1.0.0.dev3/src/ww/hooks/__init__.py +40 -0
  129. ww_agentic_workflows-1.0.0.dev3/src/ww/hooks/agents.py +380 -0
  130. ww_agentic_workflows-1.0.0.dev3/src/ww/hooks/install.py +168 -0
  131. ww_agentic_workflows-1.0.0.dev3/src/ww/hooks/notices.py +206 -0
  132. ww_agentic_workflows-1.0.0.dev3/src/ww/hooks/records.py +209 -0
  133. ww_agentic_workflows-1.0.0.dev3/src/ww/hooks/runtime.py +266 -0
  134. ww_agentic_workflows-1.0.0.dev3/src/ww/hooks/transcripts.py +183 -0
  135. ww_agentic_workflows-1.0.0.dev3/src/ww/inspect.py +896 -0
  136. ww_agentic_workflows-1.0.0.dev3/src/ww/instructions/__init__.py +17 -0
  137. ww_agentic_workflows-1.0.0.dev3/src/ww/instructions/builder.py +1682 -0
  138. ww_agentic_workflows-1.0.0.dev3/src/ww/instructions/commands.py +335 -0
  139. ww_agentic_workflows-1.0.0.dev3/src/ww/instructions/handoff.py +149 -0
  140. ww_agentic_workflows-1.0.0.dev3/src/ww/instructions/models.py +686 -0
  141. ww_agentic_workflows-1.0.0.dev3/src/ww/instructions/policy.py +219 -0
  142. ww_agentic_workflows-1.0.0.dev3/src/ww/instructions/text.py +168 -0
  143. ww_agentic_workflows-1.0.0.dev3/src/ww/interactions.py +187 -0
  144. ww_agentic_workflows-1.0.0.dev3/src/ww/interpolation.py +37 -0
  145. ww_agentic_workflows-1.0.0.dev3/src/ww/item_passes.py +167 -0
  146. ww_agentic_workflows-1.0.0.dev3/src/ww/items.py +99 -0
  147. ww_agentic_workflows-1.0.0.dev3/src/ww/locking.py +207 -0
  148. ww_agentic_workflows-1.0.0.dev3/src/ww/metadata_publication.py +230 -0
  149. ww_agentic_workflows-1.0.0.dev3/src/ww/onboarding.py +229 -0
  150. ww_agentic_workflows-1.0.0.dev3/src/ww/open_work.py +236 -0
  151. ww_agentic_workflows-1.0.0.dev3/src/ww/operations.py +193 -0
  152. ww_agentic_workflows-1.0.0.dev3/src/ww/operator_ui/__init__.py +16 -0
  153. ww_agentic_workflows-1.0.0.dev3/src/ww/operator_ui/page.html +351 -0
  154. ww_agentic_workflows-1.0.0.dev3/src/ww/operator_ui/server.py +215 -0
  155. ww_agentic_workflows-1.0.0.dev3/src/ww/operator_ui/session.py +389 -0
  156. ww_agentic_workflows-1.0.0.dev3/src/ww/operator_ui/sheet.py +104 -0
  157. ww_agentic_workflows-1.0.0.dev3/src/ww/operator_ui/view.py +109 -0
  158. ww_agentic_workflows-1.0.0.dev3/src/ww/output.py +339 -0
  159. ww_agentic_workflows-1.0.0.dev3/src/ww/output_adapters/__init__.py +12 -0
  160. ww_agentic_workflows-1.0.0.dev3/src/ww/output_adapters/base.py +25 -0
  161. ww_agentic_workflows-1.0.0.dev3/src/ww/output_adapters/json_adapter.py +37 -0
  162. ww_agentic_workflows-1.0.0.dev3/src/ww/output_adapters/markdown.py +2293 -0
  163. ww_agentic_workflows-1.0.0.dev3/src/ww/output_adapters/rule_pages.py +337 -0
  164. ww_agentic_workflows-1.0.0.dev3/src/ww/output_adapters/terminal.py +21 -0
  165. ww_agentic_workflows-1.0.0.dev3/src/ww/package_updates.py +167 -0
  166. ww_agentic_workflows-1.0.0.dev3/src/ww/plan/__init__.py +38 -0
  167. ww_agentic_workflows-1.0.0.dev3/src/ww/plan/actions.py +207 -0
  168. ww_agentic_workflows-1.0.0.dev3/src/ww/plan/compiler.py +1492 -0
  169. ww_agentic_workflows-1.0.0.dev3/src/ww/plan/constructs.py +456 -0
  170. ww_agentic_workflows-1.0.0.dev3/src/ww/plan/models.py +665 -0
  171. ww_agentic_workflows-1.0.0.dev3/src/ww/project_config.py +752 -0
  172. ww_agentic_workflows-1.0.0.dev3/src/ww/recovery.py +401 -0
  173. ww_agentic_workflows-1.0.0.dev3/src/ww/replanning.py +367 -0
  174. ww_agentic_workflows-1.0.0.dev3/src/ww/results.py +77 -0
  175. ww_agentic_workflows-1.0.0.dev3/src/ww/rule_checks.py +230 -0
  176. ww_agentic_workflows-1.0.0.dev3/src/ww/rule_conversion.py +331 -0
  177. ww_agentic_workflows-1.0.0.dev3/src/ww/rule_disputes.py +148 -0
  178. ww_agentic_workflows-1.0.0.dev3/src/ww/rule_store.py +456 -0
  179. ww_agentic_workflows-1.0.0.dev3/src/ww/rule_verification.py +714 -0
  180. ww_agentic_workflows-1.0.0.dev3/src/ww/rule_views.py +447 -0
  181. ww_agentic_workflows-1.0.0.dev3/src/ww/rule_writes.py +920 -0
  182. ww_agentic_workflows-1.0.0.dev3/src/ww/run_coordination.py +158 -0
  183. ww_agentic_workflows-1.0.0.dev3/src/ww/runtimes.py +105 -0
  184. ww_agentic_workflows-1.0.0.dev3/src/ww/service.py +4405 -0
  185. ww_agentic_workflows-1.0.0.dev3/src/ww/setup_apply.py +428 -0
  186. ww_agentic_workflows-1.0.0.dev3/src/ww/step_values.py +20 -0
  187. ww_agentic_workflows-1.0.0.dev3/src/ww/storage.py +447 -0
  188. ww_agentic_workflows-1.0.0.dev3/src/ww/storage_adapters/__init__.py +36 -0
  189. ww_agentic_workflows-1.0.0.dev3/src/ww/storage_adapters/base.py +540 -0
  190. ww_agentic_workflows-1.0.0.dev3/src/ww/storage_adapters/filesystem.py +370 -0
  191. ww_agentic_workflows-1.0.0.dev3/src/ww/storage_adapters/memory.py +195 -0
  192. ww_agentic_workflows-1.0.0.dev3/src/ww/storage_adapters/project_metadata.py +69 -0
  193. ww_agentic_workflows-1.0.0.dev3/src/ww/storage_adapters/task_document.py +484 -0
  194. ww_agentic_workflows-1.0.0.dev3/src/ww/task_ids.py +114 -0
  195. ww_agentic_workflows-1.0.0.dev3/src/ww/task_references.py +124 -0
  196. ww_agentic_workflows-1.0.0.dev3/src/ww/transitions.py +1619 -0
  197. ww_agentic_workflows-1.0.0.dev3/src/ww/updates.py +399 -0
  198. ww_agentic_workflows-1.0.0.dev3/src/ww/upgrade.py +95 -0
  199. ww_agentic_workflows-1.0.0.dev3/src/ww/validation.py +168 -0
  200. ww_agentic_workflows-1.0.0.dev3/src/ww/variables.py +275 -0
  201. ww_agentic_workflows-1.0.0.dev3/src/ww/workflow_config.py +854 -0
  202. ww_agentic_workflows-1.0.0.dev3/src/ww/workflow_update.py +239 -0
  203. ww_agentic_workflows-1.0.0.dev3/src/ww/workflow_validation.py +1260 -0
  204. ww_agentic_workflows-1.0.0.dev3/src/ww/workspace.py +50 -0
  205. ww_agentic_workflows-1.0.0.dev3/tests/action_contract_helpers.py +40 -0
  206. ww_agentic_workflows-1.0.0.dev3/tests/config_helpers.py +15 -0
  207. ww_agentic_workflows-1.0.0.dev3/tests/conftest.py +95 -0
  208. ww_agentic_workflows-1.0.0.dev3/tests/example_documents.py +41 -0
  209. ww_agentic_workflows-1.0.0.dev3/tests/fixtures/packaged_extension/ww_test_packaged_extension.py +16 -0
  210. ww_agentic_workflows-1.0.0.dev3/tests/golden/pages/completion.md +10 -0
  211. ww_agentic_workflows-1.0.0.dev3/tests/golden/pages/fix-required.md +28 -0
  212. ww_agentic_workflows-1.0.0.dev3/tests/golden/pages/interactive.md +53 -0
  213. ww_agentic_workflows-1.0.0.dev3/tests/golden/pages/item-stage.md +49 -0
  214. ww_agentic_workflows-1.0.0.dev3/tests/golden/pages/loop-body.md +47 -0
  215. ww_agentic_workflows-1.0.0.dev3/tests/golden/pages/loop-continue.md +49 -0
  216. ww_agentic_workflows-1.0.0.dev3/tests/golden/pages/manager-dispatch.md +23 -0
  217. ww_agentic_workflows-1.0.0.dev3/tests/golden/pages/operator-stop.md +31 -0
  218. ww_agentic_workflows-1.0.0.dev3/tests/golden/pages/step-auto-worker.md +37 -0
  219. ww_agentic_workflows-1.0.0.dev3/tests/golden/pages/step-rules.md +45 -0
  220. ww_agentic_workflows-1.0.0.dev3/tests/golden/pages/step-single.md +37 -0
  221. ww_agentic_workflows-1.0.0.dev3/tests/golden/pages/values-and-metadata.md +35 -0
  222. ww_agentic_workflows-1.0.0.dev3/tests/golden/pages/verification.md +57 -0
  223. ww_agentic_workflows-1.0.0.dev3/tests/golden/pages/worker-bootstrap.md +22 -0
  224. ww_agentic_workflows-1.0.0.dev3/tests/golden/pages/worker-handoff.md +26 -0
  225. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_artifact_from_containers.py +301 -0
  226. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_assessment_outcomes.py +557 -0
  227. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_assignment_tokens.py +260 -0
  228. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_auto_retries.py +140 -0
  229. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_automatic_handler_groups.py +308 -0
  230. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_automatic_modes.py +138 -0
  231. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_awaiting_operator.py +142 -0
  232. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_bootstrap_task_id.py +236 -0
  233. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_builtin_workflows.py +213 -0
  234. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_catchall.py +212 -0
  235. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_child_identity.py +234 -0
  236. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_child_launch_settings.py +408 -0
  237. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_child_stages.py +448 -0
  238. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_child_start_action.py +246 -0
  239. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_child_start_guards.py +109 -0
  240. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_child_tasks.py +753 -0
  241. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_cli.py +1262 -0
  242. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_command_metadata.py +165 -0
  243. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_complete_dispatch.py +195 -0
  244. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_concurrency.py +235 -0
  245. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_config_files.py +374 -0
  246. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_configuration_authority.py +55 -0
  247. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_discover.py +985 -0
  248. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_documents.py +269 -0
  249. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_example_behaviour.py +300 -0
  250. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_executable.py +179 -0
  251. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_extension_execution.py +1184 -0
  252. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_feedback_commands.py +177 -0
  253. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_git_extension.py +1431 -0
  254. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_git_variables.py +257 -0
  255. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_golden_pages.py +32 -0
  256. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_handler_repairs.py +359 -0
  257. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_handoff_block.py +345 -0
  258. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_hooks.py +1324 -0
  259. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_init_force.py +227 -0
  260. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_init_permissions.py +184 -0
  261. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_inspect.py +288 -0
  262. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_interactive.py +826 -0
  263. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_item_assignment.py +437 -0
  264. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_item_fields.py +215 -0
  265. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_item_pass_restarts.py +545 -0
  266. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_item_pass_runs.py +501 -0
  267. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_item_reply_reports.py +300 -0
  268. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_item_runtime_values.py +246 -0
  269. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_items.py +383 -0
  270. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_local_step_pages.py +43 -0
  271. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_loops.py +1037 -0
  272. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_memory_workflow_service.py +461 -0
  273. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_metadata_lists.py +267 -0
  274. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_onboarding.py +237 -0
  275. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_onboarding_workflows.py +614 -0
  276. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_pack_scenarios.py +598 -0
  277. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_packaged_extension.py +109 -0
  278. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_page_gates.py +149 -0
  279. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_plan_execution.py +1195 -0
  280. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_projects.py +739 -0
  281. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_recommended_workflow.py +73 -0
  282. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_recovery_guards.py +255 -0
  283. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_replanning.py +327 -0
  284. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_requirements_pages.py +171 -0
  285. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_requirements_per_session.py +196 -0
  286. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_restart.py +81 -0
  287. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_rule_commands.py +948 -0
  288. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_rule_conversion.py +764 -0
  289. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_rule_verification_flow.py +632 -0
  290. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_rule_write_commands.py +700 -0
  291. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_rules_and_checks.py +459 -0
  292. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_scriptize_workflow.py +651 -0
  293. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_setup_apply.py +436 -0
  294. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_setup_update.py +369 -0
  295. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_setup_verification.py +97 -0
  296. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_shared_items.py +206 -0
  297. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_stale_task_records.py +208 -0
  298. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_state_unknown_fields.py +86 -0
  299. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_system_scenarios.py +554 -0
  300. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_update_notice.py +214 -0
  301. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_upgrade.py +148 -0
  302. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_workdir.py +286 -0
  303. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_worker_bootstrap_text.py +23 -0
  304. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_worker_handoff.py +890 -0
  305. ww_agentic_workflows-1.0.0.dev3/tests/integration/test_workflow_service.py +415 -0
  306. ww_agentic_workflows-1.0.0.dev3/tests/page_catalog.py +344 -0
  307. ww_agentic_workflows-1.0.0.dev3/tests/plan_helpers.py +27 -0
  308. ww_agentic_workflows-1.0.0.dev3/tests/test_dev_version.py +68 -0
  309. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_action_contracts.py +770 -0
  310. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_action_example.py +138 -0
  311. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_action_phase_contexts.py +192 -0
  312. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_artifacts.py +56 -0
  313. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_assignments.py +199 -0
  314. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_beta_notice.py +39 -0
  315. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_builtin_actions.py +675 -0
  316. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_changes.py +158 -0
  317. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_checklist_prompt.py +106 -0
  318. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_child_stages_config.py +287 -0
  319. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_children_config.py +171 -0
  320. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_cli_prompts.py +72 -0
  321. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_completion_inputs.py +22 -0
  322. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_completion_selection.py +41 -0
  323. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_config.py +2167 -0
  324. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_config_composition.py +585 -0
  325. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_config_writes.py +86 -0
  326. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_delegation_requests.py +119 -0
  327. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_design_docs.py +95 -0
  328. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_discovery.py +39 -0
  329. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_examples_doc.py +118 -0
  330. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_execution_hints.py +352 -0
  331. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_extensions.py +776 -0
  332. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_feedback.py +189 -0
  333. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_handler_failure_report.py +68 -0
  334. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_hook_agents.py +342 -0
  335. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_instruction_commands.py +33 -0
  336. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_interactions.py +65 -0
  337. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_item_config.py +478 -0
  338. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_item_passes.py +298 -0
  339. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_item_validation.py +643 -0
  340. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_locking.py +312 -0
  341. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_markdown_output.py +433 -0
  342. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_modes.py +245 -0
  343. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_operator_ui.py +129 -0
  344. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_package_updates.py +111 -0
  345. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_plan.py +1368 -0
  346. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_project_config.py +550 -0
  347. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_project_metadata_storage_adapters.py +55 -0
  348. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_records.py +320 -0
  349. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_rule_disputes.py +175 -0
  350. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_rule_store.py +268 -0
  351. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_rule_verification.py +354 -0
  352. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_rule_writes.py +133 -0
  353. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_rules.py +1052 -0
  354. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_runtimes.py +76 -0
  355. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_scripts_test_bootstrap.py +190 -0
  356. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_step_role.py +221 -0
  357. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_storage.py +40 -0
  358. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_task_document.py +381 -0
  359. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_task_ids.py +136 -0
  360. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_task_references.py +61 -0
  361. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_task_storage_adapters.py +372 -0
  362. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_transitions.py +193 -0
  363. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_updates.py +253 -0
  364. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_validation.py +50 -0
  365. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_variables.py +130 -0
  366. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_workflow_inheritance.py +211 -0
  367. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_workflow_validation.py +273 -0
  368. ww_agentic_workflows-1.0.0.dev3/tests/unit/test_workspace.py +47 -0
  369. ww_agentic_workflows-1.0.0.dev3/tests/workflow_helpers.py +51 -0
  370. ww_agentic_workflows-1.0.0.dev3/ww.json +46 -0
  371. ww_agentic_workflows-1.0.0.dev3/ww.yaml +268 -0
@@ -0,0 +1,48 @@
1
+ {
2
+ "hooks": {
3
+ "SessionStart": [
4
+ {
5
+ "hooks": [
6
+ {
7
+ "type": "command",
8
+ "command": "\"$CLAUDE_PROJECT_DIR\"/ww hook session-start --agent claudecode",
9
+ "timeout": 10
10
+ }
11
+ ]
12
+ }
13
+ ],
14
+ "Stop": [
15
+ {
16
+ "hooks": [
17
+ {
18
+ "type": "command",
19
+ "command": "\"$CLAUDE_PROJECT_DIR\"/ww hook stop --agent claudecode",
20
+ "timeout": 10
21
+ }
22
+ ]
23
+ }
24
+ ],
25
+ "SubagentStop": [
26
+ {
27
+ "hooks": [
28
+ {
29
+ "type": "command",
30
+ "command": "\"$CLAUDE_PROJECT_DIR\"/ww hook stop --agent claudecode",
31
+ "timeout": 10
32
+ }
33
+ ]
34
+ }
35
+ ],
36
+ "SessionEnd": [
37
+ {
38
+ "hooks": [
39
+ {
40
+ "type": "command",
41
+ "command": "\"$CLAUDE_PROJECT_DIR\"/ww hook interrupt --agent claudecode",
42
+ "timeout": 5
43
+ }
44
+ ]
45
+ }
46
+ ]
47
+ }
48
+ }
@@ -0,0 +1,11 @@
1
+ ---
2
+ name: noww
3
+ description: Work without ww. Use only when the user invokes /noww or asks not to use ww.
4
+ ---
5
+
6
+ # Work without ww
7
+
8
+ Do not use ww for the rest of this conversation, unless the user asks for it
9
+ again: do not run `./ww discover`, and do not start, continue, or complete a ww
10
+ task, `catchall` included. Carry out requests directly, as in a project without
11
+ ww. A ww task already in progress stays as it is; do not reset or fail it.
@@ -0,0 +1,19 @@
1
+ ---
2
+ name: update-architecture-documentation
3
+ description: Updates the documentation/architecture.md file with the recent changes to the architecture of this application.
4
+ ---
5
+
6
+ # Update architecture documentation
7
+
8
+ Use this skill to update the documentation of the architecture of this application.
9
+ Whenever explicitly asked, or if changes to the code are meaningful enough to be considered as architecture changes, keep the documentation up-to-date.
10
+
11
+ The location of the documentation is documentation/architecture.md.
12
+
13
+ The goal of that documentation is to serve an always up-to-date reference for developers/humans, and for LLM agents as well, when developing new features, or reviewing the code.
14
+
15
+ ## Constraints
16
+
17
+ - Keep the documentation more high-level than deeply describing the code.
18
+ - Keeping the references to files/functions is acceptable.
19
+ - Concentrate on the "why" question more, rather than on "how" and "what" (although it is also important).
@@ -0,0 +1,59 @@
1
+ ---
2
+ name: ww
3
+ description: Carry out a development request through ww, this project's workflow tool. Use only when the request changes something (implement, fix, refactor, merge, edit documentation) or the user explicitly asks to work via ww, to start or continue a ww task, or to run a ww workflow; where `./ww discover` says ww is used by default, use it before changing files for any request, since every change then goes through ww. Never use it for reviews, questions, explanations, investigations, status checks or other read-only work, even when they concern ww or a ww task.
4
+ ---
5
+
6
+ # Work through ww
7
+
8
+ ww is for development: requests that change files. A review, question,
9
+ explanation, investigation, status check or other read-only request never
10
+ goes through ww; answer it directly, without these steps and without a task,
11
+ even where ww is used by default. When a read-only conversation turns into a
12
+ change, start from step 1 then.
13
+
14
+ 1. Run `./ww discover` and read all of it. If it says ww is disabled, stop:
15
+ do not use ww, and tell the user. If it says ww is used only on request
16
+ and the user did not explicitly ask for ww (invoking this skill counts),
17
+ carry out the request without ww and do not ask.
18
+ 2. To continue an existing task, run
19
+ `./ww instruction <task-id> --role manager` instead of starting a new one.
20
+ 3. Otherwise choose the workflow that matches the request, keep its default
21
+ modes unless the user's wording matches another mode, and start the task
22
+ with the start command `discover` shows. Pass the user's requirements,
23
+ normalized, as `--requirements`. When the request names an external
24
+ ticket, such as a Jira key, use that key as the task ID; omit the ID only
25
+ when there is none or the workflow obtains its own.
26
+ When no workflow fits and you are about to change files, do not start
27
+ `catchall` directly: run `./ww lookup [<task>] --agent <agent>` with the
28
+ task the conversation works on or the request names, as written, and
29
+ follow its answer, then do the work as you would without ww. Read-only work
30
+ needs no task.
31
+ When the first page of `start` says rules have no check
32
+ yet, tell the user once and carry on: it never blocks the task, and the
33
+ `ww-scriptize` skill builds those checks when they want it.
34
+ 4. Follow every ww response exactly: run each displayed command with all
35
+ placeholders replaced, and keep going until ww reports that the workflow
36
+ is complete or reports an error. On `interactive: true` steps, converse
37
+ naturally until intent to finish is clear, ask if ambiguous, and treat
38
+ "done for today" as a pause. Record and end the interaction before
39
+ completing it. Use the host choice tool when available; keep asynchronous
40
+ choices pending until an answer arrives, and do not treat timeouts or
41
+ preselection as answers. After completion, relay any optional
42
+ `ww-deduce-feedback` suggestion; do not insert learning into the plan.
43
+ Deduction uses ww commands and explicit existing point IDs; rule review
44
+ and pruning are separate, and rules require operator approval.
45
+ 5. Never run a ww-owned handler yourself, edit ww state, or read
46
+ `ww.yaml` or ww's source to work out what to do next. For a handler repair
47
+ assignment, fix the cause and complete with an artifact; ww retries the
48
+ command. In `auto`, the manager dispatches the repair with `next`. When
49
+ ww reports `awaiting_operator` (a failed handler or work, an interrupted
50
+ command, a loop at its iteration limit, a changed workflow), stop and report the task, its
51
+ `operator_reason` and the exact error to the user (unless they gave a
52
+ standing authorization for routine repairs such as dependency installation,
53
+ formatting or retries: apply it to a stop of that kind without asking again,
54
+ and ask only for a material decision or an action outside it); when they
55
+ decide, run the recovery command ww showed, `./ww next <task-id> --retry` to run the
56
+ handler again, `--force --reason` to skip it or leave the loop, or
57
+ `--replan` / `--keep-plan` for a changed workflow. A `pass_incomplete`
58
+ stop is cleared by recording what it names with `./ww update-item`, then
59
+ `./ww next <task-id> --retry`; `--force` is refused there.
@@ -0,0 +1,59 @@
1
+ {
2
+ "hooks": {
3
+ "SessionStart": [
4
+ {
5
+ "hooks": [
6
+ {
7
+ "type": "command",
8
+ "command": "\"$(git rev-parse --show-toplevel 2>/dev/null || pwd)\"/ww hook session-start --agent codex",
9
+ "timeout": 10
10
+ }
11
+ ]
12
+ }
13
+ ],
14
+ "Stop": [
15
+ {
16
+ "hooks": [
17
+ {
18
+ "type": "command",
19
+ "command": "\"$(git rev-parse --show-toplevel 2>/dev/null || pwd)\"/ww hook stop --agent codex",
20
+ "timeout": 10
21
+ }
22
+ ]
23
+ }
24
+ ],
25
+ "SubagentStop": [
26
+ {
27
+ "hooks": [
28
+ {
29
+ "type": "command",
30
+ "command": "\"$(git rev-parse --show-toplevel 2>/dev/null || pwd)\"/ww hook stop --agent codex",
31
+ "timeout": 10
32
+ }
33
+ ]
34
+ }
35
+ ],
36
+ "Interrupt": [
37
+ {
38
+ "hooks": [
39
+ {
40
+ "type": "command",
41
+ "command": "\"$(git rev-parse --show-toplevel 2>/dev/null || pwd)\"/ww hook interrupt --agent codex",
42
+ "timeout": 3
43
+ }
44
+ ]
45
+ }
46
+ ],
47
+ "SessionEnd": [
48
+ {
49
+ "hooks": [
50
+ {
51
+ "type": "command",
52
+ "command": "\"$(git rev-parse --show-toplevel 2>/dev/null || pwd)\"/ww hook interrupt --agent codex",
53
+ "timeout": 5
54
+ }
55
+ ]
56
+ }
57
+ ]
58
+ }
59
+ }
@@ -0,0 +1,11 @@
1
+ ---
2
+ name: noww
3
+ description: Work without ww. Use only when the user invokes /noww or asks not to use ww.
4
+ ---
5
+
6
+ # Work without ww
7
+
8
+ Do not use ww for the rest of this conversation, unless the user asks for it
9
+ again: do not run `./ww discover`, and do not start, continue, or complete a ww
10
+ task, `catchall` included. Carry out requests directly, as in a project without
11
+ ww. A ww task already in progress stays as it is; do not reset or fail it.
@@ -0,0 +1,19 @@
1
+ ---
2
+ name: update-architecture-documentation
3
+ description: Updates the documentation/architecture.md file with the recent changes to the architecture of this application.
4
+ ---
5
+
6
+ # Update architecture documentation
7
+
8
+ Use this skill to update the documentation of the architecture of this application.
9
+ Whenever explicitly asked, or if changes to the code are meaningful enough to be considered as architecture changes, keep the documentation up-to-date.
10
+
11
+ The location of the documentation is documentation/architecture.md.
12
+
13
+ The goal of that documentation is to serve an always up-to-date reference for developers/humans, and for LLM agents as well, when developing new features, or reviewing the code.
14
+
15
+ ## Constraints
16
+
17
+ - Keep the documentation more high-level than deeply describing the code.
18
+ - Keeping the references to files/functions is acceptable.
19
+ - Concentrate on the "why" question more, rather than on "how" and "what" (although it is also important).
@@ -0,0 +1,34 @@
1
+ ---
2
+ name: ww
3
+ description: Carry out the user's request through ww, this project's workflow tool. Use when the user asks to work via ww, to start or continue a ww task, or to run a ww workflow, and, where `./ww discover` says ww is used by default, before changing files for any request, since every change then goes through ww. Not for questions or other read-only work.
4
+ ---
5
+
6
+ # Work through ww
7
+
8
+ 1. Run `./ww discover` and read all of it. If it says ww is disabled, stop:
9
+ do not use ww, and tell the user. If it says ww is used only on request
10
+ and the user did not explicitly ask for ww (invoking this skill counts),
11
+ carry out the request without ww and do not ask.
12
+ 2. To continue an existing task, run
13
+ `./ww instruction <task-id> --role manager` instead of starting a new one.
14
+ 3. Otherwise choose the workflow that matches the request, keep its default
15
+ modes unless the user's wording matches another mode, and start the task
16
+ with the start command `discover` shows. Pass the user's requirements,
17
+ normalized, as `--requirements`. When the request names an external
18
+ ticket, such as a Jira key, use that key as the task ID; omit the ID only
19
+ when there is none or the workflow obtains its own.
20
+ When no workflow fits and you are about to change files, do not start
21
+ `catchall` directly: run `./ww lookup [<task>] --agent <agent>` with the
22
+ task the conversation works on or the request names, as written, and
23
+ follow its answer, then do the work as you would without ww. Questions and
24
+ other read-only work need no task.
25
+ 4. Follow every ww response exactly: run each displayed command with all
26
+ placeholders replaced, and keep going until ww reports that the workflow
27
+ is complete or reports an error.
28
+ 5. Never run a ww-owned handler yourself, edit ww state, or read
29
+ `ww.yaml` or ww's source to work out what to do next. When
30
+ ww reports `awaiting_operator` (a failed handler or work, an interrupted
31
+ command, a loop at its iteration limit), stop and report the task, its
32
+ `operator_reason` and the exact error to the user; when they decide, run
33
+ the recovery command ww showed, `./ww next <task-id> --retry` to run the
34
+ handler again or `--force --reason` to skip it or leave the loop.
@@ -0,0 +1,2 @@
1
+ # The commit that applied ruff format to the whole codebase.
2
+ d13f27b8c8e7dac378b3da0660996f8087f18a12
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env sh
2
+ # Add SPDX identifiers to staged Python and shell files before committing.
3
+ exec python3 scripts/ensure_spdx_license.py --staged
@@ -0,0 +1,84 @@
1
+ name: Bug report
2
+ description: Something in ww behaved differently from what its documentation says.
3
+ labels: ["bug"]
4
+ body:
5
+ - type: markdown
6
+ attributes:
7
+ value: |
8
+ Thanks for reporting. ww is in beta, so this is genuinely useful.
9
+
10
+ **Before you paste:** `.ww/`, command output, and task state can contain
11
+ credentials or other private values. Sanitise anything you copy in. See
12
+ [Sensitive runtime data](https://github.com/from-developers-for-developers/agentic-workflows#sensitive-runtime-data).
13
+
14
+ Check [limitations.md](https://github.com/from-developers-for-developers/agentic-workflows/blob/main/documentation/limitations.md)
15
+ first — it lists what ww deliberately does not do yet.
16
+
17
+ - type: textarea
18
+ id: workflow
19
+ attributes:
20
+ label: The workflow
21
+ description: >
22
+ The relevant part of your `ww.yaml`, reduced to what still
23
+ reproduces the problem.
24
+ render: yaml
25
+ validations:
26
+ required: true
27
+
28
+ - type: textarea
29
+ id: command
30
+ attributes:
31
+ label: The command and its output
32
+ description: >
33
+ The exact command you ran, its exit code, and the exact message ww
34
+ printed. Sanitise it first.
35
+ render: console
36
+ validations:
37
+ required: true
38
+
39
+ - type: textarea
40
+ id: expected
41
+ attributes:
42
+ label: What you expected instead
43
+ validations:
44
+ required: true
45
+
46
+ - type: textarea
47
+ id: agent_account
48
+ attributes:
49
+ label: Your agent's own account of what went wrong
50
+ description: >
51
+ If you hit this while working through an agent, ask it to summarise
52
+ what it ran, what ww told it, and where it got stuck, and paste that
53
+ here. It is often the fastest route to the real cause. Leave blank if
54
+ you ran ww by hand.
55
+ validations:
56
+ required: false
57
+
58
+ - type: input
59
+ id: version
60
+ attributes:
61
+ label: ww version
62
+ description: Output of `ww-agentic-workflows --version`, plus the commit you are on.
63
+ placeholder: "0.1.0 (main @ 28e55aa)"
64
+ validations:
65
+ required: true
66
+
67
+ - type: input
68
+ id: environment
69
+ attributes:
70
+ label: OS, Python version, and agent
71
+ placeholder: "macOS 15.5, Python 3.12.14, Claude Code"
72
+ validations:
73
+ required: true
74
+
75
+ - type: dropdown
76
+ id: runtime
77
+ attributes:
78
+ label: Runtime
79
+ options:
80
+ - single
81
+ - auto
82
+ - not applicable
83
+ validations:
84
+ required: true
@@ -0,0 +1,8 @@
1
+ blank_issues_enabled: true
2
+ contact_links:
3
+ - name: Security vulnerability
4
+ url: https://github.com/from-developers-for-developers/agentic-workflows/security/advisories/new
5
+ about: Report privately through a security advisory, never as a public issue.
6
+ - name: Documentation
7
+ url: https://github.com/from-developers-for-developers/agentic-workflows/tree/main/documentation
8
+ about: Specification, features, examples, architecture, and known limitations.
@@ -0,0 +1,38 @@
1
+ name: Feature request
2
+ description: Suggest a capability or a change to how ww behaves.
3
+ labels: ["enhancement"]
4
+ body:
5
+ - type: markdown
6
+ attributes:
7
+ value: |
8
+ Please check
9
+ [limitations.md](https://github.com/from-developers-for-developers/agentic-workflows/blob/main/documentation/limitations.md)
10
+ first — some gaps are deliberate, and it says which.
11
+
12
+ - type: textarea
13
+ id: problem
14
+ attributes:
15
+ label: The problem
16
+ description: >
17
+ What process are you trying to express, and where does ww get in the
18
+ way today? Describe the workflow, not only the missing feature.
19
+ validations:
20
+ required: true
21
+
22
+ - type: textarea
23
+ id: proposal
24
+ attributes:
25
+ label: What you would like instead
26
+ description: >
27
+ If it affects `ww.yaml`, sketch the YAML you would want to
28
+ write.
29
+ validations:
30
+ required: true
31
+
32
+ - type: textarea
33
+ id: alternatives
34
+ attributes:
35
+ label: What you tried or considered
36
+ description: Existing hooks, handlers, items, loops, or an extension.
37
+ validations:
38
+ required: false
@@ -0,0 +1,23 @@
1
+ ## What this changes
2
+
3
+ <!-- The behaviour that differs afterwards, in a sentence or two. -->
4
+
5
+ ## Why
6
+
7
+ <!-- The problem it solves. Link the issue if there is one. -->
8
+
9
+ ## How it was verified
10
+
11
+ <!-- The checks you ran, and anything you exercised by hand. -->
12
+
13
+ - [ ] `.venv/bin/python -m pytest`
14
+ - [ ] `.venv/bin/python -m ruff check src tests scripts` and `ext/ww/git`
15
+ - [ ] `.venv/bin/python -m mypy`
16
+ - [ ] `.venv/bin/python scripts/check_release_gates.py` (release-facing changes)
17
+ - [ ] `.venv/bin/python scripts/check_distribution.py` (release-facing changes)
18
+
19
+ ## Checklist
20
+
21
+ - [ ] `CHANGELOG.md` updated under today's date, if the change is user-visible.
22
+ - [ ] Documentation under `documentation/` updated, if behaviour or `ww.yaml` changed.
23
+ - [ ] Persisted-format changes carry a schema bump and are called out as incompatible.
@@ -0,0 +1,56 @@
1
+ name: Publish development snapshot
2
+
3
+ on:
4
+ push:
5
+ branches: [dev]
6
+
7
+ permissions:
8
+ contents: read
9
+
10
+ jobs:
11
+ gates:
12
+ uses: ./.github/workflows/release-gates.yml
13
+
14
+ build:
15
+ needs: gates
16
+ runs-on: ubuntu-latest
17
+ steps:
18
+ - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
19
+ with:
20
+ persist-credentials: false
21
+ - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
22
+ with:
23
+ python-version: "3.12"
24
+ - name: Stamp the upcoming release's development version
25
+ run: python scripts/set_dev_version.py --base-version 1.0.0 --run-number "$GITHUB_RUN_NUMBER"
26
+ # The distribution check imports ww from the checkout, so it needs the
27
+ # runtime dependencies as well as the build tools.
28
+ - run: python -m pip install build twine .
29
+ - run: python -m build
30
+ - run: python -m twine check --strict dist/*
31
+ - run: python scripts/check_distribution.py --dist-dir dist
32
+ - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
33
+ with:
34
+ name: dev-distributions
35
+ path: dist/*
36
+ if-no-files-found: error
37
+ retention-days: 7
38
+ overwrite: true
39
+
40
+ publish:
41
+ needs: build
42
+ if: github.event_name == 'push' && github.ref == 'refs/heads/dev'
43
+ runs-on: ubuntu-latest
44
+ environment: pypi-dev
45
+ permissions:
46
+ id-token: write
47
+ steps:
48
+ - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
49
+ with:
50
+ name: dev-distributions
51
+ path: dist
52
+ - name: Publish the validated distributions to PyPI
53
+ uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # release/v1
54
+ with:
55
+ # A rerun keeps the version and can finish a partially uploaded release.
56
+ skip-existing: true
@@ -0,0 +1,43 @@
1
+ name: Release gates
2
+
3
+ on:
4
+ workflow_call:
5
+ pull_request:
6
+ push:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ quality-and-compatibility:
11
+ runs-on: ubuntu-latest
12
+ strategy:
13
+ fail-fast: false
14
+ matrix:
15
+ # Keep the declared minimum executable, alongside the primary CI runtime.
16
+ python-version: ["3.10", "3.12"]
17
+ steps:
18
+ # Pinned to commits, not tags: a tag can be repointed at new code.
19
+ - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
20
+ - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
21
+ with:
22
+ python-version: ${{ matrix.python-version }}
23
+ cache: pip
24
+ - run: python -m pip install -e '.[dev]'
25
+ - run: python -m ruff format --check src tests scripts ext/ww/git
26
+ - run: python -m ruff check src tests scripts ext/ww/git
27
+ - run: python -m mypy
28
+ - run: python scripts/check_release_gates.py
29
+ - run: python -m pytest
30
+ # Build, inspect, and install artifacts without the source checkout on sys.path.
31
+ - run: python scripts/check_distribution.py
32
+ # One runtime dependency and a few dev tools, but the answer to
33
+ # "is any of it known-vulnerable?" should be checked every run, not when
34
+ # someone thinks to ask. The set is frozen before pip-audit is installed
35
+ # so the auditor's own dependencies are not audited too, and without the
36
+ # editable project, which has no release to compare against and which
37
+ # --strict would otherwise treat as a collection failure.
38
+ - name: Audit dependencies for known vulnerabilities
39
+ if: matrix.python-version == '3.12'
40
+ run: |
41
+ python -m pip freeze --exclude-editable > "$RUNNER_TEMP/audit-requirements.txt"
42
+ python -m pip install pip-audit
43
+ pip-audit --strict -r "$RUNNER_TEMP/audit-requirements.txt"
@@ -0,0 +1,19 @@
1
+ .ww/*
2
+ !.ww/project.md
3
+ __pycache__/
4
+ .pytest_cache/
5
+ .ruff_cache/
6
+ *.egg-info/
7
+ .venv/
8
+ /ww
9
+ .idea
10
+ /tasks
11
+ /.codex/config.toml
12
+ /ww-worktrees
13
+ .env
14
+ *ww.local.yaml
15
+ *ww.local.json
16
+ ww-setup.local.yaml
17
+
18
+ # Planning notes stay local
19
+ /documentation/plans/
@@ -0,0 +1,11 @@
1
+ ## Codex execution boundary
2
+
3
+ Run WW CLI commands using Codex's normal sandbox policy. Do not request
4
+ escalation preemptively.
5
+
6
+ If a specific WW command fails because sandbox access prevents it from
7
+ completing, rerun only that command outside the sandbox with approval. WW
8
+ remains the trusted execution boundary for its handlers; do not invoke its Git
9
+ or other handlers separately.
10
+
11
+ @WW_AGENT_INSTRUCTIONS.md